编写一个程序,模拟掷双骰子(36000次),计算两个骰子值的和。利用一个一维数组记录每个可能的和出现的次数,以表格形式打印结果。同时,判定这些次数是否合理(例如,有6种方式可以得到7,那大约结果中1/6应该是7)。
时间: 2024-10-24 14:19:25 浏览: 20
编写这样一个程序可以分为以下几个步骤:
1. **初始化**:
创建一个长度为36的一维数组`dice_sum_counts`,用于存储从2到12(因为两个骰子的最大和是12)每种和出现的次数。
2. **循环模拟**:
使用for循环,重复36000次掷骰子操作。每次循环中,生成两个随机数,代表第一个和第二个骰子的结果,然后将它们相加,更新对应的`dice_sum_counts`。
```python
import random
# 初始化数组
dice_sum_counts = [0] * 12
# 模拟掷骰子
for _ in range(36000):
dice1 = random.randint(1, 6)
dice2 = random.randint(1, 6)
sum_value = dice1 + dice2
dice_sum_counts[sum_value - 2] += 1 # 减去2是因为我们想存储的是实际和的范围(2-12),数组索引是从0开始的
```
3. **统计并打印结果**:
计算每个和出现的频率,并将其转换为百分比。然后,以表格形式显示结果。
```python
total_trials = sum(dice_sum_counts)
percentage_table = [(i+2, dice_sum_counts[i], round(dice_sum_counts[i] / total_trials * 100, 2)) for i in range(len(dice_sum_counts))]
print("和\t| 频率\t| 百分比")
for row in percentage_table:
print(f"{row[0]} | {row[1]} | {row[2]}%")
```
4. **判断合理性**:
对于每个期望的和(如7),检查实际计数值是否接近理论概率(1/6)。由于实际试验次数有限,会有一定的误差,但一般来说,如果比例相差不大,就认为结果是合理的。
```python
expected_probabilities = [1/6 for _ in range(6)]
for i in range(2, 13): # 避免对2和12进行额外检查,因为它们只有一种方式
if abs(expected_probabilities[i- percentage_table[i-2][2]) > 5: # 设置一个阈值,比如5%
print(f"不合理!预期{i}出现的概率应为约16.67%,但实际为{percentage_table[i-2][2]}%")
```
阅读全文