import random class GameShowHost: def __init__(self,name = 'Monty'): self.name = name def decideWinningDoor(self): doors = ['A','B','C'] door = random.sample(doors,1)[0] return door def chooseDoorToReveal(self,winningDoor,chosenDoor): doorNames = ['A','B','C'] doorNames.remove(chosenDoor) if winningDoor == chosenDoor: pass else: doorNames.remove(winningDoor) doorToReveal = random.sample(doorNames,1)[0] return doorToReveal class Player: def __init__(self,policy): self.policy = '' self.setPolicy(policy) def chooseDoor(self): chosenDoor = '' doors = ['A','B','C'] chosenDoor = random.sample(doors,1)[0] return chosenDoor def makeFinalChoice(self,chosenDoor,revealedDoor): finalChoice = '' policy = self.getPolicy() assert policy in ['switch','stick','choose'] if policy == 'switch': finalChoice = self.switch(chosenDoor,revealedDoor) elif policy == 'stick': finalChoice = chosenDoor elif policy == 'choose': finalChoice = self.chooseAgain(revealedDoor) return finalChoice def switch(self,chosenDoor,revealedDoor): doors = ['A','B','C'] doors.remove(revealedDoor) doors.remove(chosenDoor) newChosenDoor = doors[0] return newChosenDoor def stick(self): pass def chooseAgain(self,revealedDoor): doors = ['A','B','C'] doors.remove(revealedDoor) newChosenDoor = random.sample(doors,1)[0] return newChosenDoor def setPolicy(self,myPolicy): assert myPolicy in ['choose','stick','switch'] self.policy = myPolicy def getPolicy(self): return self.policy class Game: def __init__(self): self.gameState = {} def setupGame(self,playerPolicy): self.player = Player(playerPolicy) self.host = GameShowHost() def runGame(self): winningDoor = self.host.decideWinningDoor() self.updateGameStatus('winningDoor', winningDoor) chosenDoor = self.player.chooseDoor() self.updateGameStatus('chosenDoor', chosenDoor) revealedDoor = self.host.chooseDoorToReveal(winningDoor,chosenDoor) self.updateGameStatus('revealedDoor', revealedDoor) finalChoice = self.player.makeFinalChoice(chosenDoor,revealedDoor) self.updateGameStatus('finalChoice', finalChoice) self.scoreGame() def updateGameStatus(self,item,value): self.gameState[item] = value def scoreGame(self): if self.gameState['finalChoice'] == self.gameState['winningDoor']: self.gameState['result'] ='win' else: self.gameState['result'] = 'lose' def runGames(self,player,numOfGames): scorecard = {'wins':0,'losses':0} for eachGame in range(1,numOfGames): policy = player.getPolicy() self.setupGame(policy) self.runGame() assert self.gameState['result'] in ['win','lose'] if self.gameState['result'] =='win': scorecard['wins'] = scorecard['wins']+1 elif self.gameState['result'] =='lose': scorecard['losses'] = scorecard['losses']+1 return scorecard game = Game() policies = ['choose','stick','switch'] for eachPolicy in policies: player = Player(eachPolicy) results = game.runGames(player,10) print "Player Policy: '"+eachPolicy+"' Results: ",results
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question