Python新手求助:函数循环调用时如何保留balance变量值不重置
问题原因
- 你在
playgame()函数开头写了balance = 2000,这行代码会在每一次调用playgame()的时候,都创建一个局部变量balance,并直接赋值为2000,你后续的修改都是改的这个局部变量,递归调用下一次playgame()的时候又会重新初始化,自然没法持久保存数值。 - 你最开头写的
global balance声明没有生效:一方面你没有在全局作用域定义balance的初始值,另一方面函数内部没有再声明要用全局的balance,操作的都是局部变量。
修复方案
你可以按以下逻辑调整代码:
- 把
balance = 2000从函数内部移到全局作用域,作为全局变量初始化 - 在
playgame()函数内部第一行加上global balance声明,告诉函数这次操作的是全局的balance变量,不要创建局部变量 - 额外优化:你现在用递归调用
playgame()实现重复游戏的逻辑,玩的次数多了会触发递归深度超限报错,可以改成while循环来实现重复游玩的逻辑。
修复后的完整代码
from random import randint # 全局变量初始化 balance = 2000 name = input("请输入你的名字:") password = input("请设置密码:") def playgame(): global balance yesOrNo = input("你想要下注吗?请输入Y/N:") if yesOrNo.lower() == "y": howBigABet = int(input("你想要下注多少?:")) if howBigABet <= balance: pickNumber = int(input("请选择一个数字(0或1):")) value = randint(0, 1) print(f"开出的数字是:{value}") if pickNumber == value: balance += howBigABet * 2 print(f"你赢了{howBigABet * 2}") print(f"当前余额:{balance}") else: print("抱歉,你猜错了数字") balance -= howBigABet print(f"你的新余额是:{balance}") # 余额检查 if balance <= 0: print(f"你已经没有余额了,{name},请充值") return elif balance <= 200: print("你的余额不足200,是否充值?") else: print("抱歉,你的余额不足") else: return print(f"你好,{name}") passwordAttempted = input("请输入你的密码:") if passwordAttempted == password: print(f"欢迎回来,{name}") # 用循环实现多次游玩,替代递归 while True: playgame() continue_play = input("还要继续玩吗?Y/N:") if continue_play.lower() != "y": print("游戏结束,欢迎下次再来") break else: print(f"{name},密码错误!")
内容的提问来源于stack exchange,提问作者adam
相关产品推荐
相关产品推荐

