"I denne oppgaven skal vi skrive til en fil og lese fra en fil."
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"heading_collapsed": true,
"run_control": {
"frozen": true
}
},
"source": [
"## Generelt om filer\n",
"Det kan være lurt å lese dette før du går videre"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Det er ofte nyttig å kunne lagre data til en fil, eller lese data fra en fil når man skriver et program i Python. De mest brukte funksjonene er for åpning, redigering og lukking av eksterne filer. \n",
"* Lister\n",
"* Tilfeldige tall\n",
"\n",
"Når du åpner filen må du spesifisere hvordan du skal bruke filen. Det er derfor viktig å åpne filen på riktig måte. Måten dette gjøres på er som inn-parameter i `open()`-funksjonen, noen eksempler er:\n",
"\n",
"- **'r'** - for lesing av filen (default)\n",
"- **'w'** - for skriving til filen\n",
"- **'a'** - for å legge til data (**a**ppend) til den eksisterende filen\n",
"I denne oppgaven lage du lage en lottosimulator. \n",
"\n",
"I denne oppgaven skal vi bli bedre kjent med hvordan dette fungerer:\n",
"Reglene er som følger:\n",
"\n",
"- For å åpne en fil i Python kan vi skrive: `f = open('filename', Bruksmåte)`. Bruksmåte er enten `'r'`, `'w'` eller `'a'` avhengig av hva hvordan filen skal brukes.\n",
"- For å lese data fra en fil kan vi bruke: `innhold = f.read()`\n",
"- For å legge til data til en fil kan vi skrive: `f.write(data)`\n",
"* Det trekkes ut 7 lottotall og 3 tilleggstall fra og med 1 til og med 34. Alle tallene som trekkes skal være unike.\n",
"* Premier deles ut basert på følgende tabell:\n",
"\n",
"Filer lukkes på følgende måte: `f.close()`"
"Premiergruppe|Premie (kr)\n",
":---|---\n",
"7 rette\t|2 749 455\n",
"6 rette + 1 tilleggstall\t|102 110\n",
"6 rette\t|3 385\n",
"5 rette\t|95\n",
"4 rette + 1 tilleggstall\t|45"
]
},
{
...
...
@@ -67,14 +39,12 @@
"metadata": {
"deletable": false,
"editable": false,
"heading_collapsed": true,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"### Lesing av fil"
"## Oppgave a: frivillig"
]
},
{
...
...
@@ -82,71 +52,39 @@
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Eksempelet under viser lesing av en fil. **Kjør koden under og test det ut da vel!**"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dette er en eksempelfil.\n",
"Lag en liste som heter `numbers` og som inneholder alle heltall fra og med 1 til og med 34.\n",
"\n",
"Her kan man skrive hva man vil.\n",
"\n",
"Men helst ikke for mange hatefulle ytringer.\n"
]
}
],
"source": [
"# LESING AV FIL\n",
"f = open('example_file1.txt','r') #r spesifiserer at man skal lese fra en fil\n",
"innhold = f.read()\n",
"print(innhold)\n",
"f.close()"
"***Skriv koden din i boksen under.***"
]
},
{
"cell_type": "markdown",
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
"ExecuteTime": {
"end_time": "2019-07-03T10:21:03.176781Z",
"start_time": "2019-07-03T10:21:03.167560Z"
}
},
"source": [
"Når man leser en fil slik som over, må man lagre innholdet i en variabel (her bruker vi `innhold`). **Husk alltid å lukke filen!**\n",
"\n",
"Den filen som ble lest fra finner dere her: [example_file1.txt](example_file1.txt). Prøv å endre på filen, lagre den med `file -> save` i toppmenyen for så å kjøre kodeblokken over på nytt. Kodeblokken burde da skrive ut det nye innholdet i filen!"
]
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"heading_collapsed": true,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"### Skriving av fil"
"## Oppgave b: frivillig"
]
},
{
...
...
@@ -154,112 +92,75 @@
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"For å skrive til en fil kan man gjøre slik som under. **Kjør koden under og test!**"
"Lag en liste som heter `my_guess` med 7 tall. Denne listen inneholder tallene som du tipper.\n",
"\n",
"***Skriv koden din i boksen under.***"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hidden": true
"ExecuteTime": {
"end_time": "2019-07-03T10:21:45.639510Z",
"start_time": "2019-07-03T10:21:45.634558Z"
}
},
"outputs": [],
"source": [
"f = open('example_file1.txt','w') #w spesifiserer at filen skal skrives til\n",
"f.write('En hatefull ytring')\n",
"f.close()"
]
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Etter at du har kjørt koden over vil du kunne se at innholdet i [example_file1.txt](example_file1.txt) har endret seg. Hvis du vil kan du bytte ut `'w'` over med `'a'` og se hva som da skjer."
"## Oppgave c: frivillig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Context managers"
]
"metadata": {
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Det er generelt foretrukket i python å bruke _context managers_ når man gjør operasjoner som å skrive til og lese fra fil. De tar hånd om lukking av fila når du er ferdig, og passer på å lukke også dersom koden crasher underveis i en operasjon. Da kan vi være trygge på at vi ikke får korrupte filer.\n",
"Lag en funksjon som tar inn `n` som argument og som trekker ut `n` tall ut av listen `numbers` og legger de i en egen liste. \n",
"For å gjøre ting tilfeldig: `import random` og `random.randint(n,N)` gir tilfeldige tall fra og med n til og med N.\n",
"\n",
"Åpning og lukking av filer med context managere gjøres som følger"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"En hyggelig kommentar\n"
]
}
],
"source": [
"with open('example_file.txt', 'w') as writefile:\n",
" writefile.write(\"En hyggelig kommentar\")\n",
"Eksempel på kjøring:\n",
"\n",
"with open('example_file.txt', 'r') as readfile:\n",
" innhold = readfile.read()\n",
" print(innhold)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Man kan også åpne og lukke flere filer i gangen"
"```python\n",
">>>print(draw_numbers(numbers, 7))\n",
"[16, 33, 5, 20, 7, 4, 8]\n",
"```\n",
"\n",
"***Skriv koden din i boksen under.***"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"En hyggelig kommentar\n",
"---\n",
"Dette er en eksempelfil.\n",
"\n",
"Her kan man skrive hva man vil.\n",
"\n",
"Men helst ikke for mange hatefulle ytringer.\n"
]
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2019-07-03T10:25:33.636784Z",
"start_time": "2019-07-03T10:25:33.631639Z"
}
],
"source": [
"with open('example_file.txt', 'r') as file_0, open('example_file1.txt', 'r') as file_1:\n",
" innhold_0 = file_0.read()\n",
" innhold_1 = file_1.read()\n",
" print(innhold_0, innhold_1, sep=\"\\n---\\n\")"
]
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
...
...
@@ -272,7 +173,7 @@
}
},
"source": [
"## a)"
"#### Hint"
]
},
{
...
...
@@ -286,33 +187,20 @@
}
},
"source": [
"Lag en funksjon `write_to_file(data)` som tar inn strengen `data` og legger denne inn i en fil **my_file.txt**\n",
"\n",
"***Skriv din kode i kodeblokken under***"
"Hint: Bruk funksjonene `pop()` og `append()` for å fjerne og legge til elementer i en liste. Husk at pop fjerner et element i en indeks i lista, den fjerner ikke tallet. Så numbers.pop(rand_num) fjerner elementet på indeks rand_num - altså hvis rand_num er 13 fjernes tallet på indeks 13, ikke tallet 13!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hidden": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Hvis du lurer på om du gjorde riktig kan du kalle på funksjonen og sjekke innholdet i filen her:\n",
"[my_file.txt](my_file.txt)"
"## Oppgave d: frivillig"
]
},
{
...
...
@@ -320,46 +208,46 @@
"metadata": {
"deletable": false,
"editable": false,
"heading_collapsed": true,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"#### Hint"
"Lag funksjonen `comp_list` som sammenligner to lister med tall. Antall like tall i listene skal returneres.\n",
"Her skal du skrive til fil og må derfor benytte deg av\n",
"\n",
"```python\n",
"f = open('my_file.txt', 'w')\n",
"```"
]
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"heading_collapsed": true,
"run_control": {
"frozen": true
}
},
"source": [
"## b)"
"## Oppgave e: frivillig"
]
},
{
...
...
@@ -367,22 +255,35 @@
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Lag en funksjon `read_from_file(filename)` som tar inn strengen `filename` med filnavnet og skriver ut innholdet.\n",
"Lag en funksjon som tar inn antall like tall og like tilleggstall, og returnerer premien du har vunnet.\n",
"\n",
"Eksempel på kjøring:\n",
"\n",
"```python\n",
">>>print(winnings(7,1))\n",
"2749455\n",
">>>print(winnings(5,2))\n",
"95\n",
">>>print(winnings(3,1))\n",
"0\n",
"```\n",
"\n",
"***Skriv koden i kodeblokken under***"
"***Skriv koden din i boksen under.***"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hidden": true
"ExecuteTime": {
"end_time": "2019-07-03T10:30:20.037475Z",
"start_time": "2019-07-03T10:30:20.032125Z"
}
},
"outputs": [],
"source": []
...
...
@@ -392,13 +293,12 @@
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Du kan teste ut funksjonen ved å kalle den med `'my_file.txt'` som argument."
"## Oppgave f: frivillig"
]
},
{
...
...
@@ -406,45 +306,42 @@
"metadata": {
"deletable": false,
"editable": false,
"heading_collapsed": true,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"#### Hint"
"Funksjonene skal settes sammen i main() slik at dette blir en fullverdig lottosimulator (for en lottorekke). Tallene du skal trekke ut (både lottotallene og tilleggstallene) kan legges i samme liste. Funksjonen `comp_list` kan da sammenligne de første 7 tallene, og så de siste 3 tallene, for å finne ut hvor mange like tall du har. main() skal returnere hvor mye du har tjent eller mest sannsynlig tapt på denne lottorekken. Dersom en lottorekke kosten 5 kroner, vil -5 returneres dersom winnings() er 0. Hvis du er heldig og winnings() blir 95 skal 90 returneres fra main(). \n",
"\n",
"**Husk at du kan bruke alle funksjoner du har definert over!**\n",
"\n",
"***Skriv koden din i boksen under.***"
]
},
{
"cell_type": "markdown",
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
"ExecuteTime": {
"end_time": "2019-07-03T10:32:57.485045Z",
"start_time": "2019-07-03T10:32:57.477602Z"
}
},
"source": [
"Her skal du lese fra fil og må derfor benytte deg av\n",
"```python\n",
"f = open('my_file.txt', 'r')\n",
"```"
]
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"heading_collapsed": true,
"run_control": {
"frozen": true
}
},
"source": [
"## c)"
"## Oppgave g: frivillig\n",
"Frivillig"
]
},
{
...
...
@@ -452,53 +349,27 @@
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Lag en funksjon `main()` hvor bruker får valget mellom å skrive til fil eller lese fra fil. Funksjonen skal kjøre så lenge brukeren ikke svarer `'done'`. (Se eksempelkjøring)\n",
"\n",
"- Hvis brukeren velger **write** skal du bruke **a)** til å skrive data til **my_file.txt**\n",
"- Hvis brukeren velger **read** skal du skrive ut innholdet (dersom det er noe) i **my_file.txt** vha. **b)**\n",
"Finn ut hvor mye man har vunnet etter å ha tippet en million ganger. Anta at premiepotten er det samme hver uke, og at en lottorekke koster 5 kroner.\n",
"\n",
"**Eksempel på kjøring:**\n",
"```\n",
"Do you want to read or write? write\n",
"What do you want to write to file? hei allan\n",
"hei allan was written to file.\n",
"Do you want to read or write? read\n",
"hei allan\n",
"Do you want to read or write? done\n",
"You are done.\n",
"```\n",
"\n",
"***Skriv koden din i kodeblokken under***"
"***Skriv koden din i boksen under.***"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hidden": true
"ExecuteTime": {
"end_time": "2019-07-03T10:33:24.728040Z",
"start_time": "2019-07-03T10:33:24.722740Z"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
}
},
"source": [
"Du kan når som helst sjekke innholdet i [my_file.txt](my_file.txt)"
]
}
],
"metadata": {
...
...
%% Cell type:markdown id: tags:
# Generelt om filbehandling
# Lotto
**Læringsmål:**
- Filbehandling
- Betingelser
- Løkker
I denne oppgaven skal vi skrive til en fil og lese fra en fil.
* Lister
* Tilfeldige tall
%% Cell type:markdown id: tags:
## Generelt om filer
Det kan være lurt å lese dette før du går videre
%% Cell type:markdown id: tags:
Det er ofte nyttig å kunne lagre data til en fil, eller lese data fra en fil når man skriver et program i Python. De mest brukte funksjonene er for åpning, redigering og lukking av eksterne filer.
I denne oppgaven lage du lage en lottosimulator.
Når du åpner filen må du spesifisere hvordan du skal bruke filen. Det er derfor viktig å åpne filen på riktig måte. Måten dette gjøres på er som inn-parameter i `open()`-funksjonen, noen eksempler er:
Reglene er som følger:
-**'r'** - for lesing av filen (default)
-**'w'** - for skriving til filen
-**'a'** - for å legge til data (**a**ppend) til den eksisterende filen
* Det trekkes ut 7 lottotall og 3 tilleggstall fra og med 1 til og med 34. Alle tallene som trekkes skal være unike.
* Premier deles ut basert på følgende tabell:
I denne oppgaven skal vi bli bedre kjent med hvordan dette fungerer:
- For å åpne en fil i Python kan vi skrive: `f = open('filename', Bruksmåte)`. Bruksmåte er enten `'r'`, `'w'` eller `'a'` avhengig av hva hvordan filen skal brukes.
- For å lese data fra en fil kan vi bruke: `innhold = f.read()`
- For å legge til data til en fil kan vi skrive: `f.write(data)`
Filer lukkes på følgende måte: `f.close()`
Premiergruppe|Premie (kr)
:---|---
7 rette |2 749 455
6 rette + 1 tilleggstall |102 110
6 rette |3 385
5 rette |95
4 rette + 1 tilleggstall |45
%% Cell type:markdown id: tags:
### Lesing av fil
## Oppgave a: frivillig
%% Cell type:markdown id: tags:
Eksempelet under viser lesing av en fil. **Kjør koden under og test det ut da vel!**
Lag en liste som heter `numbers` og som inneholder alle heltall fra og med 1 til og med 34.
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
# LESING AV FIL
f=open('example_file1.txt','r')#r spesifiserer at man skal lese fra en fil
innhold=f.read()
print(innhold)
f.close()
```
%% Output
Dette er en eksempelfil.
Her kan man skrive hva man vil.
Men helst ikke for mange hatefulle ytringer.
%%Celltype:markdownid:tags:
Når man leser en fil slik som over, må man lagre innholdet i en variabel (her bruker vi `innhold`). **Husk alltid å lukke filen!**
Den filen som ble lest fra finner dere her: [example_file1.txt](example_file1.txt). Prøv å endre på filen, lagre den med `file -> save` i toppmenyen for så å kjøre kodeblokken over på nytt. Kodeblokken burde da skrive ut det nye innholdet i filen!
For å skrive til en fil kan man gjøre slik som under. **Kjør koden under og test!**
***Skrivkodendiniboksenunder.***
%%Celltype:codeid:tags:
``` python
f=open('example_file1.txt','w')#w spesifiserer at filen skal skrives til
f.write('En hatefull ytring')
f.close()
```
%% Cell type:markdown id: tags:
Etter at du har kjørt koden over vil du kunne se at innholdet i [example_file1.txt](example_file1.txt) har endret seg. Hvis du vil kan du bytte ut `'w'` over med `'a'` og se hva som da skjer.
## Oppgave c: frivillig
%% Cell type:markdown id: tags:
### Context managers
Lag en funksjon som tar inn `n` som argument og som trekker ut `n` tall ut av listen `numbers` og legger de i en egen liste.
For å gjøre ting tilfeldig: `import random` og `random.randint(n,N)` gir tilfeldige tall fra og med n til og med N.
%% Cell type:markdown id: tags:
Eksempel på kjøring:
Det er generelt foretrukket i python å bruke _context managers_ når man gjør operasjoner som å skrive til og lese fra fil. De tar hånd om lukking av fila når du er ferdig, og passer på å lukke også dersom koden crasher underveis i en operasjon. Da kan vi være trygge på at vi ikke får korrupte filer.
```python
>>>print(draw_numbers(numbers, 7))
[16, 33, 5, 20, 7, 4, 8]
```
Åpning og lukking av filer med context managere gjøres som følger
Hint: Bruk funksjonene `pop()` og `append()` for å fjerne og legge til elementer i en liste. Husk at pop fjerner et element i en indeks i lista, den fjerner ikke tallet. Så numbers.pop(rand_num) fjerner elementet på indeks rand_num - altså hvis rand_num er 13 fjernes tallet på indeks 13, ikke tallet 13!
%% Output
%% Cell type:markdown id: tags:
En hyggelig kommentar
---
Dette er en eksempelfil.
Her kan man skrive hva man vil.
Men helst ikke for mange hatefulle ytringer.
## Oppgave d: frivillig
%% Cell type:markdown id: tags:
## a)
Lag funksjonen `comp_list` som sammenligner to lister med tall. Antall like tall i listene skal returneres.
%% Cell type:markdown id: tags:
Eksempel på kjøring:
Lag en funksjon `write_to_file(data)` som tar inn strengen `data` og legger denne inn i en fil **my_file.txt**
Lag en funksjon som tar inn antall like tall og like tilleggstall, og returnerer premien du har vunnet.
%%Celltype:markdownid:tags:
Herskalduskrivetilfilogmåderforbenyttedegav
Eksempel på kjøring:
```python
f = open('my_file.txt', 'w')
>>>print(winnings(7,1))
2749455
>>>print(winnings(5,2))
95
>>>print(winnings(3,1))
0
```
%% Cell type:markdown id: tags:
## b)
%% Cell type:markdown id: tags:
Lag en funksjon `read_from_file(filename)` som tar inn strengen `filename` med filnavnet og skriver ut innholdet.
***Skriv koden i kodeblokken under***
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Du kan teste ut funksjonen ved å kalle den med `'my_file.txt'` som argument.
## Oppgave f: frivillig
%% Cell type:markdown id: tags:
#### Hint
Funksjonene skal settes sammen i main() slik at dette blir en fullverdig lottosimulator (for en lottorekke). Tallene du skal trekke ut (både lottotallene og tilleggstallene) kan legges i samme liste. Funksjonen `comp_list` kan da sammenligne de første 7 tallene, og så de siste 3 tallene, for å finne ut hvor mange like tall du har. main() skal returnere hvor mye du har tjent eller mest sannsynlig tapt på denne lottorekken. Dersom en lottorekke kosten 5 kroner, vil -5 returneres dersom winnings() er 0. Hvis du er heldig og winnings() blir 95 skal 90 returneres fra main().
%% Cell type:markdown id: tags:
**Husk at du kan bruke alle funksjoner du har definert over!**
Her skal du lese fra fil og må derfor benytte deg av
```python
f = open('my_file.txt', 'r')
```
***Skriv koden din i boksen under.***
%% Cell type:markdown id: tags:
%% Cell type:code id: tags:
## c)
``` python
```
%% Cell type:markdown id: tags:
Lag en funksjon `main()` hvor bruker får valget mellom å skrive til fil eller lese fra fil. Funksjonen skal kjøre så lenge brukeren ikke svarer `'done'`. (Se eksempelkjøring)
## Oppgave g: frivillig
Frivillig
- Hvis brukeren velger **write** skal du bruke **a)** til å skrive data til **my_file.txt**
- Hvis brukeren velger **read** skal du skrive ut innholdet (dersom det er noe) i **my_file.txt** vha. **b)**
%% Cell type:markdown id: tags:
**Eksempel på kjøring:**
```
Do you want to read or write? write
What do you want to write to file? hei allan
hei allan was written to file.
Do you want to read or write? read
hei allan
Do you want to read or write? done
You are done.
```
Finn ut hvor mye man har vunnet etter å ha tippet en million ganger. Anta at premiepotten er det samme hver uke, og at en lottorekke koster 5 kroner.
***Skriv koden din i kodeblokken under***
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Du kan når som helst sjekke innholdet i [my_file.txt](my_file.txt)