我在尝试使用随机数为类模块生成结果时遇到了问题。我无法将 __mood 字段返回以生成动物对象的随机情绪。我不知道如何让它工作,所以我一直在尝试在名为 animals.py 的程序中定义它。我有两个程序:animals.py 和 animalgenerator.py。
animalgenerator.py 询问用户输入并生成一个类似这样的列表:
What type of animal would you like to create? Truman
What is the animal's name? Tiger
Would you like to add more animals (y/n)? n
Animal List
-----------
Tiger the Truman is hungry
到目前为止,我的程序已经能够正常工作,但它不会产生情绪。__mood 是动物对象的隐藏属性。check_mood:此方法应该生成一个介于 1 到 3 之间的随机数。随机数将用于设置三种情绪之一:
- 如果数字是 1,那么
__mood字段应该被设置为 “happy”。 - 如果数字是 2,那么
__mood字段应该被设置为 “hungry”。 - 如果数字是 3,那么
__mood字段应该被设置为 “sleepy”。
最后,此方法应该返回 __mood 字段的值。
下面是我的 animals.py 代码:
class Animal:
# The __init__ method initializes the attributes
def __init__(self, name, mood, type):
self.__name = name
self.__mood = mood
self.__animal_type = type
def _animal_type(self, type):
self.__animal_type = type
def __name(self, name):
self.__name = name
def __mood(self, mood):
for i in range():
if random.randint(1, 3) == 1:
self.__mood = 'happy'
if random.randint(1, 3) == 2:
self.__mood = 'hungry'
if random.randint(1, 3) == 3:
self.__mood = 'sleepy'
else:
self.__mood = 'happy'
def get_animal_type(self):
return self.__animal_type
def get_name(self):
return self.__name
def check_mood(self):
return self.__mood
下面是我的 animalgenerator.py 代码:
# This program tests the Animal class.
import animals
print("Welcome to the animal generator!")
print("This program creates Animal objects.")
def main():
# Get the animal data
animal_list = []
find_info = True
while(find_info):
_animal_type = input('\nWhat type of animal would you like to create? ')
__name = input('What is the animals name? ')
more_animals = input('Would you like to add more animals (y/n)? ')
if (more_animals != 'y'):
find_info = False
# Create an instance of animal class
animal_list.append(animals.Animal(_animal_type, __name, __mood))
animal = animals.Animal(_animal_type, __name, __mood)
# Display the data that was entered.
print('\nAnimal List\n')
print('------------- \n')
for animal in animal_list:
print('' + animal.get_animal_type() + ' the ' + animal.get_name() + ' is ' + animal.check_mood() + '\n')
# Call the main function
main()
2、解决方案
问题所在:在 Animal 类的 __mood 方法中,你使用了一个空 for 循环 for i in range()。这将导致无限循环,因为 range() 没有参数。
为了解决这个问题,你需要在 for 循环中指定一个范围。你可以使用 range(1, 4) 来生成一个包含数字 1、2、3 的范围。
修改后的代码如下:
def __mood(self, mood):
for i in range(1, 4):
if random.randint(1, 3) == 1:
self.__mood = 'happy'
if random.randint(1, 3) == 2:
self.__mood = 'hungry'
if random.randint(1, 3) == 3:
self.__mood = 'sleepy'
else:
self.__mood = 'happy'
现在,__mood 方法将生成一个介于 1 到 3 之间的随机数,并根据该数字设置 __mood 字段。
接下来,你需要在 main() 函数中创建 Animal 对象时传递 __mood 参数。你可以使用 random.choice() 函数来生成一个随机情绪。
修改后的代码如下:
def main():
# Get the animal data
animal_list = []
find_info = True
while(find_info):
_animal_type = input('\nWhat type of animal would you like to create? ')
__name = input('What is the animals name? ')
more_animals = input('Would you like to add more animals (y/n)? ')
if (more_animals != 'y'):
find_info = False
# Create an instance of animal class
animal_list.append(animals.Animal(_animal_type, __name, random.choice(['happy', 'hungry', 'sleepy'])))
animal = animals.Animal(_animal_type, __name, __mood)
# Display the data that was entered.
print('\nAnimal List\n')
print('------------- \n')
for animal in animal_list:
print('' + animal.get_animal_type() + ' the ' + animal.get_name() + ' is ' + animal.check_mood() + '\n')
# Call the main function
main()
现在,程序将为每个动物对象生成一个随机情绪,并将该情绪存储在 __mood 字段中。
最后,你需要在 Animal 类的 check_mood() 方法中返回 __mood 字段的值。
修改后的代码如下:
def check_mood(self):
return self.__mood
现在,check_mood() 方法将返回 __mood 字段的值,该值可以被其他方法或属性使用。