Skip to content

Instantly share code, notes, and snippets.

@snitzr
Last active April 1, 2020 21:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snitzr/7ecf0abaacce610893e9364b13bce205 to your computer and use it in GitHub Desktop.
Save snitzr/7ecf0abaacce610893e9364b13bce205 to your computer and use it in GitHub Desktop.
Monty Hall problem outcome simulator
import random
# probability calculator
def monty():
runs = 5000
true_switch_win_counter = 0
false_switch_win_counter = 0
true_switch_counter_total = 0
false_switch_counter_total = 0
for i in range(runs):
print('____________________\nBegin for loop #{}\n'.format(i+1))
doors = ['1', '2', '3']
initial_pick = random.choice(doors)
winning_door = random.choice(doors)
print('Doors: {}'.format(doors))
print('Initial pick: {}'.format(initial_pick))
print('Winning door: {}\n'.format(winning_door))
# switcher
if i % 2:
true_switch_counter_total += 1
print('Switch True')
second_pick = 0
if winning_door == initial_pick:
# guaranteed loss
print('Winning door: {} == Intial pick: {}'
.format(winning_door, initial_pick))
print('Lose. Switched from correct initial pick')
else:
# guaranteed win
print('Winning door: {} != Intial pick: {}'
.format(winning_door, initial_pick))
print('Win. Switched from incorect initial pick.')
true_switch_win_counter += 1
else:
false_switch_counter_total += 1
print('Switch False')
if initial_pick == winning_door:
print('Initial pick: {} == Winning door: {}'
.format(initial_pick, winning_door))
print('Win. Not switched.')
false_switch_win_counter += 1
else:
print('Initial pick: {} != Winning door: {}'
.format(initial_pick, winning_door))
print('Lose. Not switched.')
print('\nEnd for loop #{}\n--------------------\n'.format(i+1))
print('Wins with switch:\t{:.3f}%'
.format(true_switch_win_counter / true_switch_counter_total * 100))
print('Wins without switch:\t{:.3f}%'
.format(false_switch_win_counter / false_switch_counter_total * 100))
print('true_switch_win_counter: {} / true_switch_counter_total: {}'
.format(true_switch_win_counter, true_switch_counter_total))
print('false_switch_win_counter: {} / false_switch_counter_total: {}'
.format(false_switch_win_counter, false_switch_counter_total))
if __name__ == "__main__":
# run function on startup
monty()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment