IN1000 høst2023
Introduksjon til objektorientert programmering (Python)
02.01 Hei på deg
Filnavn: hilsen.py
a) Skriv et program som ber brukeren om å skrive inn navnet sitt og lagrer svaret i en variabel kalt navn
.
b) Skriv en prosedyre si_hei()
som skriver ut "hei"
c) Kall prosedyren si_hei()
tre ganger, og etterpå skriv ut brukerens navn
# a)
navn = input("Hva er navnet ditt? ")
# b)
def si_hei():
print("hei")
# c)
si_hei()
si_hei()
si_hei()
print(navn)
02.02 int, str og float
I denne oppgaven skal du finne ut hva som skrives ut til terminalen. Oppgavene består av kodesnutter, og du må lese ganske nøye for å finne ut hva som kommer til å skje.
Prøv å løse oppgavene uten å kjøre kodesnuttene først!
Hva skrives ut?
a)
print(type(3))
b)
print(type("3"))
c)
print(type(5.0 + 3.5))
d)
print(float("4" + ".8") / 2)
e)
print("3" + "5")
f)
print("3"*3)
g)
print(type(3*"A"))
h)
print(type(int("3")))
i)
print(3 + "3")
j)
print(float(3))
k)
print("1.50" == "1.5")
l)
print(float("1.50") == float("1.5"))
a) int
b) str
c) float
d) 2.4
e) 35
f) 333
g) str
h) int
i) Feilmelding (TypeError). Dette er fordi du ikke kan legge sammen en int
og str
.
j) 3.0
k) False
l) True
02.03 Input og datatyper
Filnavn: datatyper.py
a) Skriv et program som tar inn tre verdier – en streng, et heltall, og et flyttall – og lagrer dem i tre variabler. NB: Gjør b) før du ser på løsningsforslaget.
Hint
input()
returnerer en streng som resultat. Man kan endre datatypen fra streng til en annen datatype med for eksempel int()
eller float()
.
b) Utvid programmet slik at det skrives ut hver verdi og typen til verdien. Sjekk at typen som skrives ut er datatypen som er forventet. Hvis resultatene ikke stemmer, gå tilbake til a).
Hint
Bruk funksjonen type()
c) Kjører programmet gitt de følgende verdiene? (streng, heltall, flyttall)
Prøv å kjøre programmet selv for å se om du hadde rett
- i. "", 0, 3.8
- ii. 1, 2, 3
- iii. 1, -0, 3.8
- iv. 3.8, 3.8, 3.8
d) Utvid programmet med de følgende tilfellene og prøv å skrive ut typen av resultatet. Forklar hva som skjer. Hvis ikke programmet kjører, forklar hvorfor.
- i. Gang heltallet med strengen
- ii. Gang heltallet med flyttallet
- iii. Gang strengen med flyttallet
e) Hva skjer hvis programmet prøver å konvertere et flyttall til et heltall?
a) - b)
streng = input("Skriv inn en streng: ")
heltall = int(input("Skriv inn et heltall: "))
flyttall = float(input("Skriv inn et flyttall: "))
print("Strengen:", streng, "Type:", type(streng))
print("Heltallet:", heltall, "Type:", type(heltall))
print("Flyttallet:", flyttall, "Type:", type(flyttall))
c)
i. Ja, "" blir en tom streng.
ii. Ja, 3 blir 3.0.
iii. Ja, -0 blir 0.
iv. Nei, programmet kræsjer fordi det ikke er mulig å konvertere strengen "3.8" til et heltall.
d)
i.
print("Typen av heltallet * strengen:", type(heltall * streng))
Output:
Typen av heltallet * strengen: <class 'str'>
- Strengen blir satt sammen like mange ganger som verdien av heltallet.
For eksempel:3 * "a"
gir strengenaaa
ii.
print("Typen av heltallet * flyttallet:", type(heltall * flyttall))
Output:
Typen av heltallet * strengen: <class 'float'>
- Resultatet blir det samme som den vanligen matematiske operasjonen og gir et flyttall.
For eksempel:3 * 1.2
gir3.6
iii.
print("Typen av strengen * flyttallet:", type(streng * flyttall))
Output: Feilmelding (TypeError)
- Det er ikke lov å gange en streng med et flyttall.
e) Når et flyttall konverteres til et heltall, blir det rudet ned til nærmeste heltall.
02.04 Hva skrives ut?
Prøv å løse oppgavene uten å kjøre kodesnuttene først!
Hva skrives ut?
a)
print(1+5*2)
b)
print(6/3*4/2)
c)
print(2*5+2*2)
d)
print(4*5+2*3/2)
e)
print(4*(5+2)*3/2)
a)
11
b)
4.0
c)
14
d)
23.0
e)
42.0
02.05: Kodeforståelse
Filnavn: sammenslaaing.py
Vil noen av disse kodesnuttene gi en feilmelding? Begrunn svaret.
Prøv å løse oppgavene uten å kjøre kodesnuttene først!
a)
a = 10
b = "hei!"
c = a + b
print(c)
b)
x = "10"
y = "hei!"
print(x + y)
c)
i = 10
j = "12"
print(i + j)
d) Forsøk å kjøre de tre kodesnuttene hver for seg, og sjekk om du hadde rett.
e) Bruk str()
for å konvertere variabel a
i oppgave a). Konverter variabel j
fra oppgave c) til et heltall på samme måte med funksjonen int()
og kjør programmet på nytt. Hva skrives ut nå?
a) Ja, vi får en TypeError fordi vi prøver å slå sammen en streng og et heltall.
b) Nei. Verdiene av x
og y
er begge strenger og utskriften blir "10hei" etter at de slås sammen.
c) Ja, vi får en TypeError fordi vi prøver å slå sammen en streng og et heltall. Selv om verdien til j
inneholder bare sifre, er verdien en streng og kan dermed ikke slås sammen med et heltall.
e) Utskriften fra oppgave a) blir nå 10hei, mens utskriften fra oppgave c) blir 22.
02.07: Sannhetsverdier
Gitt at verdien av b
er False
, og verdien av x
er 0
, hva er sannhetsverdien til følgende uttrykk?
Prøv å løse oppgavene uten å kjøre kodesnuttene først!
a)
b
b)
x == 0
c)
b and x == 0
d)
b or x == 0
e)
not b and x == 0
f)
not b or x == 0
g)
b and x != 0
h)
b or x != 0
i)
not b and x != 0
j)
not b or x != 0
a) False
b) True
c) False
d) True
e) True
f) True
g) False
h) False
i) False
j) True
02.09: Min utskriftsprosedyre
Filnavn: min_prosedyre.py
a) Lag en prosedyre min_prosedyre
som skriver ut "Hei student!" til terminalen.
b) Endre programmet slik at min_prosedyre
også skriver ut "Velkommen til et nytt semester!" på en annen linje.
c) Lag en ny prosedyre linjeskift
som skriver ut en tom linje.
d) Kall på min_prosedyre
to ganger, men mellom kallene skal du også kalle på prosedyren linjeskift
, slik at det blir et linjeskift mellom hilsene.
def min_prosedyre():
# Oppgave a og b
print("Hei student!")
print("Velkommen til et nytt semester!")
def linjeskift():
# Oppgave c
print()
# Oppgave d
min_prosedyre()
linjeskift()
min_prosedyre()
02.11: Kodeflyt
Dette er en penn- og papiroppgave
Forklar i hvilken rekkefølge de forskjellige linjene utføres når vi kjører programmet ved å skrive tall foran linjene i programmet. Skriv linje-rekkefølgen i følgende tre scenarier:
a) Hvis brukeren taster inn 50
b) Hvis brukeren taster inn 80
c) Hvis brukeren taster inn 12
Prøv å løse oppgavene uten å kjøre kodesnuttene først!
pris = 50
tekst = input("Skriv inn alder: ")
alder = int(tekst)
if alder < 12 or alder > 67:
print("Du må betale", pris*0.5, "kr")
else:
print("Du må betale", pris, "kr")
print("ha en fin dag!")
a)
1| pris = 50
2| tekst = input("Skriv inn alder: ")
3| alder = int(tekst)
|
4| if alder < 12 or alder > 67:
| print("Du må betale", pris*0.5, "kr")
5| else:
6| print("Du må betale", pris, "kr")
|
7| print("ha en fin dag!")
b)
1| pris = 50
2| tekst = input("Skriv inn alder: ")
3| alder = int(tekst)
|
4| if alder < 12 or alder > 67:
5| print("Du må betale", pris*0.5, "kr")
| else:
| print("Du må betale", pris, "kr")
|
6| print("ha en fin dag!")
c) NB: alder
er lik 12, ikke mindre enn 12
1| pris = 50
2| tekst = input("Skriv inn alder: ")
3| alder = int(tekst)
|
4| if alder < 12 or alder > 67:
| print("Du må betale", pris*0.5, "kr")
5| else:
6| print("Du må betale", pris, "kr")
|
7| print("ha en fin dag!")
02.12 Fakta om sauer
Filnavn: sau_fakta.py
I denne oppgaven skal du printe ut 5 fakta om sauer i en prosedyre. Dette skal skje på 5 forkjellige linjer.
a) Skriv prosedyren som skriver ut faktaene.
Forslag til sauefakta:
Sauer er dumme dyr.
Sauer er myke dyr.
Sauer kan lofte 12 ganger sin egen vekt.
Sauer lukter litt som geiter.
Sauen er din venn.
b) Hvordan kan vi nå skrive ut følgende linjer effektivt?
Sauer er dumme dyr.
Sauer er myke dyr.
Sauer kan lofte 12 ganger sin egen vekt.
Sauer lukter litt som geiter.
Sauen er din venn.
*** En gang til! ***
Sauer er dumme dyr.
Sauer er myke dyr.
Sauer kan lofte 12 ganger sin egen vekt.
Sauer lukter litt som geiter.
Sauen er din venn.
Hint
Bruk prosedyren fra a)
a)
def saueFakta():
print("Sauer er dumme dyr.")
print("Sauer er myke dyr.")
print("Sauer kan lofte 12 ganger sin egen vekt.")
print("Sauer lukter litt som geiter.")
print("Sauen er din venn.")
b)
saueFakta():
print("*** En gang til! ***")
saueFakta():
02.13: Volum med feil
Filnavn: volum.py
Finn tre feil i programmet under.
Prøv å løse oppgavene uten å kjøre kodesnutt først (og så kan du prøve å kjøre/fikse koden)
1 | lengde = 3
2 | bredde = 5
3 | volum = lengde * bredde * høyde
4 | Print("Volumet er:" + volum)
- Linje 3:
høyde
er ikke definert. - Linje 4: funksjonen er skrevet med en stor P, men må skrives
print
- Linje 4: Vi brukte pluss i stedet for komma for å sammenkoble volumet med strengen. Vi kan bare bruke pluss hvis vi først kaste den til type streng:
str(volum)