Løsningsforslag, grunnleggende Python

Kom i gang med Python

Oppgave 1:

Vi skal legge inn Python-kode som skriver ut strengen Heisan, alle!, i editoren.

Vi starter Thonny, og skriver

print("Heisan, alle!")

i editoren.

Så skal vi lage ei mappe til Python-filene, og lagre koden der med et velvalgt filnavn. Vi oppretter ei mappe slik vi pleier på vår datamaskin, klikker på «Fil» – «Lagre» i Thonny, navigerer fram til mappa vi laget, skriver inn et passende filnavn, for eksempel heisan, og klikker på «Lagre».

Så skal vi kjøre koden, det gjør vi ved å klikke på den lille, grønne pila over editoren. Python skriver ut Heisan, alle! i kommandofeltet.

Tilbake til oppgaven

Aritmetiske operatorer og regneoperasjoner

Oppgave 1:

Vi skal bruke Python til å regne ut 7 + 42.

I editoren skriver vi

print(7 + 4**2)

Når vi kjører koden, svarer Python 23.

Tilbake til oppgaven

Oppgave 2:

Vi skal beregne 3 + (8 + 2) / 5 * 3 i hodet, eller med penn og papir, og så sjekke resultatet i Python.

Her er operatorer på tre prioritetsnivåer. Parenteser vil bli regnet ut først, deretter vil / og * bli brukt, fra venstre mot høyre, og til slutt vil + bli brukt. Så vi får

3 + (8 + 2) / 5 * 3 → 3 + 10 / 5 * 3 → 3 + 2 * 3 → 3 + 6 → 9

I editoren skriver vi

print(3 + (8 + 2) / 5 * 3)

Når vi kjører koden, svarer Python 9.0. Resultatet er et desimaltall fordi utregningen involverer en divisjon.

Tilbake til oppgaven

Oppgave 3:

Vi skal forklare hvorfor vi får −1 hvis vi skriver -1**2 i Python selv om −1 opphøyd i andre er 1,

Grunnen er at operatoren for eksponentiering har høyere prioritet enn unært minus, så uttrykket blir tolket som -(1**2) = -1.

For å få det riktig må vi sette inn parenteser: (-1)**2.

Tilbake til oppgaven

Variabler

Oppgave 1:

Vi skal regne ut for hånd hvilke verdier for variablene a, b og c som vil bli skrevet ut av Python-koden under.

a = 1
b = 2
c = 3
a = a + b + c
b = a + b + c
c = a + b + c
print(a, b, c)

Det som er viktig å forstå her, er at koden kjører linje for linje fra toppen og nedover, så hvis en verdi endrer seg i ei linje, er det den nye verdien som brukes i neste linje, markert med henholdsvis gult og blått for a og b.

a = a + b + c → a = 1 + 2 + 3 = 6.

b = a + b + c → b = 6 + 2 + 3 = 11.

c = a + b + c → c = 6 + 11 + 3 = 20.

Når vi kjører koden, svarer Python 6 11 20.

Tilbake til oppgaven

Oppgave 2:

Vi skal regne ut for hånd hvilket tall Python-koden under skriver ut:

x = 5
x *= 2
y = x + 3*x
y += 2
print(y)

I første linje gis x verdien 5.
I andre linje gis x verdien av seg selv multiplisert med 2, altså 5*2 = 10.
I tredje linje gis y verdien av x pluss verdien av x multiplisert med 3, altså 10 + 3*10 = 40.
I fjerde linje gis y verdien av seg selv addert med 2, altså 40 + 2 = 42.

Når vi kjører koden, svarer Python 42.

Tilbake til oppgaven

Oppgave 3:

Vi finne to feil i Python-koden under:

x1 = 5
2x = 11
x3 = 2x + X1
print(x3)

Den ene feilen er at 2x ikke er et gyldig variabelnavn fordi det ikke begynner med en bokstav eller understreking. Den andre feilen er at vi gir en verdi til variabelen x1, men senere refererer til X1, som ikke er samme variabel fordi vi bruker liten x i det første tilfellet og stor X i det andre. Kaller vi 2x for x2, og bruker x1 i stedet for X1, får vi koden under, som skriver ut 16, når vi kjører den.

x1 = 5
x2 = 11
x3 = x2 + x1
print(x3)

Tilbake til oppgaven

Strenger

Oppgave 1:

Vi skal analysere Python-koden under og avgjøre hva den skriver ut.

innledning = "HIPP " * 2
hilsen = (innledning + "HURRA! " ) * 3
print(hilsen)

I første linje blir strengen "HIPP " repetert 2 ganger og tilordnet til variabelen innledning. Vi får derfor at innledning = "HIPP HIPP ".
I andre linje blir variabelen innledning først slått sammen med strengen "HURRA! " til "HIPP HIPP HURRA! ". Deretter blir denne strengen repetert 3 ganger og tilordnet til variabelen hilsen. Vi får derfor at hilsen = "HIPP HIPP HURRA! HIPP HIPP HURRA! HIPP HIPP HURRA! ".
I tredje linje blir så denne strengen skrevet ut.

