Mattespill
Skrevet av: Geir Arne Hjelle
Introduksjon
I denne leksjonen vil vi se litt nærmere på hvordan Python jobber med tall, og vi vil lage et enkelt mattespill. Vi vil også se hvordan vi kan gjøre ting tilfeldige.

Steg 1: En kalkulator!
Python er, som de fleste programmeringsspråk, veldig glad i å regne. La oss se hvordan vi kan få Python til å regne for oss.
Sjekkliste
-
print(2 + 3) print(17 - 8) print(3 * 4) print(22 / 7)
Lagre programmet med navnet
kalkulator.py
og kjør det.
Steg 2: Vi kaster terning
For å lage et mattespill vil vi bruke tilfeldige tall. Tilfeldige tall blir omtrent som å slå terning for å finne et tall.
Sjekkliste
-
from random import randint print(randint(1, 6))
Når du kjører programmet vil det skrive ut et tilfeldig tall mellom 1 og 6. Kjør programmet flere ganger. Forandrer tallet seg?
-
from random import randint for i in range(25): print(randint(1, 6) + randint(1, 6))
Steg 3: En liten matteprøve
Vi kan nå bruke tilfeldige tall til å lage et enkelt mattespill.
Sjekkliste
-
from random import randint tall1 = randint(2, 12) tall2 = randint(2, 12)
-
print('Hva er ' + tall1 + ' ganger ' + tall2 + '?')
Hva skjer når du prøver å kjøre programmet?
-
For å fortelle Python at her vil vi egentlig sette sammen tekst må vi bruke funksjonen
str
for å gjøre om tallene til tekst (str
er en forkortelse for streng, som er det vi kaller tekster på fagspråket). Endre den siste linjen slik at den ser slik ut i stedet:print('Hva er ' + str(tall1) + ' ganger ' + str(tall2) + '?')
Virker programmet ditt bedre nå? Prøv å kjøre programmet flere ganger. Blir du stilt forskjellige spørsmål?
-
svar = input()
nederst i programmet.
-
from random import randint tall1 = randint(2, 12) tall2 = randint(2, 12) print('Hva er ' + str(tall1) + ' ganger ' + str(tall2) + '?') svar = input() if svar == tall1 * tall2: print('Ja, svaret er ' + svar) else: print('Nei, det riktige svaret er ' + str(tall1 * tall2))
Pass på at som i for-løkker må du skyve koden i if-testen inn mot høyre.
-
Hmm ... det er et problem med programmet vårt. Programmet sier at vi svarer feil selv om vi svarer riktig!
Bugs
Dette er et eksempel på noe vi kaller en bug i et program. Programmet kjører, men det gjør ikke slik som vi hadde ment og forventet. Selve ordet bug betyr insekt, og grunnen til at dette ordet brukes er at i gamle dager var det faktisk et problem at insekter fløy inn i datamaskiner og ødela programmer!
Sjekkliste
-
Når vi bruker
input
til å lese innsvar
vil dette alltid være tekst, selv om vi bare skriver inn tall. På samme måte som vi kan brukestr
for å gjøre om tall til tekst kan vi brukeint
for å gjøre om tekst til tall (husk atint
er en forkortelse for integer som betyr heltall).Endre
if
-linjen i programmet ditt tilif int(svar) == tall1 * tall2:
Virker programmet bedre nå?
Steg 4: Telle riktige svar
Det er litt kjedelig å alltid starte programmet på nytt. La oss prøve å stille flere mattestykker etter hverandre.
Sjekkliste
-
from random import randint ant_stykker = 5 ant_rett = 0 for i in range(ant_stykker): tall1 = randint(2, 12) tall2 = randint(2, 12) print('Hva er ' + str(tall1) + ' ganger ' + str(tall2) + '?') svar = input() if int(svar) == tall1 * tall2: print('Ja, svaret er ' + svar) ant_rett = ant_rett + 1 else: print('Nei, det riktige svaret er ' + str(tall1 * tall2)) print('Du fikk ' + str(ant_rett) + ' av ' + str(ant_stykker))
Steg 5: Rekursjon, hva er det?
Vi avslutter med å se på noe som heter rekursjon. Dette er en veldig stilig ide, som brukes en del i programmering.
Vi vil skrive et program som kan regne ut fakultetet av et tall. Fakultetet finner man ved å gange tallet med alle tall som er mindre enn seg. For eksempel er fakultetet av 4
fakultet(4) = 4 * 3 * 2 * 1 = 24
Trikset med rekursjon er at vi kan redusere oppgaven til noe som er veldig likt, men litt enklere. For eksempel kan vi her se at hvis vi hadde visst fakultetet av 3 kunne vi funnet fakultetet av 4 bare ved å gange med 4:
fakultet(4) = 4 * 3 * 2 * 1 = 4 * fakultet(3)
Videre kan vi finne fakultetet av 3 hvis vi vet fakultetet av 2 og så videre:
fakultet(3) = 3 * 2 * 1 = 3 * fakultet(2)
fakultet(2) = 2 * 1 = 2 * fakultet(1)
fakultet(1) = 1
Sjekkliste
-
def fakultet(tall): if tall == 1: return 1 print(fakultet(1))
Her bruker vi flere ting du har sett tidligere. Husk at
def
brukes for å lage egne funksjoner. Her lager vi funksjonenfakultet
som vi etterpå kaller inne iprint
-funksjonen. -
def fakultet(tall): if tall == 1: return 1 return tall * fakultet(tall-1) print(fakultet(4))
Denne linjen sier at fakultetet til et tall er tallet selv ganget med fakultetet til tallet som er en mindre.
Prøv å regne ut fakultetet av andre tall. Skjønner du hvordan dette virker? Det er en litt merkelig måte å tenke på, så du må kanskje venne deg til det?
Forbedre denne siden
Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!