IN1000 høst2024
Introduksjon til objektorientert programmering (Python)
04.01 for-løkker og while-løkker
I denne oppgaven skal du skrive fire forskjellige løkker. Husk å kjøre programmet for å sjekke at løkkene fungerer som de skal.
a) Skriv en for-løkke som skriver ut alle tallene fra 0 til (og med) 10.
b) Skriv en while-løkke som skriver ut alle tallene fra 0 til (og med) 10.
c) Skriv en for-løkke som skriver ut alle elemetene i listen liste
under.
liste = ["Sauer", "er", "myke", "dyr."]
d) Skriv en while-løkke som skriver ut alle elemetene i liste
Hint
Bruk en variabel for indeksene.
a)
for i in range(0, 11):
print(i)
NB: merk at range()
kjører til men ikke med stoppverdien.
b)
teller = 0
while teller != 11:
print(teller)
teller += 1
Eller:
teller = 0
while teller <= 10:
print(teller)
teller += 1
c)
liste = ["Sauer", "er", "myke", "dyr."]
for ord in liste:
print(ord)
Eller med range()
og indekser:
liste = ["Sauer", "er", "myke", "dyr."]
for i in range(len(liste)):
print(liste[i])
d)
liste = ["Sauer", "er", "myke", "dyr."]
indeks = 0
while indeks < len(liste):
print(liste[indeks])
indeks += 1
04.04 For-løkke i ulike beholdere
I denne oppgaven skal du bruke en for-løkke for å iterere gjennom en liste, en mengde, og en ordbok.
a) Bruk en for-løkke for å iterere gjennom følgende liste, og skriv ut alle elementene:
aviser = ["Aftenposten", "VG", "Morgenbladet", "Dagbladet", "Klassekampen"]
b) Bruk en for-løkke for å iterere gjennom følgende mengde, og skriv ut alle elementene:
partall = {10, 8, 6, 4, 2, 0}
c) Bruk en for-løkke for å skrive ut alle navnene (nøkkelverdiene) i følgende ordbok:
kallenavn = {"Roger" : "Roggis", "Magnus" : "Kluten", "Stine" : "Lappen", "Ingeborg" : "Skruen"}
d) Bruk en for-løkke for å skrive ut alle kallenavnene (innholdsverdiene) i ordboken fra c).
a) med en for-each-løkke:
aviser = ["Aftenposten", "VG", "Morgenbladet", "Dagbladet", "Klassekampen"]
for avis in aviser:
print(avis)
Eller med en for-in-range-løkke:
aviser = ["Aftenposten", "VG", "Morgenbladet", "Dagbladet", "Klassekampen"]
for i in range(len(aviser)):
print(aviser[i])
b)
partall = {10, 8, 6, 4, 2, 0}
for tall in partall:
print(tall)
NB: her kan du ikke bruke en for-in-range-løkke fordi mengder ikke har faste indekser for hvert element.
c)
kallenavn = {"Roger" : "Roggis", "Magnus" : "Kluten", "Stine" : "Lappen", "Ingeborg" : "Skruen"}
for navn in kallenavn:
print(navn)
d)
kallenavn = {"Roger" : "Roggis", "Magnus" : "Kluten", "Stine" : "Lappen", "Ingeborg" : "Skruen"}
for navn in kallenavn:
print(kallenavn[navn])
Tips
Om du er interessert, les gjerne mer om ordbokmetoder for å hente ut informasjon fra ordbøker på W3Schools her:
04.05: Enkel trekant
Filnavn: stjernetrekant.py
a) Opprett en variabel stjerner
som har en tom streng som verdi og et heltallvariabel teller
med verdi 0.
b) Skriv en while-løkke som kjører så lenge teller
er mindre enn 9. Hver gang løkken kjører skal du legge til "*" på slutten av stjerner
og skrive den ut. Husk å øke teller
med én for hver gang løkken kjøres.
Eksempel på utskrift:
*
**
***
****
*****
******
*******
********
*********
stjernetrekant.py:
stjerner = ""
teller = 0
while teller < 9:
stjerner = stjerner + "*"
print(stjerner)
teller += 1
04.06: Kopier lister
Filnavn: kopier_liste.py
a) Lag en liste som inneholder strengene "IN1010", "IN1000" og "IN1050".
b) Lag en ny tom liste.
c) Kopier alle strengene fra den første listen til den nye listen ved hjelp av en løkke. Skriv til slutt ut den nye listen.
a)
liste_a = ["IN1010", "IN1000", "IN1050"]
b)
liste_b = []
c)
for element in liste_a:
liste_b.append(element)
print(liste_b)
Tips
Du kan også kopiere en liste med list.copy()
som returnerer en kopi av listen.
liste_b = liste_a.copy()
04.07: Nøstet liste
Filnavn: enkel_rutenett.py
a) Oprett en tom liste o_liste
. Skriv så en for-løkke for å legge til strengen "o" i denne listen 5 ganger.
b) Lag en tom liste stjerneliste
og legg til strengen "*" 5 ganger på samme måte som i a).
c) Lag en liste rutenett
som inneholder o_liste
og stjerneliste
.
d) Legg deretter inn o_liste
en gang til.
e) Skriv ut rutenett[0]
, rutenett[1]
og rutenett[2]
på hver sin linje. Kjør programmet ditt.
f) Endre programmet slik at innholdet av rutenett skrives ut ved hjelp av en enkel for-løkke. Kjør programmet på nytt.
a)
o_liste = []
for e in range (5):
o_liste.append("o")
b)
stjerneliste = []
for e in range (5):
stjerneliste.append("*")
c)
rutenett = [o_liste, stjerneliste]
eller
rutenett = []
rutenett.append(o_liste)
rutenett.append(stjerneliste)
d)
rutenett.append(o_liste)
e)
print(rutenett[0])
print(rutenett[1])
print(rutenett[2])
f)
for e in rutenett:
print(e)
04.08: While-løkker med input
Denne oppgaven har tre deloppgaver som er uavhengige av hverandre. I hver av deloppgavene skal du bruke både input()
og en while-løkke.
a) Lag et program som tar et tall som input fra bruker. Bruk en while-løkke til å skrive ut alle tall fra 0 til og med dette tallet.
b) Lag et annet program som ved hjelp av en while-løkke tar inn input fra brukeren helt til brukeren skriver "slutt". (Da skal programmet avsluttes). Etter hver gang brukeren skriver inn noe, skal programmet skrive ut "hei" til terminalen.
c) Lag et tredje program som ber om et tall fra brukeren inne i en while-løkke, og la løkken kjøre så lenge brukeren taster inn et tall mindre enn 10.
a)
inp = input("Tast et heltall: ")
tall = int(inp)
teller = 0
while teller <= tall:
print(teller)
teller += 1
b)
svar = ""
while svar != "slutt":
svar = input("Fortell meg noe: ")
print("Hei!")
c)
tall = 0
while tall <= 10:
inp = input("Skriv inn et heltall: ")
# Husk å kaste om inp til et heltall
tall = int(inp)
04.09 flat matrise
Filnavn: flat_matrise.py
I denne øvelsen tar vi en matrise (nøstet liste) og gjør den om til en flat liste.
eksempel_matrise = [[0, 1, 2],
[3, 2, 1],
[1, 1, 0]]
a) Bruk en løkke til å gå gjennom eksempel_matrise
og skriv ut hver liste.
b) Bruk en ny løkke inni den første løkken for å gå gjennom hvert av elementene i hver liste og skriv ut elementene.
c) I stedet for å skrive ut elementene, legg til elementene i en ny tom liste. Skriv ut denne listen til slutt.
Forventet utskrift:
[0, 1, 2, 3, 2, 1, 1, 1, 0]
Utfordring: kan du nå endre koden fra c) for å flate ut en nøstet 3D-matrise?
eksempel_3d_matrise = [
[[0, 1, 2], [3, 2, 1]],
[[1, 1, 0], [4, 2, 3], [2, 1, 0]]
]
a)
for liste in eksempel_matrise:
print(liste)
b)
for liste in eksempel_matrise:
for element in liste:
print(element)
c)
flat_liste = []
for liste in eksempel_matrise:
for element in liste:
flat_liste.append(element)
print(flat_liste)
Utfordring
eksempel_3d_matrise = [
[[0, 1, 2], [3, 2, 1]],
[[1, 1, 0], [4, 2, 3], [2, 1, 0]]
]
flat_liste = []
for ytre_liste in eksempel_3d_matrise:
for indre_liste in ytre_liste:
for element in indre_liste:
flat_liste.append(element)
print(flat_liste)