You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里接收这个新值,传递给后续调用。

具体修改步骤:

  1. 让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  # 返回修改后的计数器
    
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:10:40