Lister
Oppgave 1:
Vi har lista demo, som ser slik ut:
Så skal vi avgjøre hvordan lista vil se ut etter at vi har kjørt følgende kode i Python:
demo[1] = demo[2]
demo[3] = demo[4]
Vi husker at indeksering starter på 0, så elementet med indeks 1 er "b", elementet med indeks 2 er "c", elementet med indeks 3 er "d", og elementet med indeks 4 er "e".
Så først erstattes "b" med "c", og lista ser slik ut:
Deretter erstattes "d" med "e", og lista ser slik ut:
Vi kontrollerer ved å skrive kode som først oppretter demo, deretter gjør endringene, og til slutt skriver demo ut:
demo = ["a", "b", "c", "d", "e"]
demo[1] = demo[2]
demo[3] = demo[4]
print(demo)0
Vi får skrevet ut ['a', 'c', 'c', 'e', 'e'].
Tilbake til oppgaven
Oppgave 2:
Vi har lista demo, med 5 elementer, og skal forklare hvorfor vi får feilmeldingen "IndexError: list index out of range" når vi skriver
print(demo[5])
Siden indeksering starter på 0, refererer demo[5] til et sjette element som ikke finnes, og vi får derfor en feilmelding.
Tilbake til oppgaven
Oppgave 3:
Vi oppretter variabelen diverse slik:
diverse = [3, "2", 1.0]
Så skal vi avgjøre hvilken datatype følgende da har:
-
diverse. Dette er ei liste.
diverse[0]. Dette er element 0 i lista diverse, som er et heltall.
diverse[1]. Dette er element 1 i lista diverse, som er en streng.
diverse[2]. Dette er element 2 i lista diverse, som er et flyttall.
For å sjekke kjører vi koden
diverse = [3, "2", 1.0]
print(type(diverse))
print(type(diverse[0]))
print(type(diverse[1]))
print(type(diverse[2]))
Tilbake til oppgaven
Opprette lister
Oppgave 1:
Vi skal skrive kode for å opprette følgende:
-
- Ei liste som heter lottotrekning og inneholder tallene 2, 9, 10, 15, 16, 22 og 26.
- Ei liste som heter basis og inneholder 10 tall som alle er lik 1.
- Ei liste som heter hurra og inneholder 3 strenger som alle er
"hipp".
- Ei liste som heter lottotall og inneholder tallene fra og med 1 til og med 34.
Etterpå skal vi bruke print() for å sjekke at listene er blitt riktige.
I lottotrekning er det ikke noe system i tallene, så vi må opprette lista ved å ramse opp innholdet:
lottotrekning = [2, 9, 10, 15, 16, 22]
I basis skal alle tallene være lik 1, så vi kan opprette lista ved å angi et element som er 1, og så indikere at dette skal gjentas 10 ganger:
basis = [1] * 10
hurra følger samme mønster som basis, så vi skriver:
hurra = ["hipp"] * 3
I lottotall skal tallene være en følge fra 1 til 34, så lista kan vi opprette ved å bruke list() og range():
lottotall = list(range(1, 35))
For å sjekke innholdet, skriver vi
print(lottotrekning)
print(basis)
print(hurra)
print(lottotall)
Tilbake til oppgaven
Liste-metoder
Oppgave 1:
Vi skal skrive Python-kode som oppretter lista demo, som ser slik ut:
Deretter skal vi skrive Python-kode som
-
- Legger til 9 på slutten.
- Setter inn −4 foran elementet med indeks 3.
- Fjerner og skriver ut elementet med indeks 1.
- Fjerner elementet med verdi 4.
- Utvider lista med lista [6, 3, 5].
Vi oppretter først lista
demo = [7, -3, 8, 4, 8]
For å legge til 9 på slutten skriver vi
demo.append(9)
For å sette inn −4 foran elementet med indeks 3 skriver vi
demo.insert(3, -4)
For å fjerne og skrive ut elementet med indeks 1 skriver vi
print(demo.pop(1))
For å fjerne verdien 4 skriver vi
demo.remove(4)
For å utvide lista med lista [6, 3, 5] skriver vi
demo.extend([6, 3, 5])
<eller
demo += [6, 3, 5]
Etter hver operasjon skriver vi lista ut:
print(demo)
Tilbake til oppgaven
Lister i Python Tutor
Oppgave 1:
Vi skal forsøke å forutse hva som vil skje i Python Tutor når vi kjører koden under, linje for linje.
kvadrattall = []
for n in range(1, 5):
kvadrattall.append(n**2)
Ved første klikk på «Next >» opprettes kvadrattall som en variabel med ei pil til ei tom liste. Ved andre klikk opprettes n som en variabel med verdi 1. Ved tredje klikk legges n2, det vil si 12 = 1 inn som første element i lista. Ved påfølgende klikk økes verdien til n med 1, og n2 legges til bakerst i lista. Dette fortsetter inntil n har fått verdien 4, og 42 = 16 er lagt til. (Vi husker at sluttverdien i range() ikke tas med, så 4 er siste verdi for n.) Resultatet ser slik ut:

