首页 > 解决方案 > 要找出有多少百分比的硬币翻转包含连续六个正面或反面的条纹?

问题描述

我正在做“用 Python 自动化无聊的东西”的练习题,我遇到了这个问题。编写一个程序,找出在随机生成的正面和反面列表中出现六个正面或六个反面的频率。

1.第一部分生成随机选择的“正面”和“反面”值列表 2.第二部分检查其中是否有条纹。

将所有这些代码放在一个循环中,重复实验 10,000 次,这样我们就可以找出有多少百分比的硬币翻转包含连续六个正面或反面的条纹。

这是我到目前为止所做的:

import random
myList = []
n = int(input('How many times do you want to toss the coin : '))
i = 0
while i <= n :
    outcome = random.randint(0,1)
    if outcome == 0 :
        toss = 'H'
        myList.append(toss)
    elif outcome == 1 :
        toss = 'T'
        myList.append(toss)
    i += 1

headStreak = 0
total_H_Streak = 0

for i in myList :
    if i == 'H' :
        headStreak += 1
        if headStreak == 6 :
            total_H_Streak += 1
    else :
        headStreak = 0
print('The streak of 6 heads in a row is : ',total_H_Streak)
tailStreak = 0
total_T_Streak = 0
for j in myList :
    if j == 'T' :
        tailStreak += 1
        if tailStreak == 6 :
            total_T_Streak += 1
    else :
        tailStreak = 0
print('The Streak of 6 tails in a row is : ',total_T_Streak)

虽然我认为这段代码是正确的,但我想知道是否有其他方法可以解决这个问题。任何建议表示赞赏。

标签: python-3.x

解决方案


当我从《用 Python 自动化无聊的东西》一书中解决实践问题时,我遇到了这个问题。编写一个程序,找出在随机生成的正面和反面列表中出现六个正面或六个反面的频率。

我采用的方法包括将问题分解为两个子部分,第一部分生成随机选择的“正面”和“反面”值列表,第二部分检查其中是否存在条纹。将所有这些代码放在一个循环中,重复实验 10,000 次,这样我们就可以找出有多少百分比的硬币翻转包含连续六个正面或反面的条纹。

这是我到目前为止所做的:

import random
numberOfStreaks = 0
for experimentNumber in range(10000):
    # Code that creates a list of 100 'heads' or 'tails' values.
    experimentOutcomes =[]
    for i in range(100):
        if random.randint(0,1) == 0:
            experimentOutcomes.append('H')
        else:
            experimentOutcomes.append('T')

    #print(experimentOutcomes)



    # Code that checks if there is a streak of 6 heads or tails in a row.
    for i in range(len(experimentOutcomes)):
        count = 0
        for j in range(6):
            try: # at item 95, Python will report error Index out of range which can be ignored.
                if experimentOutcomes[i] == experimentOutcomes[i+j]:
                    count += 1
                else:
                    break
            except IndexError:
                break


        if count == 6:
            numberOfStreaks += 1



print('The percentage of the coin flips that contain a streak of six heads or tails in a row: ' + str((numberOfStreaks / (10000*95))*100) +'%')

我是如何计算百分比的?对于连续抛硬币 100 次的实验,有 95 个这样的可能的条纹 6。对于重复 10000 次实验,将 10000 乘以 95。所以这些是长度为 6 的条纹的总可能结果。所以,我们将实际结果除以可能结果的数量来找到概率。


推荐阅读