Jag försöker lära mig Python och har utmanat mig själv att skriva ett program som testar Monty Hall-problemet empiriskt vid fler dörrar än tre och där Monty Hall också kan öppna fler dörrar än en. Det är två dagar sedan jag började lära mig python, så det finns en massa som jag inte kan, och jag antar att man kan kritisera mycket av koden. Jag började med att simulera det ursprungliga problemet och håller på att bygga ut koden för att simulera fler dörrar, så därför kanske det är lite stökigt och ologiskt.
Hur som helst:
När jag kör koden i IDLE så "stannar" allt när jag vill göra mer än ett försök (fast inte varje gång), och jag antar att det är på grund av att jag klantat mig med for-looparna på raderna 55 och 57, men jag fattar inte vad jag gjort fel... Traceback ger lite olika svar varje gång när jag avbryter med ctrl+c.
Någon som ser vad jag gjort för fel? (Och som vet hur jag ska göra för att kunna kopiera in kod utan att det blir radbrytningar som det blir på tre ställen i koden nedan?)
Hur som helst:
När jag kör koden i IDLE så "stannar" allt när jag vill göra mer än ett försök (fast inte varje gång), och jag antar att det är på grund av att jag klantat mig med for-looparna på raderna 55 och 57, men jag fattar inte vad jag gjort fel... Traceback ger lite olika svar varje gång när jag avbryter med ctrl+c.
Någon som ser vad jag gjort för fel? (Och som vet hur jag ska göra för att kunna kopiera in kod utan att det blir radbrytningar som det blir på tre ställen i koden nedan?)
Kod:
#Testar empiriskt om det är bäst att byta dörr eller behålla den ursprungliga med fler dörrar än tre #Importera moduler som behövs import random igen = 'j' while igen == 'j': #Räkna ut och visa resultaten def resultat(): print ('Antal vinster ' + str(win) + ' Antal förluster ' + str(lose) + ' Vinstprocent = {:.2%}'.format(win/(lose + win))) #Välj dörr def chooseDoor(): choice = random.randint(1,doors) return choice #Monty öppnar dörr def fakeOpen(): fake = random.randint(1,doors) return fake #Nollställ resultaten win = 0 lose = 0 val = 0 prize = 0 elim = [] monty = 0 antal = 0 #Fråga hur många dörrar print('Hur många dörrar?') doors = int(input()) #Bestäm bakom vilken dörr priset är prize = random.randint(1,doors) #Fråga hur många dörrar Monty ska öppna print('Hur många dörrar ska Monty öppna?') monty = int(input()) while monty > doors -2: print('För många, max ' + str(doors - 2)) monty = int(input()) #Fråga hur många försök som ska göras print('Hur många försök?') antal = int(input()) #Bestäm att behålla eller byta dörr print('1. För att byta dörr 2. för att behålla') method = int(input()) #Testa att byta dörr if method == 1: for i in range(antal): val = chooseDoor() for j in range(monty): montelim = fakeOpen() while montelim == val or montelim == prize or montelim in elim: montelim = fakeOpen() elim = elim + [montelim] val2 = chooseDoor() while val2 in elim or val2 == val: val2 = chooseDoor() if val2 == prize: win = win + 1 else: lose = lose + 1 resultat() print('Förväntad vinstprocent = ' + str(round(100 * (1/doors) * ((doors-1) / (doors - monty - 1)))) + '%') #Testa att stå kvar if method == 2: for i in range(antal): val = chooseDoor() if val == prize: win = win + 1 else: lose = lose + 1 resultat() print('Förväntad vinstprocent = ' + str(round(100 / doors)) + '%') print('Tryck "j" för att försöka igen') igen = input()