Tilbake til oppgaven

Oppgave 2:

Vi skal skrive Python-kode som tilordner en streng vi selv velger, til variabelen navn, og et tall vi selv velger, til variabelen alder, og så setter sammen navn og alder med en forklarende tekst i en formatert streng som skrives ut med print(). Koden kan se slik ut:

navn = "Metusalem"
alder = 969
print(f"{navn} er {alder} år.")

Tilbake til oppgaven

Datatyper

Oppgave 1:

Vi skal avgjøre hvilken datatype resultatet får når vi gjør forskjellige aritmetiske beregninger.

Beregninger som bare involverer heltall, resulterer i heltall, med mindre vi utfører divisjon. Derfor blir følgende heltall:
2 * 4, som er 8
7 // 3, som er 2

Mens følgende blir flyttall:
4 / 2, som er 2.0

Beregninger som involverer flyttall, resulterer alltid i flyttall, også heltallsdivisjon. Derfor er følgende flyttall:
2 * 4.0, som er 8.0
2.0 * 4.0, som er 8.0
4.0 / 2.0, som er 2.0
7.0 // 3, som er 2.0

Når vi multipliserer et heltall og en streng, blir resultatet en streng. Derfor er følgende en streng:
2 * "hei", som er "heihei"

Vi kan ikke multiplisere et flyttall og en streng. Det følgende resulterer derfor i en feilmelding: 
2.0 * "hei"

Hvilke datatyper en beregning gir, kan vi kontrollere ved hjelp av Python-funksjonen type(). Skriver vi for eksempel

type(7.0 // 3)

svarer Python <class float>.

Tilbake til oppgaven

Innebygde Python-funksjoner

Oppgave 1:

Det finnes ikke løsningsforslag til denne oppgaven, som bare dreier seg om å eksperimentere.

Oppgave 2:

Koden under bruker 3 kodelinjer på å konvertere to strenger til flyttall og finne det største av de to tallene ved hjelp av funksjonen max(), og vi skal skrive om koden slik at alt utføres i en enkelt kodelinje.

x = float("2.35")
y = float("2.36")
z = max(x, y)

Vi erstatter x i max() med funksjonen som returnerer verdien til x, altså float("2.35"), og tilsvarende for y:

z = max(float("2.35"), float("2.36"))

Tilbake til oppgaven

Innlesing

Oppgave 1:

Vi skal skrive Python-kode som spør etter og leser inn et mobilnummer, og så skriver ut Ringer deg på etterfulgt av nummeret som blir skrevet i inn.

Når vi skal lese inn noe, bruker vi funksjon input(), og vi angir et passende prompt som argument, for eksempel:

mobilnr = input("Hva er mobilnummeret ditt? ")

Her vil strengen brukeren skriver inn, bli tilordnet variabelen mobilnr. Denne kan vi så skrive ut i en formatert streng, for eksempel slik:

print(f"Ringer deg på {mobilnr}")

Alternativt kan vi droppe variabelen mobilnr og bruke returverdien fra input() direkte i et argument til print().

print(f"Ringer deg på {input('Hva er mobilnummeret ditt? ')}")

Men den siste varianten er kanskje i overkant uoversiktlig. Legg også merke til at vi i den siste varianten må bruke enkle anførselstegn på strengen 'Hva er mobilnummeret ditt? ' fordi denne strengen ligger inni en streng avgrenset av doble anførselstegn.

Tilbake til oppgaven

Oppgave 2:

Vi skal skrive Python-kode som først spør etter fornavn, så etter etternavn, og så skriver ut Hei, etterfulgt av fornavn og etternavn.

Denne oppgaven følger malen fra forrige oppgave, vi må bare utvide med å bruke input() to ganger:

fornavn = input("Hva er fornavnet ditt? ")
etternavn = input("Hva er etternavnet ditt? ")
print(f"Hei, {fornavn} {etternavn}!")

Å slå disse tre linjene sammen etter mal fra det vi gjorde i forrige oppgave vil bli veldig uoversiktlig, selv om det teknisk sett ikke er noe i veien for det.

Tilbake til oppgaven

Oppgave 3:

Vi skal skrive Python-kode som leser inn verdien til to heltall, x og y, og så skriver ut tallene og produktet av dem.

Denne oppgaven følger malen fra forrige oppgave, men vi må huske å bruke funksjonen int() til å konvertere strengene vi leser inn til heltall:

x = int(input("Oppgi verdien til x: "))
y = int(input("Oppgi verdien til y: "))
print(f"{x} * {y} = {x*y}")

Tilbake til oppgaven