-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path111.py
More file actions
68 lines (55 loc) · 2.33 KB
/
Copy path111.py
File metadata and controls
68 lines (55 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from collections import defaultdict
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
def calculate_exact_probabilities():
"""
计算精确的概率分布
"""
# 初始化概率字典
probabilities = defaultdict(int)
# 六面骰子的所有可能点数组合
dice_values = np.arange(1, 7)
# 枚举所有可能的四骰组合(考虑去除一个最小值后的和)
for d1 in dice_values:
for d2 in dice_values:
for d3 in dice_values:
for d4 in dice_values:
# 排序并去除最小值
rolls = sorted([d1, d2, d3, d4])[1:]
for _ in range(6): # 重复六次
rolls_sum = sum(rolls) # 当前组合的总和
probabilities[rolls_sum] += 1 # 累加次数
probabilities_sum = defaultdict(int)
for n in probabilities:
print(n)
for m in probabilities:
for k in probabilities:
for l in probabilities:
for o in probabilities:
for p in probabilities:
probabilities_sum[n+m+k+l+o+p] += probabilities[n]+probabilities[m]+probabilities[k]+probabilities[l]+probabilities[o]+probabilities[p]
total_combinations = sum(probabilities_sum.values()) # 总的组合数
for key in probabilities_sum:
probabilities_sum[key] /= total_combinations
print(f"{key}: {probabilities_sum[key]}")
# 转换为DataFrame以便查看
df = pd.DataFrame(list(probabilities_sum.items()), columns=['Total', 'Probability'])
df['Total'] = df['Total'].astype(int) # 确保“Total”列是整型
df.sort_values(by='Total', inplace=True) # 按照Total排序
return df
# 计算并打印结果
exact_probability_table = calculate_exact_probabilities()
def visualize_probabilities(df):
"""
可视化概率分布
"""
plt.figure(figsize=(10, 5))
plt.bar(df['Total'], df['Probability'], color='skyblue')
plt.xlabel('Sum of Rolls (excluding the lowest roll)')
plt.ylabel('Probability')
plt.title('Probability Distribution of Sum of Rolls (excluding the lowest roll)')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
# 调用函数进行可视化
visualize_probabilities(exact_probability_table)