Python 3 - UnboundLocalError问题

时间:2016-05-02 22:31:51

标签: python python-3.x

import random
points1=0
points2=0
bank1=0
bank2=0
def gameloop():
    cont = "Keep going"
    while cont=="Keep going":
        roll1=random.randint(1,6)
        roll2=random.randint(1,6)
        if roll1+roll2==2:
            bank1=0
            points1=0
            print("Unlucky! You've lost your banked and running total! Now it's the next player's turn.")
        else:
            points1=points1+roll1+roll2 
#This is the first place I keep getting the problem.

所以,我试图尽可能缩短我的代码,以便它包含所有必要的部分。据我所知,我可以将其格式化为有意义。另外,我无法删除“def gameloop():”因为我以后需要它。这里的问题是,我一直收到UnboundLocalError,我已经尝试过调查,但我不确切知道如何应用解决方案。任何帮助将不胜感激 - 所以提前感谢!

3 个答案:

答案 0 :(得分:1)

您正在尝试修改points1中的gameloop和其他变量,但它们的定义超出了gameloop函数的范围。将它们作为参数包含在内,然后返回它们的新值。

points1=0
points2=0
bank1=0
bank2=0
def gameloop(p1, p2, b1, b2):
    cont = "Keep going"
    while cont=="Keep going":
        roll1=random.randint(1,6)
        roll2=random.randint(1,6)
        if roll1+roll2==2:
            b1=0
            p1=0
            print("Unlucky! You've lost your banked and running total! Now it's the next player's turn.")
        else:
            p1=p1+roll1+roll2
    return p1, p2, b1, b2

然后当你调用这个函数时,它会给你那些计算出来的新值,而不是试图对不在其范围内的变量进行操作。

points1, points2, bank1, bank2 = gameloop(points1, points2, bank1, bank2)

答案 1 :(得分:0)

那是因为你的变量

points1=0
points2=0
bank1=0
bank2=0

超出了函数gameloop()的范围,因此在函数内部无法识别它们。

您需要将它们作为参数传递给函数,如下所示:gameloop(points1, points2, bank1, bank2) 或者在函数的开头初始化它们:

def gameloop():
    points1=0
    points2=0
    bank1=0
    bank2=0

答案 2 :(得分:0)

您仍然可以使用print myjson["searchInformation"]["totalResults"] 关键字使函数内变量编辑全局变量。那就是:

global