获取错误“赋值前引用的局部变量 - 如何修复?
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
。
变量 wins
、money
和 losses
是在 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
我正在制作一个赌博程序(我知道这不应该很难),并且想要在子程序中有多个游戏。但是,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
。
变量 wins
、money
和 losses
是在 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