趣旨
こちらの記事を拝見したときに、自分だったらどうするかなと思い、
要件を詰めたら、思ったより簡単な判断式になったので、共有。
https://qiita.com/bkh4149/items/93adeaa46c77efb8ae73
(参考ありがとうございました!)
コード
from random import randint
def do(user_change: bool):
correct = randint(0, 2)
user = randint(0, 2)
# 変えない場合、そのまま
if user_change == False:
return correct == user
# 変える場合
# 最初が当たっている場合、→必ず外れる
# 最初が外れている場合、→必ずあたる
return correct != user
from tqdm import tqdm
result_1 = [do(False) for x in tqdm(range(0, 1000000))]
result_2 = [do(True) for x in tqdm(range(0, 1000000))]
hit_1 = [x for x in result_1 if x]
hit_2 = [x for x in result_2 if x]
print('------')
print(f'{len(hit_1)}/{len(result_1)}')
print('------')
print(f'{len(hit_2)}/{len(result_2)}')
100%|██████████| 1000000/1000000 [00:01<00:00, 633529.37it/s]
100%|██████████| 1000000/1000000 [00:01<00:00, 630403.13it/s]
------
333092/1000000
------
666834/1000000
考察
コメントにもあるように、扉を変える場合は、
最初が当たっている場合(1/3)、必ず、はずれ。
最初が外れている場合(2/3)、必ず、あたり。
なので、変える方がお得。