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

‘陷入泥沼’骰子儿童游戏:求和随机整数并排除指定值的技术问询

游戏:Stuck in the Mud 代码评估与优化

游戏规则回顾

  • 初始掷5枚骰子,得分取骰子点数之和,但排除点数为2和5的骰子
  • 掷出2或5的骰子会「陷入泥沼」,无法参与后续投掷
  • 重复投掷剩余骰子,直到无骰子可掷,最终返回累计总得分
  • 示例:第一次掷出[1,3,4,5,2],得分为8,剩余3枚骰子;第二次掷出[6,3,2],本次得9,累计总得分17

现有代码的问题分析

原代码存在以下不符合规则或可优化的点:

  1. 未累计总得分:每次投掷的score是临时变量,仅显示单次得分,没有累加为最终总得分,完全不符合规则中“累计得分”的核心要求
  2. 输入处理不严谨:用户输入非r/q的内容时,会直接退出循环,没有提示用户重新输入有效指令
  3. 游戏结束提示缺失:当骰子全部陷入泥沼(diceC=0)时,没有明确提示游戏结束,直接终止流程
  4. 拼写错误:标题打印的Stuck in the Mude应为Stuck in the Mud

优化后的代码实现

import random

print("One round of Stuck in the Mud")
total_score = 0
dice_count = 5

while True:
    game_input = input("Enter r to roll the dice or q to quit: ").strip().lower()
    
    # 处理退出指令
    if game_input == "q":
        print("游戏已退出")
        break
    
    # 处理无效输入
    if game_input != "r":
        print("无效指令,请输入r或q")
        continue
    
    # 骰子已全部陷入泥沼,结束游戏
    if dice_count <= 0:
        print("所有骰子都陷入泥沼了,游戏结束")
        break
    
    # 投掷当前剩余的骰子
    dice_rolls = [random.randint(1, 6) for _ in range(dice_count)]
    round_score = 0
    lost_dice = 0
    
    for d in dice_rolls:
        if d == 2 or d == 5:
            lost_dice += 1
        else:
            round_score += d
    
    # 更新总得分和剩余骰子数
    total_score += round_score
    dice_count -= lost_dice
    
    # 输出本轮结果
    print(f"本轮骰子结果: {dice_rolls}")
    print(f"本轮得分: {round_score},累计总得分: {total_score}")
    print(f"剩余可投掷骰子数: {dice_count}\n")

# 游戏结束后显示最终总得分
print(f"最终总得分: {total_score}")

优化点说明

  • 新增total_score变量,全程累计总得分,符合规则要求
  • 增加输入验证逻辑,处理无效输入,提升用户体验
  • 明确骰子耗尽时的结束提示,流程更清晰
  • 变量名改为更具可读性的dice_count、round_score等,代码更易维护
  • 用lost_dice临时统计本轮丢失的骰子,避免直接修改dice_count导致的逻辑混乱(原代码在循环中直接修改dice_count,虽然结果正确,但可读性差)

内容的提问来源于stack exchange,提问作者ak.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:45:33