Tilbake til oppgaven
Gjennomløpe lister
<>Oppgave 1:
Vi skal skrive Python-kode som oppretter ei liste som inneholder alle oddetall fra og med 1 til og med 19, og skriver dem ut, ett for ett.
For å generere oddetallene skriver vi range(1, 21, 2), som vil generere tall i skritt på 2 fra og med 1 inntil 21. (Det vil gjøre samme nytte å bruke 20 som sluttverdi, men vi holder oss til oddetall for logikkens skyld.) range() bruker vi så som argument til list(). Deretter bruker vi ei for-løkke til å hente ut og skrive ut tallene i lista. Koden kan se ut som vist under. Vi har kalt lista oddeliste, men den kan hete hva som helst.
oddeliste = list(range(1, 21, 2))
for oddetall in oddeliste:
print(oddetall)
Tilbake til oppgaven
Oppgave 2:
Vi skal endre koden fra oppgave 1 slik at også nummeret på oddetallet skrives ut, sammen med litt forklarende tekst. Vi tar da i bruk enumerate() med startverdi 1, og bruker en f-streng i utskriften. Koden kan se slik ut:
oddeliste = list(range(1, 21, 2))
for nummer, oddetall in enumerate(oddeliste, start = 1):
print(f"Oddetall nummer {nummer} er {oddetall}")
Tilbake til oppgaven
Oppgave 3:
Vi skal endre koden fra oppgave 1 slik at den bruker indekser til å skrive ut lista med oddetallene i omvendt rekkefølge.
Vi bruker da range() til å generere indekser som går fra siste indeks ned til første. Koden kan se ut som vist under.
oddeliste = list(range(1, 21, 2))
for n in range(len(oddeliste) - 1, -1, -1):
print(oddeliste[n])
Startverdien til range() blir len(oddeliste) − 1. Vi må trekke fra 1 fordi siste indeks i ei liste med n elementer er n − 1. Sluttverdien blir −1 fordi siste verdi i range() ikke tas med, og vi må ha med tallet 0. Skrittverdien blir −1 fordi vi går nedover i skritt på 1.
Alternativt setter vi startverdien til len(oddeliste) og sluttverdien til 0, og trekker fra 1 når vi bruker indeksen, slik det er vist under.
oddeliste = list(range(1, 21, 2))
for n in range(len(oddeliste), 0, -1):
print(oddeliste[n - 1])
Tilbake til oppgaven
«break»
Oppgave 1:
En student har skrevet koden under, som er ment å la brukeren skrive inn en streng, og så skrive ut en melding om strengen inneholder minst én vokal::
streng = input("Streng å søke i: ")
for vokal in "aeiouyæøå":
if vokal in streng:
print("Strengen inneholder vokal.")
else:
print("Strengen inneholder ingen vokaler.")
Men koden virker ikke som tenkt, og vi skal forklare hva problemet er og skrive koden riktig.
Problemet er at koden for hver enkelt vokal i strengen "aeiouyæøå" skriver ut om akkurat den vokalen finnes i strengen eller ikke. Her må vi i stedet bruke break og else:
streng = input("Streng å søke i: ")
for vokal in "aeiouyæøå":
if vokal in streng:
print("Strengen inneholder vokal.")
break
else:
print("Strengen inneholder ingen vokaler.")
Hvis vi i denne koden finner en vokal i strengen, får vi skrevet ut teksten Strengen inneholder vokal., og gjennomløpet av løkka avbrytes med break. else-blokka blir da ikke utført. Hvis løkka ikke blir avbrutt, men kjøres til siste vokal er sjekket, blir else-blokka utført, og teksten Strengen inneholder ingen vokaler. skrives ut.
Tilbake til oppgaven
Søke i lister
Oppgave 1:
Vi skal skrive kode som oppretter lista ensifrede, som inneholder heltallene fra og med 1 til og med 9, og skriver ut hvor mange av tallene i lista som er delelige med 4.
For å opprette lista bruker vi hintet, og skriver list(range(1, 10)).
Så bruker vi ei for-løkke til å gjennomløpe lista og telle hvor mange tall i lista som er delelige med 4. Koden kan se slik ut:
ensifrede = list(range(1, 10))
antall = 0
for tall in ensifrede:
if tall % 4 == 0: # Tallet er delelig med 4
antall += 1
print(f"Lista inneholder {antall} tall som er delelige med 4.")
Tilbake til oppgaven
Opprette lister med inline-«for»
Oppgave 1:
Vi har koden under, som oppretter ei liste, y, med kvadratet av heltallene fra 1 til 10.
y = []
for n in list(range(1, 11))
y.append(n**2)
Så skal vi skrive om koden slik at den bruker inline-for til å opprette y. Koden kan se slik ut:
y = [n**2 for n in list(range(1, 11))]
Tilbake til oppgaven
Oppgave 2:
Vi har koden under, som oppretter ei liste, x, med heltallene fra 1 til 10, og ei liste, z, med 5n2 + 3n − 4 for hver n i x.
x = list(range(1, 11))
z = []
for n in x:
z.append(5 * n**2 + 3 * n - 4)
Så skal vi skrive om koden slik at den bruker inline-for til å opprette z. Koden kan se slik ut:
x = list(range(1, 11))
z = [5 * n**2 + 3 * n - 4 for n in x]
Tilbake til oppgaven
Dictionaries
Oppgave 1:
Vi skal skrive kode som
-
- Oppretter en dictionary som heter landsprefiks, og inneholder følgende nøkkel-verdi-par:
"Afghanistan": 93, "Albania": 355, "Algerie": 213, "Andorra": 0, "Angola": 244.
Vi oppretter landsprefiks som en dictionary ved å angi par med nøkler og verdier mellom krøllparenteser:
landsprefiks = {
"Afghanistan": 93,
"Albania": 355,
"Algerie": 213,
"Andorra": 0,
"Angola": 244
}
-
- Endrer verdien tilknyttet nøkkelen
"Andorra" til 376 og legger til paret "Anguilla": 1264.
Vi bruker metoden update() og skriver:
landsprefiks.update({"Andorra": 376, "Anguilla": 1264})
Alternativt kan vi skrive
landsprefiks["Andorra"] = 376
landsprefiks["Anguilla"] = 1264
-
- Slår opp og skriver ut verdien knyttet til nøkkelen
"Angola".
Vi bruker metoden get() med "Angola" som nøkkel, og skriver:
print(landsprefiks.get("Angola"))
-
- Slår opp og skriver ut meldingen
"Ukjent land" ved oppslag med nøkkelen "Argentina".
Vi bruker igjen get(), men tar med "Ukjent land" som en streng get() skal returnere hvis nøkkelen ikke finnes:
print(landsprefiks.get("Argentina", "Ukjent land"))
Tilbake til oppgaven
Telle med dictionaries
Oppgave 1:
Vi har koden under, som bruker funksjonen randint() fra modulen random til å simulere kast med to terninger, og registrere summen av antall øyne på de to terningene.
from random import randint
oyne = randint(1, 6) + randint(1, 6)
Så skal vi skrive Python-kode som gjør en million slike simuleringer og teller opp og skriver ut hvor ofte de forskjellige summene av øyne forekommer. Utskriften skal være sortert på sum øyne.
Vi bruker de samme mekanismene som i eksempelet med å telle forekomster av tegn i en streng. Vi må også ha ei løkke som gjennomløpes en million ganger.
Koden kan se slik ut:
from random import randint
antall = {}
for _ in range(1000000):
oyne = randint(1, 6) + randint(1, 6)
antall.update({oyne: antall.get(oyne, 0) + 1})
antall = sorted(antall.items())
print(antall)
Tilbake til oppgaven