こもろぐ @tenkoma

What We Find Changes Who We Become -- Peter Morville著『アンビエント・ファインダビリティ 』

広告:本ブログで紹介している書籍等商品の紹介でAmazonアソシエイトを利用していることがあります。

モンティ・ホールのジレンマ

Pythonで解いてみた。(monty.py)(笑)

# -*- coding: cp932 -*-
import random
# ifchange: ドアを変えるかどうか
# size: ドアの数
# 戻り値:当たりかはずれか
def monty(ifchange,size):
    list = range(size)
    ans = random.choice(list)
    
    first = random.choice(list)
    notfirstchoice = list[:]
    del notfirstchoice[first]       # 最初の選択以外のリスト
    
    if ans == first:                # 司会者が残すもう一つのドアは
        remnantdoor = random.choice(notfirstchoice)
    else:
        remnantdoor = ans
    
    if ifchange:
        final = remnantdoor
    else:
        final = first
    
    return ans == final
    
def trialmonty(ifchange=True, count=10000, size=3):
    if (size < 3) and (type(size) == type(3)):
        print "sizeは3以上の整数でなくてはいけません."
    prizecount = 0
    for x in range(count):
        if monty(ifchange,size):
            prizecount += 1
    return prizecount

WindowsのIDLE上で実行

>>> 
>>> trialmonty()
6629
>>> trialmonty()
6621
>>> trialmonty(False)
3385
>>> trialmonty(False)
3354
>>> trialmonty(size=4)
7519
>>> trialmonty(True,100000,4)
74954

余談だけどドアが3つの時、初期状態で当たる確率が1/3でそれ以外のドアがあたりの確率は2/3だ。司会者は2/3の方を1つの選択肢としてまとめてるってことだね。(あたりが(当たり前だけど)1つある場合はあたりに、すべてはずれの場合ははずれに)
このゲームは最初から、選択肢を減らした後でもういちど最後の選択ができる、と明示されてないと司会者が意地悪しそうだよな。最初の選択が当たってるときだけ、もう一度選択権があることにしよう、とか。