Testoppgave Fredagsfordypning
Denne oppgaven er ment for studenter som har lyst p? en smakebit p? de alternative innleveringsoppgavene. Oppgaven skal v?re mulig ? l?se ved hjelp av det man har l?rt de f?rste to ukene i IN1000, og er ment ? v?re vanskeligere enn andre oppgaver gitt disse to ukene. Det gis ogs? f?rre detaljerte instruksjoner om hvordan man skal l?se oppgaven enn hva som er typisk for vanlige oppgaver og innleveringer i IN1000.
Du finner l?sningsforslag her, men ikke se p? det f?r du har gjort et ordentlig fors?k p? ? l?se oppgaven!
OBS: Du trenger ikke l?se hele oppgaven for ? v?re kvalifisert, det viktigste er at du kommer langt nok til ? oppdage om du f?ler deg noenlunde komfortabel med ? jobbe p? denne m?ten, uten detaljerte instrukser for alt du skal gj?re. Hvis du synes det g?r greit og/eller er g?y, s? er Fredagsfordypning antakelig noe for deg.
Monty Hall Problem
Monty Hall Problem er et klassisk statistikk-problem som g?r ut p? dette:
- Du er deltaker i et spill (game show) der du st?r foran tre d?rer:
- Bak en av d?rene st?r en bil du ?nsker ? vinne, og bak de to andre d?rene st?r det en geit.
- Du velger en d?r, og merker at d?ren er l?st.
- Verten i spillet vet hva som er bak d?rene, og for ? gj?re ting litt enklere, ?pner han en annen d?r med en geit.
- Du st?r n? igjen med to d?rer, den du valgte og en annen. Bak en av dem er det alts? en bil, og bak den andre er det en geit.
- Du f?r n? muligheten til ? bytte d?r, eller fortsette med den du f?rst valgte.
- Hva b?r du gj?re? Hvor stor er sannsynligheten for ? f? tak i bilen i dette spillet? 50%? Har det noe ? si om du bytter d?r eller fortsetter med den f?rste du valgte?
Tenk litt over problemet og sjekk at du forst?r det f?r du begynner p? oppgavene (men du trenger absolutt ikke ? l?se det f?r du begynner p? oppgavene).
Oppgave 1: Implementer spillet
Lag en enkel versjon av spillet der en bruker blir bedt om ? velge mellom tre d?rer (ved hjelp av input
). Du kan kalle d?rene 0, 1 og 2 (i programmering er det vanlig ? begynne nummerering p? 0 i stedet for 1). Spillet skal s? gi beskjed om at en av de andre d?rene ?pnes, og at du n? kan velge mellom de to som er igjen. Brukeren skal f? sp?rsm?l om ? bli eller bytte, og spillet skal til slutt gi beskjed om han vant en bil eller ikke.
Tips:
- Hvis du vil at innholdet skal v?re tilfeldig hver gang programmet kj?rer, kan du bruke
randint
-funksjonen:- Importer f?rst biblioteket
random
i toppen av filen din:import random
Deretter kan du plassere bilen bak en tilfeldig d?r (de ?vrige d?rene er det antatt at det er geiter bak):
bil = random.randint(0, 2) # Tilfeldig heltall fra og med 0 til og med 2 print("Bilen er bak d?r", bil) # til testing - b?r av ?penbare grunner fjernes n?r spillet skal spilles
Hvis du n? kj?rer programmet flere ganger vil du se at bilen er p? et tilfeldig sted hver gang.
- La brukeren velge et tall (0, 1 eller 2) og skriv ut "bil" eller "geit" avhengig av hva som er bak d?ren.
- Hvis du velger d?r 1, m? du finne en m?te ? la verten velge tilfeldig enten d?r 0 eller 2 p?, men ikke d?r 1 (dersom det er geiter bak b?de d?r 0 og 2). Hvis du ikke f?r dette til, kan du f? et hint her.
- Det blir fort en del if-elif-else setninger n? for ? f?rst velge en d?r, la verten ?pne en annen d?r, og til slutt velge ny d?r (eller beholde den gamle), men det er greit. Senere i kurset l?rer vi bedre m?ter ? l?se dette problemet p?.
- Importer f?rst biblioteket
Oppgave 2:
Putt koden fra oppgave 1 inn i en prosedyre. Kall prosedyren, og sjekk at spillet kj?rer som f?r.
def spill():
# putt koden din her ...
# kall prosedyren og sjekk at ting virker
Denne oppgaven fortsetter p? Fredagsfordypning, og fortsettelsen finner du her. Du trenger ikke ha gjort denne oppgaven p? forh?nd for ? m?te opp p? fredag - det g?r fint ? starte med denne n?r du kommer.