python - 得到错误“分配前引用的局部变量 - 如何修复?
问题描述
我正在制作一个赌博程序(我知道这应该不会太难),并且想要在子程序中拥有多个游戏。但是,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
在你的函数体中声明它们。
推荐阅读
- java - 如何在 Heroku 上部署 SpringBoot 项目?
- javascript - jQuery Javascript Modal Popup 在 MVC 中不起作用
- excel - 如何跨年份转换纪元日期,包括 DST
- node.js - 触发了 Alexa 意图,但回复是“抱歉,我在执行您要求的操作时遇到问题。请再试一次。”
- c# - 如何构建一个接受来自 URI 参数的对象数组的 HTTP GET 操作?
- javascript - 未捕获的 SyntaxError: missing ) 在参数列表之后我知道它非常常见,但我看不出我在哪里搞砸了
- vuetify.js - Vuetify 升级报错 vue-cli 和 vuetify 2.0
- ag-grid - 未显示 detailCellRendererParams 的 ag-grid 数据
- java - 为什么这只会在网格上产生一个按钮?
- python - 使用 value_counts 和多列过滤 Pandas DataFrame?