尝试使用随机数生成Class模块的结果

时间:2015-04-16 00:54:04

标签: python

我无法返回__mood字段来为动物对象生成随机情绪。我不知道如何使它工作,所以我一直在尝试做的是在名为animals.py的程序中定义它。

我有两个程序:animals.py和animalgenerator.py

The animal generator asks for user input and produces a list that looks like:
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字段应设置为“饥饿”值。

如果数字为3,则__mood字段应设置为“困”字段。

最后,此方法应返回__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 个答案:

答案 0 :(得分:0)

一些想法:首先,在__mood中你有for i in range():但是范围需要至少1个参数。我想你可能根本不想那样,因为没有理由在那里循环我能看到。

其次,您可能无需为每项检查生成新的随机数。如果你一次从1到3生成随机int并查看它是1,2还是3,你应该能够设置你想要的心情。

第三,check_mood永远不会致电__mood让它产生新的心情。此外,我读取你的作业,呃,要求的方式,你应该在check_mood中生成随机数,然后将其传递给__mood而不是在其中生成。

第四,也许比上面的许多更重要,尤其是第三点,__ mood不能同时是方法名和属性名。可能你不希望__mood成为一种方法,只需将它的主体放在check_mood中。

答案 1 :(得分:0)

我相信这种方法可以优雅地写成1-2行:

def __setmood(self):
    self.__mood = ('happy', 'hungry', 'sleepy')[random.randint(0, 2)]
    return self.__mood

但除此之外,我认为您不应该为您的方法和实例变量使用相同的名称。当您执行self.__mood = 'happy'之类的赋值时,实际上会覆盖对象方法的绑定。换句话说,即使在班级内也不能再调用self.__mood()方法......

例如,以下代码将引发TypeError'str' object is not callable):

class X:
    def __mood(self):
        self.__mood = 'happy'

    def callmood(self):
        self.__mood()
        return self

X().callmood().callmood()