如何使用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
相关产品推荐
相关产品推荐

