如何修改Python代码计算公平与仅出2-5的不公平骰子点数和概率
不公平骰子逻辑修改方案
核心修改点
原代码默认所有骰子生成逻辑完全一致,我们需要拆分两枚骰子的点数生成规则:
- 第一枚保留公平骰子逻辑,随机生成1~6的整数
- 第二枚替换为不公平骰子逻辑,仅随机生成2~5的整数
- 保留原输出要求的2~12统计区间,不可能出现的点数统计结果会自动为0
修改后完整代码
import random from collections import defaultdict def main(): rolls = int(input("请输入要模拟的投掷次数: ")) result = roll(rolls) maxH = 0 # 遍历2~12全区间符合输出要求 for i in range(2, 13): if result[i] / rolls > maxH: maxH = result[i] / rolls for i in range(2, 13): print('{:2d}{:10d}{:8.2%} {}'.format(i, result[i], result[i] / rolls, '#' * int(result[i] / rolls / maxH * 40))) def roll(rolls): d = defaultdict(int) for _ in range(rolls): # 分别生成两枚骰子点数:第一枚公平1~6,第二枚不公平2~5 fair_dice = random.randint(1, 6) unfair_dice = random.randint(2, 5) d[fair_dice + unfair_dice] += 1 return d main()
修改说明
- 简化了
roll函数的参数,因为两枚骰子规则不同,不需要统一传递骰子数量、面数参数 - 拆分了骰子点数生成逻辑,单独定义不公平骰子的取值范围
- 调整了main函数中的区间遍历逻辑,确保覆盖要求的2~12全区间输出
输出示例(模拟10000次投掷)
请输入要模拟的投掷次数: 10000 2 0 0.00% 3 621 6.21% ######### 4 1257 12.57% ################### 5 1876 18.76% ############################# 6 2512 25.12% ######################################## 7 1863 18.63% ############################# 8 1230 12.30% ################## 9 648 6.48% ######### 10 622 6.22% ######### 11 271 2.71% #### 12 0 0.00%
内容的提问来源于stack exchange,提问作者TaSa85920
相关产品推荐
相关产品推荐

