# Program about the Monty Hall problem not returning expected results

 Refresh March 2019 Views 9 time
0

First of all this program is probably stupid inefficient and long but it's my first real program and if you suggest changes in the program keep this in mind. and the text is in Norwegian. If there's anything that is unclear please just ask and I will translate more.

The code is written in jupyter using python 3, and presented using plotly

I read this thread as it describes my question but I didn't understand it properly, the answer might be there.

Question 1: Why is it not returning the correct ratio, should be 33% and 66%. Currently, it's about 55% and 44%.

Question 2: If you were to make this more streamlined but still very basic what would you do?

Question 3: Is secrets.randbelow(3) "random enough" to be used in this manner?

Question 4: Any suggestions on how to present the data better?

Sorry for the messy code and spelling mistakes in advance. if the code is unreadable I am happy to translate more of it.

``````import random     #importerer brukte pakker
import secrets
import plotly.plotly
import plotly.graph_objs as go
import numpy
init_notebook_mode(connected=True)

dør1 = 0;         # initialising the variables
dør2 = 0;
dør3 = 0;
bytte_tap = 0  #Keeps track of how many loses after changing
bytte_vinn = 0 #Keeps track of how many wins after changing
bli_tap = 0    #Keeps track of how many loses after not changing
bli_vinn = 0   #Keeps track of how many wins after not changing
i = 0

print_on = 0          # Sett 1 for å få debug koder
antall_runder = 1000000  #sets amount of runs

def scenario_1(): # defines the three positions the car can be in
global dør1   # 1 = Car 0 = Goat
global dør2
global dør3
dør1 = 1
dør2 = 0
dør3 = 0

def scenario_2():
global dør1
global dør2
global dør3
dør1 = 0
dør2 = 1
dør3 = 0

def scenario_3():
global dør1
global dør2
global dør3
dør1 = 0
dør2 = 0
dør3 = 1

while i < antall_runder:  # main loop

i += 1 # counter

scenario_valg = secrets.randbelow(3) +1  # Chooses one of the possible positions

if scenario_valg == 1:     # Runs the chosen scenario.
scenario_1()
elif scenario_valg == 2:   # Runs the chosen scenario.
scenario_2()
elif scenario_valg == 3:   # Runs the chosen scenario.
scenario_3()
else:
print("error")

første_valg = secrets.randbelow(3) +1 # Randomly chooses the first door.

andre_valg = secrets.randbelow(2)   # Randomly chooses whether the player chooses a new door

if scenario_valg == 1 and første_valg == 1 and andre_valg == 1: # Figures out if the player has a correct combination of choices for scenario 1.
if print_on == 1: print("1, 1, ja, tap")
bytte_tap += 1
elif scenario_valg == 1 and første_valg == 1 and andre_valg == 0:
if print_on == 1: print("1, 1, nei, vinn")
bli_vinn += 1
elif scenario_valg == 1 and første_valg == 2 and andre_valg == 1:
if print_on == 1: print("1, 2, ja, tap")
bytte_tap += 1
elif scenario_valg == 1 and første_valg == 2 and andre_valg == 0:
if print_on == 1: print("1, 2, nei, vinn")
bli_vinn += 1
elif scenario_valg == 1 and første_valg == 3 and andre_valg == 1:
if print_on == 1: print("1, 3, ja, vinn")
bytte_vinn += 1
elif scenario_valg == 1 and første_valg == 3 and andre_valg == 0:
if print_on == 1: print("1, 3, nei, tap")
bli_tap += 1

if scenario_valg == 2 and første_valg == 1 and andre_valg == 1: # Figures out if the player has a correct combination of choices for scenario 2.
if print_on == 1: print("2, 1, ja, vinn")
bytte_vinn += 1
elif scenario_valg == 2 and første_valg == 1 and andre_valg == 0:
if print_on == 1: print("2, 1, nei, tap")
bli_tap += 1
elif scenario_valg == 2 and første_valg == 2 and andre_valg == 1:
if print_on == 1: print("2, 2, ja, tap")
bytte_tap += 1
elif scenario_valg == 2 and første_valg == 2 and andre_valg == 0:
if print_on == 1: print("2, 2, nei, vinn")
bli_vinn += 1
elif scenario_valg == 2 and første_valg == 3 and andre_valg == 1:
if print_on == 1: print("2, 3, ja, vinn")
bytte_vinn += 1
elif scenario_valg == 2 and første_valg == 3 and andre_valg == 0:
if print_on == 1: print("1, 3, nei, tap")
bli_tap += 1

if scenario_valg == 3 and første_valg == 1 and andre_valg == 1:  # Figures out if the player has a correct combination of choices for scenario 3.
if print_on == 1: print("3, 1, ja, vinn")
bytte_vinn += 1
elif scenario_valg == 3 and første_valg == 1 and andre_valg == 0:
if print_on == 1: print("3, 1, nei, tap")
bli_tap += 1
elif scenario_valg == 3 and første_valg == 2 and andre_valg == 1:
if print_on == 1: print("3, 2, ja, vinn")
bytte_vinn += 1
elif scenario_valg == 3 and første_valg == 2 and andre_valg == 0:
if print_on == 1: print("3, 2, nei, tap")
bli_tap += 1
elif scenario_valg == 3 and første_valg == 3 and andre_valg == 1:
if print_on == 1: print("3, 3, ja, tap")
bytte_tap += 1
elif scenario_valg == 3 and første_valg == 3 and andre_valg == 0:
if print_on == 1: print("3, 3, nei, vinn")
bli_vinn += 1

init_notebook_mode()              # Plotly stuff i don't understand

keys=['Vinn - tap med bytting', 'Vinn - tap uten bytting']  # More Plotly stuff i don't understand
values=[bytte_vinn - bytte_tap, bli_vinn - bli_tap]

iplot({
"data": [go.Bar(x=keys, y=values)],
"layout": go.Layout(title="Monty Hall problemet")  # More Plotly stuff i don't understand
})

prosent_uten_bytting = bli_vinn / antall_runder * 100 *2  # Calculates the % of wins if you don't change your choice.
prosent_med_bytting = bytte_vinn / antall_runder * 100 *2 # Calculates the % of wins if you change your choice.

if print_on == 1: print(bytte_vinn, bytte_tap, bli_vinn, bli_tap)  # Debug message
print("Med bytting vant du", prosent_med_bytting, "% av tiden")   # Prints the %
print("Uten bytting vant du", prosent_uten_bytting, "% av tiden")# Prints the %
``````