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

双骰子模拟游戏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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:04