首页 > 代码库 > 把一个骰子扔n次, n次朝上一面的点数和为s。 输入n, 打印出s的所有可能的值出现的概率。

把一个骰子扔n次, n次朝上一面的点数和为s。 输入n, 打印出s的所有可能的值出现的概率。

#一、
# 1.计算所有数之和
import datetime
start=datetime.datetime.now()
n=10
c=[]
a = [1,2,3,4,5,6]
b = [1,2,3,4,5,6]
total=len(a)**(n)
while n>1:
for i in a:
for j in b:
c.append(i+j)
b=c[:]
c.clear()
n-=1
print(b)
#2.计算各和的概率
sum=0
for i in set(b):
print(‘和为%s的概率:‘%i,b.count(i)/total)
sum+=b.count(i)/total
print(‘总的概率为:‘,sum)
end=datetime.datetime.now()
print((end-start).seconds)


#二、
import datetime
from decimal import Decimal
start=datetime.datetime.now()
def get_dice():
# 一个骰子扔n次
times = 10
# 默认点数
number = [1, 2, 3, 4, 5, 6]
result = []
dice = {}
while times > 0:
result.append(number)
times -= 1

length = len(result)
# 所有可能性
total = len(number) ** length

if length >= 2:
while length > 2:
temp = []
for i in result[-1]:
for j in result[-2]:
temp.append(i+j)
result.pop(-1)
result[-1] = temp
length -= 1

for m in result[0]:
for n in result[1]:
dice[m+n] = dice.setdefault(m+n, 0) + 1
else:
for i in result[0]:
dice[i] = 1

for num, count in dice.items():
dice[num] = str(Decimal(100.0*count/total).quantize(Decimal(‘0.000‘))) + ‘%‘
return dice

for k, v in get_dice().items():
print (k, v)

end=datetime.datetime.now()
print((end-start).seconds)

把一个骰子扔n次, n次朝上一面的点数和为s。 输入n, 打印出s的所有可能的值出现的概率。