计算在前 100 次滚动中连续滚动 3 次 6 的概率 [使用 python]

Calculating the probability of rolling a 6 3 times in a row in the first 100 rolls [Using python]

我不确定如何在不在循环内实现许多循环的情况下有效地计算概率。我能够正确执行它。但是肯定有更好的方法来编写代码。我不确定是否应该将我的所有代码都包含在循环中,因为它很长。

我目前拥有的代码

import math

arr=[]
total = 0
count =0
# for k in range(1,7):
#     for i in range(1,7):
#         tupple = (k,i)
#         arr.append(tupple)
#         count+=1
def countConsecutive(array, lengthOfArray):

 
     for i in range(lengthOfArray - 2):
 
         # If consecutive elements are same
         if (array[i] == array[i + 1]==array[i+2]6):
             return True
         else:
             return False
                
     
for a in range(1,7):
    for b in range(1,7):
        for c in range(1,7):
            for d in range(1,7):
                for e in range(1,7):
                    for f in range(1,7):
                        for g in range(1,7):
                            for h in range(1,7):
                                for i in range(1,7):
                                    for j in range(1,7):
                                        for k in range(1,7):
                                            for l in range(1,7):
                                                for m in range(1,7):
                                                    for n in range(1,7):
                                                        for o in range(1,7):
                                                            for p in range(1,7):
                                                                for q in range(1,7):
                                                                    for r in range(1,7):
                                                                        for s in range(1,7):
                                                                            for t in range(1,7):
                                                                                for u in range(1,7):
                                                                                    for v in range(1,7):
                                                                                        for w in range(1,7):
                                                                                            for x in range(1,7):
                                                                                                for y in range(1,7):
                                                                                                    for z in range(1,7):
                                                                                                        for aa in range(1,7):
                                                                                                            for ab in range(1,7):
                                                                                                                for ac in range(1,7):
                                                                                                                    for ad in range(1,7):
                                                                                                                        for ae in range(1,7):
                                                                                                                            for  ad in range(1,7):
                                                                                                                                for  ae in range(1,7):
                                                                                                                                    for  af in range(1,7):
                                                                                                                                        for  ag in range(1,7):
                                                                                                                                            for  ah in range(1,7):
                                                                                                                                                for  ai in range(1,7):
                                                                                                                                                    for  aj in range(1,7):
                                                                                                                                                        for  ak in range(1,7):
                                                                                                                                                            for  al in range(1,7):
                                                                                                                                                                for  am in range(1,7):
                                                                                                                                                                    for  an in range(1,7):
                                                                                                                                                                        for  ao in range(1,7):
                                                                                                                                                                            for  ap in range(1,7):
                                                                                                                                                                                for  aq in range(1,7):
                                                                                                                                                                                    for  ar in range(1,7):
                                                                                                                                                                                        for  As in range(1,7):
                                                                                                                                                                                            for  at in range(1,7):
                                                                                                                                                                                                for  av in range(1,7):
                                                                                                                                                                                                    for  aw in range(1,7):
                                                                                                                                                                                                        for  ax in range(1,7):
                                                                                                                                                                                                            for  ay in range(1,7):
                                                                                                                                                                                                                for  az in range(1,7):
                                                                                                                                                                                                                    for  ba in range(1,7):
                                                                                                                                                                                                                        for  bb in range(1,7):
                                                                                                                                                                                                                            for  bc in range(1,7):
                                                                                                                                                                                                                                for  bd in range(1,7):
                                                                                                                                                                                                                                    for  be in range(1,7):
                                                                                                                                                                                                                                        for  bf in range(1,7):
                                                                                                                                                                                                                                            for  bg in range(1,7):
                                                                                                                                                                                                                                                for  bh in range(1,7):
                                                                                                                                                                                                                                                    for  bi in range(1,7):
                                                                                                                                                                                                                                                        for  bj in range(1,7):
                                                                                                                                                                                                                                                            for  bk in range(1,7):
                                                                                                                                                                                                                                                                for  bl in range(1,7):
                                                                                                                                                                                                                                                                    for  bm in range(1,7):
                                                                                                                                                                                                                                                                        for  bn in range(1,7):
                                                                                                                                                                                                                                                                            for  bo in range(1,7):
                                                                                                                                                                                                                                                                                for  bp in range(1,7):
                                                                                                                                                                                                                                                                                    for  bq in range(1,7):
                                                                                                                                                                                                                                                                                        for  br in range(1,7):
                                                                                                                                                                                                                                                                                            for  bs in range(1,7):
                                                                                                                                                                                                                                                                                                for  bt in range(1,7):
                                                                                                                                                                                                                                                                                                    for  bu in range(1,7):
                                                                                                                                                                                                                                                                                                        for  bv in range(1,7):
                                                                                                                                                                                                                                                                                                            for  bw in range(1,7):
                                                                                                                                                                                                                                                                                                                for  bx in range(1,7):
                                                                                                                                                                                                                                                                                                                    for  by in range(1,7):
                                                                                                                                                                                                                                                                                                                        for  bz in range(1,7):
                                                                                                                                                                                                                                                                                                                            for  ca in range(1,7):
                                                                                                                                                                                                                                                                                                                                for  cb in range(1,7):
                                                                                                                                                                                                                                                                                                                                    for  cc in range(1,7):
                                                                                                                                                                                                                                                                                                                                        for  cd in range(1,7):
                                                                                                                                                                                                                                                                                                                                            for  ce in range(1,7):
                                                                                                                                                                                                                                                                                                                                                for  cf in range(1,7):
                                                                                                                                                                                                                                                                                                                                                    for  cg in range(1,7):
                                                                                                                                                                                                                                                                                                                                                        for  ch in range(1,7):
                                                                                                                                                                                                                                                                                                                                                            for  ci in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                for  cj in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                    for  ck in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                        for  cl in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                            for  cm in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                for  cn in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                    for  co in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                        for  cp in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                            for  cq in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                                for  cr in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                                    for cs in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                                        for ct in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                                            for cu in range(1,7):
                                                                                                                                                                                                                                                                                                                                                                                                                arr1 = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,q,x,y,z,aa,ab,ac,af,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,As,at,av,aw,ax,ay,az,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu]
                                                                                                                                                                                                                                                                                                                                                                                                                if countConsecutive(arr1,len(arr1)) == True:
                                                                                                                                                                                                                                                                                                                                                                                                                    count+=1
                                                                                                                                                                                                                                                                                                                                                                                                                arr.append(arr1)                               


                                                                                                                            
                                                                                                            
         
                                                                                        
    






