Python 2.7 模拟多个抛硬币条纹
首先,我想为我的英语不好道歉。这肯定无助于描述我需要解决的问题。。。我们还是试试吧 我需要模拟一个抛硬币序列,并监控我必须做多少次尝试才能获得一条预定长度的正面(或反面)。 换句话说,我需要数一数我需要多少抛硬币才能有一个连续的3个头。一旦脚本完成该连胜,它应该对4连胜和5连胜执行相同的操作 我尝试过这样的东西:Python 2.7 模拟多个抛硬币条纹,python-2.7,Python 2.7,首先,我想为我的英语不好道歉。这肯定无助于描述我需要解决的问题。。。我们还是试试吧 我需要模拟一个抛硬币序列,并监控我必须做多少次尝试才能获得一条预定长度的正面(或反面)。 换句话说,我需要数一数我需要多少抛硬币才能有一个连续的3个头。一旦脚本完成该连胜,它应该对4连胜和5连胜执行相同的操作 我尝试过这样的东西: def main(): import random attemps = [4,5,6] # lenght of the streaks we want to acheive for
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
我真的不知道怎么解决这个问题
谢谢 不要使用将从函数返回的“return False”,而是尝试break-这将退出当前循环迭代
if y != 0:
break
我重写了你的函数
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.
顺便说一句,你的英语很棒:)。谢谢!通过这种方式,它确实会按照我的要求重试,但我可以从输出中看到,一旦它连续完成四个“0”,它将继续与列表attemps=[4,5,6]的第一个值循环。知道它如何以该值停止并切换到下一个值(即5)吗。再次感谢!