4

我正在用python制作游戏,并且我设置了一些代码:

istouching = False
death = True

def checkdead():
    if istouching:
        print "Is touching"     
        death = True

while death is False:
    print death
    game logic

我知道游戏逻辑是有效的,因为“正在触摸”打印,但是当我打印出死亡的价值时,它仍然是假的,有什么帮助吗?

4

3 回答 3

4

用于global更改函数内部的全局变量,否则death=True内部checkdead()实际上会定义一个新的局部变量。

def checkdead():
    global death
    if istouching == True:      #use == here for comparison
        print "Is touching"     
        death = True
于 2012-10-16T00:36:50.550 回答
4

使checkdead返回值:

def checkdead():
    if istouching:
        print "Is touching"     
        return True

death = checkdead()

正如@AshwiniChaudhar 所示,您也可以使用global,但我认为最好编写返回值的函数而不是修改全局变量的函数,因为这样的函数可以更容易地进行单元测试,并且它明确了哪些外部变量被更改。

PS。if istouching = True应该导致 SyntaxError,因为您不能在条件表达式中进行变量赋值。

相反,使用

if istouching:
于 2012-10-16T00:37:09.637 回答
1

那是范围相关的。

death = False        
def f():
    death = True      # Here python doesn't now death, so it creates a new, different variable
f()
print(death)          # False

death = False       
def f():
    global death
    death = True
f()
print(death)      # True
于 2012-10-16T00:51:44.907 回答