2017-04-20 19 views
0

私はちょうどPythonを使い始めていて、問題に遭遇しました。私はコインフリップをシミュレートする関数を書いています。 randint関数をテストするモックコードを書いたところ、完全に正常に動作し、頭や尾の素敵なランダムシーケンスが返されました。しかし、私のプログラムで使用しようとしているコードは、hまたはtのみを返します。randintは同じ番号を何度も何度も返します

import random 

coin_sequence = "hhththththhhhttthht" 
generated_sequence = "" #define generated_sequence 
length = len(coin_sequence) 
flip = random.randint(0, 1) 
for value in range(length): 
    if flip == 0: 
     generated_sequence = generated_sequence + "t" 
    else: 
     generated_sequence = generated_sequence + "h" 

print(generated_sequence) 

私はおそらくいくつかの本当に愚かなミスを犯しました。誰が私を助けられるか?

+2

:あなたがもう少し簡潔にそのループを書くことができ

for value in range(length): flip = random.randint(0, 1) if flip == 0: generated_sequence = generated_sequence + "t" else: generated_sequence = generated_sequence + "h" 

注意を'randint()'は、** once **を使って番号を生成するよう求められます。同じ番号を何度も何度も確認します。 –

+0

あなたは 'randint'の戻り値を一度キャッシュするので、新しい数値は決して再生成されません。新しい番号を取得するには、もう一度呼び出す必要があります – Li357

答えて

2

あなただけrandom.randint()が一度、ループが始まる前に呼び出す:

flip = random.randint(0, 1) 
for value in range(length): 
    # ... 

その呼び出しは整数オブジェクトを返します。その整数を繰り返しループ内でチェックすることは、それが元々どのような関数を生成したとしても、その値を変更しません。

新しい乱数を取得したい場合は、ループで1 を生成するためにrandom.randint()を頼む:

for value in range(length): 
    flip = random.randint(0, 1) 
    generated_sequence += "t" if flip == 0 else "h" 
関連する問題