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",
+    "![img](../images/set_eksempel.png)\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)]
+```
+---
+![width:400px](../../images/set_eksempel.png)
+
+```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;">&emsp;Leksjon 3: Mer om valg, løkker</summary>
+<details><summary style="font-size:200%;cursor: pointer;">&emsp;&emsp;Introduksjon (slides)</summary>
+<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">&emsp;&emsp;&emsp;<a target="_blank" href=lecture3/notes/slides/lecture-3.pdf>Introduksjon</a></blockquote>
+</details>
 <details><summary style="font-size:200%;cursor: pointer;">&emsp;&emsp;Valg</summary>
 <blockquote style="font-size:200%;cursor: pointer;padding: 10px;">&emsp;&emsp;&emsp;<a target="_blank" href=lecture2/notes/codes/ulike_typer_if_setninger.ipynb>if-setninger</a></blockquote>
 </details>