0

好的,所以我有这个应该有 , 和其他一些属性的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 = 0并添加bored = 0到程序的主要部分中,这没有什么区别,因为我无法将全局变量传递到定义中。

我试图将定义添加到我的课程中,但它仍然没有任何区别。我还尝试进行单独的定义以返回每个变量……也没有奏效。不管我做什么,我都赢不了。

我可以让它工作的唯一方法是如果我这样做:

food = setfood()

我想我可以把它改成这样:

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

但这也不起作用...

但是,如果我对这两个变量都这样做,我必须经历两次。那么我具体该怎么做呢?我很失落和沮丧。

4

2 回答 2

1

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

foodif仅当您输入其中一个块时才定义您的函数。您输入的输入不是 1 或 2 吗?如果 osfood不会被定义为任何东西。你可以有一个默认值,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 (food, bored)

然后调用者可以做

 (food, bored) = setfood()

并且您将能够按照您的意图一次返回两个值

于 2013-02-01T03:09:34.670 回答
0
def setfood(): 

是一套方法。它不应该返回任何东西。您应该定义其他方法,例如 getfood() 或 getboredStatus() 来返回食物状态或无聊状态。请参阅此处了解更多信息

于 2013-02-01T03:06:39.987 回答