找到硬币条纹的百分比

2024-06-25 23:12:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图编写一个程序,以找出随机生成的100个正面和反面的列表中,六个正面或六个反面的条纹出现的频率,并重复这10000次,以发现投币的百分比包含一行六个正面或反面的条纹

我的代码是这样的,它是某种工作方式**我想知道的是,它是否给出了正确的结果:*

import random
numberOfStreaks = 0
# Code that creates a list of 100 'heads' or 'tails' values.
for experimentNumber in range(10000):
    results = []
    for experiment in range(100):
        x = random.randint(1, 2)
        if x == 1:
            results.append('H')
        else:
            results.append('T')
    # Code that checks if there is a streak of 6 heads or tails in a row.
    currentStreak = 0
    previousResult = results[0]

    for result in results:
        if currentStreak == 6:
            numberOfStreaks += 1
            currentStreak = 0
        if result == previousResult:
            currentStreak += 1
            previousResult = result

print('Chance of streak: %s%%' % (numberOfStreaks / 100))

Tags: orofinforifthatcoderandom
3条回答

在您的代码中,您正在计算每套结果中的总体条纹数,然后将其除以100进行打印。那不是你想找到的

您要检查有多少实验包含6条或更高的条纹

这是我的刺拳

首先,让我们做个实验

import random

number_of_flips = 100
number_of_experiments = 10000
streak_length = 6
streaks = 0

事先设置这些参数总是好的,这样在调整时就可以更改它们

for experiment in range(number_of_experiments):
    # We want number_of_flips random values of 0 and 1 
    # (0 - head, 1 tails)
    flips = [random.randint(0, 1) for _ in range(number_of_flips)]

    # Now we want to see if we find any streaks of streak_length
    heads_streak = 0
    tails_streak = 0

    for i in flips:

      if i == 0:
        heads_streak += 1
        tails_streak = 0
        if heads_streak >= streak_length:
          streaks += 1
          break

      if i == 1:
        heads_streak = 0
        tails_streak += 1
        if tails_streak >= streak_length:
          streaks += 1
          break

    # At this point, if we found a streak, streaks grew by 1,
    # and if not, it remains unchanged

现在我们有很多实验在streaks中发现了条纹

我们可以用它除以实验次数,再乘以100

print(streaks / number_of_experiments * 100, "%")

你需要将你得到的条纹数除以10000个实验中可能出现的条纹数,我相信这就是出现条纹的概率

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%

相关问题 更多 >