diff --git a/lectures/lecture3/notes/slides/lecture-3.md b/lectures/lecture3/notes/slides/lecture-3.md index 8cf04ac5274a43c9bcf7451c44b6c5494e92946b..77a91c6c508c8fa50f7da36a667345c27d2bca53 100644 --- a/lectures/lecture3/notes/slides/lecture-3.md +++ b/lectures/lecture3/notes/slides/lecture-3.md @@ -10,7 +10,9 @@ paginate: true **Læringsutbytte** * Lære å sammenligne strenger og bruk av if - +* Lære å bruke for-løkke +* Lære å bruke while-løkke +* Forstå nøstede løkker --- ## Sammenligning av strenger diff --git a/lectures/lecture3/notes/slides/lecture-3.pdf b/lectures/lecture3/notes/slides/lecture-3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0bc1534795f5027f6a242d944844d1b5b30ca387 Binary files /dev/null and b/lectures/lecture3/notes/slides/lecture-3.pdf differ diff --git a/lectures/lecture4/images/set_eksempel.png b/lectures/lecture4/images/set_eksempel.png new file mode 100644 index 0000000000000000000000000000000000000000..ba4c9106c311df2330678abaa40829dbd1f3987a Binary files /dev/null and b/lectures/lecture4/images/set_eksempel.png differ diff --git a/lectures/lecture4/lab/generelt_om_sets.ipynb b/lectures/lecture4/lab/generelt_om_sets.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5fcdb99afab5f528b6c3ea08ee527d5a617ed71e --- /dev/null +++ b/lectures/lecture4/lab/generelt_om_sets.ipynb @@ -0,0 +1,806 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "# Generelt om sets\n", + "\n", + "**Læringsmål:**\n", + "- Sets\n", + "- Lister" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## Generelt om sets\n", + "Det kan være lurt å lese gjennom dette før du går videre" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Et set inneholder en samling av unike verdier og fungerer på samme måte som et set i matematikken. Forskjellen på et set og en liste er at en liste kan inneholde flere like elementer, for eksempel:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "liste = [1,2,3,1,2,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Altså kan vi finne alle tallene to ganger. Dette går ikke i et set ettersom alle elementene i et set er ulike. Tilsvarende set ser slik ut:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "my_set = set([1,2,3])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "På samme måte som vi kunne opprette en dictionary ved å skrive `my_dict = dict()`, kan vi opprette et set ved å skrive:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "my_set = set()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "For å legge til et element i et set kan vi benytte oss av `add()`. **Husk å kjøre koden over før du kjører koden under**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "my_set.add(1)\n", + "my_set.add(2)\n", + "my_set.add(3)\n", + "my_set.add(3)\n", + "my_set.add(3)\n", + "print(my_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "For å legge til flere elementer på samme gang, kan `update()` benyttes." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "For å fjerne et element kan vi benytte oss av `remove()` eller `discard()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "my_set.remove(2)\n", + "print(my_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "De fleste ting fungerer likt mellom sets og lister, og her er noen eksempler:\n", + "- iterering gjennom setet/listen\n", + "- sjekke om et element er i setet/listen\n", + "- finne lengden til setet/listen" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Dersom du har hatt sannsynlighet er du kanskje godt kjent med venndiagram. Da har du sikkert hørt om union og snitt. Dersom vi har to sets" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "set1 = set([1,2,3,4,5,6,7,8])\n", + "set2 = set([0,2,4,6,8,10,12])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "kan vi se at begge setene inneholder 2, 4, 6 og 8. Dette er det som kalles intersection, eller snitt. På figuren under kan vi se at snittet er det feltet hvor sirklene overlapper.\n", + "\n", + "\n", + "\n", + "For å finne snittet av set1 og set2 kan vi skrive som under. **Kjør kun koden under dersom du har kjørt forrige kodeblokk som initialiserer set1 og set2**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "set3 = set1.intersection(set2)\n", + "set3 = set2.intersection(set1)\n", + "set3 = set1&set2\n", + "print(set3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Alle de tre første linjene i kodeblokken over er ekvivalente.\n", + "\n", + "Union er et annet nyttig ord, og det vil si tallene som enten er i set1 eller set2 eller begge, dvs. alle tallene som er med. For å finne unionen av set1 og set2 kan vi skrive:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "set3 = set1.union(set2)\n", + "set3 = set2.union(set1)\n", + "set3 = set1 | set2\n", + "print(set3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Her gjør også alle de tre øverste kodelinjene akkurat det samme." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Tallene som er i set1, men ikke i set2, dvs. 1, 3, 5 og 7 kan vi finne ved å skrive" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "set3 = set1.difference(set2)\n", + "set3 = set1-set2 # denne linja og linja over gjør akkurat det samme\n", + "print(set3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "For å finne elementene som er i set2 men ikke set1 er det bare å bytte om på set1 og set2 i koden over." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Symmetric difference vil si alle tallene som er i set1 eller set2 (dvs. unionen) minus snittet (tallene som er i begge setene). I dette tilfelle er det 0,1,3,5,7,10 og 12.\n", + "\n", + "Dette finner vi slik:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "set3 = set1.symmetric_difference(set2)\n", + "set3 = set2.symmetric_difference(set1)\n", + "set3 = set1^set2 #set3 = (0,1,3,5,7,10,12)\n", + "print(set3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Her gjør også de tre første linjene akkurat det samme." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et tomt set som heter `my_set`, legg til alle oddetallene opp til 20 i setet ved å bruke en for-løkke og print setet\n", + "\n", + "***Skriv koden i kodeblokken under***" + ] + }, + { + "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": [ + "Har du gjort det riktig skal output være\n", + "```\n", + "{1, 3, 5, 7, 9, 11, 13, 15, 17, 19}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et nytt set som heter `my_set2` og inneholder alle oddetallene frem til 10.\n", + "\n", + "***Skriv din koden i kodeblokken under***" + ] + }, + { + "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": [ + "Har du gjort det riktig skal kodeblokken under printe `{1, 3, 5, 7, 9}`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(my_set2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et setet `my_set3` som inneholder alle tallene som er i setet fra a) men ikke i setet fra b) \n", + "\n", + "***Skriv koden i kodeblokken under***" + ] + }, + { + "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": [ + "Har du gjort det riktig skal kodeblokken under printe `{11, 13, 15, 17, 19}`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(my_set3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## d)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Dersom du tar snittet av setet fra b) og setet fra c), hva forventer du å få da? Hva med a) og c)?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true + }, + "source": [ + "**Svar:**<dobbeltklikk her\\>" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## e)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Bruk de innebygde funksjonene `len()` og `set()` til å lage en funksjon `allUnique(lst)`, som returnerer `True` om listen `lst` inneholder unike elementer og ellers returnerer `False`.\n", + "\n", + "***Skriv koden i kodeblokken under***" + ] + }, + { + "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": [ + "Har du gjort det riktig kan du teste med koden under (etter å ha kjørt din egen kodeblokk)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(allUnique([1,3,2,6,8]))\n", + "print(allUnique([1,3,5,2,3,7]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Output fra denne burde være:\n", + "```python\n", + "True\n", + "False\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## f)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Bruk de innebygde funksjonene `list()` og `set()` til å lage en funksjon `removeDuplicates(lst)`, som fjerner duplikater fra listen `lst` og returner den modifiserte listen.\n", + "\n", + "***Skriv koden i kodeblokken under***" + ] + }, + { + "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": [ + "Du kan teste koden din med koden under (etter å ha kjørt din egen kodeblokk)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(removeDuplicates([1,3,5,2,3,7]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Har du gjort alt riktig skal output fra denne være:\n", + "```python\n", + "[1, 2, 3, 5, 7]\n", + "```" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.10" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/lecture4/notes/slides/lecture-4.md b/lectures/lecture4/notes/slides/lecture-4.md index bbd98a06fe168ecda46800d7dd37fb02f047742a..05e6a11195c5bc36722406f12be097d588bfba53 100644 --- a/lectures/lecture4/notes/slides/lecture-4.md +++ b/lectures/lecture4/notes/slides/lecture-4.md @@ -118,4 +118,25 @@ ukedager[0] = 'tirsdag' --- # Set -Er det samme som lister med den forskjellen at elementene kan forekomme bare en gang (unike verdier). Bruker krøll-paranteser når vi definerer dem +Er det samme som lister med den forskjellen at elementene kan forekomme bare en gang (unike verdier). Bruker krøll-paranteser når vi definerer dem. Eksempel: + +```python +set1 = {1,2,3,4,5,6,7,8} +set2 = {0,2,4,6,8,10,12} +``` +eller + +```python +set1 = set([1,2,3,4,5,6,7,8)] +set2 = set([0,2,4,6,8,10,12)] +``` +--- + + +```python +set3 = set1 & set2 # gir {2,4,6,8} +set4 = set1 | set2 # gir {0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12} + +set5 = set1.intersect(s2) # samme som set3 +set6 = set1.union(set2) # samme som set2 +``` diff --git a/lectures/lecture4/notes/slides/lecture-4.pdf b/lectures/lecture4/notes/slides/lecture-4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fb5c24234af7b3754966382340a63a2a08ee2b38 Binary files /dev/null and b/lectures/lecture4/notes/slides/lecture-4.pdf differ diff --git a/lectures/lecture5/lab/generelt_om_filbehandling.ipynb b/lectures/lecture5/lab/generelt_om_filbehandling.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..7448c2d3b1f29c82df10c7e39f393c355e88ab38 --- /dev/null +++ b/lectures/lecture5/lab/generelt_om_filbehandling.ipynb @@ -0,0 +1,565 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving7.ipynb\">Øving 7</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Generelt%20om%20dictionary.ipynb\">Generelt om dictionary</a></li>\n", + " <li><a href=\"Innebygde%20funksjoner%20i%20dictionaries.ipynb\">Innebygde funksjoner</a></li>\n", + " <li><a href=\"Generelt%20om%20sets.ipynb\">Generelt om sets</a></li>\n", + " <li class = \"active\"><a href=\"Generelt%20om%20filbehandling.ipynb\">Generelt om filbehandling</a></li>\n", + " <li><a href=\"Osteviruset.ipynb\">Osteviruset</a></li>\n", + " <li><a href=\"Bursdagsdatabasen.ipynb\">Bursdagsdatabasen</a></li>\n", + " <li><a href=\"Tallak%20teller%20antall%20tall.ipynb\">Tallak teller antall tall</a></li>\n", + " <li><a href=\"Enhetstesting.ipynb\">Enhetstesting</a></li>\n", + " <li><a href=\"Tidtaking.ipynb\">Tidtaking</a></li>\n", + " <li><a href=\"Moduler.ipynb\">Moduler</a></li>\n", + " <li><a href=\"Opptaksgrenser.ipynb\">Opptaksgrenser</a></li>\n", + " <li><a href=\"Soke%20i%20tekst.ipynb\">Søke i tekst</a></li>\n", + " <li><a href=\"Tre%20paa%20rad.ipynb\">Tre på rad</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Generelt om filbehandling\n", + "\n", + "**Læringsmål:**\n", + "- Filbehandling\n", + "- Betingelser\n", + "- Løkker\n", + "\n", + "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", + "\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", + "\n", + "I denne oppgaven skal vi bli bedre kjent med hvordan dette fungerer:\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", + "\n", + "Filer lukkes på følgende måte: `f.close()`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "### Lesing av fil" + ] + }, + { + "cell_type": "markdown", + "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", + "\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()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "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!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "### Skriving av fil" + ] + }, + { + "cell_type": "markdown", + "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!**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "f = open('example_file1.txt','w') #w spesifiserer at filen skal skrives til\n", + "f.write('En hatefull ytring')\n", + "f.close()" + ] + }, + { + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Context managers" + ] + }, + { + "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", + "\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", + "\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" + ] + }, + { + "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" + ] + } + ], + "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\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "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***" + ] + }, + { + "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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Her skal du skrive til fil og må derfor benytte deg av\n", + "\n", + "```python\n", + "f = open('my_file.txt', 'w')\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b)" + ] + }, + { + "cell_type": "markdown", + "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", + "\n", + "***Skriv koden i kodeblokken under***" + ] + }, + { + "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": [ + "Du kan teste ut funksjonen ved å kalle den med `'my_file.txt'` som argument." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Her skal du lese fra fil og må derfor benytte deg av\n", + "```python\n", + "f = open('my_file.txt', 'r')\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c)" + ] + }, + { + "cell_type": "markdown", + "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", + "\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***" + ] + }, + { + "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": [ + "Du kan når som helst sjekke innholdet i [my_file.txt](my_file.txt)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.6 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "vscode": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/lecture5/notes/codes/generelt_om_filbehandling.ipynb b/lectures/lecture5/notes/codes/generelt_om_filbehandling.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..74b89b3cc5e67e4c8f5486e3b5974f777fe8551d --- /dev/null +++ b/lectures/lecture5/notes/codes/generelt_om_filbehandling.ipynb @@ -0,0 +1,304 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "run_control": { + "frozen": true + } + }, + "source": [ + "# Generelt om filbehandling\n", + "\n", + "**Læringsmål:**\n", + "- Filbehandling\n", + "- Betingelser\n", + "- Løkker\n", + "\n", + "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", + "\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", + "\n", + "I denne oppgaven skal vi bli bedre kjent med hvordan dette fungerer:\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", + "\n", + "Filer lukkes på følgende måte: `f.close()`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "### Lesing av fil" + ] + }, + { + "cell_type": "markdown", + "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", + "\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()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "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!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "### Skriving av fil" + ] + }, + { + "cell_type": "markdown", + "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!**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "f = open('example_file1.txt','w') #w spesifiserer at filen skal skrives til\n", + "f.write('En hatefull ytring')\n", + "f.close()" + ] + }, + { + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Context managers" + ] + }, + { + "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", + "\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", + "\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" + ] + }, + { + "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" + ] + } + ], + "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\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.6 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "vscode": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/lectures.json b/lectures/lectures.json index 512188c73a6ee2dec36bb63de8800b45ac38677f..9d1f8dd554c06c54f8763af73a84bc77669febec 100644 --- a/lectures/lectures.json +++ b/lectures/lectures.json @@ -31,7 +31,8 @@ } ,{ "Leksjon 3: Mer om valg, løkker": [ - {"Valg": {"if-setninger":"lecture2/notes/codes/ulike_typer_if_setninger.ipynb"}} + {"Introduksjon (slides)": {"Introduksjon":"lecture3/notes/slides/lecture-3.pdf"}} + ,{"Valg": {"if-setninger":"lecture2/notes/codes/ulike_typer_if_setninger.ipynb"}} ,{"Sammenligning": {"Sammenligning av strenger":"lecture2/notes/codes/sammenligning_av_strenger.ipynb"}} ,{ "Løkker": [ @@ -45,7 +46,8 @@ } ,{ "Leksjon 4: Sammensatte datatyper (lister, tupler, set)": [ - { + {"Introduksjon (slides)": {"Introduksjon":"lecture4/notes/slides/lecture-4.pdf"}} + ,{ "Sammensatte datatyper": [ {"Lister": {"Generelt om lister": "lecture4/notes/codes/generelt_om_lister.ipynb", "Lister og løkker": "lecture4/notes/codes/lister_og_lokker.ipynb"}} ,{"Tupler":{"Generelt om tupler": "lecture4/notes/codes/lister_og_tupler.ipynb"}} @@ -57,7 +59,8 @@ }, { "Leksjon 5: Filbehandling, unntakshåndtering": [ - { + {"Introduksjon (slides)": {"Introduksjon":"lecture5/notes/slides/lecture-5.pdf"}} + ,{ "Filbehandling": [ {"Lesing fra fil":""}, {"Skriving til fil":""} diff --git a/lectures/lectures.md b/lectures/lectures.md index 654a07d835ec37b8e5cb9d121304ae747ab30110..52b82d1d4ab35f924b7841b5cf674925a677f464 100644 --- a/lectures/lectures.md +++ b/lectures/lectures.md @@ -46,6 +46,9 @@ </details> </details> <details><summary style="font-size:200%;cursor: pointer;"> Leksjon 3: Mer om valg, løkker</summary> +<details><summary style="font-size:200%;cursor: pointer;">  Introduksjon (slides)</summary> +<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">   <a target="_blank" href=lecture3/notes/slides/lecture-3.pdf>Introduksjon</a></blockquote> +</details> <details><summary style="font-size:200%;cursor: pointer;">  Valg</summary> <blockquote style="font-size:200%;cursor: pointer;padding: 10px;">   <a target="_blank" href=lecture2/notes/codes/ulike_typer_if_setninger.ipynb>if-setninger</a></blockquote> </details>