获取错误“赋值前引用的局部变量 - 如何修复?

Getting error "local variable referenced before assignment - how to fix?

我正在制作一个赌博程序(我知道这不应该很难),并且想要在子程序中有多个游戏。但是,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 认为我在分配之前如何引用它?

如有任何帮助,我将不胜感激,在此先感谢您!

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

这会起作用:

losses = 0

def f():
    print(losses)

f()

这不会:

losses = 0

def f():
    losses += 1

f()

如果您希望变量具有局部作用域,则应在 函数体中将变量赋值给 。如果您明确要修改全局变量,则需要在函数体中声明它们,例如 global losses

变量 winsmoneylosses 是在 fiftyfifty() 函数的范围之外声明的,因此您不能从函数内部更新它们,除非您明确地像这样将它们声明为全局变量:

def fiftyfifty(bet):
    global wins, money, losses
    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