0

コイン トス シーケンスをシミュレートし、所定の長さの表 (または裏) の連続を取得するために何回試行する必要があるかを監視する必要があります。言い換えれば、連続して 3 回表が出るには、コイントスの回数を数える必要があります。スクリプトが連続記録を達成したら、連続記録 4 と連続記録 5 についても同じことを行う必要があります。

私はこのようなもので試しました:

def main():
    import random

    attemps = [4, 5, 6]  # length of the streaks we want to achieve
    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

しかし、もちろん、それは私が望むことをしません。これには 2 つの問題があります。

  1. コインの値が 1 になると終了しますが、ストリークが完了するまで再試行しません。

  2. 「試行」リストの最初の数、つまり 4 だけをテストします。

これを解決する方法が本当にわかりません。

4

2 に答える 2

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.
于 2013-04-02T10:42:25.357 に答える
0

関数から返される 'return False' の代わりに、break を試してください。これにより、現在のループ反復が終了します。

if y != 0:
     break
于 2013-04-02T10:05:05.147 に答える