Level 2Mattespel

Skrevet av: Geir Arne Hjelle

Oversatt av: Stein Olav Romslo

Kurs: Python
Tema: Tekstbasert, Spill
Fag: Matematikk, Programmering
Klassetrinn: 5.-7. klasse
Bilde av BokmålPå Bokmål

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.

Illustrasjon av eit ferdig mattespel

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.

checkSjekkliste

  • 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.

checkSjekkliste

  • 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.

checkSjekkliste

  • 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!

checkSjekkliste

  • Når me brukar input til å lese inn svar 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 med str kan me bruke int for å gjere om tekst til tal (hugs at int er ei forkorting for integer som tyder heiltal).

    Endre if-linja i programmet ditt til

    if 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.

checkSjekkliste

  • 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

checkSjekkliste

  • 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 funksjonen fakultet som me etterpå kallar inne i print-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.

Lisens: CC BY-SA 4.0

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!