「プログラミングのための確率統計」を読む : 1章 モンティホール問題のシュミレーション
Pythonでシュミレーション
回答者が選びなおさない場合
from numpy import * ok = 0 ng = 0 for num in range(1, 10000): door = ["a", "b", "c"] answer = random.choice(door) choice = random.choice(door) if answer == choice: ok += 1 else: ng += 1 print "ok = " + str(ok) print "ng = " + str(ng)
結果は、
ok = 3393 ng = 6606
回答者が選びなおさない場合
from numpy import * ok = 0 ng = 0 for num in range(1, 10000): door = ["a", "b", "c"] answer = random.choice(door) choice = random.choice(door) incorrectanswer = "" # 回答者が正解だった場合は、不正解の選択肢しかのこらない if answer == choice: door.remove(choice) # 選択されなかった扉から司会者が不正解の扉をひとつ選ぶ incorrectanswer = random.choice(door) # 回答者が不正解だった場合は、正解の選択肢しかのこらない else: door.remove(choice) door.remove(answer) # 選択されなかった扉から司会者が不正解の扉をひとつ選ぶ。 incorrectanswer = random.choice(door) door.append(answer) # 司会者が不正解の扉を開く。回答者が最初の選択で不正解だった場合は、この時点で正解の選択肢しかのこらない door.remove(incorrectanswer) choice = random.choice(door) if answer == choice: ok += 1 else: ng += 1 print "ok = " + str(ok) print "ng = " + str(ng)
結果は、
ok = 6639 ng = 3360