Testoppgave Fredagsfordypning
Denne oppgaven er ment for studenter som har lyst på en smakebit på hvilken type oppgaver som vil bli gitt i fordypningsopplegget. 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.
OBS: Dette er ikke en oppgave man må greie å løse for å kunne delta på opplegget, 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
randomi toppen av filen din:import randomDeretter 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 spillesHvis 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.