Python - 无法将False变量变为True

时间:2015-02-03 20:56:04

标签: python function variables

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'第一次,当你使用变量时,它将是全局的'默认情况下,除非在函数内本地重新定义。

2 个答案:

答案 0 :(得分:1)

代码存在许多问题:

  1. elif firstact...替换为if firstact...
  2. 您访问不属于localscope的distracted_gaze
  3. 未定义prompt。将其替换为"Enter here "
  4. 之类的内容

答案 1 :(得分:0)

您的global distracted_gaze函数需要firstaction(除了修复其破碎的Python代码,正如其他人观察到的那样:-)。您显示的代码显然不是您正在运行的代码,否则您会收到语法错误。但这不是你问题的核心。

相反,问题是:Python将函数中绑定的每个裸名称视为本地到该函数 - 除非您使用global明确告诉它声明(或者在最近的Python 3中发布了一个nonlocal声明,但是,让我们不要进入: - )。

这会阻止你使用全局变量,这是一件好事,因为它是一个糟糕的编程习惯。至少,它迫使你非常清楚地表明你 使用这种可怕的编程习惯这一事实 - 总比没有好: - 。)。

与您提出的问题无关的其他问题,但与您对要显示的代码的奇怪选择非常相关,first_action是一种无限递归,就像您呈现它一样(我想if你&# 39;特别决定隐藏是什么终止了递归?难以猜测......)。