好的,所以我有这个课应该有food
,hunger
和其他一些属性。
我只有这样的定义:
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)
但这也不起作用......
但是,如果我对两个变量都这样做,我必须经历两次整个过程。那我到底该怎么办?我很失落和沮丧。
答案 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