gpt4 book ai didi

python - 计算掷骰子 python 中的 sixes

转载 作者:太空狗 更新时间:2023-10-30 02:59:00 24 4
gpt4 key购买 nike

在 Python 入门类(class)中,我接到了一项任务,要对滚骰子进行模拟

您希望您所有的骰子(总共 5 个)的值都是 6,然后计算一个人总共需要掷多少次才能得到所有的 6。我需要一个模拟此问题 100.000 次的循环,然后需要将计数总数除以 100.000 以获得结果。我知道最终结果应该在 13 左右,但我没有得到,我也不确定为什么。

我知道我解决这个问题的方法有问题,但是什么?

import random

count1=0
count2=0
count3=0
count4=0
count5=0
loopcounter = 0

for loopcouter in range (1,100000):
dice1=int( random.random()*6)+1
if dice1 != 6:
#reroll
while dice1 != 6:
dice1=int( random.random()*6)+1
#set counter1
count1 = count1+1
else:
count1 = 1

dice2=int( random.random()*6)+1
if dice2 != 6:
#reroll while not six
while dice2 != 6:
dice2=int( random.random()*6)+1
#set counter2
count2 = count2+1
else:
count2 = 1

dice3=int( random.random()*6)+1
if dice3 != 6:
#reroll while not six
while dice3 != 6:
dice3=int( random.random()*6)+1
#set counter3
count3 = count3+1
else:
count3 = 1
dice4=int( random.random()*6)+1
if dice4 != 6:
#reroll while not six
while dice4 != 6:
dice4=int( random.random()*6)+1
#set counter4
count4 = count4+1
else:
count4 = 1

dice5=int( random.random()*6)+1
if dice5 != 6:
#reroll while not six
while dice5 != 6:
dice5=int( random.random()*6)+1
#set counter5
count5 = count5+1
else:
count5 = 1


#print (dice1)
print (count1)

#print (dice2)
print (count2)
#print (dice3)
print (count3)
#print (dice4)
print (count4)
#print (dice5)
print (count5)

allcount = count1+count2+count3+count4+count5
averagecount = int(allcount / 100000)

print ("the total number of throws is",allcount)
print ("the average number of throws is",averagecount)

所以,如果有人能告诉我我做错了什么,那就太完美了!

最佳答案

这是一种非常不同的方法。

让我们制作一个物体,死亡,它会滚动直到击中目标:

import random

class die(object):
def __init__(self, sides=6):
self.sides=sides
self.count=0

def roll(self):
self.count+=1
return random.randint(1,self.sides)

def roll_until(self, tgt, giveup=100000):
result=0
self.tgt=tgt
while result!=tgt and self.count<giveup:
result=self.roll()
if self.count<giveup:
return self.count

然后您可以只创建一个实例(一个骰子)并告诉它自己滚动直到击中目标:

>>> d=die()
>>> d.roll_until(6)
2
>>> d.tgt
6
>>> d.count
2

2 是 d 需要滚动的次数,直到 6 是 6 面骰子的结果。

为什么要这样做?现在您可以轻松创建模具列表:

>>> dice=[die().roll_until(6) for i in range(6)]
>>> dice
[15, 3, 3, 4, 5, 2]

并轻松回答您的问题。

取这个列表的最大值:

>>> max(die().roll_until(6) for i in range(6))
9

n 次除以 float(n) 结果:

>>> n=100000
>>> sum(max(die().roll_until(6) for i in range(6)) for i in range(n))/float(n)
13.95879

糟糕! Yatzee 游戏中只有五个骰子。轻松更改:

>>> sum(max(die().roll_until(6) for i in range(5)) for i in range(n))/float(n)
13.0032

关于python - 计算掷骰子 python 中的 sixes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32550820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com