使用随机数为类模块生成结果

29 阅读3分钟

我在尝试使用随机数为类模块生成结果时遇到了问题。我无法将 __mood 字段返回以生成动物对象的随机情绪。我不知道如何让它工作,所以我一直在尝试在名为 animals.py 的程序中定义它。我有两个程序:animals.pyanimalgenerator.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 字段的值,该值可以被其他方法或属性使用。