Skip to content
Snippets Groups Projects
Commit 950d2583 authored by vetlemangrud's avatar vetlemangrud
Browse files

Legg til ØF7

parent 66b97bec
No related branches found
No related tags found
No related merge requests found
Ovingsforelesninger/ØF7/bilder/dictionary-funksjoner.jpg

34.1 KiB

Ovingsforelesninger/ØF7/bilder/fil-funksjoner.jpg

77.7 KiB

Ovingsforelesninger/ØF7/bilder/number_file.jpg

19.3 KiB

Ovingsforelesninger/ØF7/bilder/sett_funksjoner.jpg

34.6 KiB

1 2 3 4 5
6 7 8 9 10
1 2 4 5 6
10 11 12 13 100
\ No newline at end of file
%% Cell type:markdown id: tags:
# Øvingsforelesning 7 - ITGK
Sets, dictionaries, og filbehandling
%% Cell type:markdown id: tags:
# Sets
%% Cell type:markdown id: tags:
## Forklaring av Sets
Et **sett** er en uordnet samling av elementer som er itererbar, muterbar og ikke har duplikate elementer. Det fungerer på mange måter likt som en liste; man kan eksempelvis også legge til elementer i sett. Et sett har ikke indekser, så man kan **ikke** aksessere elementer ved hjelp av indeks som man gjør med lister og strenger.
%% Cell type:code id: tags:
``` python
mitt_sett = set(["a", "b", "c"])
print(mitt_sett)
```
%% Cell type:markdown id: tags:
For å legge til et element i settet kan vi bruke `.add()`-funksjonen:
%% Cell type:code id: tags:
``` python
mitt_sett.add("d")
print(mitt_sett)
```
%% Cell type:markdown id: tags:
For å fjerne et element fra settet kan vi bruke `.discard()`-funksjonen:
%% Cell type:code id: tags:
``` python
mitt_sett.discard("d")
print(mitt_sett)
```
%% Cell type:markdown id: tags:
Dersom vi har en liste med flere forekomster men ønsker å gjøre om til å bare ha én forekomst per element kan vi gjøre om listen til et sett. Siden et sett ikke har duplikate elementer vil det kun beholde en forekomst per element.
%% Cell type:code id: tags:
``` python
duplikate_elementer = [1,1,2,2,4,4,2,1,1,3,3,3]
ingen_duplikater = set(duplikate_elementer)
print(ingen_duplikater)
```
%% Cell type:markdown id: tags:
Hvis vi vil konvertere settet vårt til en liste kan vi gjøre følgende:
%% Cell type:code id: tags:
``` python
min_liste = list(ingen_duplikater)
print(min_liste)
```
%% Cell type:markdown id: tags:
Nå har vi en liste uten duplikate elementer.
%% Cell type:markdown id: tags:
## Test deg frem med sett selv
Kodeblokken under er lagt til for at du skal kunne leke deg litt frem med sett selv. Gjerne kombiner det med konsepter du har lært tidligere som if-setninger, løkker og funksjoner.
%% Cell type:code id: tags:
``` python
# Skriv koden din her
```
%% Cell type:markdown id: tags:
## Set-funksjoner: Nice to know
<img src="bilder/sett_funksjoner.jpg" style="width: 700px;">
%% Cell type:markdown id: tags:
## Oppgave 1 - Sets
%% Cell type:markdown id: tags:
*Du skal på butikken for moren din som ar skrevet en handleliste med mange varer. Da hun er litt glemsk hadde hun glemt at hun allerede har skrevet opp mange av varene tidligere. Det er din oppgave å lage en funksjon som henter ut kun ett av hver vare i handlelisten til moren din*
%% Cell type:code id: tags:
``` python
handleliste = ["Brød", "Melk", "Smør", "Egg", "Melk", "Brød", "Melk"]
```
%% Cell type:markdown id: tags:
a) Lag en funksjon, `unique_items` som tar inn en liste, `l`, som inneholder et ukjent antall elementer som kan forekomme flere ganger. Din oppgave er å returnere en **liste** som *kun* inneholder unike elementer. Dvs. at dersom `[1, 2, 3, 2, 2]` blir sendt inn i funksjonen som `l` skal `unique_items` returnere `[1, 2, 3]`
* Hint: bruk `set()`-funskjonen
* Husk å konvertere settet tilbake til en liste før du returnerer
%% Cell type:code id: tags:
``` python
# Din kode her
```
%% Cell type:markdown id: tags:
*I det du går ut av døren for å gå på butikken så får du en ny handleliste av faren din.*
%% Cell type:code id: tags:
``` python
handleliste_far = ["Brød", "Kulturmelk", "Smør", "Salami", "Tannpasta"]
```
%% Cell type:markdown id: tags:
b) Lag nå en funksjon `combine` som tar inn to lister, `list1` og `list2` og kombinerer varene i de to listene og returnerer en enkelt **liste** med alle unike varer.
%% Cell type:code id: tags:
``` python
# Din kode her
```
%% Cell type:markdown id: tags:
## Oppgave 2 - Sets
%% Cell type:markdown id: tags:
Lag en funksjon `random_set` som prøver ti ganger å legge til et tilfeldig heltall mellom 1 og 10 i et set
* For hvert tall du prøver å legge til, print tallet
* Print til slutt det endelige settet og lengden av settet
**Hint:**
* `my_set.add(verdi)`
* `print(my_set, "har lengde", len(my_set))`
%% Cell type:code id: tags:
``` python
# Skriv inn kode her
```
%% Cell type:markdown id: tags:
# Dictionaries
%% Cell type:markdown id: tags:
## Forklaring av Dictionaries
%% Cell type:markdown id: tags:
En **dictionary** er en muterbar samling av elementer. I motsetning til lister kan *ikke* dictionaries indekseres basert på plass/tall, men indekseres basert på `keys`. På et abstrakt nivå består dictionaries av en `key` med en assosiert `value`.
%% Cell type:markdown id: tags:
Under er det definert en dictionary, `poeng`, som inneholder navn på personer som spiller et spill. Navnet er satt som nøkkel, og hvor mange poeng de har er verdien
%% Cell type:code id: tags:
``` python
poeng = {"Kamilla": 15, "Julian": 10, "Gard": 17, "Frida": 20, "Marco": 13}
```
%% Cell type:markdown id: tags:
For å hente ut en `value` i en dictionary bruker vi den tilhørende `key`-en. Under henter vi ut poengene (value) til Gard (key)
%% Cell type:code id: tags:
``` python
print(poeng["Gard"])
```
%% Cell type:markdown id: tags:
Vi kan også sjekke om en `key` eksisterer i en dictionary. Merk at ved å bruke `value in dictionary` vil den automatisk sjekke keys og ikke values
%% Cell type:code id: tags:
``` python
print("Kamilla" in poeng)
print("Joachim" in poeng)
```
%% Cell type:markdown id: tags:
Hvis vi ønsker å sjekke om en `value` eksisterer i dictionary må vi bruke `.values()`-funksjonen som henter ut verdiene:
%% Cell type:code id: tags:
``` python
print(13 in poeng.values())
```
%% Cell type:markdown id: tags:
På samme måte som med lister, kan vi også iterere gjennom dictionarien ved hjelp av en for-løkke:
%% Cell type:code id: tags:
``` python
for navn in poeng:
print(navn, "har", poeng[navn], "poeng")
```
%% Cell type:markdown id: tags:
## Test deg frem med Dictionary selv
Kodeblokken under er lagt til for at du skal kunne leke deg litt frem med Dictionaries selv. Gjerne kombiner det med konsepter du har lært tidligere som if-setninger, løkker og funksjoner.
%% Cell type:code id: tags:
``` python
# Skriv koden din her
```
%% Cell type:markdown id: tags:
## Dictionary-funksjoner: Nice to know
<img src="bilder/dictionary-funksjoner.jpg" style="width: 700px;">
%% Cell type:markdown id: tags:
## Oppgave 3 - Dictionaries
%% Cell type:markdown id: tags:
*Du har fått beskjed om å ta vare på alle prisene til elementene i handlelisten*
%% Cell type:markdown id: tags:
a) Lag en ny dictionary `priser` som inneholder følgende elementer som key med korresponderende pris som value. Print ut prisen til 'Brød' etter den er definert.
* 'Brød': 23
* 'Melk': 17
* 'Egg': 39
* 'Smør': 30
%% Cell type:code id: tags:
``` python
# Skriv inn kode her
```
%% Cell type:markdown id: tags:
*Moren din vil nå ha listen pent printet ut*
%% Cell type:markdown id: tags:
b) Lag en funkjson, `print_prices`, som tar inn en dictionary `priser` og itererer gjennom alle elementene i `priser` og printer ut hver enkelt vare på sin egen linje med korresponderende pris adskilt med `:` og med `kr` på slutten.
%% Cell type:code id: tags:
``` python
# Skriv inn kode her
```
%% Cell type:markdown id: tags:
c) Lag en funksjon `sluttpris`, som tar inn to dictionaries:
* En dictionary, `priser`. Den kan se slik ut: `{"Brød": 23, "Melk": 17, "Kattemat": 3}`.
* En dictionary `handlekurv` som kan se slik ut: `{"Melk": 2, "Egg": 4}`. Dette betyr at det ligger to melk og fire egg i handlekurven.
Returner total pris på handlekurven, ved hjelp av de to dictionariene. Dersom handlekurven inneholder en vare som ikke finnes i `priser` så skal funksjonen returnere `-1`.
%% Cell type:code id: tags:
``` python
priser = {"Brød": 23, "Melk": 17, "Kattemat": 3, "Egg": 1}
handlekurv = {"Melk": 2, "Egg": 4}
```
%% Cell type:code id: tags:
``` python
# Skriv inn kode her
```
%% Cell type:markdown id: tags:
<br><br>
%% Cell type:markdown id: tags:
# Filbehandling
%% Cell type:markdown id: tags:
## Forklaring av filer
%% Cell type:markdown id: tags:
En **fil** er et sted du kan lagre data eller informasjon som lagres i minnet til datamaskinen din. Når du definerer variabler i koden din lagres de i korttidsminnet, mens en fil lagres i langtidsminnet til datamaskinen.
%% Cell type:markdown id: tags:
I kodeblokken under oppretter vi filen `min_fil.txt`. Den lagres på samme sted som notebooken ligger. `w` er modusen vi bruker, og forteller at filen er i skrivemodus.
%% Cell type:code id: tags:
``` python
fil = open("min_fil.txt","w")
```
%% Cell type:markdown id: tags:
Vi kan gjøre flere ting med en fil, blant annet *skrive* til den og *lese* fra den. Under skriver vi 10 linjer til filen hvor det står `Dette er linje i` for hver linje 1-10, ved bruk av `.write()`-funksjonen.
%% Cell type:code id: tags:
``` python
for i in range(1,11):
fil.write("Dette er linje " + str(i) + "\n")
```
%% Cell type:markdown id: tags:
Når vi er ferdig med å utføre handlinger på en fil, **må vi huske å lukke den**. Dette er blant annet fordi at å holde filer åpne i kortiddsminnet er kostbart for datamaskinen din.
%% Cell type:code id: tags:
``` python
fil.close()
```
%% Cell type:markdown id: tags:
For å se om handlingen over var vellykket forsøker vi å lese fra filen ved bruk av `.read()`-funksjonen. Siden vi har lukket filen må vi åpne den på nytt.
%% Cell type:code id: tags:
``` python
fil = open("min_fil.txt")
innhold = fil.read()
print(innhold)
```
%% Cell type:markdown id: tags:
Merk at dersom vi viser innhold, så ser det ikke helt lesbart ut da characters som linjeskift ser ut som `\n` i teksten. For å få det på et fint format, kan vi bruke `print`-funksjonen som endrer `\n` og andre white-space-karakterer til slik vi ønsker å se dem
%% Cell type:code id: tags:
``` python
print(innhold)
```
%% Cell type:code id: tags:
``` python
fil.close()
```
%% Cell type:markdown id: tags:
Vi kan også bruke en syntaks som lukker filen for oss automatisk. Dette er nyttig fordi den lukkes selv om en error oppstår, uten at vi trenger gjøre no ekstra. Du kan lese mer om `with` [her](https://docs.python.org/3/reference/compound_stmts.html#the-with-statement), men dette er skrevet på veldig teknisk språk så ikke vær bekymret om det ikke gir noe mening.
%% Cell type:code id: tags:
``` python
with open("min_fil.txt", "r") as fil:
print(fil.readlines())
```
%% Cell type:markdown id: tags:
## Test deg frem med filer selv
Kodeblokken under er lagt til for at du skal kunne leke deg litt frem med Filer selv.
%% Cell type:code id: tags:
``` python
# Skriv koden din her
```
%% Cell type:markdown id: tags:
## Fil-funksjoner: Nice to know
<img src="bilder/fil-funksjoner.jpg" style="width: 700px;">
%% Cell type:markdown id: tags:
## Oppgave 4 - Filbehandling
%% Cell type:markdown id: tags:
a) Skriv en funksjon `produce_number_file` som tar inn som inputparametere:
* `filename`: et filnavn
* `a`: et tall
* `b`: et tall
Programmet skal opprette en fil med navn `filnavn` og skrive 100 tilfeldige tall mellom a og b, med linjeskift mellom, til en fil med navnet filnavn. Bildet under er en visualisering av filen. Se filen `numbers.txt` for eksempel på utskrift
* Hint: `file.write("\n")`
%% Cell type:markdown id: tags:
<img src="bilder/number_file.jpg" style="width: 400px;">
%% Cell type:code id: tags:
``` python
# Skriv inn kode her
```
%% Cell type:markdown id: tags:
b) Skriv en funksjon `append_to_file` som tar inn som inputparametere
* `filename`: et filnavn til en eksisterende fil
* `a`: et tall
* `b`: et tall
Programmet skal appende/legge til 20 nye tilfeldige tall i filen, ett tall på hver linje
%% Cell type:code id: tags:
``` python
# Skriv inn kode her
```
%% Cell type:markdown id: tags:
c) Skriv en funksjon, `from_file_to_list` som tar inn et parameter `filename` som er filnavnet til en fil med ett tall på hver linje, og putter alle tallene i en liste Listen med tall skal returneres.
Det du ønsker å gjøre:
* Åpne filen du skal lese fra
* For hver linje i filen: `for line in file.readlines():`
* Preprosesser (Fjern linjeskift ect) `line.strip()`
* Legge det i en liste eller annen datastruktur
%% Cell type:code id: tags:
``` python
# Skriv inn kode her
```
%% Cell type:markdown id: tags:
d) Skriv en funksjon, `from_file_to_list`, som tar inn et parameter `filename` som er filnavnet til en fil med fem tall på hver linje, separert med mellomrom. Funksjonen skal returnere en liste med alle tallene i filen.
Test ut funksjonen på filen `numbers_multiline.txt` som ser slik ut:
```
1 2 3 4 5
6 7 8 9 10
1 2 4 5 6
10 11 12 13 100
```
Sørg for at alle verdiene lagres som heltall (alt som hentes fra en fil er strenger)
%% Cell type:code id: tags:
``` python
# Skriv din kode her
```
%% Cell type:markdown id: tags:
e) Skriv en funksjon `count_occurences` som tar inn et parameter `filename` som er filnavnet til en fil med ett tall på hver linje. Deretter skal funksjonen returnere en dictionary med alle **distinkte** tall i denne filen som keys, og antall forekomster av dette tallet i filen skal være verdien i dictionary-en.
%% Cell type:code id: tags:
``` python
# Skriv din kode her
```
%% Cell type:markdown id: tags:
## Unntakshåndtering
Hva gjør du om filen ikke finnes?
%% Cell type:code id: tags:
``` python
with open("feil_fil.txt", "r") as file:
print(file.read())
```
49
40
71
65
56
9
79
5
69
83
10
48
13
33
62
80
74
18
8
59
91
62
51
56
1
93
9
51
43
82
70
69
71
79
30
78
39
61
72
40
19
28
12
46
1
65
88
65
73
47
6
1
44
22
59
15
91
96
27
99
84
99
80
73
63
75
57
63
82
82
50
81
84
24
1
8
51
36
12
82
35
32
63
77
41
21
47
24
10
86
37
14
24
13
90
49
95
87
86
36
99
18
55
28
39
25
67
73
40
89
54
93
31
47
69
23
59
53
68
84
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment