自动化无聊的事情 \- 硬币翻转条纹

新手上路,请多包涵

我知道现在有很多关于它的问题,即使是同一个问题,但我想我尝试了一些不同的方法。

据我所知,任务是对 10.000 个样本进行 100 次翻转,然后计算所有样本出现 6 次正面或反面条纹的概率。但是在之前的问题中,编码问题被描述为有点模糊。因此,如果你们能指出代码中的错误,那就太好了:)

我试着尽可能地懒惰,这导致我的 macbook 工作非常努力。这是我的代码。我对当前值与之前值的比较的第一次迭代有问题吗(据我所知,我会将索引 -1(然后是索引 100?)与当前值进行比较?)

 import random

#variable declaration

numberOfStreaks = 0
CoinFlip = []
streak = 0

for experimentNumber in range(10000):
    # Code that creates a list of 100 'heads' or 'tails' values.
    for i in range(100):
        CoinFlip.append(random.randint(0,1))
    #does not matter if it is 0 or 1, H or T, peas or lentils. I am going to check if there is multiple 0 or 1 in a row

    # Code that checks if there is a streak of 6 heads or tails in a row.
    for i in range(len(CoinFlip)):
        if CoinFlip[i] == CoinFlip[i-1]:  #checks if current list item is the same as before
            streak += 1
        else:
            streak = 0

        if streak == 6:
            numberOfStreaks += 1

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

我在哪里弄得一团糟?我真的看不出来!

原文由 mr_harm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 632
2 个回答

您需要重置 CoinFlip 列表。您当前的程序只是不断地附加到 CoinFlip,这使得列表非常长。这就是你的表现不好的原因。我还添加了一个 i==0 的检查,这样您就不会与列表的末尾进行比较,因为从技术上讲,这不是连胜的一部分。

 for experimentNumber in range(10000):
    # Code that creates a list of 100 'heads' or 'tails' values.
    for i in range(100):
        CoinFlip.append(random.randint(0,1))
    #does not matter if it is 0 or 1, H or T, peas or lentils. I am going to check if there is multiple 0 or 1 in a row

    # Code that checks if there is a streak of 6 heads or tails in a row.
    for i in range(len(CoinFlip)):
        if i==0:
            pass
        elif CoinFlip[i] == CoinFlip[i-1]:  #checks if current list item is the same as before
            streak += 1
        else:
            streak = 0

        if streak == 6:
            numberOfStreaks += 1

    CoinFlip = []

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

我还认为你需要除以 100*10000 才能得到真正的概率。我不确定为什么他们的 “提示” 建议只除以 100。

原文由 Stuart 发布,翻译遵循 CC BY-SA 4.0 许可协议

我开始变得更复杂,现在看到你的代码我想我无法想出更复杂的“逻辑”:)

找不到写第二部分的工作思路!

 import random

number_of_streaks = 0
coin_flips = []
streak = 0

for experiment_number in range (10000):
    # Code that creates a list of 100 'heads' and 'tails' values

def coin(coin_fl):  # Transform list into plain H or T
    for i in coin_flips[:-1]:
        print(i + ' ', end = '')

for i in range(100):    # Generates a 100 coin tosses
    if random.randint(0, 1) == 0:
        coin_head = 'H'
        coin_flips = coin_flips + [coin_head]
    else:
        coin_tail = 'T'
        coin_flips = coin_flips + [coin_tail]

coin(coin_flips)

原文由 Florin Baci 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进