因此,我有一个输出0或1的变量。现在,我要运行10,000次并获得其平均值。
import random
def roll_dice():
available = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]
x = random.sample(available, 1)
del available[x[0]]
y = random.sample(available, 1)
z = x[0] + y[0]
if z == 7:
count = 1
else:
count = 0
print(z)
print(count)
return count
roll_dice()
所以基本上,我想知道骰子掷回7的机会是什么。
答案 0 :(得分:1)
您可以使用random.choices()两次创建10000个6面骰子,-zip() 它们,每个sum() tuple,然后将其送入collections.Counter 数一下请参阅骰子示例,以获取有关代码解释的代码注释。
from collections import Counter
import random
random.seed(42)
r = range(2)
c = Counter( (map(sum, ( zip(random.choices(r,k=10000),random.choices(r,k=10000))))))
sumall = sum(c.values())
for k,v in c.most_common():
print(f"Chance for {k:>2}: {v:>5} out of {sumall} = {v / sumall * 100:2.2f}%")
输出:
Chance for 1: 4989 out of 10000 = 49.89% # about 50%
Chance for 2: 2540 out of 10000 = 25.40% # about 25%
Chance for 0: 2471 out of 10000 = 24.71% # about 25%
数学:
A B # for summed values:
0 0 25%
1 0 25% # combine it with the one below
0 1 25% # combine it with the one above
1 1 25%
0可获得25%,2可获得25%,1可获得50%。
from collections import Counter
import random
random.seed(42)
r = range(1,7)
c = Counter( (map(sum, ( zip(random.choices(r,k=10000),random.choices(r,k=10000))))))
# explanation of the last code line:
# random.choices(r,k=10000) creates 10000 random numbers between 1 and 6
# [1,2,4,...] and [6,1,6,...]
# zip takes 2 such 10k lists and makes 10k tuples
# [ (1,6),(2,1),(4,6) ... ]
# map( sum, zip( ...) ) applies sum() to all 2-tuples
# [7,3,10,...]
# Counter creates a dict with the sum als key and counts how often it occures
# the rest is just pretty printing:
print(c)
sumall = sum(c.values())
for k,v in c.most_common():
print(f"Chance for {k:>2}: {v:>5} out of {sumall} = {v / sumall * 100:2.2f}%")
输出:
Counter({ 7: 1673, 8: 1406, 6: 1372, 5: 1090, 9: 1089, 10: 823, 4: 821,
11: 591, 3: 570, 2: 291, 12: 274})
Chance for 7: 1673 out of 10000 = 16.73% # thats about the % of your dice/binary logic
Chance for 8: 1406 out of 10000 = 14.06%
Chance for 6: 1372 out of 10000 = 13.72%
Chance for 5: 1090 out of 10000 = 10.90%
Chance for 9: 1089 out of 10000 = 10.89%
Chance for 10: 823 out of 10000 = 8.23%
Chance for 4: 821 out of 10000 = 8.21%
Chance for 11: 591 out of 10000 = 5.91%
Chance for 3: 570 out of 10000 = 5.70%
Chance for 2: 291 out of 10000 = 2.91%
Chance for 12: 274 out of 10000 = 2.74%
Doku:
格式化:format mini language以对齐输出中的数字({k:>2}
,{v:>5}
,{v / sumall * 100:2.2f}
)
答案 1 :(得分:0)
好吧,要执行10,000次滚动,您可以这样使用for循环:
for count in range(0,10001):
# random script here
找到平均值的一种方法是在所述循环中包含if语句,例如:
avg = 0
if z == 7:
count = 1
if count == 1:
avg += 1
else:
count = 0
avg = (avg // 10000)
return avg
希望有帮助。
编辑:刚刚意识到您也有一个名为“ count”的变量。我不确定这是否会干扰循环,因此如果遇到任何问题,请尝试重命名该变量。