Python - 6 或更多的概率 Tails/Heads 代码
Python - Probability of 6 or more Tails/Heads Code
我让我的 comp sci 学生编写一段代码,模拟抛硬币 100 次,并将结果存储在列表中。寻找 6 次正面(或更多)或 6 次反面(或更多)的连胜。如果您发现连胜,则认为试验成功。重复此实验 10,000 次。用它来确定连续出现 6 次正面或 6 次反面的概率。
理论上这个概率应该是~80%。
编辑:我可能误解了这个理论概率。我在这里找到了这个概率:https://math.stackexchange.com/questions/2736117/what-is-the-probability-of-getting-6-or-more-heads-or-tails-in-a-row-after-flipp
我的代码给出了大约 54% 的概率,即恰好连续获得 6 个的概率。但是,如果我连续获得 7、8、9 或更多,我的代码应该将其标记为成功,对吗?
我知道我的代码会检查 6 个牛排,但如果连续出现 7、8、9...,它仍将标记为成功。这里一定有我遗漏的东西...
附上我的代码:
import random
numberofstreaks = 0
for experimentnumber in range(10000):
result = []
for i in range(100):
flip = random.randint(0,1)
result.append(flip)
for i in range(len(result)-6):
if result[i:i+6] == ([0,0,0,0,0,0] or [1,1,1,1,1,1]):
numberofstreaks += 1
break
print(numberofstreaks)
print('Chance of steak:',(numberofstreaks/100))
注意:他们目前正在学习列表,这就是为什么他们的代码必须包含列表的使用。
提前致谢!
据我了解,您的代码没有考虑给定的 100 次抛硬币中的多次连胜。
你可以通过将 i 移动 6 个位置来做到这一点,一旦它找到一个条纹,这样它就不会将 >6 的条纹计为多个条纹。
稍作更正:
import random
numberofstreaks = 0
for experimentnumber in range(10000):
result = []
for i in range(100):
flip = random.randint(0,1)
result.append(flip)
for i in range(len(result)-6):
if result[i:i+6] == [0,0,0,0,0,0] or result[i: i+6] == [1,1,1,1,1,1]:
numberofstreaks += 1
break
print(numberofstreaks)
print('Chance of steak:',(numberofstreaks/100))
答案现在是80.22%
。 (A or B)
returns A,如果不能推导出A为假,否则B。所有0s
的列表不是False
。所以你只检查了 0s
.
的条纹
我让我的 comp sci 学生编写一段代码,模拟抛硬币 100 次,并将结果存储在列表中。寻找 6 次正面(或更多)或 6 次反面(或更多)的连胜。如果您发现连胜,则认为试验成功。重复此实验 10,000 次。用它来确定连续出现 6 次正面或 6 次反面的概率。
理论上这个概率应该是~80%。
编辑:我可能误解了这个理论概率。我在这里找到了这个概率:https://math.stackexchange.com/questions/2736117/what-is-the-probability-of-getting-6-or-more-heads-or-tails-in-a-row-after-flipp
我的代码给出了大约 54% 的概率,即恰好连续获得 6 个的概率。但是,如果我连续获得 7、8、9 或更多,我的代码应该将其标记为成功,对吗?
我知道我的代码会检查 6 个牛排,但如果连续出现 7、8、9...,它仍将标记为成功。这里一定有我遗漏的东西...
附上我的代码:
import random
numberofstreaks = 0
for experimentnumber in range(10000):
result = []
for i in range(100):
flip = random.randint(0,1)
result.append(flip)
for i in range(len(result)-6):
if result[i:i+6] == ([0,0,0,0,0,0] or [1,1,1,1,1,1]):
numberofstreaks += 1
break
print(numberofstreaks)
print('Chance of steak:',(numberofstreaks/100))
注意:他们目前正在学习列表,这就是为什么他们的代码必须包含列表的使用。
提前致谢!
据我了解,您的代码没有考虑给定的 100 次抛硬币中的多次连胜。 你可以通过将 i 移动 6 个位置来做到这一点,一旦它找到一个条纹,这样它就不会将 >6 的条纹计为多个条纹。
稍作更正:
import random
numberofstreaks = 0
for experimentnumber in range(10000):
result = []
for i in range(100):
flip = random.randint(0,1)
result.append(flip)
for i in range(len(result)-6):
if result[i:i+6] == [0,0,0,0,0,0] or result[i: i+6] == [1,1,1,1,1,1]:
numberofstreaks += 1
break
print(numberofstreaks)
print('Chance of steak:',(numberofstreaks/100))
答案现在是80.22%
。 (A or B)
returns A,如果不能推导出A为假,否则B。所有0s
的列表不是False
。所以你只检查了 0s
.