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:

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.

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