Materiale uke 4
Dette er oppgaver/temaer vi jobber med sammen i gruppetimen i uke 4.
Oblig-erfaringer
1: For-l?kker for ? lese inn betalingshistorikk
Mange leste inn betalingshistorikken slik, som er helt fint gitt at man ikke har l?rt l?kker:
betalingshistorikk = []
beatlingshistorikk.append(input("Betalt? Ja/nei"))
beatlingshistorikk.append(input("Betalt? Ja/nei"))
beatlingshistorikk.append(input("Betalt? Ja/nei"))
... men hvordan ville man gjort dette n? som vi har l?rt om l?kker?
2: N?r trenger man paranteser i if-setninger?
Vi diskuterer dette sammen og ser p? noen eksempler:
if ((alder > 5) and (kjonn == 'mann')):
return True
3: N?r man sjekker om noe er True/False
er_mann = True
if er_mann == True:
print("Du er mann")
Er noe overfl?dig i koden over?
4: Mer lesbar kode
Vi pr?ver ? se om vi kan gj?re denne koden mer lesbar:
kjonn = input("Skriv kj?nn")
alder = input("Alder?")
if kjonn == "mann" and int(alder) > 50:
print("Vil betale")
elif kjonn == "mann" and int(alder) <= 50:
print("Vil ikke betale")
elif kjonn == "kvinne" and int(alder) > 30:
print("Vil ikke betale")
elif kjonn == "kvinne" and ....:
print("vil betale")
else:
print("Vil ikke betale")
5: Hva er gode variabelnavn?
Vi diskuterer.
Noen oppgaver p? l?kker og funksjoner
Oppgave 1: Lesbarhet
F?lgende kode kaster seks terninger og teller hvor mange kaste det tar f?r man f?r Yatzy (seks p? alle terningene). Koden er rotete og veldig vanskelig ? forst?. Fors?k ? rydde opp i koden og gj?r den mer lesbar.
from random import randint
from sys import exit
j = 0
while True:
# kast 6 terninger
t = []
for i in range(6):
t.append(randint(1, 6))
# sjekk om alle terningene er 6
sjekk = True
for i in range(0, 6):
if t[i]!=6:
sjekk=False
if sjekk == True:
print("Alle terningene er 6! Det tok", j, " kast.")
exit()
j += 1
Tips:
- Begynn med ? finne bedre variabel-navn
- Se om du kan gj?re koden mer lesbar ved ? lage funksjoner for noe av det som skjer
Oppgave 2
Som del av l?sningen vi fant i oppgave 1, skrev vi en egen funksjon for ? sjekke om alle terningene er 6.
Vi ?nsker n? ? i stedet telle hvor mange kast vi bruker p? ? f? hus (4 av ett tall og 2 av et annet). Lag en ny funksjon for ? sjekke om terningene gir hus. Tips: Det kan l?nne seg ? dele opp problemet ved ? lage hjelpefunksjoner.
Oppgave 3: Assert
Det er fort gjort ? ha sm? feil i funksjoner av den typen vi skrev i oppgave 2 uten at de blir oppdaget.
Skriv noen assert-statements som sjekker at funksjonen fungerer som den skal.
Oppgave 4: Mer avanserte for-l?kker og funksjoner
- Endre funksjonen som kaster terninger til ? ta et parameter som sier hvor mange terninger som skal kastes.
- Lag en funksjon som tar en liste over terninger og som returnerer
True
hvis f?rste, tredje, femte, osv. (alts? annenhver) terning er 6. - Bruk assert til ? sjekke at funksjonen fungerer.
- Ekstra oppgave: Lag en funksjon som returner True hvis de
n
(der n er et parameter) siste terningene er 6.
Ekstraoppgave
Oppgaven er basert p? en tidligere eksamensoppgave:
Skriv en funksjon som har en liste med terninger som parameter og som returnerer en verdi av type boolean.
Funksjonen skal sjekke om alle verdiene i listen er i stigende rekkef?lge (sortert), og returnere True hvis de er det (False hvis ikke). Det kan v?re duplikater i listen, men en liste av typen "1, 2, 2, 4" skal returnere True.
? sende funksjoner som parameter til andre funksjoner
Dette er utenfor pensum, men kan v?re nyttig i den valgfrie oppgaven i obligen hvis man vil teste ut ulike strategier mot hverandre. Vi ser p? noen eksempler sammen og pr?ver ? skrive et program som kan spille ulike strategier mot hverandre.