我正在使用Learn Python the Hard Way并且练习35的额外功劳说简化。我想创建一个函数,它将向用户询问下一个变量,然后将其返回给其他函数。
如果我没有意义......
def action():
next = raw_input (">> ")
return next
def start():
print"""
You are in a dark room.
There is a door to your right and left.
Which one do you take?"""
action()
if next == "left":
bear_room()
elif next == "right":
cthulu_room()
else:
dead("You stumble around the room until you starve.")
当我像这样运行它时,它总是给下一个。
答案 0 :(得分:2)
您需要在某处存储函数的返回值;一旦它退出,函数下面的整个小缩进命名空间就会与next
变量一起消失。我想你真的想要:
next = action()
这样,在函数的小命名空间被破坏的情况下,你仍然可以在程序的顶层找到next
的副本。
如果Python的这个功能听起来不必要具有破坏性,请相信我:如果你可以指望每个函数都是它自己的小世界,那么管理复杂程序会容易得多,而不会对你定义的变量进行全局更改! / p>
答案 1 :(得分:1)
您需要将调用结果分配给action()
中的start()
。例如。 next = action()
。当action()
执行完毕后,Python不再需要您在其中创建的next
变量,因此它会丢弃它。您可以通过将函数的结果赋值给变量(在本例中为函数next
中的start()
)将结果保存在另一个函数中。
快乐黑客!
答案 2 :(得分:1)
我编辑了你的语法。可能它在帮助你
def action():
nextt = raw_input (">> ")
return nextt
def start():
print"""
You are in a dark room.
There is a door to your right and left.
Which one do you take?"""
def bear_room():
print "You meet the bear..."
def cthulu_room():
print "you meet the princess"
def dead(message):
print message
def answ(nextt):
if nextt == "left":
bear_room()
elif nextt == "right":
cthulu_room()
else:
dead("You stumble around the room until you starve.")
start()
ok = action()
answ(ok)