def firstaction():
firstact = raw_input(prompt)
print distracted_gaze
if firstact == "throw rock" and not distracted_gaze:
distracted_gaze = True
print distracted_gaze
firstaction()
elif firstact == "throw spear" and distracted_gaze:
secondaction()
distracted_gaze = False
firstaction()
我无法返回if语句:
distracted_glaze = True.
非常感谢帮助。感谢
...
好的,所以现在我似乎修复了这个错误。这是我的新代码:
def firstaction():
firstact = raw_input(prompt)
global distracted_gaze
print distracted_gaze
elif firstact == "throw rock" and not distracted_gaze:
print "Now he is distracted. He won't hear anything you throw at him!"
distracted_gaze = True
print distracted_gaze
firstaction()
elif firstact == "throw spear" and distracted_gaze:
print "He's dead! A door appears behind him..."
secondaction()
global distracted_gaze
distracted_gaze = False
firstaction()
现在令我困惑的是:为什么我必须将变量定义为' global'在函数外部然后使用然后键入' global distracted_gaze'在功能呢? (在将函数定义为函数外的全局变量之后,我尝试将脚本运行2次,然后在函数内部使用它而不在其前键入' global'以及键入' global&# 39;在变量前面的函数内部并定义变量而不使用函数外的'全局'两次Powershell输出错误。)
那是标准吗?因为本教程(http://www.python-course.eu/global_vs_local_variables.php)并没有说你必须这样做 - 实际上恰恰相反。如果您将变量定义为' global'第一次,当你使用变量时,它将是全局的'默认情况下,除非在函数内本地重新定义。
答案 0 :(得分:1)
代码存在许多问题:
elif firstact...
替换为if firstact...
distracted_gaze
prompt
。将其替换为"Enter here "
答案 1 :(得分:0)
您的global distracted_gaze
函数需要firstaction
(除了修复其破碎的Python代码,正如其他人观察到的那样:-)。您显示的代码显然不是您正在运行的代码,否则您会收到语法错误。但这不是你问题的核心。
相反,问题是:Python将函数中绑定的每个裸名称视为本地到该函数 - 除非您使用global
明确告诉它声明(或者在最近的Python 3中发布了一个nonlocal
声明,但是,让我们不要进入: - )。
这会阻止你使用全局变量,这是一件好事,因为它是一个糟糕的编程习惯。至少,它迫使你非常清楚地表明你 使用这种可怕的编程习惯这一事实 - 总比没有好: - 。)。
与您提出的问题无关的其他问题,但与您对要显示的代码的奇怪选择非常相关,first_action
是一种无限递归,就像您呈现它一样(我想if
你&# 39;特别决定隐藏是什么终止了递归?难以猜测......)。