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

如何使用Python开发支持无限自定义不同面数的多骰子模拟器

首先你完全不需要定义无限个变量,用一个list(列表)存储每个骰子的面数即可实现需求。你的待完善代码主要有三个问题:

  • else后面漏了冒号、print语句漏了括号,属于基础语法错误
  • 自定义模式下先问骰子数量再逐个输入面数的逻辑顺序写反了
  • 没有把自定义的每个骰子面数存下来复用,无法支持按回车重复投掷相同配置的自定义骰子

修改后的完整可运行代码

from random import randint

stop = "c"
# 用列表存储自定义骰子的面数,默认空
custom_dice = []

print("Automatic Dice Roller")

while stop != "x":
    if stop == "c":
        # 每次改配置前先清空旧的自定义骰子配置
        custom_dice = []
        print("如果需要单独设置每个骰子的面数,请输入i后按回车,否则直接按回车:")
        ind = input("").strip()
        if ind != "i":
            # 原统一配置逻辑
            print("请输入要投掷的骰子数量,按回车确认:")
            d = input("").strip()
            print("请输入每个骰子的面数,按回车确认:")
            s = input("").strip()
            print(f"正在投掷{d}个{s}面骰子!")
        else:
            # 自定义每个骰子的逻辑
            print("请输入要投掷的骰子数量(最多10个),按回车确认:")
            cust_count = int(input("").strip())
            # 限制最多10个
            cust_count = min(cust_count, 10)
            for i in range(cust_count):
                print(f"请输入第{i+1}个骰子的面数,按回车确认:")
                side = int(input("").strip())
                custom_dice.append(side)
            print(f"正在投掷{cust_count}个自定义面数的骰子!")
    
    # 投掷逻辑分支
    if not custom_dice:
        # 走统一配置的投掷逻辑
        d_int = int(d)
        s_int = int(s)
        for i in range(d_int):
            print(f"第{i+1}个骰子的点数是:{randint(1, s_int)}!")
    else:
        # 走自定义配置的投掷逻辑
        for idx, side in enumerate(custom_dice):
            print(f"第{idx+1}个{side}面骰子的点数是:{randint(1, side)}!")
    
    print("直接按回车重复投掷相同配置,输入c按回车修改骰子配置,输入x按回车退出:")
    stop = input("").strip()

关键改动说明

  • 新增custom_dice列表存储自定义骰子的面数,只需要这一个变量就能保存所有骰子的配置
  • 修正了原自定义模式的逻辑顺序:先获取要自定义的骰子总数,再循环录入每个骰子的面数存入列表
  • 拆分投掷逻辑:如果custom_dice为空就走原统一配置的投掷逻辑,不为空就遍历列表逐个投掷对应面数的骰子
  • 保留了原有的按回车重复投掷相同配置的功能,不需要每次重新输入所有骰子的面数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:48:01