2016-03-22 11 views
0

私は誰かがドアを選択し、ランダムなものが取り除かれたところでモンティホール問題をシミュレートしようとしています - 最終的には、選択しなければならない。現時点ではシミュレートする必要はありませんが、どのドアを使用しているかを尋ねる人は、実際に計算を設定するのに問題があります。私はあるが、約66%Monty Hall Pythonシミュレーション計算

import random 

doors=[0,1,2] 
wins=0 

car=random.randint(0,2) 
player=random.randint(0,2) 

#This chooses the random door removed 
if player==car: 
    doors.remove.random.randint(0,2) 
else: 
    doors.remove(car) 
    doors.remove(player) 

for plays in range(100): 
    if car == player: 
     wins=wins+1 

print(wins) 
+6

'car'と' player'はforループ内で変更されません。あなたは同じ2つの数字を100回比較しています。 – Blorgbeard

+0

ループ内の変数をどのように変更できますか? – Janet

+0

'for'文の中でそれらを変更するコードを入れます... – kindall

答えて

2

あるべきコードを、それは0を出力し、実行すると、あなたが実際にそれをするたびに実行させるループ内にコードを配置する必要があります。また、有効な選択肢を2回目に許可する(削除されたドアを選択することはできません)と、有効なドアのみを取り除いていることを確認する必要があります(ドアを取り外すことはできません)選ばれたドア)。

import random 

wins = 0 

for plays in range(100): 
    doors = [0,1,2] 
    car = random.choice(doors) 
    player = random.choice(doors) 

    # This chooses the random door removed 
    doors.remove(random.choice([d for d in doors if d != car and d != player])) 

    # Player chooses again (stay or switch) 
    player = random.choice(doors) 
    if player == car: 
     wins += 1 

print(wins) 

しかし、Monty Hallの問題のために、ドアを追跡する必要はありません。

win_if_stay = 0 
win_if_switch = 0 
for i in range(100): 
    player = random.randint(0, 2) 
    car = random.randint(0, 2) 
    if player == car: 
     win_if_stay += 1 
    else: 
     win_if_switch += 1