双骰子模拟游戏Python函数开发:无顺序计数与while循环逻辑求助
双骰子模拟游戏代码修复方案
核心问题修复思路
- 命中计数逻辑修复:原逻辑存在重复判断、漏判问题,无法正确规避同一点数重复命中多个猜测值的情况。修复逻辑为:将首次掷骰结果存入可变列表,依次校验两个猜测值是否存在于列表中,每命中一个就从列表中移除对应点数,避免重复统计,最终统计的命中次数完全不受掷骰顺序影响。
- 失败目标值循环逻辑修复:原循环未在每次迭代中重新生成新的掷骰结果,也未设置正确的循环终止条件,同时存在将赋值运算符
=误写为比较运算符==的问题,会触发死循环或逻辑错误。修复逻辑为:进入追加掷骰阶段后,每次循环都先投掷两个新骰子,先判断点数和是否等于失败目标值,若是则直接清空投注金额终止循环;再判断当前两个骰子是否命中任意一个猜测值,若是则投注金额翻倍终止循环;两种情况都未触发则进入下一轮循环。
修正后完整代码
def play(guess1:int, guess2:int, dollars:int): # 首次投掷两个骰子 random_die1 = roll_one_die() random_die2 = roll_one_die() # 正确统计命中次数,不受顺序影响、不重复计数 rolls = [random_die1, random_die2] win_count = 0 if guess1 in rolls: win_count += 1 rolls.remove(guess1) # 移除已命中的点数,避免重复统计 if guess2 in rolls: win_count += 1 # 按规则处理不同命中情况 if win_count == 2: dollars = dollars * 3 elif win_count == 0: dollars = 0 else: losing_target = random_die1 + random_die2 # 循环投掷直到触发胜负条件 while True: new_roll1 = roll_one_die() new_roll2 = roll_one_die() current_sum = new_roll1 + new_roll2 # 先判定失败条件 if current_sum == losing_target: dollars = 0 break # 再判定获胜条件 if new_roll1 in (guess1, guess2) or new_roll2 in (guess1, guess2): dollars = dollars * 2 break # 所有分支最终返回金额 return dollars
内容的提问来源于stack exchange,提问作者hannahisdumb
相关产品推荐
相关产品推荐

