‘陷入泥沼’骰子儿童游戏:求和随机整数并排除指定值的技术问询
游戏:Stuck in the Mud 代码评估与优化
游戏规则回顾
- 初始掷5枚骰子,得分取骰子点数之和,但排除点数为2和5的骰子
- 掷出2或5的骰子会「陷入泥沼」,无法参与后续投掷
- 重复投掷剩余骰子,直到无骰子可掷,最终返回累计总得分
- 示例:第一次掷出[1,3,4,5,2],得分为8,剩余3枚骰子;第二次掷出[6,3,2],本次得9,累计总得分17
现有代码的问题分析
原代码存在以下不符合规则或可优化的点:
- 未累计总得分:每次投掷的
score是临时变量,仅显示单次得分,没有累加为最终总得分,完全不符合规则中“累计得分”的核心要求 - 输入处理不严谨:用户输入非
r/q的内容时,会直接退出循环,没有提示用户重新输入有效指令 - 游戏结束提示缺失:当骰子全部陷入泥沼(
diceC=0)时,没有明确提示游戏结束,直接终止流程 - 拼写错误:标题打印的
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.
相关产品推荐
相关产品推荐

