diff --git a/lectures/chap5/lab/generelt_om_filbehandling.ipynb b/lectures/chap5/lab/generelt_om_filbehandling.ipynb
deleted file mode 100644
index 0a1666082ce21c2fd9963fd84463b2fed9fc3c52..0000000000000000000000000000000000000000
--- a/lectures/chap5/lab/generelt_om_filbehandling.ipynb
+++ /dev/null
@@ -1,543 +0,0 @@
-{
- "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\")"
-   ]
-  },
-  {
-   "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/chap5/lab/lf/databaser.ipynb b/lectures/chap5/lab/lf/databaser.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..3f7ae267ead47cce86def1142c2f61ac544c0f48
--- /dev/null
+++ b/lectures/chap5/lab/lf/databaser.ipynb
@@ -0,0 +1,257 @@
+{
+ "cells": [
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### MySQL database\n",
+    "\n",
+    "Man kan koble opp mot forskjellige databaser i Python:\n",
+    "- GadFly\n",
+    "- mSQL\n",
+    "- **MySQL**\n",
+    "- PostgreSQL\n",
+    "- Microsoft SQL Server 2000\n",
+    "- Informix\n",
+    "- Interbase\n",
+    "- Oracle\n",
+    "- Sybase\n",
+    "- …\n",
+    "\n",
+    "Eller bruke SqlLite3 \n",
+    "- Egen database modul for Python\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Viser hvordan vi kobler oss mot SQLite og leser/oppdaterer data.\n",
+    "# Importerer modulen sqlite3 (trenger ikke installasjon)\n",
+    "import sqlite3 as sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Oppretter en tilkobling til databasen\n",
+    "# Hvis databasen ikke eksisterer, opprettes den\n",
+    "# Hvis databasen eksisterer, kobler vi oss til den\n",
+    "connection = sql.connect('database_name.db')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Oppretter en cursor som lar oss utføre SQL-kommandoer\n",
+    "# Cursor er en peker som lar oss utføre SQL-kommandoer\n",
+    "# En peker er en variabel som inneholder en adresse til et objekt\n",
+    "cursor = connection.cursor()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<sqlite3.Cursor at 0x1b1563627c0>"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Oppretter en tabell\n",
+    "# Hvis tabellen ikke eksisterer, opprettes den\n",
+    "# Hvis tabellen eksisterer, opprettes den ikke på nytt\n",
+    "# Vi kan bruke f-strings for å sette inn variabler i SQL-kommandoer\n",
+    "table_name = 'brukere'\n",
+    "\n",
+    "create_table = f'''\n",
+    "    CREATE TABLE IF NOT EXISTS {table_name} (\n",
+    "        id INTEGER PRIMARY KEY,\n",
+    "        name TEXT\n",
+    "    )\n",
+    "'''\n",
+    "\n",
+    "cursor.execute(create_table)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<sqlite3.Cursor at 0x1b1563627c0>"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Definer data som skal settes inn i tabellen\n",
+    "# Liste med tupler\n",
+    "user_data = [\n",
+    "    (1, 'John'),\n",
+    "    (2, 'Jane'),\n",
+    "    (3, 'Alice')\n",
+    "]\n",
+    "\n",
+    "# Insert the data into the table\n",
+    "# Vi kan bruke f-strings for å sette inn variabler i SQL-kommandoer\n",
+    "# Vi kan bruke executemany for å sette inn flere rader samtidig\n",
+    "cursor.executemany(f'''\n",
+    "    INSERT OR REPLACE INTO {table_name} (id, name)\n",
+    "    VALUES (?, ?)\n",
+    "''', user_data)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(1, 'John')\n",
+      "(2, 'Jane')\n",
+      "(3, 'Alice')\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Henter ut data fra tabellen\n",
+    "# Vi kan bruke f-strings for å sette inn variabler i SQL-kommandoer\n",
+    "# Vi kan bruke * for å hente ut alle kolonner\n",
+    "# Vi kan bruke WHERE for å filtrere data\n",
+    "# Vi kan bruke ORDER BY for å sortere data\n",
+    "# Vi kan bruke LIMIT for å begrense antall rader\n",
+    "# Vi kan bruke OFFSET for å hoppe over rader\n",
+    "# Vi kan bruke LIKE for å filtrere data med et mønster (wildcard)\n",
+    "# Vi kan bruke IN for å filtrere data med flere verdier\n",
+    "# Vi kan bruke IS NULL for å filtrere data som er NULL\n",
+    "# Vi kan bruke IS NOT NULL for å filtrere data som ikke er NULL\n",
+    "# Vi kan bruke DISTINCT for å filtrere ut duplikater\n",
+    "# Vi kan bruke COUNT for å telle antall rader\n",
+    "cursor.execute(f'SELECT * FROM {table_name}')\n",
+    "\n",
+    "# Fetch all rows as a list of tuples\n",
+    "rows = cursor.fetchall()\n",
+    "\n",
+    "# Print the rows\n",
+    "# Vi kan bruke for-løkke for å iterere over resultatet\n",
+    "for row in rows:\n",
+    "    print(row)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Oppdaterer data i tabellen\n",
+    "connection.commit()\n",
+    "\n",
+    "# Lukker tilkoblingen til databasen\n",
+    "connection.close()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Oppgave a)\n",
+    "Lag en ny tabell og kall den **emner**. Definer emnekode, tittel og beskrivelse (alle av typen streng)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Svar"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Oppgave b\n",
+    "\n",
+    "Endre i tabellen \"brukere\" slik at det er en kobling mellom \"brukere\" og \"emner\". Nøkkel kan være emnekode."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Svar"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Oppgave C\n",
+    "Skriv kode som fyller tabellen emner med data fra en liste. Oppdater tabellen brukere slik at hver bruker peker på en eller flere emner."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Svar "
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "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.11.2"
+  },
+  "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/lectures/chap5/lab/lf/lab-5.md b/lectures/chap5/lab/lf/lab-5.md
new file mode 100644
index 0000000000000000000000000000000000000000..27401679e524704a9cf9319ab5377560f3f09ca7
--- /dev/null
+++ b/lectures/chap5/lab/lf/lab-5.md
@@ -0,0 +1,15 @@
+# Lab-2
+
+## Læringsutbytte
+
+* Kunne skrive enkle matematiske uttrykk i Python
+* Lære å definere funksjoner i Python
+* Kunne sette opp logiske uttrykk
+* Lære å bruke if-setningen i Python.
+
+## Læringsaktiviteter
+
+* [Funksjoner og kalkulasjoner](funksjoner_og_kalkulasjoner.ipynb)
+* [Logiske operatorer og uttrykk](logiske_operatorer_uttrykk.ipynb)
+* [Valg](ulike_typer_if_setninger.ipynb)
+* [Årstider](aarstider.ipynb)
diff --git a/lectures/chap5/lab/lf/lotto.ipynb b/lectures/chap5/lab/lf/lotto.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..090ce29638765cd71c30d61800618a0dc8b0ff6f
--- /dev/null
+++ b/lectures/chap5/lab/lf/lotto.ipynb
@@ -0,0 +1,414 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "# Lotto\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "* Lister\n",
+    "* Tilfeldige tall\n",
+    "\n",
+    "\n",
+    "I denne oppgaven lage du lage en lottosimulator. \n",
+    "\n",
+    "Reglene er som følger:\n",
+    "\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",
+    "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"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Oppgave a: frivillig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Lag en liste som heter `numbers` og som inneholder alle heltall fra og med 1 til og med 34.\n",
+    "\n",
+    "***Skriv koden din i boksen under.***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-03T10:21:03.176781Z",
+     "start_time": "2019-07-03T10:21:03.167560Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Oppgave b: frivillig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "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": {
+    "ExecuteTime": {
+     "end_time": "2019-07-03T10:21:45.639510Z",
+     "start_time": "2019-07-03T10:21:45.634558Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Oppgave c: frivillig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "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",
+    "Eksempel på kjøring:\n",
+    "\n",
+    "```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": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-03T10:25:33.636784Z",
+     "start_time": "2019-07-03T10:25:33.631639Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Hint"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "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": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Oppgave d: frivillig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Lag funksjonen `comp_list` som sammenligner to lister med tall. Antall like tall i listene skal returneres.\n",
+    "\n",
+    "Eksempel på kjøring:\n",
+    "\n",
+    "```python\n",
+    ">>>print(comp_list(draw_n_umbers(numbers,7),my_guess))\n",
+    "1\n",
+    "```\n",
+    "\n",
+    "***Skriv koden din i boksen under.***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-03T10:28:03.696473Z",
+     "start_time": "2019-07-03T10:28:03.691094Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Oppgave e: frivillig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "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 din i boksen under.***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-03T10:30:20.037475Z",
+     "start_time": "2019-07-03T10:30:20.032125Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Oppgave f: frivillig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "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": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-03T10:32:57.485045Z",
+     "start_time": "2019-07-03T10:32:57.477602Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Oppgave g: frivillig\n",
+    "Frivillig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "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",
+    "***Skriv koden din i boksen under.***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-03T10:33:24.728040Z",
+     "start_time": "2019-07-03T10:33:24.722740Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "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
+}