Skip to content

Instantly share code, notes, and snippets.

@ismaild
Created December 14, 2012 09:25
Show Gist options
  • Select an option

  • Save ismaild/4284005 to your computer and use it in GitHub Desktop.

Select an option

Save ismaild/4284005 to your computer and use it in GitHub Desktop.
run simulation for monty hall problem
import random, pylab
#set line width
pylab.rcParams['lines.linewidth'] = 6
#set font size for titles
pylab.rcParams['axes.titlesize'] = 20
#set font size for labels on axes
pylab.rcParams['axes.labelsize'] = 20
#set size of numbers on x-axis
pylab.rcParams['xtick.major.size'] = 5
#set size of numbers on y-axis
pylab.rcParams['ytick.major.size'] = 5
#set font size for text
pylab.rcParams['legend.fontsize'] = 20
def montyChoose(guessDoor, prizeDoor):
if 1 != guessDoor and 1 != prizeDoor:
return 1
if 2 != guessDoor and 2 != prizeDoor:
return 2
return 3
def randomChoose(guessDoor, prizeDoor):
if guessDoor == 1:
return random.choice([2,3])
if guessDoor == 2:
return random.choice([1,3])
return random.choice([1,2])
def simMontyHall(numTrials, chooseFcn):
stickWins, switchWins, noWin = (0, 0, 0)
prizeDoorChoices = [1,2,3]
guessChoices = [1,2,3]
for t in range(numTrials):
prizeDoor = random.choice([1, 2, 3])
guess = random.choice([1, 2, 3])
toOpen = chooseFcn(guess, prizeDoor)
if toOpen == prizeDoor:
noWin += 1
elif guess == prizeDoor:
stickWins += 1
else:
switchWins += 1
return (stickWins, switchWins)
def displayMHSim(simResults, title):
stickWins, switchWins = simResults
pylab.pie([stickWins, switchWins],
colors = ['r', 'c'],
labels = ['stick', 'change'],
autopct = '%.2f%%')
pylab.title(title)
simResults = simMontyHall(100000, montyChoose)
displayMHSim(simResults, 'Monty Chooses a Door')
pylab.figure()
simResults = simMontyHall(100000, randomChoose)
displayMHSim(simResults, 'Door Chosen at Random')
pylab.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment