﻿import random  # 乱数を扱うためのモジュールをインポート
n = 100000  # 試行回数
k = 3  # 扉の枚数 (k枚の扉は1,2,...,kと表す)
n_sw = 0  # スイッチしたときの当選回数
random.seed(1)  # 乱数のシード値を固定
for i in range(n):
    true_prize = random.randint(1, k)  # 商品が隠された扉
    original_choice = random.randint(1, k)  # 挑戦者が最初に選ぶ扉
    index_list = list(range(1, k+1))
    # 挑戦者が最初に当たりを選んだ場合
    if original_choice == true_prize:
        # index_list(k次元)からoriginal_choiceを除く
        index_list.remove(original_choice)
        # index_list((k-1)次元)の中から無作為に1つを選ぶ
        unopened_list = random.sample(index_list, 1)
        # unopened_list = 閉めたままの2つの扉
        unopened_list.append(original_choice)
    else:  # 挑戦者が最初にはずれを選んだ場合
        # unopened_list = 最初に選んだ扉と当たりの扉
        unopened_list = [original_choice, true_prize] 
    unopened_list.remove(original_choice)  # スイッチした後の扉
    the_other_unopened = unopened_list[0]   
    if the_other_unopened == true_prize:  # スイッチした後の扉が当たり
        n_sw += 1

# スイッチして当選する確率を表示
print(n_sw / n)  # モンテカルロ法
print((k-1) / k)  # 参考：理論値