Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Filtrering:

05.01: Lesing fra fil

Filnavn: les_fil.py og navn.txt

a) Opprett en tekstfil kalt navn.txt, som du legger i samme mappe som les_fil.py. Tekstfilen skal inneholde navnene under:

Anne
Bjarne
Carina
David
Elise
Frode

b) Bruk open() for å åpne navn.txt i pythonprogrammet.

c) Opprett en tom liste med navn navn_liste

d) Skriv en løkke som går gjennom filen, linje for linje, og legger linjene inn i listen.

NB: Husk å lukke filen når du er ferdig

e) Skriv ut listen til terminal.

b)

fil = open("navn.txt", "r")

c)

navn_liste = []

d)

for linje in fil:
    navn_liste.append(linje)
fil.close()

e)

print(navn_liste)

05.05 Enkle tabulære filer

I denne øvelsen skal du skrive flere funksjoner som kan lese tabulære filer, dvs. som har data organisert i rader og kolonner, og lagre innholdet i forskjellige samlinger.

Del 1

Filnavn: bil.txt, bil.py

a) Opprett en tekstfil kalt bil.txt, som inneholder følgende tekst og legger i samme mappe som bil.py:

brand:Ford
model:Mustang
year:1964

b) Skriv en funksjon, les_bil(filnavn), i bil.py som kan lese bil.txt. Funksjonen skal...
- ... lage en tom ordbok, resultatet
- ... gå gjennom filen og dele hver linje i to kolonner etter ":" (kolon).
Sørg også for at linjeskift er fjernet.
- ... for hver linje lagre den første kolonnen som ordboknøklen, og den andre kolonnen som ordbokverdien.
- ... returnere ordboken

c) Skriv ut resultatet

Del 2

Filnavn: song_contest.txt, song_contest.py

a) Opprett en tekstfil song_contest.txt som inneholder følgende teskt:

2016 Ukrania
2017 Portugal
2018 Israel
2019 Nederland
2020 avlyst
2021 Italia

b) Skriv en funksjon, les_song_contest(filnavn) i song_contest.py som kan lese song_contest.txt. Funksjonen skal...
- ... opprette to lister, årene og landene
- ... gå gjennom filen og dele hver linje i to kolonner etter mellomrom.
Sørg også for at linjeskift er fjernet.
- ... lagre den første verdien i listen årene og den andre verdien i listen landene.
- ... opprette en ordbok song_contest som inneholder nøkkelen år med listen av årene som verdi og nøkkelen land med listen av landene som verdi.
- ... returnere ordboken

c) Skriv ut resultatet

Del 3

Filnavn: poeng.txt, poeng.py

a) Opprett en tekstfil poeng.txt som inneholder følgende teskt:

Mari:3,5,3,6
Erik:2,4,5,3
Silje:3,5,4,6
Ola:2,5,4,5

b) Skriv en funksjon, les_poeng(filnavn) i poeng.py som kan lese poeng.txt. Funksjonen skal...
- ... opprette en tom ordbok poeng
- ... gå gjennom filen og dele hver linje i to kolonner etter ":" (kolon).
Sørg også for at linjeskift er fjernet.
- ... dele opp strengen av antall poeng på "," (komma). Dette resulterer i en liste.
- ... sette dataen i ordboken poeng der navn er nøkkelen og listen av poeng til personen er tilhørende verdi.
- ... returnere ordboken

c) Skriv ut resultatet

Utfordring: Skriv om funksjonen i Del 3 slik at verdiene i ordboken poeng er et heltall som er summen av alle tall i listen i stedet for listen selv.

Del 1

def les_bil(filnavn):
    # oppretter ordboken
    resultatet = {}

    for linje in open(filnavn):
        linje = linje.strip()   
        kolonner = linje.split(":")    
        noekkel = kolonner[0]
        verdi = kolonner[1]

        # sette data i ordboken
        resultatet[noekkel] = verdi

    return resultatet

print(les_bil("bil.txt"))

Del 2

def les_song_contest(filnavn):
    årene = []
    landene = []

    for linje in open(filnavn):
        linje = linje.strip()
        kolonner = linje.split()
        årene.append(kolonner[0])
        landene.append(kolonner[1])

    song_contest = {"år": årene, "land": landene}
    return song_contest

