首先,我想为我糟糕的英语道歉。它肯定无法帮助描述我需要解决的问题......无论如何我们都试试。
我需要模拟一个抛硬币投掷序列,并监控我需要做多少尝试才能获得预先测定长度的条纹(或尾部)条纹。 换句话说,我需要计算我需要多少次投掷硬币才能拥有3个头的连续条纹。一旦脚本完成了条纹,它应该对4条纹和5条条纹执行相同的操作。
我确实试过这样的事情:
def main():
import random
attemps = [4,5,6] # lenght of the streaks we want to acheive
for item in attemps:
mylist = list(xrange(item))
while True:
for i in mylist:
y = random.randint(0,1) # 0 as head, 1 as tail
print i,y
if y != 0:
return False
但当然它没有做我想要的。它有两个问题:
1)一旦硬币值为1,它就会退出,但只要条纹完成,它就不会再次尝试。
2)它仅测试第一个“尝试”列表,即4个
我真的不知道如何解决这个问题。
谢谢!
答案 0 :(得分:2)
我重写了你的功能
import random
def main(n):
""" Returns number of flips needed
to get n heads in a row """
mylist = ['heads','tails']
cnt = 0
while 1:
if [random.choice(mylist) for _ in range(n)].count('heads') == n:
return cnt
else:
cnt +=1
然后你可以做
>>> for i in range(4,7):
... main(i)
...
12
18
29 # All values are completely random, this just happens to be what I got.
顺便说一下,你的英语很棒:)。
答案 1 :(得分:0)
而不是'return False',它将从函数返回,尝试break而不是 - 这将退出当前的循环迭代。
if y != 0:
break