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

基于用户输入的掷骰子概率计算程序开发求助

问题分析与修正方案

原代码存在的问题

  • 最后循环的判断条件完全错误: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}%")

关键修改说明

  1. 输入合法性校验:通过循环和异常捕获,确保用户输入的是2-12之间的有效整数,避免非法输入导致程序崩溃。
  2. 简化结果输出逻辑:模拟完成后,直接用用户输入的点数作为字典键,取出对应计数计算概率,无需遍历所有点数。
  3. 格式化输出:使用f-string格式化结果,保留两位小数,展示更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:02