首页 > 解决方案 > 得到错误“分配前引用的局部变量 - 如何修复?

问题描述

我正在制作一个赌博程序(我知道这应该不会太难),并且想要在子程序中拥有多个游戏。但是,python 似乎认为我的变量被分配在奇怪的地方。

我对子例程是半新的,但这里和那里仍然存在一些问题。这是我正在使用的内容:

# variables and subroutines
money = 500
losses = 0
wins = 0
wlr = (wins,':',losses)
egg = True

def fiftyfifty(bet):
    chance = random.randint(0,100)
    if chance > 50:
        losses += 1
        print('You lose!')
        money -= bet
        print('You now have ',money)
        return
    else:
        wins += 1
        print('You win!')
        money += bet
        print('You now have ',money)
        return

这是它的名称:

elif gamechoice == 'fifty fifty':
        print('You have $',money,'\n')
        t(1)
        bet1 = money+1
        while bet1 > money:
            bet1 = int(input('How much do you want to bet?\n'))
        fiftyfifty(bet1)

我希望它只是通过,在输赢中添加一个计数,然后更新资金。但是,我收到了这个错误: UnboundLocalError: local variable 'losses' referenced before assignment 如果我赢了,它和local variable 'wins'.

如图所示,所有变量都分配在顶部,然后在下面的子程序中引用。我完全不确定python如何认为我在分配之前引用了它?

我将不胜感激,在此先感谢您!

标签: pythonsubroutine

解决方案


原因是它losses被定义为一个全局变量。在函数(局部范围)内,松散地说,您可以从全局变量中读取但不能修改它们。

这将起作用:

losses = 0

def f():
    print(losses)

f()

这不会:

losses = 0

def f():
    losses += 1

f()

如果您希望它们具有本地范围,则应该在函数体内分配给您的变量。如果你明确地想要修改全局变量,你需要global losses在你的函数体中声明它们。


推荐阅读