print(les_song_contest("song_contest.txt"))

Alternativ løsning:

def les_song_contest(filnavn):
    årene = []
    landene = []

    for linje in open(filnavn):
        linje = linje.strip()
        år, land = linje.split()
        årene.append(år)
        landene.append(land)

    song_contest = {"år": årene, "land": landene}
    return song_contest

print(les_song_contest("song_contest.txt"))

Del 3

def les_poeng(filnavn):
    resultatet = {}

    for linje in open(filnavn):
        linje = linje.strip()
        kolonner = linje.split(":")
        navn = kolonner[0]
        poeng = kolonner[1].split(",")

        resultatet[navn] = poeng

    return resultatet

print(les_poeng("poeng.txt"))

c) - utfordring

def les_poeng(filnavn):
    resultatet = {}

    for linje in open(filnavn):
        linje = linje.strip()
        kolonner = linje.split(":")
        navn = kolonner[0]
        poeng = kolonner[1].split(",")

        total = 0
        for p in poeng:    # må kastes om til et heltall
            total += int(p)

        resultatet[navn] = total

    return resultatet

print(les_poeng("poeng.txt"))

05.06 Skriv til filer

a) Lag en prosedyre skriv_dna() som skriver ut følgende linjer:

O---o
 O-o
  O
 o-O
o---O
Hint

Du kan bruke print() flere ganger, eller kalle print() bare 1 gang og bruke linjeskift tegn "\n"


b) Endre prosedyren skriv_dna() slik at den tar inn et filnavn som parameter og skriver strengen til filen i stedet for å skrive den ut til terminalen. Husk å lukke filen.

c) Kall prosedyren skriv_dna() tre ganger med samme filnavn som argumentet. Hvordan ser den resulterende filen ut? Ser den ut som forventet?

d) Bonus: Les documentasjonen om mode-argumentet her. Endre prosedyren skriv_dna() slik at den bruker 'append mode' i stedet for 'write mode' for å løse problemet fra c), og kjør programmet igjen.

a)

def skriv_dna():
    print("O---o")
    print(" O-o")
    print("  O")
    print(" o-O")
    print("o---O")

eller

def skriv_dna():
    print("O---o\n O-o\n  O\n o-O\no---O")

b)

def skriv_dna(filnavn):
    fil = open(filnavn, "w")
    fil.write("O---o\n")
    fil.write(" O-o \n")
    fil.write("  O  \n")
    fil.write(" o-O \n")
    fil.write("o---O\n")
    fil.close()

eller

def skriv_dna(filnavn):
    fil = open(filnavn, "w")
    fil.write("O---o\n O-o\n  O\n o-O\no---O\n")
    fil.close()

c) Den resulterende filen inneholder stringen én gang, ikke tre ganger selv om prosedyren er kalt 3 ganger.

d) Bruk mode "a" (append) i stedet for "w" (write)

def skriv_dna(filnavn):
    fil = open(filnavn, "a")
    fil.write("O---o\n O-o\n  O\n o-O\no---O\n")
    fil.close()

skriv_dna("dna_fil.txt")
skriv_dna("dna_fil.txt")
skriv_dna("dna_fil.txt")

05.19: Noen telle-funksjoner

Denne oppgaven har tre deloppgaver som er uavhengige av hverandre. I hver av deloppgavene skal du skrive en funksjon.

a) Skriv en funksjon som tar et tall som parameter og returnerer det dobbelte av tallet.

b) Skriv en funksjon som tar inn en streng og et tall som parameter, og som returnerer True eller False basert på om strengens lengde er større enn tallet.

c) Skriv en funksjon som returnerer antall sifre i et tall. For eksempel er det 3 sifre i tallet 104. Det kan være nyttig å konvertere nummeret til en annen datatype.

a)

def dobbel(tall):
    return tall * 2

b)

def lengreEnnTallet(streng, heltall):
    return len(streng) > heltall

eller

def lengreEnnTallet(streng, heltall):
    if len(streng) > heltall:
        return True
    else:
        return False

c)

def antallSifre(heltall):
    return len(str(heltall))

eller uten len():

def antallSifre(heltall):
    teller = 0
    for tegn in str(heltall):
        teller += 1
    return teller