I know there's tons of questions about it by now, even for the same problem, but I think I tried a bit of a different approach.
The task is to to 10.000 samples of 100 flips each and then compute the probability of a 6x heads or tails streak over all the samples - as far as I understand it. But in previous questions the coding problem was described as a bit fuzzy. Therefore, if you guys could just point out the errors in the code, that would be nice :)
I tried to be as lazy as possible which results in my macbook working really hard. This is my code. Do I have a problem with the first iteration of the comparison of current value to value before (as far as I understand it, I would compare index -1 (which then is index 100?) to the current one?)
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))
Where did I make the mess? I can't really see it!
You need to reset the CoinFlip list. Your current program just keeps appending to CoinFlip, which makes for a very long list. This is why your performance isn't good. I also added a check for i==0 so that you're not comparing to the end of the list, because that's not technically part of the streak.
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)))
I also think you need to divide by 100*10000 to get the real probability. I'm not sure why their "hint" suggest dividing by only 100.