2017-05-22 3 views
2

ドアの選択肢を変更した人が10,000回の反復で勝つ(車に乗る)可能性が高い回数を数えようとしています。私の範囲やカウンターのフォーマットが間違っているかどうか(あるいはその両方)はわかりません。私がカウンターを印刷しようとするまで、コードは機能していたように見えました。その結果、1のリストが作成されました。beginner python:monty hall&counter出力

for i in range (10000): 

    doors = ["goat"] + ["goat"] + ["car"] 
    rn.shuffle(doors) 

    persons_choice = rn.randint(0,2) 
    persons_choice1 = str(doors[persons_choice]) 

    if persons_choice1 == "goat": 
     monty_choice = "goat" 
    elif persons_choice1 == "car": 
     monty_choice = "goat" 

    if persons_choice1 == "car": 
     doornumber3 = "goat" 
    elif persons_choice1 == "goat": 
     doornumber3 = "car" 

    final_options = [persons_choice1] + [doornumber3] 
    rn.shuffle(final_options) 
    final_choice = rn.randint(0,1) 
    thefinal_choice = str(final_options[final_choice]) 

    counter = 0 
    if thefinal_choice == "car": 
     if str(persons_choice1) != str(thefinal_choice): 
      counter += 1 
      print counter 
+1

いくつかのことは意味をなさない。たとえば、persons_choice1は山羊または車のみになり、いずれにせよ、monty_choiceを山羊に設定します。 –

+1

各繰り返しでカウンタを0にリセットします。ループの前に1回だけ行います。 –

答えて

2

範囲は正しく設定されています。あなたはあなたのcounterがどこにあるかは問題です。

forループは、毎回forステートメントの下に字下げされたすべてのコードをループ内で実行します。カウンタを0 に初期化するとループはになるので、印刷する唯一の時間は0に初期化されてから、counter += 1という行が1つ追加されます。初期化と解答の両方をループから外してください。投稿したコードを使用した例を次に示します。

counter = 0 

for i in range (10000): 

    doors = ["goat"] + ["goat"] + ["car"] 
    rn.shuffle(doors) 

    persons_choice = rn.randint(0,2) 
    persons_choice1 = str(doors[persons_choice]) 

    if persons_choice1 == "goat": 
     monty_choice = "goat" 
    elif persons_choice1 == "car": 
     monty_choice = "goat" 

    if persons_choice1 == "car": 
     doornumber3 = "goat" 
    elif persons_choice1 == "goat": 
     doornumber3 = "car" 

    final_options = [persons_choice1] + [doornumber3] 
    rn.shuffle(final_options) 
    final_choice = rn.randint(0,1) 
    thefinal_choice = str(final_options[final_choice]) 

    if thefinal_choice == "car": 
     if str(persons_choice1) != str(thefinal_choice): 
      counter += 1 

print counter 

注:このコードにはまだ他の問題があります。 monty_choiceの計算には少し努力しますが、現在は常に「ヤギ」ですが、monty_choiceを使用しないため、おそらく問題はありません。

次のifブロックのロジックも疑問です。persons_choice1が車だった場合、ドア3は間違いなくヤギになります。しかし、もし人の選択がヤギであれば、どうしたらいいのですか?その場合、carに2つのチャンスがあります。また、あなたの最後のif文は、その人がdoornumber3の選択肢を取らずに車に勝ったときにだけ、カウンターを増やしています。それがあなたの意図かどうかは分かりません。