Level 3Lærerveiledning - Kalkulator

Skrevet av: Øistein Søvik, Vegard Tuset

Kurs: Python
Tema: Tekstbasert
Fag: Matematikk, Programmering
Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole
Til oppgave

Om oppgaven

I denne oppgaven skal elevene lage en kalkulator helt på egenhånd. Det er meningen at kalkulatoren skal kunne legge sammen, trekke fra, gange og dele to tall på hverandre.

checkOppgaven passer til:

Fag: Matematikk, Programmering, IT1

Anbefalte trinn:7.-VG2. trinn

Tema: Aritmetikk, if-setninger, brukerinteraksjon, funksjoner

Tidsbruk: Dobbeltime

Kompetansemål

Forslag til læringsmål

Forslag til vurderingskriterier

Forutsetninger og utstyr

Fremgangsmåte

Her kommer tips, erfaring og utfordringer til de ulike stegene i den faktiske oppgaven. Klikk her for å se oppgaveteksten.

Sammenlikning av tekst

En naturlig måte å løse oppgaven for elevene på er å sammenlikne en tekststreng med en operator. Et hint en kan gi elevene er å spørre hva følgende kode gir ut:

a = '*'
print(a == '*')

Der det logiske uttrykket som står i parentesene kan kombineres med en if-setning for å finne ut hvilken operator brukeren prøver å bruke. En som er mer erfaren med Python vil kanskje bemerke seg at == ikke er veldig "Pythonisk". Filosofien til python er at en skal i størst mulig grad strebe etter å uttrykke seg i klartekst med ord. Det er derfor vi for eksempel skriver for element in list. Med dette i tankene kan koden ovenfor skrives som

a = '*'
print(a is '*')

Men merk at det er noen fallgruver med denne metoden. Hva skjer om du kjører følgende kode?

a = 19998989890
b = 19998989889 +1
print(a is b)

Grunnen til at koden ovenfor gir ut False handler om at is sammenligner to objekter i minnet, mens == sammenligner verdien til objektene. Kort oppsumert bruker vi gjerne isfor å sammenlikne teststrenger eller objekter mens == forbeholdes størrelser.

Robusthet med tekst som input

Noen elever ergrer seg kanskje over at om en skriver inn * så godtar ikke programmet dette som gyldig innputt. Dette er fordi Python sammenlikner om strengene er nøyaktig lik, så mellomrom godtas ikke. En måte å løse dette problemet på er å bruker strip() kommandoen som fjerner tomromm foran og bak tekstrengen. En annen mulighet er å bruke replace()

Forskjellen kan du sjekke ved å kjøre kodesnutten under

text = '  The quick brown fox jumps over the lazy dog  '
print(text)
print(text.strip())
print(text.replace(' ','')

Spiller det noen rolle i denne oppgaven om en bruker replace() eller strip()?

Variasjoner

Eksterne ressurser

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!