Hello Pythonistas,

Today I will give you a brief guide to applying Python to Mathematics World, on this tutorial you’re going to simulate Monty hall problem in Python.

You might be wondering what the hell is this **Monty Hall Problem** ?

The **Monty Hall problem** is a brain teaser, in the form of a probability puzzle, loosely based on the American television game.

Suppose you’re on a game show, and you’re given the choice of three doors: Behind one door is a car; behind the others, goats.

You pick a door, say No. 1, and the host, who knows what’s behind the doors, opens another door, say No. 3 has a goat.

He then says to you, “Do you want to pick door No. 2?” Is it to your advantage to switch your choice?.

Well It’s upon your choice and luck to switch or stay with Door No 1 or switch to number 2, **Mathematically** the person who switch have twice as chance of winning a Car .

The concept is based on **probability concentration**. Initially when you choose door No 1 . There is 1/3 probability that car is in that door and 2/3 in the other two.

But when the host another door on those two remaining and tell there is goat , then the probability that there is car concentrate to the door No 2.

So Mathematically Switching would be a better idea .

Now we have already learn the concepts , It’s time to simulate our idea in Python.

We are going to use Python random Library to generate random choices and open non – car doors and simple **tkinter** widget to display the overall count.

**app.py**

import random from tkinter import StringVar , Label, Tk, Entry window = Tk() window.geometry('400x100') window.title('Monty hall simulation') window.resizable(0, 0) same_choice = StringVar() switched_choice = StringVar() same_choice.set(0) switched_choice.set(0) no_sample = Entry() Label(text='Same choice').place(x=80,y=8) Label(text ='Switched choice').place(x=80,y=40) Label(textvariable = same_choice, font =(15)).pack() Label(textvariable = switched_choice, font=(15)).pack() no_sample.pack() def simulate(event): same_choice_result = 0 switched_choice_result = 0 samples = int(no_sample.get()) doors = ['gold', 'goat', 'bed'] for _ in range(samples): simulated_doors = doors.copy() random.shuffle(simulated_doors) first_choice = random.choice(simulated_doors) simulated_doors.remove(first_choice) opened_door = simulated_doors[0] if simulated_doors[0]!='gold' else simulated_doors[1] simulated_doors.remove(opened_door) switched_second_choice = simulated_doors[0] if first_choice == 'gold': same_choice_result+=1 same_choice.set(same_choice_result) elif switched_second_choice == 'gold': switched_choice_result+=1 switched_choice.set(switched_choice_result) else: print('That\'s will never happed') no_sample.bind('<Return>', simulate) window.mainloop()

**Output :**

Enter the number of Simulation to be computed by the computer and then press Enter to run the Simulation

As you can see above Switched choice got as twice as chance compared to the one who stayed with the same choice.

Remember choice made in this Simulation is entirely random but still If you gonna try running Simulation again , you probably gonna get resembling numbers perhaps not exact.

Hope you find this post interesting , donâ€™t forget to** subscribe** to get more tutorials and tips like this. To get the Full code check out on My Github

In case of any suggestion or comment , drop it on the comment box and I will reply to you immediately.