import random as rd
n = 0
ListOfStreaks = []
ListOfResults = []
while n != 10:
numberOfStreaks = 0
for i in range(100):
Flip = rd.randint(0,1)
ListOfResults.append(Flip)
for i in range(96):
count = 0
for j in range(6):
if ListOfResults[i] == ListOfResults[i + j]:
count += 1
if count == 6:
numberOfStreaks += 1
count = 0
else:
continue
else:
break
ListOfStreaks.append(numberOfStreaks)
n += 1
print(ListOfStreaks)
print(len(ListOfResults))在上面的代码中,我能够成功地抛硬币100次,并检查在100次翻转中有多少次出现了连续六次的正面或尾巴。我无法正确地设置代码来运行实验10次,以检查在每个单个实验中有多少次出现了连续六次的Heads或Tails。我们的目标是不是连续抛硬币1000次,而是连续10次抛100枚硬币。
该练习的重点是稍后能够模拟实验10,000次,以了解头部或尾巴在100次翻转中连续出现6次的概率。从本质上讲,我试图收集足够的样本大小。虽然有实际的统计/概率方法来获得确切的答案,但这不是我试图关注的。
发布于 2021-11-15 14:39:10
您的关键问题似乎是在while循环之外使用了ListOfResults = [],因此每次运行都会向列表中添加100个条目,而不是设置一个新的测试。
我已经用一个列表理解替换了最初的for循环,它每次都会设置一个新的样本。
import random as rd
list_of_streaks = []
for _ in range(10):
list_of_results = [rd.randint(0,1) for _ in range(100)]
number_of_streaks = 0
for i in range(96):
if sum(list_of_results[i: i+6]) in(0, 6):
number_of_streaks += 1
list_of_streaks.append(number_of_streaks)
print(list_of_streaks)
print(len(list_of_results))您也不需要内部for循环来将所有6次翻转相加-您可以将它们相加,看看总和是6还是0。你似乎刚刚测试了正面-我测试了6个相同的翻转,无论是正面还是反面,但你可以很容易地进行调整。
如果您正在迭代一组迭代次数,那么使用带有范围的for循环也比使用计数器的while容易得多。
来自@JonSG的第一条评论也值得注意。如果您已经将单个测试设置为一个函数,则必须在函数中使用ListOfResults = [],因此每次都会得到一个包含100个结果的新样本。类似于:
import random as rd
def run_test():
list_of_results = [rd.randint(0,1) for _ in range(100)]
number_of_streaks = 0
for i in range(96):
if sum(list_of_results[i: i+6]) in(0, 6):
number_of_streaks += 1
return number_of_streaks
print([run_test() for _ in range(10)])
print(len(list_of_results))https://stackoverflow.com/questions/69975533
复制相似问题