Я новичок в python и придерживался простой проблемы: Вот пример кода:
import random
class shirt:
def __init__(self, color, size, size_description):
self.color = color
self.size = size
self.size_description = size_description
def randomshirtsize():
randomshirtsize_ch = (
's',
'm',
'l'
)
return random.choice(randomshirtsize_ch)
def randomshirtdescription():
if randomshirtsize() == 's':
return 'small'
elif randomshirtsize() == 'm':
return 'medium'
elif randomshirtsize() == 'l':
return 'large'
else:
return 'Error! No valid size found'
shirt1 = shirt('blue', randomshirtsize(), randomshirtdescription())
print('Your shirt is size ' + shirt1.size + '. In other words ' + shirt1.size_description)
Теоретически, randomshirtdescription() должен соответствовать результату randomshirtsize(), но он абсолютно случайный. Может кто-нибудь мне помочь? Я также хочу остаться с моим подходом к классам/примерам, потому что мой основной код намного больше и зависит от классов и экземпляров.
EDIT: Это новый код с подходом г-на Алихосейни, но я все еще не могу заставить его работать.
import random
class shirt:
def __init__(self, color, size):
self.color = color
self.size = size
self.size_description = get_size_description()
def get_size_description(self):
if self.size == 's':
return 'small'
elif self.size == 'm':
return 'medium'
elif self.size == 'l':
return 'large'
else:
return 'Error! No valid size found'
def randomshirtsize():
randomshirtsize_ch = (
's',
'm',
'l'
)
return random.choice(randomshirtsize_ch)
shirt1 = shirt('blue', randomshirtsize())
print('Your shirt is size ' + shirt1.size + '. In other words ' + shirt1.size_description)
Когда я запускаю его, я получаю следующую ошибку: NameError: имя 'get_size_description' не определено
randomshirtsize
создает случайный вывод каждый раз, когда он вызывает, поэтому, когда вы хотите использовать его в randomshirtdescription
, вы должны сохранить его значение в локальной переменной и использовать значение этой переменной в операторах if
. как это:
def randomshirtdescription():
random_size = randomshirtsize()
if random_size == 's':
return 'small'
elif random_size == 'm':
return 'medium'
elif random_size == 'l':
return 'large'
else:
return 'Error! No valid size found'
редактировать
Если вы сделаете указанное изменение, ваши функции будут работать правильно, но их поведение неверно при использовании с вашим классом. Я думаю, что лучше внести в них изменения.
Я думаю, что лучше изменить функцию randomshirtdescription
на функцию, которая возвращает описание данного размера рубашки. Что-то вроде этого:
def shirtdescription(shirt_size):
if shirt_size == 's':
return 'small'
elif shirt_size == 'm':
return 'medium'
elif shirt_size == 'l':
return 'large'
else:
return 'Error! No valid size found'
Теперь вы можете получить ожидаемые результаты от вашего кода, вызвав свой класс и функции, если выполните следующие действия:
random_size = randomshirtsize()
shirt1 = shirt('blue', random_size, randomshirtdescription(random_size))
Но все же это решение не является объектно-ориентированным. Я думаю, что лучше превратить эту новую shirtdescription
в метод вашего класса shirt
.
Я думаю, что лучший класс будет примерно таким:
class shirt:
def __init__(self, color, size):
self.color = color
self.size = size
self.size_description = self.get_size_description()
def get_size_description(self):
if self.size == 's':
return 'small'
elif self.size == 'm':
return 'medium'
elif self.size == 'l':
return 'large'
else:
return 'Error! No valid size found'
elif
s. Сделайте это изменение в своем коде, если все еще что-то не так, пожалуйста, добавьте пример неправильного вывода и ожидаемый пример к вашему вопросу.
randomshirtsize()
в вызове классаshirt
, но затем вы вызываете его снова вrandomshirtdescription
. На самом деле, вы вызываете это три раза в этой функции. Вам нужно запуститьrandomshirtsize()
один раз и передать эти результаты вrandomshirtdescription()
чтобы результаты были статичными и не пересчитывались каждый раз, когда вы пытаетесь сравнить значение. Имеет ли это смысл?