如何修改Python骰子游戏代码,实现得分y>4时自动终止运行
问题背景
你最多可以掷6次骰子,随时可以选择停止并获得当前掷出点数对应的美元奖励。例如,Max先后掷出2、4、3、6后选择停止,获得6美元奖励;Hans先后掷出3、2、4、5后停止,获得5美元奖励。假设我们的策略是一直掷骰子直到掷出大于等于4的点数就停止,那么平均每次游戏可以获得多少奖励?如果最大掷骰子次数从6次下调到4次,结果会有什么变化?
原有代码问题说明
- 未处理连续多次都掷出小于4点数的边界场景,此时变量y未定义会触发运行报错
- 外层循环固定执行6轮,没有加入「得分y>4就终止运行」的判断逻辑
- 内层循环的最大掷骰次数硬编码为6,不方便调整为4次做对照测试
修改方案
只需要做两处核心调整即可满足需求:
- 补充边界场景处理:如果达到最大掷骰次数仍未掷出≥4的点数,就将最后一次掷出的点数作为本轮得分
- 每轮游戏结束输出结果后,判断如果得分大于4,直接终止外层循环结束程序
同时我们把最大掷骰次数、最大游戏轮数都设为可调变量,方便后续做参数调整测试。
修改后完整代码
import random # 可调参数:单局最大掷骰次数,要测试4次的话直接修改这个值即可 max_roll_per_game = 6 # 最大游戏轮数:避免极端情况一直掷不出大于4的点数导致程序死循环 max_game_rounds = 100 rounds = 0 while rounds < max_game_rounds: rounds += 1 roll_count = 1 current_score = 0 while roll_count <= max_roll_per_game: x_trial = random.randint(1,6) if x_trial >= 4: current_score = x_trial break # 到了最大掷骰次数仍未触发停止条件,取最后一次的掷骰结果作为得分 if roll_count == max_roll_per_game: current_score = x_trial break roll_count += 1 # 输出本轮结果 print(f"Round number: {rounds}") print(f"Times rolled: {roll_count}") print(f"Your score: {current_score}") print(f"Your prize: {current_score}\n") # 得分大于4直接终止所有程序 if current_score > 4: print(f"本轮得分{current_score}大于4,游戏终止") break
运行效果示例
某次运行输出如下:
Round number: 1 Times rolled: 3 Your score: 4 Your prize: 4 Round number: 2 Times rolled: 1 Your score: 6 Your prize: 6 本轮得分6大于4,游戏终止
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

