Mattespel
Skrevet av: Geir Arne Hjelle
Oversatt av: Stein Olav Romslo
Introduksjon
I denne oppgåva skal me sjå meir på korleis Python arbeider med tal, og me skal lage eit enkelt mattespel. Me skal òg sjå på korleis me kan gjere ting tilfeldige.

Steg 1: Ein kalkulator!
Som dei fleste andre programmeringsspråk er Python glad i å rekne. La oss sjå korleis me kan få Python til å rekne for oss.
Sjekkliste
-
print(2 + 3) print(17 - 8) print(3 * 4) print(22 / 7)
Lagre programmet med namnet
kalkulator.py
og køyr det.
Steg 2: Me kastar terning
For å lage eit mattespel vil me bruke tilfeldige tal. Tilfeldige tal blir omlag som å slå terning for å finne eit tal.
Sjekkliste
-
from random import randint print(randint(1, 6))
Når du køyrer programmet vil det skrive ut eit tilfeldig tal mellom 1 og 6. Køyr programmet fleire gonger. Forandrar talet seg?
-
from random import randint for i in range(25): print(randint(1, 6) + randint(1, 6))
Steg 3: Ei lita matteprøve
No kan me bruke tilfeldige tal til å lage eit enkelt mattespel.
Sjekkliste
-
from random import randint tal1 = randint(2, 12) tal2 = randint(2, 12)
-
print('Kva er ' + tal1 + ' ganger ' + tal2 + '?')
Kva skjer når du køyrer programmet no?
-
For å fortelje Python at me vil setje saman tekst må me bruke funksjonen
str
for å gjere tala om til tekst (str
er ei forkorting for streng, som er det me kallar tekstar på fagspråket). Endre den siste linja så den ser slik ut i staden:print('Kva er ' + str(tal1) + ' ganger ' + str(tal2) + '?')
Virkar programmet ditt betre no? Prøv å køyre programmet fleire gonger. Blir du stilt forskjellige spørsmål?
-
svar = input()
nedst i programmet.
-
from random import randint tal1 = randint(2, 12) tal2 = randint(2, 12) print('Kva er ' + str(tal1) + ' ganger ' + str(tal2) + '?') svar = input() if svar == tal1 * tal2: print('Ja, svaret er ' + svar) else: print('Nei, det riktige svaret er ' + str(tal1 * tal2))
Pass på at som i for-løkker må du skyve koden i if-testen inn mot høgre.
-
Hmm... Det er eit problem med programmet vårt. Det seier at me svarar feil sjølv om me svarar riktig!
Bugs
Dette er eit døme på noko me kallar ein bug i eit program. Programmet køyrer, men det gjer ikkje det me meinte og forventa at det skulle gjere. Sjølve ordet bug tyder insekt, og grunnen til at me brukar det ordet er at i gamle dagar var det faktisk eit problem at insekt flaug inn i datamaskinene og øydela progam!
Sjekkliste
-
Når me brukar
input
til å lese innsvar
vil det alltid vere tekst, sjølv om me berre skriv inn tal. På same måte som me kan gjere om tal til tekst medstr
kan me brukeint
for å gjere om tekst til tal (hugs atint
er ei forkorting for integer som tyder heiltal).Endre
if
-linja i programmet ditt tilif int(svar) == tal1 * tal2:
Virkar programmet betre no?
Steg 4: Telje riktige svar
Det er litt keisamt å alltid starte programmet på nytt. La oss prøve å setje opp fleire reknestykke etter kvarandre.
Sjekkliste
-
from random import randint ant_stykker = 5 ant_rett = 0 for i in range(ant_stykker): tal1 = randint(2, 12) tal2 = randint(2, 12) print('Kva er ' + str(tal1) + ' ganger ' + str(tal2) + '?') svar = input() if int(svar) == tal1 * tal2: print('Ja, svaret er ' + svar) ant_rett = ant_rett + 1 else: print('Nei, det riktige svaret er ' + str(tal1 * tal2)) print('Du fekk ' + str(ant_rett) + ' av ' + str(ant_stykker))
Steg 5: Rekursjon, kva er det?
Til slutt skal me sjå på noko som heiter rekursjon. Det er ein veldig stilig idé, og brukast mykje i programmering.
Me vil skrive eit program som kan rekne ut fakultetet av eit tal. Fakultetet finn ein ved å gange talet med alle tal som er mindre enn seg. Til dømes er fakultetet av 4
fakultet(4) = 4 * 3 * 2 * 1 = 24
Trikset med rekursjon er at me kan redusere oppgåva til noko som er veldig likt, men litt enklare. Til dømes kan me sjå at viss me hadde visst fakultetet av 3, så hadde me funne fakultetet av 4 ved å berre gange det med 4:
fakultet(4) = 4 * 3 * 2 * 1 = 4 * fakultet(3)
Vidare kan me finne fakultetet av 3 viss me veit fakultetet av 2 og så vidare:
fakultet(3) = 3 * 2 * 1 = 3 * fakultet(2)
fakultet(2) = 2 * 1 = 2 * fakultet(1)
fakultet(1) = 1
Sjekkliste
-
def fakultet(tal): if tal == 1: return 1 print(fakultet(1))
Her brukar me fleire ting du har sett tidlegare. Hugs at
def
brukast for å lage eigne funksjonar. Her lagar me funksjonenfakultet
som me etterpå kallar inne iprint
-funksjonen. -
def fakultet(tal): if tal == 1: return 1 return tal * fakultet(tal-1) print(fakultet(4))
Denne linja seier at fakultetet til eit tal er talet sjølv ganger fakultetet til talet som er ein mindre.
Prøv å rekne ut fakultetet av andre tal. Forstår du korleis det virkar? Det er nok ein uvant måte å tenke på, så det kan ta litt tid å bli vant 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!