Python 3.x:对象不接受定义?

时间:2013-02-01 02:46:47

标签: python

好的,所以我有这个课应该有foodhunger和其他一些属性。

我只有这样的定义:

def setfood():
     choice = input("Choice: ")
     if choice == "1":
           food = 1
           bored = 2
     if choice == "2":
           food = 4
           bored = 8
     return food
     return bored

然后我有这样的课。

class thing(object):
    def __init__(self, name, hunger = 0, boredom = 0):
        self.name = name
        self.hunger = hunger
        self.boredom = boredom

    def eat(self):
       setfood()
       self.hunger -= food
       self.boredom += bored

好吧,不管我做什么,我都无法让它发挥作用。关于全局变量我一直收到这个错误。

好吧,我将food = 0bored = 0添加到程序的主要部分中并没有区别,因为我无法将全局变量传递给定义。

我试着将这个定义添加到我的班级中,但它仍然没有区别。我也试图做出单独的定义来返回每个变量...也没有用。无论我做什么,我都无法获胜。

我能让它发挥作用的唯一方法就是我这样做:

food = setfood()

我想我可能会改变它:

food = setfood(food)
food = setfood(bored)

但这也不起作用......

但是,如果我对两个变量都这样做,我必须经历两次整个过程。那我到底该怎么办?我很失落和沮丧。

2 个答案:

答案 0 :(得分:1)

  

“NameError:全局名称'food'未定义”

只有当您输入其中一个food块时,才会定义函数中的

if。您输入的输入是1还是2?如果os food不会被定义为任何东西。您可以使用food的默认值,例如:

food = 0 # food stays at 0 for invalid choices
choice = input("Choice: ")
if choice == "1":
     food = 1
     bored = 2
if choice == "2":
     food = 4
     bored = 8
return food

同样要返回两个变量,你的return语句需要返回一个元组,即

 return (food, bored)

然后调用者可以

 (food, bored) = setfood()

并且您可以按照意图一次返回两个值

答案 1 :(得分:0)

def setfood(): 

是一种设定方法。它不应该返回任何东西。您应该定义其他方法,如getfood()或getboredStatus(),以返回食物状态或无聊状态。 有关详细信息,请参阅here