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

如何用Python优化桌游骰子工具:支持任意次数投掷并正确求和

优化后的骰子投掷工具实现

针对你目前的代码重复问题和功能需求,这里提供一个更简洁、可扩展的实现方案,能支持任意次数的投掷,轻松新增骰子类型,同时解决总和计算的问题:

import random

# 定义骰子类型与对应面数的映射,新增骰子只需在此添加条目
die_types = {
    "d4": 4,
    "d6": 6,
    # 示例:添加更多骰子类型
    # "d8": 8,
    # "d10": 10,
    # "d20": 20
}

# 验证骰子类型输入
while True:
    selected_die = input("what type of die?: ").strip().lower()
    if selected_die in die_types:
        break
    print(f"请输入支持的骰子类型:{', '.join(die_types.keys())}")

# 验证投掷次数输入
while True:
    try:
        roll_times = int(input("how many times?: ").strip())
        if roll_times > 0:
            break
        print("投掷次数必须大于0,请重新输入")
    except ValueError:
        print("请输入有效的数字")

# 核心投掷循环
roll_again = "yes"
while roll_again.lower() in ("yes", "y"):
    # 一次性生成所有投掷结果
    roll_results = [random.randint(1, die_types[selected_die]) for _ in range(roll_times)]
    # 输出结果与总和
    print(f"投掷结果:{' '.join(map(str, roll_results))}")
    print(f"总和:{sum(roll_results)}")
    # 询问是否继续
    roll_again = input("roll again? ")

关键改进说明

  • 字典管理骰子类型:用字典存储骰子类型和对应面数,新增骰子时只需要在字典里添加键值对,无需编写大量分支判断,扩展性拉满。
  • 输入合法性校验:对骰子类型和投掷次数做了校验,避免无效输入导致程序出错,比如输入非数字的次数、不存在的骰子类型。
  • 列表推导式生成结果:通过一行代码生成任意次数的投掷结果,不管是1次还是100次都能处理,彻底告别手动编写每个次数的判断逻辑。
  • 列表存储结果:用列表保存所有投掷值,既可以方便地打印所有结果,又能直接通过sum()函数计算总和,解决了你之前单个变量无法求和的问题。
  • 简化循环逻辑:把重复的"是否继续"输入统一放在循环末尾,避免每个分支重复编写相同代码,结构更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:41