Innlevering 3 - Alternativt l?p
Dette er en fortsettelse av testoppgaven. Start med ? gj?re oppgave 1 og 2 der hvis du ikke har gjort disse p? forh?nd.
Oppgave 3: Kj?r spillet mange ganger
Vi er n? interesserte i ? finne ut hvor ofte man vinner bilen om man spiller spillet mange ganger og gj?r konsekvente valg:
- Hvor ofte vinner man bilen hvis man alltid bytter d?r?
- Hvor ofte vinner man bilen hvis man alltid fortsetter med samme d?r som man f?rst valgte?
Oppgave 3a:
Vi ?nsker n? ? gj?re programmet uavhengig av brukerens input - vi lar spillet velge en tilfeldig d?r p? vegne av spilleren, slik at spillet kan kj?re mange ganger p? kort tid uten at man trenger ? skrive inn noe.
Hvis du s?rger for ? ha tilfeldig plassering av bilen og geitene, b?r det ikke ha noe ? si hva personen velger i starten, s? vi kan droppe ? ta input for ? f? det f?rste valget. Endre i stedet det f?rste valget til ? v?re "hardkodet", bare sett valget til ? alltid v?re f. eks d?r 0.
Endre det andre valget til ? alltid v?re at vi fortsetter med samme d?r som vi initielt valgte (vi ?nsker ? se hva som skjer da).
S?rg for at det til slutt i prosedyren alltid printes hvorvidt man vant eller ikke. Unng? at det printes noe annet (vi ?nsker ikke s? mye output n?r spillet skal kj?res mange ganger).
Kj?r prosedyren og sjekk at det ikke kreves noe user-input, og at spillet kj?rer med de "hardkodede" valgene og skriver ut det det skal. Bruk gjerne Python Tutor for ? sjekke at det spillet gj?r fungerer som du har tenkt og at det ikke er en "bug" i logikken.
Oppgave 3b
I uke 4 skal vi l?re hvordan vi bruker en l?kke til ? repetere noe mange ganger. Hvis du har gjort dette f?r, kan du gj?re det n?, men det er absolutt ikke n?dvendig. Vi kan heller motivere hvorfor l?kker er en god idé med ? gj?re det p? den tungvinte m?ten og copy-paste prosedyrekallet spill()
100 ganger. N?r du l?rer om l?kker neste uke, anbefaler vi p? det sterkeste at du skriver om koden til ? bli enklere og kortere, men forel?pig er dette godt nok.
Kj?r programmet, og sjekk basert p? outputen at spillet kj?res mange ganger.
Oppgave 3c
Vi ?nsker n? ? telle opp eksakt hvor ofte man vinner.
- Lag en variabel
antall_seiere = 0
i starten av programmet. Denne ?nsker vi ? ?ke med 1 hver gang vi vinner. - I stedet for at prosedyren printer om man vant eller ikke, vil vi at prosedyren skal returnere om vi vant eller ikke. Du trenger ikke forst? hvordan returverdier fungerer f?r du l?rer om det litt senere i kurset - det er greit om dette er litt "magisk" forel?pig (grunnen til at vi likevel gj?r det p? denne m?ten er at dere ikke skal utsettes for den stygge uvanen ? bruke noe som kalles globale variabler i utide - det er bedre ? gj?re det p? en ordentlig m?te fra f?rste stund, selv om det inneb?rer at vi m? jukse litt og bruke noe dere egentlig ikke har l?rt enda).
- Endre innholdet i prosedyren slik at det helt til slutt returneres enten 0 (vant ikke) eller 1 (vant):
# kode i prosedyren her ... if [sjekk for ? vurdere om spilleren vant]: return 1 # vant else: return 0 # vant ikke
Prosedyren vil n? returnere en verdi til hovedprogrammet, som vi kan bruke til ? endre verdien av en variabel der spill()
kalles. Dermed kan vi ?ke telleren basert p? denne verdien (den ?ker med 1 hvis spilleren vinner og ?ker med 0, dvs. forblir uendret, dersom spilleren taper):
antall_seiere = 0
antall_seiere += spill() # 'verdien' av spill() - dvs. returverdien - er 0 eller 1
antall_seiere += spill()
antall_seiere += spill()
# ...og s? videre (100 ganger)
print("Antall seiere:", antall_seiere)
OBS: Teknisk sett er spill()
n? ikke lenger en prosedyre, men noe vi kaller en funksjon, fordi den returnerer en verdi. Dette begrepet har sammenheng med matematiske funksjoner som ogs? har returverdier:
y = f(x)
Oppgave 3d
N? vil vi se hva som skjer hvis vi endrer spill()
slik at i stedet for ? beholde d?ren, velger spilleren alltid ny d?r.
For ? kunne bytte fram og tilbake mellom "behold d?r" og "bytt d?r" i prosedyren, lager vi en variabel som kan ha to verdier: 1
hvis vi skal bytte d?r, eller 0
hvis vi ikke skal bytte d?r.
def spill():
bytte = 1 # 1 betyr bytt d?r, 0 betyr ikke bytt d?r
# kode i prosedyren her ...
if bytte == 1:
# bytt til ny d?r
# (hvis bytte == 0 gj?r vi ingenting - behold gammel d?r)
# resten av koden i prosedyren her ...
Kj?r programmet flere ganger - noen ganger med bytte av d?r, noen ganger uten. Ser det ut til ? l?nne seg ? bytte d?r, eller er det bedre ? beholde den du valgte f?rst?
Om innleveringen
- Kun .py-filene skal leveres inn.
- Koden b?r inneholde gode kommentarer som forklarer hva programmet gj?r.
- Programmet b?r inneholde gode utskriftssetninger som gj?r det enkelt for bruker ? forst?.