print(count/pow(6,100))


    

这里有更简单的方法:

import  random

sixs = []
counter = 0
for i in range(100):
    for x in range(3):
        if random.randint(1,6) == 6:
            sixs.append(x)
    if len(sixs) == 3:
        counter = counter +1
    sixs = []
print(str(counter) + "%")

导入模块random。并创建空 list,在本例中为 sixs[]counterFor 循环将 运行 100 次,在 for 循环内你将有另一个 for lopp,它将 运行 3 次并检查 if random.randint(1,6) == 6:。如果生成的random数是6,append它就变成sixs[] list。当第二个循环完成时,它将检查数字 6 是否被附加了 3 次,如果是,它将 counter 增加 1。在代码末尾,它将打印百分比。

[编辑]

只缺少一行代码,用于在迭代结束时将 list 重置回 0。该行是 sixs[] = []

您不需要为此进行任何编码虚拟实验。这个概率很容易计算。

如果你认为你拿三个骰子并掷它们得到三六的概率是 (1/6)³ = 1/216。所以没有三六的概率是 215/216。如果你重复一百次三个骰子都不是六个的概率甚至一次是 (215/216)^100 ≃ 0.6287。所以 100 次掷出三六的概率是 1-0.6287 = 0.3713 ≃ 37.1%.

掷骰子一百次并检查是否连续三个的场景几乎相同。稍微小一些,因为前两轮不可能有连续的 6,所以基本上我们有 98 次尝试。 1 - (215/216)^98 ≃ 0.3654 ≃ 36.5%

如果您想编写代码进行测试,这里有一个选项。

import random
def try100rolls():
  """
  Returns true if there is three consecutive sixs 
  """
  sixcount = 0
  for i in range(100):
    if random.randint(1,6) == 6:
      sixcount += 1
      if sixcount == 3:
         return True
    else:
       sixcount = 0
  return False


def test(times):
  """
  Do hundred roll test n times. Returns persentage how many times you got three six on row
  """
  successcount=0
  for i in range(times):
    if try100rolls():
       successcount += 1
  return successcount/times
     

您进行的测试运行次数越多,结果就越接近数学计算值。出于某种原因,当 运行 100 次测试运行时,我得到的概率比正确值略小。可能和Python随机class有关,或者我算错了。或者只是改变。