Python函数间传递递增整数问题:Blackjack游戏胜负计数器实现
问题
我是编程新手,最近通过Udemy课程学习Python,正在开发Blackjack纸牌游戏并添加胜负追踪功能。我尝试用变量b_count作为获胜计数器,但无法在module1与module2(module1被module2调用)之间正确传递并递增它。
以下是简化代码:我希望每次玩家获胜(代码中a == 2时),module2中打印的b_count能加1,初始值为0,且玩家选择重玩(module2自调用)时生效。
import random b_count = 0 game_count = 1 def module1(b_count): a = random.randint(1,3) print(f"a = {a}") if a == 2: b_count += 1 def module2(b_count, game_count): print(f"b_count: {b_count}") print(f"game_count: {game_count}") module1(b_count) replay = input("replay? y/n: ") if replay == "y": game_count += 1 module2(b_count, game_count) module2(b_count, game_count)
我已尝试添加参数,但即使a == 2,module2中打印的b_count也从未递增(game_count正常工作)。我试过在module1中return b_count,也试过print(f"\nb_count: {module1(b_count)}"),都没有效果。我不想使用不推荐的全局变量,希望得到解决方法。
解决方法
问题的核心是Python里整数属于不可变类型,函数参数传递的是值的副本——你在module1里修改的b_count只是函数内部的局部变量,和外面的变量完全没关系。想要同步更新,得让module1把修改后的计数器返回,再在module2里接收这个新值,传递给后续调用。
具体修改步骤:
- 让
module1返回更新后的b_count:def module1(b_count): a = random.randint(1,3) print(f"a = {a}") if a == 2: b_count += 1 return b_count # 返回修改后的计数器 - 在
module2中调用module1时,接收返回值并更新当前的b_count:def module2(b_count, game_count): print(f"b_count: {b_count}") print(f"game_count: {game_count}") b_count = module1(b_count) # 拿到更新后的计数器 replay = input("replay? y/n: ") if replay == "y": game_count += 1 module2(b_count, game_count) # 把新的计数器传进去
修改后的完整代码:
import random b_count = 0 game_count = 1 def module1(b_count): a = random.randint(1,3) print(f"a = {a}") if a == 2: b_count += 1 return b_count def module2(b_count, game_count): print(f"b_count: {b_count}") print(f"game_count: {game_count}") b_count = module1(b_count) replay = input("replay? y/n: ") if replay == "y": game_count += 1 module2(b_count, game_count) module2(b_count, game_count)
这样每次玩家获胜时,module1会返回加1后的计数器,module2接收后,重玩时就会带着更新后的数值继续,实现正确的胜负追踪。
内容的提问来源于stack exchange,提问作者Orlingas
相关产品推荐
相关产品推荐

