3 回答
TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
當(dāng)您獲得第 7 次正面或反面重復(fù)時(shí),應(yīng)將其計(jì)為連續(xù),因?yàn)樽詈?6 次翻轉(zhuǎn)確實(shí)形成了連續(xù)。通過(guò)在 6 之后重置計(jì)數(shù),您低估了條紋的數(shù)量。
從概率的角度來(lái)看,您打印的結(jié)果不是“機(jī)會(huì)”的度量(永遠(yuǎn)不會(huì)超過(guò) 100%),而是更接近數(shù)學(xué)期望(即期望值的總和乘以它們各自的概率)。您的代碼會(huì)生成實(shí)際嘗試的樣本,但計(jì)算沒(méi)有意義,除非它們可以與適當(dāng)?shù)母怕蕯?shù)字進(jìn)行比較。
以下是我將如何實(shí)現(xiàn)此采樣并表達(dá)結(jié)果:
import random
from itertools import accumulate
expCount = 10000
expSize = 100
streakSize = 6
numberOfStreaks = 0
for experimentNumber in range(expCount):
results = [random.choice("HT") for _ in range(expSize)]
consec = [int(a==b) for a,b in zip(results,results[1:])]
streaks = sum( s+1>=streakSize for s in accumulate(consec,lambda s,m:s*m+m))
numberOfStreaks += streaks
ratio = numberOfStreaks / expCount
print(f'Obtained {numberOfStreaks} streaks of {streakSize} head/tail on {expCount} runs of {expSize} flips. On average {ratio:.2f} streaks per run')
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
import random
numberOfStreaks = 0
numberOfExperiments = 10000
numberOfAttemps = 100
for experimentNumber in range(numberOfExperiments):
# Code that creates a list of {numberOfAttemps} 'heads' or 'tails' values.
coinFlip = []
for i in range(numberOfAttemps):
if random.randint(0, 1) == 0:
coinFlip.append("H")
else:
coinFlip.append("T")
# Code that checks if there is a streak of 6 heads or tails in a row.
for i in range(len(coinFlip)):
if (["H"] * 6) in [coinFlip[i:i+6]] or (["T"] * 6) in [coinFlip[i:i+6]]:
numberOfStreaks += 1
for n in range(5):
coinFlip.pop(i)
print('Chance of streak: %s%%' % (numberOfStreaks / numberOfExperiments))
輸出:
Chance of streak: 1.5143%
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
import random, time
numberOfStreaks = 0
for experimentNumber in range(10000):
# Code that creates a list of 100 'heads' or 'tails' values.
List = []
for value in range(100):
value = random.randint(0,1)
if value == 0:
List.append('H')
if value == 1:
List.append('T')
# print('List = ', end=' ')
# print(List)
# Code that checks if there is a streak of 6 heads or tails in a row.
sixStreakHeads = 0
sixStreakTails = 0
for result in range(len(List)):
if List[result] == 'H':
sixStreakHeads += 1
sixStreakTails = 0
if sixStreakHeads == 6:
sixStreakHeads = 0
numberOfStreaks += 1
if List[result] == 'T':
sixStreakTails += 1
sixStreakHeads = 0
if sixStreakTails == 6:
sixStreakTails = 0
numberOfStreaks += 1
# print('Six Streak Heads: ', sixStreakHeads)
# print('Six Streak Tails: ', sixStreakTails)
# time.sleep(.5)
# print('\n\n\n')
print('Chance of streak: ', numberOfStreaks / 10000 * 100, '%')
添加回答
舉報(bào)
