基于用户输入的掷骰子概率计算程序开发求助
问题分析与修正方案
原代码存在的问题
- 最后循环的判断条件完全错误:
if outcome == 1是将整个字典对象与整数1比较,逻辑永远不成立,导致没有任何输出。 - 未针对用户输入的目标点数输出结果,反而遍历所有点数,偏离需求。
- 缺乏输入合法性校验,若用户输入2-12以外的数字,会引发字典键不存在的错误。
修正后的代码
from random import randint # 处理用户输入,增加合法性校验 while True: try: number = int(input("You have two dice to roll, what outcome do you want? ")) if 2 <= number <= 12: break else: print("请输入2到12之间的整数!") except ValueError: print("请输入有效的整数!") outcome = {2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0} sim = 100 # 模拟掷骰子过程 for _ in range(sim): first_dice_roll = randint(1, 6) second_dice_roll = randint(1, 6) sum_dice = first_dice_roll + second_dice_roll outcome[sum_dice] += 1 # 直接根据用户输入的点数输出概率 percentage = outcome[number] / sim * 100 print(f"掷出点数{number}的概率是:{percentage:.2f}%")
关键修改说明
- 输入合法性校验:通过循环和异常捕获,确保用户输入的是2-12之间的有效整数,避免非法输入导致程序崩溃。
- 简化结果输出逻辑:模拟完成后,直接用用户输入的点数作为字典键,取出对应计数计算概率,无需遍历所有点数。
- 格式化输出:使用f-string格式化结果,保留两位小数,展示更直观。
内容的提问来源于stack exchange,提问作者user22034970
相关产品推荐
相关产品推荐

