From 20ffd5e4dbfb3049fa4935fdbbed2837640ec602 Mon Sep 17 00:00:00 2001
From: magnusch <magnus-haaland@orbitntnu.no>
Date: Mon, 4 Sep 2023 10:52:33 +0200
Subject: [PATCH] created oving2

---
 Ovinger/Oving2/Aarstider.ipynb                |  133 ++
 Ovinger/Oving2/Andregradsligning.ipynb        |  320 ++++
 Ovinger/Oving2/Betingede funksjoner.ipynb     |  249 +++
 .../Oving2/Billettpriser og rabatter.ipynb    |  254 +++
 Ovinger/Oving2/Epletigging.ipynb              |  241 +++
 Ovinger/Oving2/Forbrytelse og straff.ipynb    |  851 ++++++++++
 ...ogiske operatorer og logiske uttrykk.ipynb |  637 ++++++++
 .../Oving2/Sammenligning av strenger.ipynb    |  563 +++++++
 Ovinger/Oving2/Sjakkbrett.ipynb               |  233 +++
 Ovinger/Oving2/Skatteetaten.ipynb             |  269 ++++
 Ovinger/Oving2/Tekstbasert spill.ipynb        |  267 ++++
 Ovinger/Oving2/Ulike typer if-setninger.ipynb | 1410 +++++++++++++++++
 Ovinger/Oving2/_Oving2.ipynb                  |   89 ++
 13 files changed, 5516 insertions(+)
 create mode 100644 Ovinger/Oving2/Aarstider.ipynb
 create mode 100644 Ovinger/Oving2/Andregradsligning.ipynb
 create mode 100644 Ovinger/Oving2/Betingede funksjoner.ipynb
 create mode 100644 Ovinger/Oving2/Billettpriser og rabatter.ipynb
 create mode 100644 Ovinger/Oving2/Epletigging.ipynb
 create mode 100644 Ovinger/Oving2/Forbrytelse og straff.ipynb
 create mode 100644 Ovinger/Oving2/Logiske operatorer og logiske uttrykk.ipynb
 create mode 100644 Ovinger/Oving2/Sammenligning av strenger.ipynb
 create mode 100644 Ovinger/Oving2/Sjakkbrett.ipynb
 create mode 100644 Ovinger/Oving2/Skatteetaten.ipynb
 create mode 100644 Ovinger/Oving2/Tekstbasert spill.ipynb
 create mode 100644 Ovinger/Oving2/Ulike typer if-setninger.ipynb
 create mode 100644 Ovinger/Oving2/_Oving2.ipynb

diff --git a/Ovinger/Oving2/Aarstider.ipynb b/Ovinger/Oving2/Aarstider.ipynb
new file mode 100644
index 0000000..1582def
--- /dev/null
+++ b/Ovinger/Oving2/Aarstider.ipynb
@@ -0,0 +1,133 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "\n",
+    "# Ã…rstider\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "- Betingelser\n",
+    "- Logiske uttrykk\n",
+    "\n",
+    "I denne oppgaven skal en bruker skrive inn dag og måned og få ut hvilken årstid datoen tilhører.\n",
+    "\n",
+    "Et år har (offisielt) fire årstider, og i denne oppgaven tar vi utgangspunkt i at årstidsskiftene følger tabellen nedenfor. **(Merk deg datoene)**\n",
+    "\n",
+    "\n",
+    "Årstid | Første dag\n",
+    "--- | ---\n",
+    "VÃ¥r | 20. mars\n",
+    "Sommer | 21. juni\n",
+    "Høst | 22. september\n",
+    "Vinter | 21. desember"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "**Oppgave:** Lag en funksjon som tar inn en måned som en streng og en dag i denne måneden som et tall fra brukeren. Funskjonen skal så returnere årstiden assosiert med denne datoen.\n",
+    "\n",
+    "Du kan anta at inputen er en gyldig dato.\n",
+    "\n",
+    "**Eksempel på kjøring:**\n",
+    "```python\n",
+    ">>>arstid('mars', 20)\n",
+    "\n",
+    "VÃ¥r\n",
+    "```  \n",
+    "  \n",
+    "```python\n",
+    ">>>arstid('januar', 2)\n",
+    "\n",
+    "Vinter\n",
+    "```  \n",
+    "  \n",
+    "```python\n",
+    ">>>arstid('november', 17)\n",
+    "\n",
+    "Høst\n",
+    "```\n",
+    "\n",
+    "___Skriv din kode her:___"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  },
+  "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/Ovinger/Oving2/Andregradsligning.ipynb b/Ovinger/Oving2/Andregradsligning.ipynb
new file mode 100644
index 0000000..90684eb
--- /dev/null
+++ b/Ovinger/Oving2/Andregradsligning.ipynb
@@ -0,0 +1,320 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "\n",
+    "# Andregradsligning\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "- Betingelser"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I denne oppgaven skal du lage et program som tar inn input fra brukeren om tallene i en andregradsligning, og returnerer hvorvidt ligningen har to reelle løsninger, to imaginære løsninger eller én reell dobbeltrot. I tillegg skal programmet returnere løsningene dersom de er reelle.\n",
+    "\n",
+    "Den generelle formen til en andregradsligning er \n",
+    "\n",
+    "\\begin{equation*}\n",
+    "ax^2 + bx + c = 0\n",
+    "\\end{equation*}\n",
+    "\n",
+    "For å finne ut hvor mange løsninger og hvilket løsningsområde en andregradsligning har, kan man bruke *diskriminanten*\n",
+    "\n",
+    "\\begin{equation*}\n",
+    "d = b^2 - 4ac\n",
+    "\\end{equation*}\n",
+    "\n",
+    "og tabellen:\n",
+    "\n",
+    "Tilfelle|Løsningsområde|Antall røtter\n",
+    "---|---|---\n",
+    "d < 0|Imaginær|2\n",
+    "d > 0|Reell|2\n",
+    "d = 0|Reell\t1|(dobbeltrot)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## a) Finn riktig type løsning"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "***Lag en funksjon som tar inn de tre verdiene a, b og c, regner ut d, og forteller brukeren om ligningen har to imaginære løsninger, to reelle løsninger, eller én reell dobbeltrot.***\n",
+    "\n",
+    "Sjekk for alle de tre mulige utfallene:\n",
+    "\n",
+    "- To imaginære løsninger\n",
+    "  - f.eks.: a = 2, b = 4, c = 9\n",
+    "- To reelle løsninger\n",
+    "  - f.eks.: a = 2, b = -5, c = 0\n",
+    "- Én reell dobbeltrot\n",
+    "  - f.eks.: a = 2, b = 4, c = 2\n",
+    "  \n",
+    "***Skriv koden under***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "Collapsed": "false"
+   },
+   "outputs": [],
+   "source": [
+    "def andregradsligning(a, b, c):\n",
+    "    \"\"\"Skriv koden her\"\"\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## b) Reelle løsninger"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "***Utvid nå funksjonen fra a) slik at bruker får vite løsningen(e) dersom de(n) er reell(e) ved å returnere en liste med de løsningene***\n",
+    "\n",
+    "Andregradsformelen for å finne løsningen(e) er:\n",
+    "\n",
+    "\\begin{equation*}\n",
+    "x=\\frac{-b±\\sqrt{d}}{2a}\n",
+    "\\end{equation*}\n",
+    "\n",
+    "**Eksempel på kjøring av kode:**\n",
+    "\n",
+    "```python\n",
+    "#Eksempel 1: imaginære løsninger  \n",
+    "a: 2  \n",
+    "b: 4  \n",
+    "c: 9  \n",
+    "Andregradsligningen 2.00*x^2 + 4.00*x + 9.00 har to imaginære løsninger, derfor returneres en tom liste\n",
+    "```\n",
+    "\n",
+    "```python\n",
+    "#Eksempel 2: reelle løsninger\n",
+    "a: 2\n",
+    "b: -5\n",
+    "c: 0 \n",
+    "Andregradsligningen 2.00*x^2 -5.00*x + 0.00 har de to reelle løsningene 2.50 og 0.00, som returneres i en liste\n",
+    "```\n",
+    "\n",
+    "```python\n",
+    "#Eksempel 3: reell dobbeltrot\n",
+    "a: 2\n",
+    "b: 4\n",
+    "c: 2\n",
+    "Andregradsligningen 2.00*x^2 + 4.00*x + 2.00 har en reell dobbeltrot -1.00, som returneres i en liste\n",
+    "```\n",
+    "\n",
+    "**Skriv koden her:**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def andregradsligning_løsninger(a, b, c):\n",
+    "    \"\"\"Skriv koden her\"\"\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## C) (FRIVILLIG) Loss of significance"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false"
+   },
+   "source": [
+    "Andregradsformelen kan i enkelte tilfeller gi feil svar. Et slikt tilfelle er når man bruker den på likningen  $x^2+9^{12}x−3=0$ . Om man ønsker å finne røttene til denne likningen, gir standardformelen følgende resultat:\n",
+    "\n",
+    "```python\n",
+    "Andregradsligningen 1.00*x^2 + 282429536481.00*x -3.00 har de to reelle løsningene 0.000e+00 og -2.824e+11\n",
+    "```\n",
+    "\n",
+    "Her er bare den siste av røttene korrekt. Den første roten er ukorrekt blitt null pga. avrundingsfeil som følge av tap av presisjon i beregningen, korrekt svar ville ha vært:\n",
+    "\n",
+    "```python\n",
+    "Andregradsligningen 1.00*x^2 + 282429536481.00*x -3.00 har de to reelle løsningene 1.062e-11 og -2.824e+11\n",
+    "```\n",
+    "Hva kommer denne feilen av? ***Gjør om på funksjonen slik at det tar hensyn til slike tilfeller.***\n",
+    "\n",
+    "**Eksempel på kjøring**\n",
+    "```python\n",
+    "#a = 0.25, b = 18000, c = 1\n",
+    "#Gammel kode som gir feil svar:\n",
+    "Andregradsligningen 0.25*x^2 + 18000.00*x + 1.00 har de to reelle løsningene -0.00 og -72000.00\n",
+    "#Ny kode som gir korrekt svar:\n",
+    "Andregradsligningen 0.25*x^2 + 18000.00*x + 1.00 har de to reelle løsningene -5.556e-05 og -7.200e+04\n",
+    "  \n",
+    "#a = 10, b = 25000, c = 0.015\n",
+    "#Gammel kode som gir feil svar:\n",
+    "Andregradsligningen 10.00*x^2 + 25000.00*x + 0.01 har de to reelle løsningene -0.00 og -2500.00\n",
+    "#Ny kode som gir korrekt svar:\n",
+    "Andregradsligningen 10.00*x^2 + 25000.00*x + 0.01 har de to reelle løsningene -6.000e-07 og -2.500e+03\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Hint"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "Collapsed": "false",
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Om du sliter, kan det være nyttig å lese dette:\n",
+    "\n",
+    "- [NumericallyStableSolutionForTheQuadraticEquations](http://www.solipsys.co.uk/cgi-bin/sews.py?NumericallyStableSolutionForTheQuadraticEquation)\n",
+    "- [Numerically Stable Method for Solving Quadratic Equations](https://people.csail.mit.edu/bkph/articles/Quadratics.pdf)"
+   ]
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit Metadata",
+  "kernelspec": {
+   "display_name": "Python 3.9.12 ('MasterSH')",
+   "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.12"
+  },
+  "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": "1af34073cf870790cfc76b9595972df681b22c7711d0d010a36b0715767a3067"
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Ovinger/Oving2/Betingede funksjoner.ipynb b/Ovinger/Oving2/Betingede funksjoner.ipynb
new file mode 100644
index 0000000..e17b243
--- /dev/null
+++ b/Ovinger/Oving2/Betingede funksjoner.ipynb	
@@ -0,0 +1,249 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "quantitative-retrieval",
+   "metadata": {},
+   "source": [
+    "<nav class=\"navbar navbar-default\">\n",
+    "  <div class=\"container-fluid\">\n",
+    "    <div class=\"navbar-header\">\n",
+    "      <a class=\"navbar-brand\" href=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Betingede funksjoner\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "- Betingelser\n",
+    "- Funksjoner\n",
+    "\n",
+    "Først importerer vi et nødvendig eksternt bibliotek, `numpy` som vi kommer til å benytte til matematiske beregninger i denne oppgaven. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "divided-boston",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import numpy as np\n",
+    "import math"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "stretch-mexican",
+   "metadata": {},
+   "source": [
+    "I den matematiske verden er det en rekke funksjoner som har ulike funksjonsuttrykk for ulike input-verdier. Den naturlige logaritmen $ln(x)$ er definert for alle reelle verdier større enn 0. Dette kan skrives som følger:\n",
+    "\n",
+    "$ f(x) = \\begin{cases} ln(x), \\text{ if } x > 0\\\\ \\text{undef.}, \\text{ if } x \\leqslant 0 \\end{cases}$\n",
+    "\n",
+    "I Python kan vi håndtere dette ved å undersøke hvilken input som gis til funksjonen, og returnere den riktige verdien, slik det er gjort i eksempelet nedenfor."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "comprehensive-queue",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def f(x):\n",
+    "    if x <= 0:\n",
+    "        return\n",
+    "    return np.log(x)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "freelance-invitation",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Dersom vi gir en negativ verdi som input, forventer vi tom output\n",
+    "f(-2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "turkish-daughter",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "1.0"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Dersom vi gir en positiv verdi, forventer vi at denne skal være lik den naturlige logaritmen som output\n",
+    "f(math.e)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "biological-lingerie",
+   "metadata": {},
+   "source": [
+    "## a) Implementer betinget funksjon med variabel i nevner\n",
+    "\n",
+    "Som kjent er det en dårlig idé å dele på 0 i matematikken. I denne oppgaven skal du implementere en funksjon som genererer riktig output for den matematiske funksjonen for alle verdier av $x$, der $f(x) = 0$ når $x = 0$:\n",
+    "\n",
+    "$f(x) = x^2 sin(\\frac{1}{x})$\n",
+    "\n",
+    "**Skriv koden din her:**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "viral-objective",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def f(x):\n",
+    "    \"\"\"Skriv kode her:\"\"\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "focused-secondary",
+   "metadata": {},
+   "source": [
+    "## b) Beregning av en fallskjermhoppers hastighet\n",
+    "\n",
+    "I denne oppgaven skal det implementeres en funksjon for å returnere hastigheten til en fallskjermhopper før fallskjermen utløses som en funksjon av hvor lenge det er siden hopperen forlot flyet. Vi antar at det er to tilfeller:\n",
+    "\n",
+    "1. Perioden før hopperen når sin terminalfart\n",
+    "2. Perioden når hopperen beveger seg i terminalfart\n",
+    "\n",
+    "**Perioden før terminalfart:**\n",
+    "Ved $t=0$ antar vi at farten er 0. Deretter er det en lineær sammenheng mellom tiden og hastigheten, denne sammenhengen er gitt ved forenklede ligningen:\n",
+    "\n",
+    "$ v(t) = t \\cdot g$\n",
+    "\n",
+    "Der $g$ er tyngdeakselerasjonen (nøyaktighet på en desimalplass er tilstrekkelig) og $t$ er tiden siden hoppet startet.\n",
+    "\n",
+    "**Perioden etter terminalhastighet er oppnådd:**\n",
+    "For enkelhets skyld antar vi at alle hoppere, uavhengig av vekt, oppnår terminalhastighet etter like lang tid, nemlig etter $t=10$. Hastigheten til hopperen etter dette er tidsuavhengig, og er gitt ved ligningen:\n",
+    "\n",
+    "$v_{terminal} = 10 \\cdot g$\n",
+    "\n",
+    "Du skal skrive en funksjon som tar inn et tidspunkt, og returnerer hastigheten til hopperen på det gitte tidspunktet.\n",
+    "\n",
+    "**Skriv koden din her:**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "altered-symphony",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def hastighet(tid):\n",
+    "    \"\"\"Skriv kode her:\"\"\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "leading-depth",
+   "metadata": {},
+   "source": [
+    "Under kan du undersøke om funksjonen du har skrevet fungerer som den skal:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "portable-serum",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(hastighet(5))\n",
+    "print(\"Riktig svar: 49 m/s\")\n",
+    "\n",
+    "print(hastighet(0))\n",
+    "print(\"Riktig svar: 0 m/s\")\n",
+    "\n",
+    "print(hastighet(15))\n",
+    "print(\"Riktig svar: 98 m/s\")\n",
+    "\n",
+    "print(hastighet(10))\n",
+    "print(\"Riktig svar: 98 m/s\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "timely-worthy",
+   "metadata": {},
+   "source": [
+    "## c) Mer realistisk modellering av fallskjermhopperens hastighet (FRIVILLIG)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "governing-aquarium",
+   "metadata": {},
+   "source": [
+    "Implementeres muligens senere"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "naked-today",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/Ovinger/Oving2/Billettpriser og rabatter.ipynb b/Ovinger/Oving2/Billettpriser og rabatter.ipynb
new file mode 100644
index 0000000..0f5744a
--- /dev/null
+++ b/Ovinger/Oving2/Billettpriser og rabatter.ipynb	
@@ -0,0 +1,254 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<nav class=\"navbar navbar-default\">\n",
+    "  <div class=\"container-fluid\">\n",
+    "    <div class=\"navbar-header\">\n",
+    "      <a class=\"navbar-brand\" href=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Billettpriser og rabatter\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "* Betingelser\n",
+    "\n",
+    "I denne oppgaven skal du bruke betingelser (if-elif-else) til å bestemme billettprisen til en bruker basert på input fra brukeren. \n",
+    "\n",
+    "Transportselskapet «TravelevatoR» tilbyr reiser fra Trondheim til Pythonville. Ved bestilling minst 14 dager før man skal reise, kan man få minipris 199. Normal billett koster 440. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Skriv en funskjon med to mulige oppførsler som vist under:\n",
+    "\n",
+    "  \n",
+    "```python\n",
+    ">>>billettpris(15)\n",
+    "  \n",
+    "Du kan få minipris: 199,-  \n",
+    "```\n",
+    "\n",
+    "```python\n",
+    ">>>billettpris(10)\n",
+    "\n",
+    "Minipris ikke lenger tilgjengelig, du må betale fullpris: 440,-  \n",
+    "```\n",
+    "***Skriv koden din under***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-02T08:22:50.607851Z",
+     "start_time": "2019-07-02T08:22:50.600802Z"
+    }
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Det hender av og til at kunder ikke ønsker minipris, men heller vil ha fullprisbillett. Dette fordi minipris ikke kan refunderes / endres. Utvid derfor funksjonen så kunder kan legge til informasjon om de ønsker minipris – men kun der det er relevant. To eksempel på kjøring etter utvidelsen:\n",
+    "\n",
+    "  \n",
+    "```python\n",
+    ">>>billetpris(15, 'J')\n",
+    "\n",
+    "Du kan få minipris og ønsker dette, billettpris: 199,-\n",
+    "```\n",
+    "  \n",
+    "```python\n",
+    ">>>billetpris(15, 'N')\n",
+    "\n",
+    "Du kan få minipris, men ønsker ikke det. Da tilbyr vi fullpris: 440,-\n",
+    "```\n",
+    "\n",
+    "***Skriv koden din under***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Det blir besluttet at barn under 16 gis 50% rabatt. Senior (60+), militær i uniform, og student gis 25% rabatt. Om man f.eks. både er 60+ og militær / student, får man likevel bare 25% rabatt. Alle disse rabattene gjelder kun i forhold til fullpris, for minipris gis ingen rabatter. Endre funksjonen så kunder må gi informasjon om alder, evt. også om student / militær, og regner ut riktig pris.\n",
+    "\n",
+    "Eksempel på kjøring av koden:\n",
+    "\n",
+    "  \n",
+    "```python\n",
+    ">>>billettpris(15, 'J', 'militær')\n",
+    "\n",
+    "Du kan få minipris og ønsker dette, billettpris: 199,-\n",
+    "```\n",
+    "\n",
+    "```python\n",
+    ">>>billettpris(15, 'N', 'militær')\n",
+    "\n",
+    "Du kan få minipris, men ønsker ikke det. Du får rabatt grunnet at du er militær - billettpris: 330,-\n",
+    "```\n",
+    "\n",
+    "```python\n",
+    ">>>billettpris(10, 'N', 'barn')\n",
+    "\n",
+    "Du kan ikke få minipris. Du får rabatt grunnet at du er barn - billettpris: 220,-\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### d) Valgfri oppgave"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Du får godkjent oppgaven om du bare har klart a, b og delvis c, men prøv gjerne på denne litt vanskeligere d også.\n",
+    "\n",
+    "Etter lobbyvirksomhet fra studentorganisasjoner endres reglene på følgende måte: Studenter får også litt rabatt på miniprisbilletter (10%),  samt at personer som både er studenter og militære  / 60+, eller studenter og barn, får to rabatter, og dermed bare betaler 0,75 * 0,75 eller 0.75 * 0.5 av fullpris. Merk at personer som er 60+ og militære, men ikke studenter, eller barn og militære, men ikke studenter, ikke får noen slik multiplisert rabatt, de må fortsatt nøye seg med den ene rabatten de hadde før, og de vanlige 199 for minipris. Endre funksjonen så den fungerer korrekt gitt de nye reglene."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  },
+  "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/Ovinger/Oving2/Epletigging.ipynb b/Ovinger/Oving2/Epletigging.ipynb
new file mode 100644
index 0000000..d1e150c
--- /dev/null
+++ b/Ovinger/Oving2/Epletigging.ipynb
@@ -0,0 +1,241 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Datamaskinen som tigget epler - Debugging\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "* Feilretting\n",
+    "* Betingelser\n",
+    "\n",
+    "I denne oppgaven får du utdelt en kodesnutt som inneholder feil. Det er både konkrete feil i koden (python-syntaks) og logiske feil (brukeren kan gi input som får programmet til å gi betydningsløse svar). \n",
+    "\n",
+    "Din oppgave er å rette opp i syntaks-feilene, og håndtere de logiske feilene på en fornuftig måte. \n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Funksjonen tar inn hvor mange epler brukeren har, og hvor mange han er villig til å gi bort, som argumenter. Basert på disse argumentene er det tre mulige utfall, som vist under:\n",
+    "\n",
+    "  \n",
+    "```python\n",
+    ">>> teste_gavmildhet(0, 0)\n",
+    "\n",
+    "Dette er et program for å teste din sjenerøsitet.\n",
+    "Du har 0 epler.\n",
+    "Æsj, det sier du bare for å slippe å gi noe!\n",
+    "```\n",
+    "  \n",
+    "```python\n",
+    ">>> teste_gavmildhet(5, 2)\n",
+    "\n",
+    "Dette er et program for å teste din sjenerøsitet.\n",
+    "Du har 5 epler.\n",
+    "Du er villig til å gi meg 2 epler.\n",
+    "Du beholder det meste for deg selv...\n",
+    "Du har nå 3 epler igjen.\n",
+    "```\n",
+    "  \n",
+    "```python\n",
+    ">>> teste_gavmildhet(7, 5)\n",
+    "\n",
+    "Dette er et program for å teste din sjenerøsitet.\n",
+    "Du har 7 epler.\n",
+    "Du er villig til å gi meg 5 epler.\n",
+    "Takk, det var snilt!\n",
+    "Du har nå 2 epler igjen. \n",
+    "```\n",
+    "\n",
+    "Koden som skal kjøre programmet er som vist under. **Finn syntaksfeilene og rett opp i dem slik at koden kjører som vist i eksempelteksten.**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def teste_gavmildhet(antall_epler, antall_gis_bort):\n",
+    "    streng = \"Dette er et program for å teste din sjenerøsitet.\\n\"\n",
+    "    streng += f\"Du har {antall_epler} epler.\\n\"\n",
+    "    \n",
+    "    if antall_epler = 0:\n",
+    "        streng += \"Æsj, det sier du bare for å slippe å gi noe!\"\n",
+    "        return streng\n",
+    "    else\n",
+    "    streng += f\"Du er villig til å gi meg {antall_gis_bort} epler.\\n\"\n",
+    "    if antall_gis_bort < antall_epler / 2:\n",
+    "       streng += \"Du beholder det meste for deg selv...\\n\"\n",
+    "           else:\n",
+    "           streng += \"Takk, det var snilt!\")\n",
+    "       strent += f\"Du har nå {har_epler - gir_epler} epler igjen.\"\n",
+    "    return streng\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Utskriften av siste print-setning vil bli grammatisk feil hvis brukeren har igjen 1 eple, siden det skrives «epler». Utvid funksjonen slik at det skriver:\n",
+    "\n",
+    "  \n",
+    "```python\n",
+    ">>> test_gavmildhet(5, 4)\n",
+    "\n",
+    "\n",
+    "Dette er et program for å teste din sjenerøsitet.\n",
+    "Du har 5 epler.\n",
+    "Du er villig til å gi meg 4 epler.\n",
+    "Takk, det var snilt!\n",
+    "Du har nå 1 eple igjen. \n",
+    "```\n",
+    "\n",
+    "hvis det ble akkurat ett, ellers epler i flertall som det står nå."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Hvis brukeren skriver inn et større tall for hvor mange epler man kan gi bort enn hva man faktisk hadde, kommer siste linje ut med et negativt tall.\n",
+    "\n",
+    "Utvid funksjonen ytterligere slik at hvis brukeren f.eks. har 7 epler men vil gi bort 9, avslutter funksjonen med\n",
+    "\n",
+    "  \n",
+    "```python\n",
+    "Du har nå 0 epler igjen. Gi meg de 2 du skylder meg neste gang vi møtes.\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  },
+  "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/Ovinger/Oving2/Forbrytelse og straff.ipynb b/Ovinger/Oving2/Forbrytelse og straff.ipynb
new file mode 100644
index 0000000..8dd9d20
--- /dev/null
+++ b/Ovinger/Oving2/Forbrytelse og straff.ipynb	
@@ -0,0 +1,851 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Forbrytelse og straff"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "**Læringsmål:**\n",
+    "- Kodeforståelse, hvordan tenke om oppsett av if-setninger\n",
+    "- Kunne forstå og rette typiske feil med if-setninger"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I denne oppgaven skal vi rette kodefeil og lære hvordan man tenker om strukturen av både enkle og komplekse if-setninger."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Forklaring av syntaksfeil (hint oppg a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Noen typiske syntaksfeil som nybegynnere gjerne gjør i bruk av if-setninger:\n",
+    "\n",
+    "- Glemme kolon bakerst i linjer med `if`, `else` og `elif`. Det må være kolon `:` disse stedene\n",
+    "- Feil med logiske operatorer, f.eks. bruke tilordning = når man egentlig mener sammenligning `==`. Eller unødig mellomrom i operatorer som skrives med to symboler, som `> =`, disse må stå helt inntil hverandre\n",
+    "- Feil med parenteser som ikke matcher i sammensatte logiske uttrykk med `and`, `or`, `not`\n",
+    "- Feil med marg / innrykk - alle setninger som hører til en if må stå med eksakt ett tabulator-innrykk, en else må stå på eksakt samme marg som den if den hører sammen med, etc. Bare ett mellomrom i forskjell vil være nok til at koden feiler."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## a) Syntaksfeil"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Kjør koden under. Som du vil se, inneholder den syntaksfeil i de nederste linjene (if-else-setningen).\n",
+    "\n",
+    "***Rett alle syntaksfeilene, slik at koden kjører*** og gir en konklusjon ut på skjermen (om det var promillekjøring eller ikke) – for denne deloppgaven behøver ikke konklusjonen være riktig, det er nok å få programmet til å kjøre. NB! Du skal **ikke** slette noen kodelinjer eller betingelser!"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# leser inn data\n",
+    "prom = float(input(\"Hvor stor var promillen? \"))\n",
+    "motor = input(\"Var farkosten en motorvogn? (j/n) \")\n",
+    "f = input(\"Var personen fører av vognen? (j/n) \")\n",
+    "leds = input(\"Var personen ledsager ved øvekjøring? (j/n) \")\n",
+    "n = input(\"Var det nødrett? (j/n) \")\n",
+    " \n",
+    "# vurderer straffbarhet\n",
+    "if prom < 0.2 and motor = \"j\" and f = \"j\" or leds = = \"j\" and n == \"n\":\n",
+    "   print(\"Det var straffbar promillekjøring.\")\n",
+    " else\n",
+    "    print(\"Ikke straffbart, ingen bot.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## b) Enkle logiske feil"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "***Jobb videre med koden fra oppgave (a) hvor du korrigerte syntaksfeilene. Prøv ut programmet med følgende input:***\n",
+    "\n",
+    "- promille = 0.1, motor = \"j\", fører = \"j\", ledsager = \"n\", nødrett = \"n\". Du vil da se at programmet feilaktig sier at det var promillekjøring selv om promillen var for liten. ***Rett denne feilen (men ikke noe annet)***, kjør programmet med samme input og se at det nå konkluderer rett, test også med promille 0.3 men ellers samme input og se at det gjør rett med dette også. \n",
+    "- Kjør deretter programmet med følgende input: promille = 0.1, motor = \"j\", fører = \"n\", ledsager = \"j\", nødrett = \"n\". Du vil se at programmet igjen feilaktig konkluderer med promillekjøring, til tross for rettingen du gjorde i sted. Dette skyldes en litt mer komplisert feil i betingelsen. ***Rett denne feilen*** og test deretter at koden nå virker som den skal med litt ulike kombinasjoner av verdier."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Enkle logiske feil (hint oppgave b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Vi går nå videre med enkle logiske feil, som vil føre til at if-setninger kommer til feil konklusjon. Typiske eksempler på slike feil:\n",
+    "\n",
+    "**(I)** Bruk av feil sammenligningsoperator, f.eks. `<` i stedet for `>`, eller `>` i stedet for `>=`. Koden under viser ett eksempel på dette:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "alder = int(input(\"Alder: \"))\n",
+    "if alder > 18:\n",
+    "    print(\"Kunden har lov til å kjøpe vin\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Her vil kunden måtte være 19 eller mer for en positiv konklusjon, mens det skulle holdt med 18. Dvs., operatoren skulle vært `>=` , ikke `>`\n",
+    "\n",
+    "**(II)** Bruk av feil operator (typisk forveksle `and` og `or`) i sammensatte betingelser, eller feil / manglende parentesbruk i sammensatte betingelser. Koden under viser to feilaktige forsøk på å beslutte om en kunde kan kjøpe vin eller ikke (forrige feil med `>=` rettet):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# FORSØK 1:\n",
+    "alder = int(input(\"Alder: \"))\n",
+    "ruset = input(\"Er kunden beruset? (J/N) \")\n",
+    "um = input(\"Er kunden umyndiggjort? (J/N) \")\n",
+    "if alder >= 18 or ruset == \"N\" or um == \"N\":\n",
+    "    print(\"Kunden har lov til å kjøpe vin\")\n",
+    "  \n",
+    "# FORSØK 2:\n",
+    "alder = int(input(\"Alder: \"))\n",
+    "ruset = input(\"Er kunden beruset? (J/N) \")\n",
+    "um = input(\"Er kunden umyndiggjort? (J/N) \")\n",
+    "if alder >= 18 and not ruset == \"J\" or um == \"J\":\n",
+    "    print(\"Kunden har lov til å kjøpe vin\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Forsøk 1 feiler her fordi man har brukt `or` der man skulle brukt `and`. Alle de tre betingelsene må være tilfredsstilt, siden Polet ikke selger vin til noen som er synlig ruset, eller som man vet er umyndiggjort. En korrekt løsning ville være:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# KORREKT LØSNING, VARIANT 1:\n",
+    "alder = int(input(\"Alder: \"))\n",
+    "ruset = input(\"Er kunden beruset? (J/N) \")\n",
+    "um = input(\"Er kunden umyndiggjort? (J/N) \")\n",
+    "if alder >= 18 and ruset == \"N\" and um == \"N\":\n",
+    "    print(\"Kunden har lov til å kjøpe vin\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Forsøk 2 feiler fordi `or` har lavere presedens enn `not` og `and`. Python vil derfor først sjekke betingelsen `alder >= 18 and not ruset==\"J\"`, deretter vil den sette hele dette sammen med `or um == \"J\"`. Dette vil føre til at en person som er umyndiggjort vil få lov til å kjøpe vin uansett, også om man er under 18 og ruset. For at denne betingelsen skal evalueres korrekt må man sette parentes rundt de to betingelsene som har `or` mellom seg som vist nedenfor. Da vil disse to bli sammenholdt først, og begge disse vil bli berørt av det foregående `not`, altså at man **ikke** må være umyndiggjort."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# KORREKT LØSNING, VARIANT 2:\n",
+    "alder = int(input(\"Alder: \"))\n",
+    "ruset = input(\"Er kunden beruset? (J/N) \")\n",
+    "um = input(\"Er kunden umyndiggjort? (J/N) \")\n",
+    "if alder >= 18 and not (ruset == \"J\" or um == \"J\"):\n",
+    "    print(\"Kunden har lov til å kjøpe vin\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "VARIANT 1 og 2 gir eksakt samme resultat - det vil ofte være flere mulige måter å skrive sammensatte betingelser på. I dette tilfellet kan man vel si at Variant 1 er å foretrekke, siden den slipper å bruke `not` og parentes, og dermed blir litt lettere å lese."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## c) Feil i rekkefølge på if-elif-setninger."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Nedenfor er en ny variant av promilleprogrammet. For kjappere testing ser vi nå bort fra spørsmålene om det var motorvogn, om vedkommende førte kjøretøyet, og eventuell nødrett - dvs. vi antar at alt dette i boks fra før, og spørsmål dermed bare er størrelse på promillen og resulterende straff.\n",
+    "\n",
+    "Kjør programmet nedenfor et par ganger med ulike verdier, f.eks. med promille 0.1 deretter 0.3 deretter 0.9.\n",
+    "\n",
+    "Som du vil se, vil man aldri få større forelegg enn 6000,- med dette programmet, uansett hvor høy promillen var. Hvis promillen var over 0.4, f.eks. 0.45, skulle man hatt 10000,- i forelegg, og med promille høyere enn 0.5 skulle man hatt bot basert på månedslønn, samt fengselsstraff.\n",
+    "\n",
+    "***Korriger programmet*** så det gjør riktige beslutninger på straffenivå for alle mulige verdier av promille."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "prom = float(input(\"Hvor stor var promillen? \"))\n",
+    "if prom < 0.2:\n",
+    "    print(\"Ikke straffbart, ingen bot.\")\n",
+    "elif prom > 0.2:\n",
+    "    print(\"Forelegg: 6000,-\")\n",
+    "elif prom > 0.4:\n",
+    "    print(\"Forelegg: 10000,-\")\n",
+    "elif prom > 0.5:\n",
+    "    print(\"Bot: en halv brutto månedslønn, samt fengsel.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Rekkefølge if-elif-setninger (hint oppgave c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Ved bruk av if-elif-else er det avgjørende at betingelsene kommer i riktig rekkefølge. I Eksempel 1 under skal vi regne ut karakter fra poengscore på en eksamen (hvor toppscore er 100 og blank besvarelse gir 0 poeng). På grunn av feil rekkefølge på testene vil programmet ikke funke som det skal. Problemet er at den første testen, `score >= 0`, vil slå til for absolutt alle eksamenskandidater - og de andre betingelse etter `elif` vil dermed aldri bli evaluert. Alle kandidatene ender da med F."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "start_time": "2019-07-02T08:22:01.699Z"
+    },
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# EKSEMPEL 1 (HVOR VI MED VILJE HAR GJORT FEIL)\n",
+    "score = int(input(\"Antall poeng: \"))\n",
+    "  \n",
+    "if score >= 0:\n",
+    "    karakter = \"F\"\n",
+    "elif score >= 41:\n",
+    "    karakter = \"E\"\n",
+    "elif score >= 53:\n",
+    "    karakter = \"D\"\n",
+    "elif score >= 65:\n",
+    "    karakter = \"C\"\n",
+    "elif score >= 77:\n",
+    "    karakter = \"B\"\n",
+    "elif score >= 89:\n",
+    "    karakter = \"A\"\n",
+    "  \n",
+    "print(\"Du fikk\", karakter)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Setter vi derimot testene motsatt rekkefølge, som i Eks 2, vil det funke. Generelt er det viktig å sørge for at alle alternativene i en if-elif-else kan nås gitt en passende verdi. Her vil studenter med `score >= 89` få A mens de med lavere score vil bli fordelt videre nedover i if-elif-strukturen."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# EKSEMPEL 2 (MED KORRIGERT REKKEFØLGE)\n",
+    "score = int(input(\"Antall poeng: \"))\n",
+    "   \n",
+    "if score >= 89:\n",
+    "    karakter = \"A\"\n",
+    "elif score >= 77:\n",
+    "    karakter = \"B\"\n",
+    "elif score >= 65:\n",
+    "    karakter = \"C\"\n",
+    "elif score >= 53:\n",
+    "    karakter = \"D\"\n",
+    "elif score >= 41:\n",
+    "    karakter = \"E\"\n",
+    "else:\n",
+    "    karakter = \"F\"\n",
+    "  \n",
+    "print(\"Du fikk\", karakter)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## d) Feil i valg av overordnet struktur på if-setninger."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I den neste kodesnutten ser vi på et relatert problem, nemlig hvor lenge førerkortet skal inndras. Alt i alt er reglene som følger:\n",
+    "- Førerkort skal inndras på livstid dersom det er gjentatt promillekjøring (dømt for det også tidligere), eller hvis man slo seg vrang og nektet og samarbeide ved legetesten, og dette skjer mindre enn 5 år etter en tidligere dom for promillekjøring. (Dvs., hvis man slår seg vrang ved legetesten, kan man få inndratt førerkortet selv om blodprøven deretter viser at promillen var under 0.2.)\n",
+    "- For personer som **ikke** er tidligere dømt for promillekjøring, gjelder følgende:\n",
+    "  - Hvis promillen var over 1.2, inndras førerkort for minst 2 år. Inndragelse for 2 år gis også hvis man slår seg vrang under legetesten - da uavhengig av hva promillen var.\n",
+    "  - Promille i området 0.8-1.2 gir inndragning i 20-22 måneder.\n",
+    "  - Promille 0.5-0.8 gir vanligvis 18 måneder.\n",
+    "  - Promille 0.2-0.5 gir inntil 1 års inndragelse.\n",
+    "\n",
+    "Koden under skulle implementere disse reglene, men gjør feil i noen tilfeller. \n",
+    "\n",
+    "- Hvis det svares \"j\" på \"Tidligere dømt...\" sier programmet at førerkort skal inndras på livstid uansett hva det svares på de andre spørsmålene, dvs. også om promille var 0 og man oppførte seg pent ved legetesten.\n",
+    "- Med f.eks. 1.4 eller 0.9 for promille (og \"n\" på tidligere dømt, \"n\" på nektet å samarbeide) vil programmet først skrive ut korrekt straffereaksjon, men vil deretter fortsette med å skrive ut også mildere straffereaksjoner. \n",
+    "\n",
+    "***Rett disse feilene så programmet gir riktig konklusjon på straffereaksjonen for alle mulige kombinasjoner av input-verdier.***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# leser inn data\n",
+    "prom = float(input(\"Hvor stor var promillen? \"))\n",
+    "nekt = input(\"Nektet å samarbeide ved legetest? (j/n) \")\n",
+    "tidl = input(\"Tidligere dømt for promillekjøring? (j/n) \")\n",
+    "if tidl == \"j\":\n",
+    "    aar = int(input(\"Antall år siden siste domfellelse: \"))\n",
+    "else:\n",
+    "    aar = 999\n",
+    "  \n",
+    "# vurderer inndragning av førerkort\n",
+    "if tidl == \"j\" or nekt == \"j\" and aar < 5:\n",
+    "    print(\"Førerkort inndras for alltid.\")\n",
+    "if prom > 1.2 or nekt == \"j\":\n",
+    "    print(\"Førerkort inndras minst 2 år.\")\n",
+    "if prom > 0.8:\n",
+    "    print(\"Førerkort inndras 20-22 mnd.\")\n",
+    "if prom > 0.5:\n",
+    "    print(\"Førerkort inndras vanligvis 18 mnd.\")\n",
+    "if prom > 0.2:\n",
+    "    print(\"Førerkort inndras inntil 1 år.\")\n",
+    "else:\n",
+    "    print(\"Ingen inndragning av førerkort.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Feil valg av struktur for if-setninger (hint til oppg d)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Ofte skal vi ikke treffe bare én beslutning men flere forskjellige beslutninger i samme program. Dette tilsier bruk av flere if-setninger, og det er viktig å finne fram til en korrekt struktur for if-setningene. Her skal vi se på forskjellen mellom tre ulike situasjoner:\n",
+    "\n",
+    "1. beslutning med alternative handlinger som er gjensidig utelukkende: Bruk **if-else** (hvis 2 alternativer) eller **if-elif-else** (hvis 3 eller flere alternativer). \n",
+    "2. flere beslutninger som er uavhengige av hverandre: **Bruk frittstående if-setninger**\n",
+    "3. beslutninger som er avhengig av andre beslutninger, dvs. bare relevant å vurdere gitt et visst utfall av en tidligere beslutning: Kan løses ved **nøstede if-setninger**.\n",
+    "\n",
+    "Hvis man velger feil struktur på if-setningene, vil man få programmer som tar feil beslutninger."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "**Eksempel 1: Gjensidig utelukkende alternativer:**\n",
+    "\n",
+    "Omregning fra poengscore til karakter på en eksamen er eksempel på en beslutning med diverse gjensidig utelukkende konklusjoner - det skal gis A, B, C, D, E eller F ut fra poeng. Som vist i hint før oppgave c, løses dette typisk med en if-elif-struktur. Om man i stedet velger frittstående if-setninger, vil dette bli feil:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# EKSEMPEL HVOR VI MED VILJE HAR GJORT FEIL\n",
+    "score = int(input(\"Antall poeng: \"))\n",
+    "   \n",
+    "if score >= 89:\n",
+    "    karakter = \"A\"\n",
+    "if score >= 77:\n",
+    "    karakter = \"B\"\n",
+    "if score >= 65:\n",
+    "    karakter = \"C\"\n",
+    "if score >= 53:\n",
+    "    karakter = \"D\"\n",
+    "if score >= 41:\n",
+    "    karakter = \"E\"\n",
+    "else:\n",
+    "    karakter = \"F\"\n",
+    "  \n",
+    "print(\"Du fikk\", karakter)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Studenter med høy poengscore, f.eks. tilsvarende A eller B, vil i første omgang få tilordnet en riktig verdi for karakter ved at den tilsvarende if-setningen slår til. MEN: Siden hver setning begynner med `if`, er den uavhengig av forrige if-setning, så alle disse blir utført uavhengig av utfallet av forrige if-setning. Alle med høy score, vil jo også ha nok poeng til en dårligere karakter. Til slutt vil derfor alle studenter enten ende opp med E (hvis >=41 poeng) eller F (hvis < 41 poeng). Korreksjonen her er å bytte ut alle `if` unntatt den øverste med `elif` da blir alle de påfølgende testene kun utført hvis foregående tester har feilet, så en student som allerede har fått A vil ikke få denne overskrevet av en dårligere karakter.\n",
+    "\n",
+    "(Eksemplet kunne ha funket med frittstående if-setninger hvis testene inneholdt både øvre og nedre grense for score, f.eks. `89 > score >= 77` for B, `77 > score >= 65` for C, osv. Dette ville imidlertid ha vært en klart dårligere løsning enn if-elif-... både fordi betingelsene blir mer kompliserte å skrive, og fordi programmet kaster bort tid med å evaluere ekstra if-setninger hvis en av de tidlige betingelsene har slått til. En if-elif...-elif-else-struktur er vanligvis lettere å forstå fordi den klart får fram at det dreier seg om gjensidig ekskluderende alternativ.)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "**Eksempel 2: To uavhengige beslutninger**\n",
+    "\n",
+    "Det neste eksemplet viser derimot et tilfelle hvor det er riktig å bruke frittstående if-setninger. Skal vi ta paraply eller ikke? Skal vi ta brodder eller ikke? Dette er to uavhengige beslutninger, den ene avhenger av regn, den andre om det er glatt. Hadde vi i stedet brukt if-elif her, ville programmet ikke ha virket som det skulle, da det kun ville ha vært i stand til å anbefale brodder i oppholdsvær (mens det jo kan være minst like glatt om det regner)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "regn = float(input(\"Hvor mange mm regn er det meldt? \"))\n",
+    "glatt = int(input(\"Hvor glatt er det, fra 0 (ikke) til 10 (blank is)? \"))\n",
+    "if regn > 0.2:\n",
+    "    print(\"Da anbefaler jeg paraply.\")\n",
+    "if glatt > 8:\n",
+    "    print(\"Da anbefaler jeg sko med brodder eller pigger.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Hvis vi her hadde skrevet `elif glatt > 8:` ville programmet kun ha vært i stand til å anbefale brodder hvis det ikke regnet, mens isen jo vil være minst like glatt hvis den i tillegg er våt.\n",
+    "\n",
+    "Et tvilstilfelle på hvilken struktur man bør velge, inntreffer hvis man har beslutninger som er delvis avhengige av hverandre, men også delvis uavhengige. La oss si at kriteriet for brodder var enten `glatt > 8` eller hvis det regner, `glatt > 7` (fordi man antar at det da vil kunne bli glattere underveis på spaserturen fordi isen blir våtere). Nedenstående viser to mulige løsninger på dette:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# ALTERNATIV 1: frittstående if-setninger\n",
+    "regn = float(input(\"Hvor mange mm regn er det meldt? \"))\n",
+    "glatt = int(input(\"Hvor glatt er det, fra 0 (ikke) til 10 (blank is)? \"))\n",
+    "if regn > 0.2:\n",
+    "    print(\"Da anbefaler jeg paraply.\")\n",
+    "if glatt > 8 or regn > 0.2 and glatt > 7:\n",
+    "    print(\"Da anbefaler jeg sko med brodder eller pigger.\")\n",
+    "  \n",
+    "# ALTERNATIV 2: nøstede if-setninger\n",
+    "regn = float(input(\"Hvor mange mm regn er det meldt? \"))\n",
+    "glatt = int(input(\"Hvor glatt er det, fra 0 (ikke) til 10 (blank is)? \"))\n",
+    "if regn > 0.2:\n",
+    "    print(\"Da anbefaler jeg paraply.\")\n",
+    "    if glatt > 7:\n",
+    "        print(\"Da anbefaler jeg sko med brodder eller pigger.\")\n",
+    "elif glatt > 8:\n",
+    "    print(\"Da anbefaler jeg sko med brodder eller pigger.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Her vil begge alternativer funke, hver har sine fordeler og ulemper. Ulempen med alt. 1 er at den gjentar betingelsen `regn > 0.2` to steder, som dermed tilsier at den også må evalueres to ganger i enkelte kjøringer av programmet. Forskjellen dette innebærer i tidsforbruk er imidlertid marginal. Ulempen med alternativ 2 er derimot at print-setningen om brodder forekommer to steder... det blir dermed litt vanskeligere å forstå programmet, mens det i alt. 1 fremgår klarere eksakt hvilken kombinasjon av betingelser som utløser hver konsekvens.\n",
+    "\n",
+    "I andre tilfeller kan en beslutning være avhengig av en annen, f.eks. kun være aktuell ved et visst utfall av en foregående if-setning:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "regn = float(input(\"Hvor mange mm regn er det meldt? \"))\n",
+    "vind = float(input(\"Hvor mange m/s vind er det meldt? \"))\n",
+    "if regn > 0.2:\n",
+    "    if vind < 7.0:\n",
+    "        print(\"Da anbefaler jeg paraply.\")\n",
+    "    else:\n",
+    "        print(\"Anbefaler regntøy, for mye vind for paraply.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Her ville if `regn > 0.2: .....elif vind < 7.0` ha blitt feil. Programmet ville da ha gjort vurderinger av vinden kun hvis det ikke regnet, og dermed ha vært ute av stand til å fraråde paraply hvis det regner og samtidig blåser kraftig.\n",
+    "\n",
+    "Oppsummert:\n",
+    "\n",
+    "- flere helt uavhengige beslutninger: bruk frittstående if-setninger\n",
+    "- beslutning med gjensidig utelukkende handlingsalternativer: bruk if-else (2 alternativer) eller if-elif-else (3 eller flere alternativer)\n",
+    "- beslutninger relatert på annen måte, f.eks. at en betingelse (som `vind < 7.0 ovenfor`) kun er aktuell gitt et visst utfall av en annen betingelse: kan løses ved å nøste flere if-setninger inni hverandre"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## e) FRIVILLIG EKSTRAOPPGAVE"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Det er ikke nødvendig å gjøre denne for å få godkjent deloppgaven \"Forbrytelse og straff\". ***Ta utgangspunkt i nedenstående kode med input-setninger. Bruk deretter det du har laget i tidligere deloppgaver a-d for å sette sammen et komplett program som både gir riktig konklusjon på bot og på inndragelse av førerkort***. Husk som nevnt tidligere at det er mulig å få inndratt førerkortet selv i tilfeller hvor man ikke får noen bot for promillekjøring, nemlig hvis man slår seg vrang i forbindelse med legetesten."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# leser inn data\n",
+    "prom = float(input(\"Hvor stor var promillen? \"))\n",
+    "motor = input(\"Var farkosten en motorvogn? (j/n) \")\n",
+    "f = input(\"Var personen fører av vognen? (j/n) \")\n",
+    "leds = input(\"Var personen ledsager ved øvekjøring? (j/n) \")\n",
+    "n = input(\"Var det nødrett? (j/n) \")\n",
+    "nekt = input(\"Nektet å samarbeide ved legetest? (j/n) \")\n",
+    "tidl = input(\"Tidligere dømt for promillekjøring? (j/n) \")\n",
+    "if tidl == \"j\":\n",
+    "    aar = int(input(\"Antall år siden siste domfellelse: \"))\n",
+    "  \n",
+    "# legg til din kode nedenfor her:"
+   ]
+  }
+ ],
+ "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.9.2"
+  },
+  "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/Ovinger/Oving2/Logiske operatorer og logiske uttrykk.ipynb b/Ovinger/Oving2/Logiske operatorer og logiske uttrykk.ipynb
new file mode 100644
index 0000000..c6113de
--- /dev/null
+++ b/Ovinger/Oving2/Logiske operatorer og logiske uttrykk.ipynb	
@@ -0,0 +1,637 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Logiske operatorer og logiske uttrykk\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "- Logiske uttrykk\n",
+    "- Betingelser\n",
+    "- Kodeforståelse\n",
+    "- Funksjoner\n",
+    "\n",
+    "I denne oppgaven skal vi lære om logiske uttrykk og hvordan de kan settes sammen med `and`, `or` og `not`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Generelt om logiske operatorer og logiske uttrykk\n",
+    "\n",
+    "Dette er ikke en del av oppgaven, men kan være lurt å lese før du begynner."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I de tidligere oppgavene i denne øvingen var alle betingelsene enkle betingelser hvor vi typisk sammenlignet to verdier. De vanlige operatorene vi har for å sammenligne verdier er:\n",
+    "\n",
+    "- `==` (som betyr \"er lik\", merk at her er to likhetstegn nødvendig for å skille fra tilordningsoperatoren)\n",
+    "- `!=` (som betyr \"ulik\", altså det motsatte av ==)\n",
+    "- `>` , `<` , `>=` , `<=` (som betyr henholdsvis større, mindre, større eller lik, og mindre eller lik)\n",
+    "\n",
+    "Ofte kan beslutninger være avhengig av verdien til **flere** variable, eller for den del flere betingelser for samme variabel.\n",
+    "\n",
+    "Ved hjelp av logiske operatorer kan vi teste for flere betingelser i samme if-setning. Eksemplet nedenfor viser et lite program som leser inn temperatur og vind og så skal skrive et varsel om ekstremvær hvis det er kaldere enn -30, varmere enn 40, eller mer vind enn 20 m/s.\n",
+    "\n",
+    "Her viser vi dette løst på to alternative måter, først med enkle betingelser og en if-elif-setning (linje 5-10), deretter med en enkelt if-setning med en sammensatt betingelse med `or` mellom (linje 13-14). **OBS:** Trykk på View -> Toggle Line Numbers i menyen på toppen for å se linjenummer.\n",
+    "\n",
+    "Når det står `or` mellom betingelser er det nok at en av dem er sann for at hele uttrykket skal bli sant (men også sant om begge er sanne); den sammensatte varianten vil dermed gi samme resultat som if-elif-setningen bare at vi med vilje har droppet utropstegn i siste print så du lett skal se hva som er hva."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'VARSEL: Ekstremvær!'"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "########## Eksempel 1 ##########\n",
+    "\n",
+    "# VARIANT MED if-elif\n",
+    "def ekstremvær_if_elif(temp, vind):\n",
+    "    if temp < -30:\n",
+    "        return \"VARSEL: Ekstremvær!\"\n",
+    "    elif temp > 40:\n",
+    "        return \"VARSEL: Ekstremvær!\"\n",
+    "    elif vind > 20:\n",
+    "        return \"VARSEL: Ekstremvær!\"\n",
+    "    \n",
+    "ekstremvær_if_elif(50, 2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'VARSEL: Ekstremvær'"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "########## Eksempel 2 ##########\n",
+    "\n",
+    "# VARIANT MED SAMMENSATT BETINGELSE\n",
+    "def ekstremvær_sammensatt(temp, vind):\n",
+    "    if temp < -30 or temp > 40 or vind > 20:\n",
+    "        return \"VARSEL: Ekstremvær\"\n",
+    "\n",
+    "ekstremvær_sammensatt(10, 40)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Merk at varianten med sammensatt betingelse kun funker her fordi det er samme tekst som skal skrives i alle de tre tilfellene. Hvis utskriften skulle ha vært mer spesifikk (f.eks. ekstremt kaldt / ekstremt varmt / ...), måtte vi ha brukt if-elif...\n",
+    "\n",
+    "Tilsvarende kan vi i noen tilfeller unngå nøstede if-setninger (linje 5-7 i eksemplet under) ved å sette sammen betingelser med `and` (linje 10-11 under). Når det er `and` mellom to betingelser, må **begge** være sanne for at hele uttrykket skal bli sant."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-02T06:42:19.110725Z",
+     "start_time": "2019-07-02T06:42:10.950922Z"
+    },
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.3\n",
+      "Vind i sekundmeter: 6.0\n",
+      "Anbefaler paraply.\n"
+     ]
+    }
+   ],
+   "source": [
+    "########## Eksempel 3 ##########\n",
+    "\n",
+    "def paraply(regn, vind):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    print(f\"Vind i sekundmeter: {vind}\")\n",
+    "    \n",
+    "    # VARIANT MED NØSTEDE if-setninger\n",
+    "    if regn > 0.2:\n",
+    "        if vind < 7.0:\n",
+    "            return \"Anbefaler paraply.\"\n",
+    "    return \"Anbefaler ikke paraply\"\n",
+    "        \n",
+    "\n",
+    "anbefaling = paraply(0.3, 6.0)\n",
+    "print(anbefaling)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.3\n",
+      "Vind i sekundmeter: 6.0\n",
+      "Anbefaler paraply.\n"
+     ]
+    }
+   ],
+   "source": [
+    "########## Eksempel 4 ##########\n",
+    "\n",
+    "def paraply_sammensatt(regn, vind):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    print(f\"Vind i sekundmeter: {vind}\")\n",
+    "    \n",
+    "    # VARIANT MED SAMMENSATT BETINGELSE\n",
+    "    if regn > 0.2 and vind < 7.0:\n",
+    "        return \"Anbefaler paraply.\"\n",
+    "    return \"Anbefaler ikke paraply\"\n",
+    "\n",
+    "anbefaling = paraply_sammensatt(0.3, 6.0)\n",
+    "print(anbefaling)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I begge de foregående eksemplene vil nok de fleste si at variantene med sammensatte betingelser er klart å foretrekke framfor if-elif eller nøstet if. Bruk av sammensatte betingelser gjør koden kortere og enklere å forstå.\n",
+    "\n",
+    "Det er typisk tre operatorer vi bruker for å sette sammen betingelser: `and`, `or`, `not`\n",
+    "\n",
+    "Disse virker på følgende måte:\n",
+    "\n",
+    "- betingelse1 `and` betingelse2 blir True (sant) bare hvis **både** betingelse1 og betingelse2 er True, ellers blir uttrykket False (usant)\n",
+    "- betingelse1 `or` betingelse2 blir True (sann) hvis **minst en** av betingelsene er True, ellers False\n",
+    "- `not` betingelse1 blir True hvis betingelse1 er False, og False hvis betingelse1 er True\n",
+    "- Man kan sette sammen mer komplekse betingelser ved å bruke flere av dem. \n",
+    "\n",
+    "Presedensregler: `not` har større presedens enn `and`, som har større enn `or`.\n",
+    "\n",
+    "F.eks. anta at\n",
+    "\n",
+    "`if regn > 0.2 and vind < 7.0 or solbrentfare > 0.9 and not solkrembeholdning > 0:` er gitt som betingelse for å ta med paraply\n",
+    "\n",
+    "Ifølge presedensreglene vil `not` evalueres først, deretter `and`, og til slutt `or`. Uttrykket kan dermed ses som to alternative måter for å anbefale paraply (delt av `or` i midten), nemlig:\n",
+    "\n",
+    "ENTEN at både `regn > 0.2` og `vind < 0.7` er sanne. Det spiller da ingen rolle hvilken verdi vi har for solbrentfare osv. (siden den har `or` foran seg)\n",
+    "ELLER at `solbrentfare > 0.9` er sann, samtidig som `solkrembeholdning > 0` er usann (slik at `not solkrembeholdning > 0` vil være sann)\n",
+    "I det siste tilfellet er det rimelig å anta at paraply er tenkt å beskytte mot sol, ikke mot regn.\n",
+    "\n",
+    "Merk at selv om sammensatte betingelser gjorde koden kortere og enklere å forstå i eksemplene over, er ikke dette alltid tilfelle. Hvis man ender med veldig store sammensatte betingelser, vil disse i seg selv være vanskelig å forstå, slik at kanskje noe oppsplitting med if-elif... eller nøsting av if-setninger kunne ha vært bedre.\n",
+    "\n",
+    "Men se først om det er mulig å skrive betingelsen enklere. Dette gjelder særlig hvis det er mye bruk av `not`. Akkurat som mye bruk av negasjoner i vanlig norsk vil gjøre en tekst vanskelig å forstå, vil mye bruk av `not` gjøre Python-betingelser vanskelige å forstå - og kunne kanskje vært unngått. F.eks.\n",
+    "\n",
+    "- `not a < 10` kan like gjerne skrives `a >= 10`\n",
+    "- `not a == 10` kan like gjerne skrives `a != 10`\n",
+    "- `not (c < 0 or c > 255)` kan like gjerne skrives `c >= 0 and c <= 255` eller enda enklere `0 <= c <= 255`.\n",
+    "Det fins tilfeller hvor `not` er lurt å bruke, men bruk den med måte, bare når bedre alternativer ikke finnes."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Hvilke av de følgende logiske uttrykkene vil gi True om `x=3`, `y=8` og `z=-3`?\n",
+    "\n",
+    "Uttrykk 1: `-5 < z and 5 > z`  \n",
+    "Uttrykk 2: `not y == 8`  \n",
+    "Uttrykk 3: `x == 8 or y == 8`  \n",
+    "Uttrykk 4: `not (x <= 3 or y >= 9)`  \n",
+    "Uttrykk 5: `not (x**2 != 8 and y-z == 5) or x+y == y-z`  \n",
+    "\n",
+    "Dobbelklikk på teksten under og skriv svaret ditt der:"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "hide_input": false
+   },
+   "source": [
+    "Svar: < dobbeltklikk her>"
+   ]
+  },
+  {
+   "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": [
+    "Om du sliter kan du sjekke ved å skrive et program som gir x, y og z verdiene 3, 8, -3 og bruke `print(<logisk uttrykk>)`.\n",
+    "\n",
+    "Husk presedensregler: `not` har større presedens enn `and`, som har større enn `or`.  \n",
+    "Du kan teste kode her:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Nedenfor følger en funksjon der brukeren skal gi to tall innenfor et lovlig verdiområde. Det lovlige verdiområdet er mellom 40-50 eller mellom 70-90. Om ikke begge tallene som gis som argumenter harlovlig verdi, skal koden i else-blokken returneres.\n",
+    "\n",
+    "Dessverre er det feil i koden som gjør at den ikke fungerer slik den skal. Din oppgave er å rette opp i disse feilene.\n",
+    "\n",
+    "***Rett opp feilene under og sjekk at koden fungerer for alle tilfeller***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Gi inn a og b, begge heltall i intervall <40,50> eller <70,90>:\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(\"Gi inn a og b, begge heltall i intervall <40,50> eller <70,90>:\" )\n",
+    "\n",
+    "def gyldige_tall(a, b):\n",
+    "    if (a>70 and a<<90) or (a>40 and not a>=50) and (70<b<90 or (b>40 and b<50)):\n",
+    "        return \"Tallene er begge i gyldige intervall!\"\n",
+    "    else:\n",
+    "        return \"Minst ett av tallene er utenfor et gyldig intervall :(\""
+   ]
+  },
+  {
+   "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": [
+    "Husk parenteser!"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Du skal i denne oppgaven fullføre funksjonen gitt nedenfor slik at den fungerer korrekt. Det er blitt laget 10 pannekaker, noe som er mer enn datamaskinen klarer å spise, og den ønsker å dele noen av dem med deg. Men om du er grådig og spør om å få flere enn 10, vil du få beskjed om at det ikke er mulig. Om du derimot ønsker å gi datamaskinen pannekaker (skriver inn et negativt tall som argument til funksjonen), vil du også få beskjed om at det ikke er mulig. ***Endre på koden under***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg\")\n",
+    "  \n",
+    "def antall_pannekaker(n):\n",
+    "    if ...:             #Kode mangler her\n",
+    "        return \"Beklager, men det er nok ikke mulig\"\n",
+    "    else:\n",
+    "        r = 10-p\n",
+    "        return f\"Da blir det {p} på deg og {r} på meg :D\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "**Eksempel på kjøring**\n",
+    "\n",
+    "```\n",
+    "Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg\n",
+    "antall_pannekaker(4)\n",
+    "Da blir det 4 på deg og 6 på meg :D\n",
+    "```\n",
+    "  \n",
+    "```\n",
+    "Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg ^u^\n",
+    "antall_pannekaker(100)\n",
+    "Beklager, men det er nok ikke mulig\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## d)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I denne deloppgaven skal pannekakefunksjonen utvides. Det skal nå også ta inn et argument om personen liker pannekaker og lagre det i en boolsk variabel, som vist i koden under (merk: `'J'` betyr at personen liker pannekaker, og `'N'` betyr at personen ikke liker pannekaker:\n",
+    "```python\n",
+    "print(\"Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg\")\n",
+    "\n",
+    "def antall_pannekaker(n, liker):\n",
+    "    if liker == 'J':\n",
+    "        liker_pannekaker = True\n",
+    "    else:\n",
+    "        liker_pannekaker = False\n",
+    "    ...\n",
+    "```\n",
+    "\n",
+    "Pannekakeprogrammet elsker pannekaker og er lite forståelsesfull ovenfor de som ikke gjør det. Derfor, om `liker_pannekaker` er `False`, skal det også svare \"...ikke mulig\" selv om brukeren ber om et antall pannekaker innenfor lovlig intervall <0,10>.\n",
+    "\n",
+    "Din jobb er å samle alle disse betingelsene i et logisk uttrykk og skrive dette logiske uttrykk inn i koden nedenfor (der ... står), slik at programmet får rett oppførsel. ***Endre på koden under***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg ^u^\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(\"Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg ^u^\")\n",
+    "def antall_pannekaker(n, liker):\n",
+    "    if liker == 'J':\n",
+    "        liker_pannekaker = True\n",
+    "    else:\n",
+    "        liker_pannekaker = False\n",
+    "  \n",
+    "    if ...:             #Kode mangler her\n",
+    "        return \"Beklager, men det er nok ikke mulig\"\n",
+    "    else:\n",
+    "        r = 10-p\n",
+    "        return f\"Da blir det {p} på deg og {r} på meg :D\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "**Eksempel på kjøring**\n",
+    "```\n",
+    "Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg\n",
+    "antall_pannekaker(5, 'J')\n",
+    "Da blir det 5 på deg og 5 på meg :D\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "Hei! Jeg har 10 pannekaker jeg ønsker å dele med deg ^u^\n",
+    "antall_pannekaker(7, 'N')\n",
+    "Beklager, men det er nok ikke mulig\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  },
+  "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/Ovinger/Oving2/Sammenligning av strenger.ipynb b/Ovinger/Oving2/Sammenligning av strenger.ipynb
new file mode 100644
index 0000000..73ed96c
--- /dev/null
+++ b/Ovinger/Oving2/Sammenligning av strenger.ipynb	
@@ -0,0 +1,563 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Sammenligning av strenger\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "- Betingelser\n",
+    "- Kodeforståelse\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Generelt om sammenligning av strenger\n",
+    "Trykk på pilen til venstre for å lese"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "\n",
+    "Når man sammenligner to strenger i Python vil strengene sammenlignes karakter for karakter. F.eks. vil et program som sammenligner strengene `\"Ola\"` og `\"Ole\"` og sjekker om de er like, først sammenligne `'O'` mot `'O'`, så `'l'` mot `'l'`, og til slutt `'a'` mot `'e'`. Det er først ved sammenligningen av `'a'` mot `'e'` at det vil bli returnert `False`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T13:28:36.030253Z",
+     "start_time": "2019-07-01T13:28:36.020435Z"
+    },
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "a = \"Ola\"\n",
+    "b = \"Ole\"\n",
+    "  \n",
+    "print(\"Sammenligner\", a, \"og\", b)\n",
+    "if a == b:\n",
+    "    print(\"Navnene er like\")\n",
+    "else:\n",
+    "    print(\"Navnene er IKKE like\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Om man derimot sammenligner navnene Markus og Marcus, vil testen av betingelsen returnere `False` når `'k'` blir sammenlignet med `'c'`. Det betyr at `'u'`  mot `'u'` og `'s'` mot `'s'` ikke blir sjekket."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T13:30:06.268914Z",
+     "start_time": "2019-07-01T13:30:06.261563Z"
+    },
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "a = \"Markus\"\n",
+    "b = \"Marcus\"\n",
+    "  \n",
+    "print(\"Sammenligner\", a, \"og\", b)\n",
+    "if a == b:\n",
+    "    print(\"Navnene er like\")\n",
+    "else:\n",
+    "    print(\"Navnene er IKKE like\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Prøv gjerne ut koden over med andre verdier selv. Andre eksempler på kjøring kan være:\n",
+    "```python\n",
+    "# a = \"Ann\", b = \"Anne\"\n",
+    "Sammenligner Ann og Anne\n",
+    "Navnene er IKKE like\n",
+    "```\n",
+    "```python  \n",
+    "# a = \"Anders\", b = \"Anders\"\n",
+    "Sammenligner Anders og Anders\n",
+    "Navnene er like\n",
+    "```\n",
+    "  \n",
+    "```python\n",
+    "# a = \"Anders\", b = \"anders\"\n",
+    "Sammenligner Anders og anders\n",
+    "Navnene er IKKE like\n",
+    "```\n",
+    "\n",
+    "Som du ser i siste kjøring, skiller Python mellom store og små bokstaver, og en stor A er ikke det samme som en liten a. Dette kommer av at tegnene i strengene lagres som tall, og det er disse tallene som sammenlignes. I ASCII er karakterene A til Z representert med tallene 65 til 90, og karakterene a til z er representert med tallene 97 til 122."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Du skal nå lage et program som sammenligner to matvarer, og sjekker om de er like. Det skal ikke spille noen rolle om matvarenavnene som sendes inn har store eller små bokstaver, dvs. at `\"druer\"` og `\"DrUer\"` skal regnes som like matvarer (se Hint). Det trengs ikke å ta hensyn til entall og flertall, dvs. at `\"druer\"` og `\"drue\"` regnes som to forskjellige matvarer.\n",
+    "\n",
+    "**Eksempel på kjøring:**\n",
+    "\n",
+    "```\n",
+    "Sammenligner druer og DrUer\n",
+    "Det er samme matvare\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "Sammenligner druer og drue\n",
+    "Dette er to forskjellige matvarer\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "Sammenligner TomAT og ToMat\n",
+    "Det er samme matvare\n",
+    "```  \n",
+    "\n",
+    "```\n",
+    "Sammenligner tomat og potet\n",
+    "Dette er to forskjellige matvarer\n",
+    "```\n",
+    "\n",
+    "___Skriv din kode her:___"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T13:52:20.851486Z",
+     "start_time": "2019-07-01T13:52:20.846135Z"
+    },
+    "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": [
+    "`str.lower()` returnerer en kopi av strengen bestående av små bokstaver.\n",
+    "\n",
+    "Dvs., om du har en variabel `a = \"DrUer\"`, vil `a.lower()` gi strengen `\"druer\"`. Men husk, `a.lower()` endrer ikke på variabelen `a`, så man må enten lage en ny variabel `b = a.lower()` og bruke variabelen `b` i sjekken, eller så kan man bruke `a.lower()` direkte i sjekken i stedet for `a`.\n",
+    "\n",
+    "Eksempel som viser bruk av `str.lower()`:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "a = \"DrUer\"\n",
+    "  \n",
+    "print(a)        #Output: \"DrUer\"\n",
+    "a.lower()       #retunerer strengen \"druer\", men endrer ikke på variabelen a\n",
+    "print(a)        #Output: \"DrUer\"\n",
+    "print(a.lower())    #Output: \"druer\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Fremgangsmåte"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "1. Lag to variabler (`a` og `b`) som representerer hver sin streng.\n",
+    "2. Skriv hvilke variabler du sammenligner ut til skjerm.\n",
+    "3. Bruk en if-else-setning med betingelsen `a.lower() == b.lower()` for å sammenligne strengene, og skriv ut om det er samme vare eller to forskjellige varer til skjerm."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I denne oppgaven skal du lage et program som tar inn to navn og sorterer dem i alfabetisk rekkefølge. Du trenger ikke ta hensyn til små og store bokstaver i denne oppgaven.\n",
+    "\n",
+    "**Eksempel på kjøring:**\n",
+    "```\n",
+    "Første navn: Ole\n",
+    "Andre navn: Ola\n",
+    "Under følger navnene i alfabetisk rekkefølge:\n",
+    "Ola\n",
+    "Ole\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "Første navn: Bob Bernt\n",
+    "Andre navn: Bob Arne\n",
+    "Under følger navnene i alfabetisk rekkefølge:\n",
+    "Bob Arne\n",
+    "Bob Bernt\n",
+    "```\n",
+    "\n",
+    "___Skriv din kode her:___"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Hint (trykk pil til venstre)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Om man ønsker å sortere navnene alfabetisk, kan man bruke `<` eller `>`. For navnene Ola og Ole vil Ole bli sett på som større enn Ola, siden `'e'` er representert av et større tall enn `'a'`. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Bruk av æ, ø og å i oppgave b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I Python3 brukes Unicode-tabellen til representasjon av bokstaver, og mens verdiene for bokstavene a-z er de samme som i ASCII-tabellen, er det litt annerledes for æ, ø og å. Disse kommer i en litt annen rekkefølge enn vi er vant med og har følgende verdier:\n",
+    "\n",
+    "\n",
+    "`'Ã¥'` - 229  \n",
+    "`'Ã…'` - 197  \n",
+    "`'æ'` - 230  \n",
+    "`'Æ'` - 198  \n",
+    "`'ø'` - 248  \n",
+    "`'Ø'` - 216  \n",
+    "\n",
+    "\n",
+    "Dette kan medføre at koden i oppgave b) ikke alltid vil gi korrekt svar, siden 'å' kommer før 'æ' og 'ø' i ASCII-tabellen, men etter 'æ' og 'ø' i det norske alfabetet.\n",
+    "\n",
+    "(Frivillig) Om du ønsker kan du endre på koden din slik at dette blir tatt hensyn til. Her må du nok benytte deg av stoff som ikke er gjennomgått enda."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Hva vil kodesnuttene under skrive ut til skjerm?\n",
+    "\n",
+    "```python\n",
+    "#Kodesnutt 1:\n",
+    "if 'k' < 'b':\n",
+    "    print('k er mindre enn b')\n",
+    "else:\n",
+    "    print('k er større enn b')\n",
+    "  \n",
+    "  \n",
+    "#Kodesnutt 2:\n",
+    "ny = \"New York\"\n",
+    "la = \"Los Angeles\"\n",
+    "  \n",
+    "if ny < la:\n",
+    "    print(ny)\n",
+    "    print(la)\n",
+    "else:\n",
+    "    print(la)\n",
+    "    print(ny)\n",
+    "  \n",
+    "  \n",
+    "#Kodesnutt 3:\n",
+    "d1 = \"DRuEr\"\n",
+    "d2 = \"drUer\"\n",
+    "if d1.lower() < d2.lower():\n",
+    "    print(d1)\n",
+    "    print(d2)\n",
+    "else:\n",
+    "    print(d2.lower())\n",
+    "```\n",
+    "\n",
+    "**Svar for kodesnutt 1 (Trykk på teksten under for å skrive):**"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Svar 1: < dobbeltklikk her>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "___Svar for Kodesnutt 2:___"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Svar 2: < dobbeltklikk her>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "___Svar for kodesnutt 3:___"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Svar 3: < dobbeltklikk her>"
+   ]
+  }
+ ],
+ "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.7.3"
+  },
+  "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/Ovinger/Oving2/Sjakkbrett.ipynb b/Ovinger/Oving2/Sjakkbrett.ipynb
new file mode 100644
index 0000000..92375b9
--- /dev/null
+++ b/Ovinger/Oving2/Sjakkbrett.ipynb
@@ -0,0 +1,233 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Sjakkbrett\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "* Betingelser\n",
+    "* Logiske uttrykk\n",
+    "* Nøstede if-setninger\n",
+    " \n",
+    "Posisjoner på et sjakkbrett kan identifiseres med en bokstav og et tall. Bokstaven identifiserer kolonnen (kalt \"linjen\" i sjakk), og tallet identifiserer raden.\n",
+    "\n",
+    "\n",
+    "![img](./../../Resources/Images/chessboard.png)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "**I denne oppgaven skal du lage en funksjon som tar inn en posisjon fra brukeren, og bruker if-setninger til å finne ut hvilken farge ruten for denne posisjonen har.**\n",
+    "\n",
+    "Ta utgangspunkt i de tre kodelinjene under, som hjelper deg litt på vei. Disse viser hvordan man kan bruke indeksering av en strengvariabel (her kalt `pos`) for å finne enkelttegn.\n",
+    "\n",
+    "Indeks 0 er det første tegnet i strengen, når `pos = 'a5'` vil dermed `pos[0]` være `'a'` og `pos[1]` være `'5'`.\n",
+    "\n",
+    "I din kode må du\n",
+    "\n",
+    "* bytte ut kodelinjen `posisjon = 'a5'` med en kodelinje som i stedet ber bruker om å taste inn posisjonen\n",
+    "* legge til mer kode under kodelinjen `tall = ...` for å ta en beslutning om den innskrevne posisjonen er hvit eller svart rute.\n",
+    "\n",
+    "Eksempel på kjøring:\n",
+    "\n",
+    "  \n",
+    "```python\n",
+    "farge_på_posisjon('a5')  \n",
+    "Svart  \n",
+    "```\n",
+    "  \n",
+    "```python\n",
+    "farge_på_posisjon('d3')  \n",
+    "Hvit  \n",
+    "```\n",
+    "  \n",
+    "```python\n",
+    "farge_på_posisjon('f6')\n",
+    "Svart\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-02T08:14:18.283300Z",
+     "start_time": "2019-07-02T08:14:18.272588Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "def farge_på_posisjon(pos):\n",
+    " \n",
+    "    bokstav = pos[0]                #gir variabelen bokstav verdien til første del av argumentet\n",
+    "\n",
+    "    tall = int(pos[1])              #gir variabelen tall verdien til andre del av argumentet\n",
+    "  \n",
+    "    # Legg til resten av koden her"
+   ]
+  },
+  {
+   "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": [
+    "Modulo (`%`)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## b) Valgfri ekstraoppgave"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Denne trenger du ikke ha fått til for å få godkjent deloppgaven.\n",
+    "\n",
+    "**Utvid programmet så det også håndterer mulig feil input fra bruker, på følgende måte**:\n",
+    "\n",
+    "* Hvis brukeren skriver inn en streng med en annen lengde enn 2 tegn (enten kortere eller lenger), skal programmet svare `\"Feil input. Du må skrive akkurat to tegn\"` og så avslutte.\n",
+    "* Hvis innskrevet tekst er 2 tegn lang men ikke tilsvarer en sjakkrute, skal programmet svare som vist under. Dette skal altså skje hvis første tegn noe annet enn en bokstav A-H eller a-h, eller andre tegn er noe annet enn et tall 1-8.\n",
+    "\n",
+    "  \n",
+    "```\n",
+    "gyldig_posisjon('A9')\n",
+    "\n",
+    "Feil input.\n",
+    "Første tegn må være en bokstav A-H eller a-h\n",
+    "Andre tegn må være et tall 1-8\n",
+    "```\n",
+    "\n",
+    "Hvis lengden er to tegn, med bokstav og tall innen lovlige verdiområder, skal programmet gi samme resultat som i kjøringene i oppgave a"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  },
+  "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/Ovinger/Oving2/Skatteetaten.ipynb b/Ovinger/Oving2/Skatteetaten.ipynb
new file mode 100644
index 0000000..30f65d8
--- /dev/null
+++ b/Ovinger/Oving2/Skatteetaten.ipynb
@@ -0,0 +1,269 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "# Skatteetaten\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "* Betingelser\n",
+    " \n",
+    "\n",
+    "I denne oppgaven skal du lage et program som tar inn opplysninger om utleie av eiendom fra en bruker. Programmet vil så beregne hvor stor andel av inntekten som er skattbar.  \n",
+    "\n",
+    "Regler for skatt finnes på Skatteetaten sine hjemmesider, men er ikke nødvendig å sette seg inn i: \n",
+    "\n",
+    "http://www.skatteetaten.no/no/Person/Selvangivelse/tema-og-fradrag/Jobb-og-utdanning/delingsokonomi/utleie-av-bolig-og-fritidsbolig/\n",
+    "\n",
+    " \n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Lag et program som ber brukeren om opplysninger og svarer om inntekten er skattepliktig eller skattefri. \n",
+    "\n",
+    "Regler som må implementeres:\n",
+    "\n",
+    "* Hvis du bruker minst halvparten av boligen du eier til eget bruk, beregnet etter utleieverdi, er det skattefritt å leie ut resten.\n",
+    "* Leier du ut mer enn halvparten av egen bolig, men for under 20 000 kr i året er det også skattefritt.\n",
+    "* Leier du ut hele eller mer enn halvparten av egen bolig for over 20 000 kr i året er samtlige leieinntekter for hele året skattepliktige. \n",
+    "\n",
+    "**Eksempel på kjøring av kode:**\n",
+    " \n",
+    "```python\n",
+    ">>>skattepliktig_beløp(19500, 60)\n",
+    "\n",
+    "INFO: Denne funksjonen besvarer om utleie av boligen din er skattepliktig.\n",
+    "Skattepliktig beløp er: 0kr\n",
+    "```\n",
+    "\n",
+    "\n",
+    "```python\n",
+    ">>>skattepliktig_beløp(60000, 55)\n",
+    "\n",
+    "INFO: Denne funksjonen besvarer om utleie av boligen din er skattepliktig.\n",
+    "Skattepliktig beløp er: 60000kr\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\"\"\"\n",
+    "Funksjon som tar inn årlig leieinntekt og hvor mange prosent av leiligheten som er utleid\n",
+    "og returnerer skyldig skattebeløp i antall kroner\n",
+    "\"\"\"\n",
+    "def skattepliktig_beløp(leieinntekt, prosent_utleid):\n",
+    "    print('INFO: Denne funksjonen besvarer om utleie av boligen din er skattepliktig.')\n",
+    "    \"\"\"Skriv koden din her\"\"\"\n",
+    "    beløp = ...\n",
+    "    \n",
+    "    return f\"Skattepliktig beløp er: {beløp}kr\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "For å leie ut *sekundærbolig* eller *fritidsbolig* gjelder det særskilte regler. Lag en tilsvarende funksjon som dekker disse behovene. (Se samme nettside for mer informasjon om ønskelig.)\n",
+    "\n",
+    "Regler som må implementeres:\n",
+    "\n",
+    "* Sekundærbolig:\n",
+    " * Utleie av sekundærbolig beskattes fra første krone.\n",
+    "* Fritidsbolig:\n",
+    " * Der du helt eller delvis bruker fritidsboligen til fritidsformål, og selv bruker eiendommen i rimelig omfang over tid, så vil utleieinntekter inntil kr 10 000 være skattefrie.\n",
+    " * Av det overskytende beløp regnes 85 prosent som skattepliktig inntekt.\n",
+    " * Dersom fritidsboligen anses som utleiehytte blir det beskatning fra første krone.\n",
+    " * Om du leier ut flere enn en fritidsbolig vil grensen på 10 000 gjelde per fritidsbolig.\n",
+    " \n",
+    "**Eksempel på kjøring av kode:**\n",
+    " \n",
+    "```python\n",
+    "INFO\n",
+    "Dette programmet besvarer om din utleie en annen type bolig,\n",
+    "her sekundær- eller fritidsbolig, er skattepliktig.\n",
+    "Først trenger vi å vite om du leier ut en sekundær- eller en fritidsbolig.\n",
+    "---------------------------------------------------------------------\n",
+    "DATAINNHENTING:\n",
+    "Skriv inn type annen bolig (sekundærbolig/fritidsbolig) du har leid ut: Fritidsbolig\n",
+    "    \n",
+    "INFO\n",
+    "Du har valgt fritidsbolig.\n",
+    "Nå trenger vi først å vite om fritidsboligen(e) primært brukes til utleie eller fritid.\n",
+    "Deretter trenger vi å vite hvor mange fritidsbolig(er) du leier ut.\n",
+    "Til slutt trenger vi å vite hvor store utleieinntekter du har pr. fritidsbolig.\n",
+    "\n",
+    "---------------------------------------------------------------------\n",
+    "DATAINNHENTING:\n",
+    "Skriv inn formålet med fritidsboligen(e): Fritid\n",
+    "Skriv inn antallet fritidsboliger du leier ut: 3\n",
+    "Skriv inn utleieinntekten pr. fritidsbolig: 15000\n",
+    "    \n",
+    "---------------------------------------------------------------------\n",
+    "SKATTEBEREGNING:\n",
+    "Inntekten er skattepliktig\n",
+    "Overskytende beløp pr. fritidsbolig er 5000\n",
+    "Skattepliktig inntekt pr. fritidsbolig er 4250\n",
+    "Totalt skattepliktig beløp er 12750\n",
+    "```\n",
+    "\n",
+    "For å få til oppgaven vil det være nødvendig å bruke `input()`-funksjonen for å ta inn den nødvendige informasjonen om boligtype, og dersom det er en fritidsbolig må resten av informasjonen også innhentes.\n",
+    "\n",
+    "***Skriv koden din her:***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def skattepliktig_beløp():\n",
+    "    boligtype = input(\"Skriv inn type annen bolig (sekundærbolig/fritidsbolig) du har leid ut: \")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Sett sammen del (a) og (b) til et større program som først spør brukeren hva som er blitt leid ut (egen bolig / sekundærbolig / fritidsbolig), og deretter regner ut passende skattesats. Du kan delvis kopiere koden fra de tidligere deloppgavene.\n",
+    "\n",
+    "***Skriv koden din her:***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  },
+  "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/Ovinger/Oving2/Tekstbasert spill.ipynb b/Ovinger/Oving2/Tekstbasert spill.ipynb
new file mode 100644
index 0000000..190e662
--- /dev/null
+++ b/Ovinger/Oving2/Tekstbasert spill.ipynb	
@@ -0,0 +1,267 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "\n",
+    "# Tekstbasert spill\n",
+    "\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "- Betingelser\n",
+    "\n",
+    "Noe gøy vi kan gjøre med if-setninger er å lage et enkelt tekstbasert spill. Her er et eksempel fra starten av et av de mest kjente tekstbaserte spillene, Zork:\n",
+    "```python\n",
+    "West of House\n",
+    "This is an open field west of a white house, with a boarded front door.\n",
+    "There is a small mailbox here.\n",
+    "A rubber mat saying 'Welcome to Zork!' lies by the door.\n",
+    "\n",
+    ">open mailbox\n",
+    "You open the mailbox, revealing a small leaflet.\n",
+    "\n",
+    ">read leaflet\n",
+    "(first taking the small leaflet)\n",
+    "                          WELCOME TO ZORK\n",
+    "\n",
+    "    ZORK is a game of adventure, danger, and low cunning.  In it you will explore some of the most amazing territory ever seen by mortal man.  Hardened adventurers have run screaming from the terrors contained within!\n",
+    "    ...\n",
+    "```\n",
+    "    \n",
+    "Som du ser gjør man kommandoer i spillet ved å skrive inn hva man ønsker å gjøre. Da må man passe på at programmet klarer å kjenne igjen flere kommandoer en bruker kan tenke å skrive inn."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Skriv en intro til spillet ditt på en eller to setninger. La så brukeren skrive inn hva den ønsker å gjøre, og lag feedback for minst tre forskjellige muligheter ved hjelp av if-setninger. (Ønsker brukeren å åpne en dør, hva skjer? Ønsker brukeren å løpe vekk, hva skjer? Se på Zork eksempelet over eller test det ut selv [her](http://zorkonline.net/) om du trenger inspirasjon.) Husk å skriv kode for minst tre forskjellige scenarioer. I denne deloppgaven trenger du ikke ta hensyn til om brukeren skrev inn noe annet enn du forventet.\n",
+    "\n",
+    "Eksempel:\n",
+    "```python\n",
+    "Du står utenfor en dør.\n",
+    ">gå inn\n",
+    "Døren er låst.\n",
+    "\n",
+    "Du står utenfor en dør.\n",
+    ">bank på\n",
+    "Ingen svarer\n",
+    "\n",
+    "Du står utenfor en dør.\n",
+    ">lås opp\n",
+    "Du låser opp døren\n",
+    "```\n",
+    "\n",
+    "***Skriv koden din her:***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I visse tilfeller vil brukeren skrive inn noe annet enn vi forventer. Ta hensyn til dette i spillet ved å si \n",
+    "i fra dersom noe brukeren skriver ikke støttes.\n",
+    "\n",
+    "Eksempel: \n",
+    "```python\n",
+    "Du står utenfor en dør.\n",
+    ">gå inn\n",
+    "Døren er låst.\n",
+    "\n",
+    "Du står utenfor en dør.\n",
+    ">bank på\n",
+    "Ingen svarer\n",
+    "\n",
+    "Du står utenfor en dør.\n",
+    ">løp og gjem deg\n",
+    "Dette er ikke en støttet kommando\n",
+    "```\n",
+    "\n",
+    "***Skriv koden i samme blokk som oppgave a***"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Endre spillet så det ikke spiller noen rolle om brukeren skriver inn store eller små bokstaver i kommandoen sin.\n",
+    "\n",
+    "Eksempel:\n",
+    "```python\n",
+    "Du står utenfor en dør.\n",
+    ">gå inn\n",
+    "Døren er låst.\n",
+    "\n",
+    "Du står utenfor en dør.\n",
+    ">GÃ¥ Inn\n",
+    "Døren er låst.\n",
+    "```\n",
+    "***Skriv koden i samme blokk som oppgave a***"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "### d)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Ofte når vi driver med denne slags kommandoer vil det være nesten like formuleringer som betyr det samme, men siden vi nå programmerer må svaret være eksakt det samme som vi forventer. **For hvert scenario, ta hensyn til at brukeren kan formulere kommandoen på minst to måter.**\n",
+    "\n",
+    "Eksempel:\n",
+    "```python\n",
+    "#scenario 1\n",
+    "Du står utenfor en dør.\n",
+    ">gå inn\n",
+    "Døren er låst.\n",
+    "\n",
+    "Du står utenfor en dør.\n",
+    ">gå inn døra\n",
+    "Døren er låst.\n",
+    "\n",
+    "#scenario 2\n",
+    "Du står utenfor en dør.\n",
+    ">bank på\n",
+    "Ingen svarer\n",
+    "\n",
+    "Du står utenfor en dør.\n",
+    ">banker på\n",
+    "Ingen svarer\n",
+    "```\n",
+    "\n",
+    "***Skriv koden i samme blokk som oppgave a***"
+   ]
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Ovinger/Oving2/Ulike typer if-setninger.ipynb b/Ovinger/Oving2/Ulike typer if-setninger.ipynb
new file mode 100644
index 0000000..59297c6
--- /dev/null
+++ b/Ovinger/Oving2/Ulike typer if-setninger.ipynb	
@@ -0,0 +1,1410 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "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=\"_Oving2.ipynb\">Øving 2</a>\n",
+    "    </div>\n",
+    "    <ul class=\"nav navbar-nav\">\n",
+    "    <li><a href=\"Ulike%20typer%20if-setninger.ipynb\">Ulike typer if-setninger</a></li>\n",
+    "    <li><a href=\"Sammenligning%20av%20strenger.ipynb\">Sammenligning av strenger</a></li>\n",
+    "    <li><a href=\"Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb\">Logiske operatorer og logiske uttrykk</a></li>\n",
+    "    <li><a href=\"Forbrytelse%20og%20straff.ipynb\">Forbrytelse og straff</a></li>\n",
+    "    <li ><a href=\"Aarstider.ipynb\">Ã…rstider</a></li>\n",
+    "    <li class=\"active\"><a href=\"Tekstbasert%20spill.ipynb\">Tekstbasert spill</a></li>\n",
+    "    <li><a href=\"Andregradsligning.ipynb\">Andregradsligning</a></li>\n",
+    "    <li><a href=\"Betingede%20funksjoner.ipynb\">Betingede funksjoner</a></li>\n",
+    "    <li><a href=\"Sjakkbrett.ipynb\">Sjakkbrett</a></li>\n",
+    "    <li><a href=\"Billettpriser%20og%20rabatter.ipynb\">Billettpriser og rabatter</a></li>\n",
+    "    <li><a href=\"Skatteetaten.ipynb\">Skatteetaten</a></li>\n",
+    "    <li><a href=\"Epletigging.ipynb\">Datamaskinen som tigget epler</a></li>\n",
+    "    </ul>\n",
+    "  </div>\n",
+    "</nav>\n",
+    "\n",
+    "\n",
+    "# Ulike typer if-setninger\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "- Betingelser"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Generelt om if-setninger\n",
+    "Dette er ikke en del av oppgaven, men kan være lurt å lese før du begynnner. **Trykk på pilen til venstre for å lese**"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T08:54:49.298821Z",
+     "start_time": "2019-07-01T08:54:49.289265Z"
+    },
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I oppgavene i øving 1 har det vært slik at alle setningene i programmet skulle utføres hver gang programmet kjørte. De fleste nyttige programmer er ikke så enkle. Ofte skal visse programsetninger kun utføres under gitte betingelser. Overtidslønn skal utbetales bare hvis det har vært jobbet overtid. Monsteret du kjemper mot i et spill, skal miste liv bare hvis skuddet eller sverdslaget ditt har truffet. En alarm skal aktiveres bare hvis pasientens hjerterytme er blitt unormal. En sosial app på mobilen skal gi et spesielt varsel bare hvis du har fått nye meldinger der. Funksjonen nedenfor viser et eksempel hvor alle linjene blir utført uavhengig av hva som gis som input - denne funksjonen vil anbefale paraply uansett hvordan været er."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T08:54:49.298821Z",
+     "start_time": "2019-07-01T08:54:49.289265Z"
+    },
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.1\n",
+      "Da anbefaler jeg paraply!\n",
+      "Ha en fin tur til universitetet!\n"
+     ]
+    }
+   ],
+   "source": [
+    "def paraply_simpel(regn):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    print(\"Da anbefaler jeg paraply!\")\n",
+    "    print(\"Ha en fin tur til universitetet!\")\n",
+    "\n",
+    "paraply_simpel(0.1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T08:54:49.298821Z",
+     "start_time": "2019-07-01T08:54:49.289265Z"
+    },
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Paraply bør anbefales bare ved behov, f.eks. hvis det var meldt mer enn 0.2 mm regn. Det oppnår vi ved å inkludere en if-setning i funksjonen som undersøker hvor mye regn det er meldt:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.1\n",
+      "Jeg burde bruke paraply i dag: Nei\n"
+     ]
+    }
+   ],
+   "source": [
+    "def paraply_anbefaling(regn):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    \n",
+    "    if regn > 0.2:\n",
+    "        return \"Ja\"\n",
+    "    return \"Nei\"\n",
+    "\n",
+    "anbefaling = paraply_anbefaling(0.1)\n",
+    "print(f\"Jeg burde bruke paraply i dag: {anbefaling}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T08:54:49.298821Z",
+     "start_time": "2019-07-01T08:54:49.289265Z"
+    },
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Den ovenstående funksjonen viser en if-setning. Den har følgende struktur:\n",
+    "\n",
+    "- starter med ordet `if`, dette er et beskyttet ord i Python og kan derfor ikke brukes som variabelnavn e.l.\n",
+    "- bak if kommer en logisk betingelse - i dette tilfellet `regn > 0.2` - som vil være enten sann (`True`) eller usann (`False`), her avhengig av innholdet i variabelen regn\n",
+    "- bak betingelsen **må** if-setningen ha `:` **(kolon)** - hvis du glemmer kolon vil du få syntaksfeil. \n",
+    "- kodelinjen like under if har et innrykk (tabulator), dette betyr at denne linjen - `return \"Ja\"` - er del av if-setningen. Den vil bli utført **kun hvis betingelsen i if-setningen er sann**, som vil inntreffe hvis brukeren skriver inn et større tall enn 0.2\n",
+    "- siste kodelinje, `return \"Nei\"` har ikke innrykk, og vil utføres dersom det ikke har blitt returnert noe fra funksjonen enda, med andre ord, dersom `if`-blokken ikke ble gjennomført"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T08:54:49.298821Z",
+     "start_time": "2019-07-01T08:54:49.289265Z"
+    },
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Det er mulig å ha flere programsetninger som del av if-setningen, for eksempel:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 53,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T08:54:49.298821Z",
+     "start_time": "2019-07-01T08:54:49.289265Z"
+    },
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.3\n",
+      "Da anbefaler jeg paraply!\n",
+      "Gjerne en paraply med NTNU-logo.\n",
+      "Ha en fin tur til universitetet!\n"
+     ]
+    }
+   ],
+   "source": [
+    "def paraply_if(regn):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    \n",
+    "    if regn > 0.2:\n",
+    "        print(\"Da anbefaler jeg paraply!\")\n",
+    "        print(\"Gjerne en paraply med NTNU-logo.\")\n",
+    "    print(\"Ha en fin tur til universitetet!\")\n",
+    "\n",
+    "paraply_if(0.3)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T08:54:49.298821Z",
+     "start_time": "2019-07-01T08:54:49.289265Z"
+    },
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Her vil begge \"print\"-setningene om paraply kun bli utført hvis betingelsen er sann, mens \"fin tur\"-setningen fortsatt blir utført uansett utfall av if-setningen.\n",
+    "\n",
+    "**Altså: I Python viser innrykk hvor mange av de påfølgende setningene som styres av if-betingelsen.** Det er derfor viktig å være nøye med innrykkene og få alle programsetninger på korrekt indentasjonsnivå.\n",
+    "\n",
+    "Test gjerne ut koden over med forskjellige svar på mm regn for å se hvordan den virker."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Du lager en banankake som skal stå minst 50 min i ovnen. Ta utgangspunkt i følgende program, som har den svakheten at det sier at kaken skal ut uansett hvor lenge den har stekt.\n",
+    "\n",
+    "___Endre programmet slik at \"Kaken kan tas ut av ovnen\" kun printes hvis kaken har stått minst 50 minutt. \"Større eller lik\" skrives i Python >=___  \n",
+    "___Tips til servering... skal derimot printes uansett.___"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T15:44:45.569935Z",
+     "start_time": "2019-07-01T15:44:42.453083Z"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Kaken har vært i ovnen i  10  minutter.\n",
+      "Kaken kan tas ut av ovnen.\n",
+      "Tips til servering: vaniljeis.\n",
+      "----------------------------------------\n",
+      "Kaken har vært i ovnen i  60  minutter.\n",
+      "Kaken kan tas ut av ovnen.\n",
+      "Tips til servering: vaniljeis.\n",
+      "----------------------------------------\n"
+     ]
+    }
+   ],
+   "source": [
+    "def kake_ut_av_ovnen(tid):\n",
+    "    print(f\"Kaken har vært i ovnen i {tid} minutter.\")\n",
+    "    print(\"Kaken kan tas ut av ovnen.\")\n",
+    "    print(\"Tips til servering: vaniljeis.\")\n",
+    "    print(\"----------------------------------------\")\n",
+    "\n",
+    "kake_ut_av_ovnen(10)\n",
+    "\n",
+    "kake_ut_av_ovnen(60)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 55,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def kake_ut_av_ovnen_losning(tid):\n",
+    "    \"\"\"Skriv koden her\"\"\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Eksempel på utskrift fra tre ulike kjøringer, hvis du har fått det til riktig:\n",
+    "```\n",
+    "kake_ut_av_ovnen_losning(35)\n",
+    "Kaken har vært i ovnen i 35 minutter.\n",
+    "Tips til servering: vaniljeis.  \n",
+    ">>>  \n",
+    "  \n",
+    "kake_ut_av_ovnen_losning(50)\n",
+    "Kaken har vært i ovnen i 50 minutter.\n",
+    "Kaken kan tas ut av ovnen.  \n",
+    "Tips til servering: vaniljeis.  \n",
+    ">>>\n",
+    "  \n",
+    "kake_ut_av_ovnen_losning(65)\n",
+    "Kaken har vært i ovnen i 65 minutter.\n",
+    "Kaken kan tas ut av ovnen.  \n",
+    "Tips til servering: vaniljeis.\n",
+    ">>>\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T10:03:17.573938Z",
+     "start_time": "2019-07-01T10:03:17.564290Z"
+    },
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Ta utgangspunkt i følgende funksjon, som tar inn antall epler og antall barn som argumenter, og deretter regner ut hvor mange epler det blir på hvert barn."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 56,
+   "metadata": {
+    "ExecuteTime": {
+     "end_time": "2019-07-01T10:06:41.706832Z",
+     "start_time": "2019-07-01T10:06:37.363889Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "def antall_epler_per_barn(epler, barn):\n",
+    "    # Antall epler til hvert barn\n",
+    "    antall_per = epler // barn\n",
+    "    # Antall epler det er igjen etter at barna har fått sine epler\n",
+    "    antall_rest = epler % barn\n",
+    "    \n",
+    "    return antall_per, antall_rest\n",
+    "\n",
+    "antall_per, antall_rest = antall_epler_per_barn(14,3)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Når en funksjon i Python returnerer mer enn én ting, kan det enten returneres som en liste ved å plassere \"square brackets\" rundt og skille elementene ved komma, eller som en tuppel ved å skille elementene ved komma. Dersom du ønsker å hente ut spesifikke deler av den returnerte dataen, må du enten hente den ut ved å indeksere outputen, eller ved å deklarere variablene på tilsvarende måte som verdiene ble returnert. Vedlagt kode viser de to måtene."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 57,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Da blir det 2 epler til hvert barn\n",
+      "og 2 epler til overs til deg selv.\n",
+      "Takk for i dag!\n"
+     ]
+    }
+   ],
+   "source": [
+    "tuppel = antall_epler_per_barn(12,5)\n",
+    "antall_per = tuppel[0]\n",
+    "antall_rest = tuppel[1]\n",
+    "\n",
+    "print(\"Da blir det\", antall_per, \"epler til hvert barn\")\n",
+    "print(\"og\", antall_rest, \"epler til overs til deg selv.\")\n",
+    "print(\"Takk for i dag!\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Vi kan hente ut de returnerte variablene direkte ved å gjøre som i eksempelet nedenfor."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 58,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Da blir det 2 epler til hvert barn\n",
+      "og 2 epler til overs til deg selv.\n",
+      "Takk for i dag!\n"
+     ]
+    }
+   ],
+   "source": [
+    "antall_per, antall_rest = antall_epler_per_barn(12,5)\n",
+    "print(\"Da blir det\", antall_per, \"epler til hvert barn\")\n",
+    "print(\"og\", antall_rest, \"epler til overs til deg selv.\")\n",
+    "\n",
+    "print(\"Takk for i dag!\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Under vises to kjøreeksempler med tilsvarende scripts som i de to cellene ovenfor:\n",
+    "\n",
+    "**Kjøring 1:**\n",
+    "```\n",
+    "antall_per, antall_rest = antall_epler_per_barn(14, 3)\n",
+    "\n",
+    "Da blir det 4 epler til hvert barn  \n",
+    "og 2 epler til overs til deg selv.  \n",
+    "Takk for i dag!\n",
+    "```\n",
+    "\n",
+    "**Kjøring 2:**\n",
+    "```\n",
+    "antall_per, antall_rest = antall_epler_per_barn(3, 0)\n",
+    "Traceback (most recent call last):  \n",
+    "  ...  \n",
+    "ZeroDivisionError: integer division or modulo by zero  \n",
+    "```\n",
+    "\n",
+    "\n",
+    "Det første, hvor brukeren gir tallene 14 og 3 som argumenter, funker fint. Hvis brukeren derimot svarer 0 barn, vil funksjonen gi feilmelding (`ZeroDivisionError`) fordi det er umulig å dele på null. Negativt antall barn vil \"funke\", men ikke gi mening.\n",
+    "\n",
+    "___Endre funksjonen antall_epler_per_barn slik at de to print-setningene som forteller hvor mange epler det blir til barna og deg selv KUN utføres hvis barn > 0. \"Takk for i dag!\" skal derimot printes uansett. (Du skal altså flytte print-setningene inn i funsksjonen slik at et kall av funksjonen vil printe ut informasjonen).___\n",
+    "\n",
+    " Kjøring med barn > 0 skal gi samme resultat som eksemplet øverst. Eksemplet under viser kjøring hvis det skrives 0 for barn:\n",
+    " \n",
+    "```\n",
+    "antall_per, antall_rest = antall_epler_per_barn(3, 0) \n",
+    "Takk for i dag!\n",
+    "```\n",
+    " "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Generelt om if-else-setninger\n",
+    "Dette er ikke en del av oppgaven, men kan være lurt å lese før du går videre. **Trykk på pilen til venstre for å lese**"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I eksemplene knyttet til (a) og (b) skulle vi gjøre noe ekstra hvis en betingelse var sann, ellers la være. I andre tilfeller kan vi ønske å gjøre en handling hvis betingelsen er sann, og en alternativ handling hvis den er usann.\n",
+    "\n",
+    "Det kan vi oppnå med en **if-else**-setning. Eksemplet nedenfor bygger videre på tilsvarende eksempel for if-setninger."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 61,
+   "metadata": {
+    "ExecuteTime": {
+     "start_time": "2019-07-01T10:30:04.105Z"
+    },
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.0\n",
+      "Jeg burde bruke paraply i dag: Nei\n",
+      "Ha en fin tur til universitetet!\n"
+     ]
+    }
+   ],
+   "source": [
+    "def paraply_if_else(regn):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    \n",
+    "    if regn > 0.2:\n",
+    "        anbefaling = \"Ja\"\n",
+    "    else:\n",
+    "        anbefaling = \"Nei\"\n",
+    "    hilsen = \"Ha en fin tur til universitetet!\"\n",
+    "    return anbefaling, hilsen\n",
+    "\n",
+    "anbefaling, hilsen = paraply_if_else(0.0)\n",
+    "\n",
+    "print(f\"Jeg burde bruke paraply i dag: {anbefaling}\")\n",
+    "print(hilsen)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I dette eksemplet vil følgende skje hvis vi svarer mer enn 0.2 mm nedbør slik at betingelsen blir sann:\n",
+    "\n",
+    "**Eksempel på kjøring med over 0.3 mm nedbør:**\n",
+    "```\n",
+    "paraply_if_else(0.3)\n",
+    "\n",
+    "Output:\n",
+    "Jeg burde bruke paraply i dag: Ja\n",
+    "Ha en fin tur til universitetet!\n",
+    "```\n",
+    "\n",
+    "Svares det derimot et lavere tall, slik at betingelsen blir usann, skjer følgende:\n",
+    "\n",
+    "**Eksempel på kjøring med under 0.0 mm nedbør:**  \n",
+    "```\n",
+    "paraply_if_else(0.0)\n",
+    "\n",
+    "Output:\n",
+    "Jeg burde bruke paraply i dag: Nei\n",
+    "Ha en fin tur til universitetet!\n",
+    "```\n",
+    "\n",
+    "Altså:\n",
+    "- Anbefalingen settes til \"Ja\" under `if`-uttrykket bare hvis betingelsen er sann.\n",
+    "- Setningen som står på innrykk under `else` blir utført bare hvis betingelsen er usann (kunne også hatt flere setninger på innrykk etter `else`).\n",
+    "- Den siste hilsenen, som ikke har innrykk (Ha en fin tur...), blir returnert uansett."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I denne deloppgaven skal det lages et program som sjekker om en person kan stemme, altså om personen er 18 år eller eldre. Man må da spørre brukeren om alder og lagre svaret i en variabel, for deretter å sjekke om brukerens alder er 18 eller mer.\n",
+    "\n",
+    "**Eksempel på kjøring**\n",
+    "\n",
+    "```\n",
+    "kan_stemme(19)\n",
+    "\n",
+    "Output:\n",
+    "Du kan stemme:)\n",
+    "```\n",
+    "  \n",
+    "```\n",
+    "kan_stemme(18)\n",
+    "\n",
+    "Output:\n",
+    "Du kan stemme:)\n",
+    "```\n",
+    "  \n",
+    "```\n",
+    "kan_stemme(2)\n",
+    "\n",
+    "Output:\n",
+    "Du kan ikke stemme ennå\n",
+    "```\n",
+    "\n",
+    "***Skriv din kode her:***"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Fremgangsmåte\n",
+    "Trykk på pilen til venstre for å lese"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "1. Lag en funksjon som heter `kan_stemme` som tar inn en alder (tall) som argument\n",
+    "2. Sjekk, vha. if, om personens alder er større eller lik 18 (`alder >= 18`). Om dette er tilfelle skal strengen `\"Du kan stemme:)\"` returneres fra funksjonen\n",
+    "3. Lag en `else`-blokk som returnerer strenger `\"Du kan ikke stemme ennå\"`\n",
+    "\n",
+    "(Det er flere mulige løsninger på denne oppgaven.)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## Generelt om if-elif-else-setninger\n",
+    "Les gjerne denne før du går videre. **Trykk på pilen til venstre for å lese**"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I eksemplene vi har sett hittil, har det vært kun to mulige utfall på betingelsene - kaken har stått >= 50 minutt, eller ikke; antall barn er > 0, eller ikke; alder er over 18, eller ikke. I mange praktiske situasjoner kan det være tre eller flere mulige utfall.\n",
+    "\n",
+    "F.eks. hvis det var meldt mer enn 3 mm nedbør er kanskje ikke paraply tilstrekkelig, vi ville heller anbefale støvler og regntøy.  Vårt tidligere eksempel kunne da utvides som følger:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 65,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 4\n",
+      "Dagens anbefaling: Støvler og regntøy\n",
+      "Ha en fin tur til universitetet!\n"
+     ]
+    }
+   ],
+   "source": [
+    "# EKSEMPEL 1\n",
+    "\n",
+    "def paraply_if_elif_else(regn):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    \n",
+    "    if regn > 3.0:\n",
+    "        anbefaling = \"Støvler og regntøy\"\n",
+    "    elif regn > 0.2:\n",
+    "        anbefaling = \"Paraply\"\n",
+    "    else:\n",
+    "        anbefaling = \"T-skjorte med NTNU-logo\"\n",
+    "    hilsen = \"Ha en fin tur til universitetet!\"\n",
+    "    \n",
+    "    return anbefaling, hilsen\n",
+    "\n",
+    "anbefaling, hilsen = paraply_if_elif_else(4)\n",
+    "print(f\"Dagens anbefaling: {anbefaling}\")\n",
+    "print(hilsen)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Under vises tre kjøringer av denne koden:\n",
+    "\n",
+    "```\n",
+    "paraply_if_elif_else(4.2)\n",
+    "\n",
+    "Output:\n",
+    "Regn i mm: 4.2\n",
+    "Dagens anbefaling: Støvler og regntøy\n",
+    "Ha en fin tur til universitetet!\n",
+    ">>>\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "paraply_if_elif_else(0.3)\n",
+    "\n",
+    "Output:\n",
+    "Regn i mm: 0.3\n",
+    "Dagens anbefaling: Paraply\n",
+    "Ha en fin tur til universitetet!\n",
+    ">>>\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "paraply_if_elif_else(0.0)\n",
+    "\n",
+    "Output:\n",
+    "Regn i mm: 0.0\n",
+    "Dagens anbefaling: T-skjorte med NTNU-logo\n",
+    "Ha en fin tur til universitetet!\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Hvis betingelsen `regn > 3.0` er sann, settes anbefalingen til støvler og regntøy, deretter går programmet til første kodelinje etter hele if-elif-else-setningen, og setter hilsenen til (\"Ha en fin tur...\")\n",
+    "\n",
+    "Hvis betingelsen `regn > 3.0` er usann, settes **ikke** anbefalingen til støvler, programmet sjekker i stedet betingelsen på `elif`. Hvis denne er sann, settes anbefalingen til paraply, og dersom `elif`-påstanden også er usann, settes anbefalingen til T-skjorte med NTNU-logo som tidligere.\n",
+    "\n",
+    "Det er mulig å klare seg uten if-elif-else-setninger og i stedet bare putte if-else-setninger inni hverandre for å oppnå det samme. Eksemplet ovenfor kunne alternativt skrives:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 66,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [],
+   "source": [
+    "# EKSEMPEL 2\n",
+    "def paraply_nested_if(regn):\n",
+    "    if regn > 3.0:\n",
+    "        anbefaling = \"Støvler og regntøy\"\n",
+    "    else:\n",
+    "        if regn > 0.2:\n",
+    "            anbefaling = \"Paraply\"\n",
+    "        else:\n",
+    "            anbefaling = \"T-skjorte med NTNU-logo\"\n",
+    "    hilsen = \"Ha en fin tur til universitetet!\"\n",
+    "    return anbefaling, hilsen\n",
+    "\n",
+    "anbefaling, hilsen = paraply_nested_if(0.3)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Særlig i tilfeller hvor det dreier seg om tre eller flere alternative utfall basert på verdien av den **samme variabelen** (f.eks. `regn` her) vil de fleste oppfatte **if-elif-else**-setninger som både lettere å skrive og lettere å forstå, enn flere nøstede if-else-setninger.\n",
+    "\n",
+    "Ett typisk eksempel er antall oppnådde poeng på en eksamen, som kan transformeres til en bokstavkarakter A-F etter gitte grenser. Det er da 6 mulige utfall, dette gir mye innrykk og blir vanskelig å lese med nøstede if-setninger:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Du fikk C\n"
+     ]
+    }
+   ],
+   "source": [
+    "# EKSEMPEL 3\n",
+    "def hvilken_karakter(score):  \n",
+    "    if score >= 89:\n",
+    "        return \"A\"\n",
+    "    else:\n",
+    "        if score >= 77:\n",
+    "            return \"B\"\n",
+    "        else:\n",
+    "            if score >= 65:\n",
+    "                return \"C\"\n",
+    "            else:\n",
+    "                if score >= 53:\n",
+    "                    return \"D\"\n",
+    "                else:\n",
+    "                    if score >= 41:\n",
+    "                        return \"E\"\n",
+    "                    else:\n",
+    "                        return \"F\"\n",
+    "\n",
+    "karakter = hvilken_karakter(75)\n",
+    "print(f\"Du fikk {karakter}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "if-elif-else-setning vil være klart å foretrekke i en slik situasjon; det er mye lettere å se at koden her tar en beslutning med 6 alternativer basert på verdien av en enkelt variabel:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 68,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Du fikk C\n"
+     ]
+    }
+   ],
+   "source": [
+    "# EKSEMPEL 4\n",
+    "def hvilken_karakter(score):  \n",
+    "    if score >= 89:\n",
+    "        return \"A\"\n",
+    "    elif score >= 77:\n",
+    "        return \"B\"\n",
+    "    elif score >= 65:\n",
+    "        return \"C\"\n",
+    "    elif score >= 53:\n",
+    "        return \"D\"\n",
+    "    elif score >= 41:\n",
+    "        return \"E\"\n",
+    "    else:\n",
+    "        return \"F\"\n",
+    "\n",
+    "karakter = hvilken_karakter(75)\n",
+    "print(f\"Du fikk {karakter}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Ved bruk av if-elif-else er det avgjørende at betingelsene kommer i riktig rekkefølge. Anta at vi hadde gjort karaktereksemplet motsatt:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 69,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Du fikk F\n"
+     ]
+    }
+   ],
+   "source": [
+    "# EKSEMPEL 5\n",
+    "# HER HAR VI MED VILJE HAR GJORT FEIL\n",
+    "def hvilken_karakter(score): \n",
+    "    if score >= 0:\n",
+    "        return \"F\"\n",
+    "    elif score >= 41:\n",
+    "        return \"E\"\n",
+    "    elif score >= 53:\n",
+    "        return \"D\"\n",
+    "    elif score >= 65:\n",
+    "        return \"C\"\n",
+    "    elif score >= 77:\n",
+    "        return \"B\"\n",
+    "    elif score >= 89:\n",
+    "        return \"A\"\n",
+    " \n",
+    "karakter = hvilken_karakter(75)\n",
+    "print(f\"Du fikk {karakter}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Her vil øverste betingelse vil være sann for alle eksamensbesvarelser - og alle ender opp med karakteren F.\n",
+    "\n",
+    "Det er også viktig når det er snakk om alternativt ekskluderende utfall av samme beslutning at vi bruker **if-elif-else**-setning; **IKKE en serie med frittstående if-setninger**.\n",
+    "\n",
+    "Eksempel 6 under ser nesten ut som Eksempel 4, bare at vi kun skriver `if` der vi før skrev `elif`. Merk også at funksjonen her bruker en variabel `karakter` for å holde på karakteren, heller enn å returnere den - dette er gjort for å fremheve feilen som oppstår."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 70,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Karakter etter første if: A\n",
+      "Karakter etter andre if: B\n",
+      "Karakter etter tredje if: C\n",
+      "Karakter etter fjerde if: D\n",
+      "Karakter etter femte if: E\n",
+      "Du fikk F\n"
+     ]
+    }
+   ],
+   "source": [
+    "# EKSEMPEL 6\n",
+    "# HER HAR VI MED VILJE HAR GJORT FEIL\n",
+    "def hvilken_karakter(score):\n",
+    "    karakter = \"\"\n",
+    "    if score >= 89:\n",
+    "        karakter = \"A\"\n",
+    "        print(f\"Karakter etter første if: {karakter}\")\n",
+    "    if score >= 77:\n",
+    "        karakter = \"B\"\n",
+    "        print(f\"Karakter etter andre if: {karakter}\")\n",
+    "    if score >= 65:\n",
+    "        karakter = \"C\"\n",
+    "        print(f\"Karakter etter tredje if: {karakter}\")\n",
+    "    if score >= 53:\n",
+    "        karakter = \"D\"\n",
+    "        print(f\"Karakter etter fjerde if: {karakter}\")\n",
+    "    if score >= 41:\n",
+    "        karakter = \"E\"\n",
+    "        print(f\"Karakter etter femte if: {karakter}\")\n",
+    "    else:\n",
+    "        karakter = \"F\"\n",
+    "    return karakter\n",
+    "\n",
+    "hvilken_karakter(92)\n",
+    "print(f\"Du fikk {karakter}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "En student som har fått 92 poeng vil her komme riktig ut av den første if-setningen, og karakter settes til A. Men 92 > 77 er også sant, så karakter omgjøres deretter til B. Så til C, så til D, så til E.\n",
+    "\n",
+    "De eneste tilfellene som dette programmet vil takle korrekt blir dermed studenter som skal ha E eller F.\n",
+    "\n",
+    "Feilen her er at vi bruker nye frittstående if-setninger (dvs. som ikke er relatert til hverandre), mens vi egentlig har å gjøre med gjensidig ekskluderende alternativer som skulle vært løst med if-elif-else.\n",
+    "\n",
+    "Hvor er det eventuelt riktig å bruke frittstående if-setninger? Jo, hvis det er snakk om flere uavhengige beslutninger. I eksempel 7 under er det to uavhengige beslutninger, den ene om man skal ta paraply eller ikke, den andre om brodder eller ikke. Hver beslutning tas uavhengig av den andre, da blir det riktig med to frittstående if-setninger.\n",
+    "\n",
+    "Hadde vi i stedet brukt if-elif her, ville programmet ikke ha virket som det skulle, da det kun ville ha vært i stand til å anbefale brodder i oppholdsvær (mens det jo kan være minst like glatt om det regner)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 78,
+   "metadata": {
+    "ExecuteTime": {
+     "start_time": "2019-07-01T11:00:12.045Z"
+    },
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.3\n",
+      "Hvor glatt er det på en skala fra 1 til 10: 9\n",
+      "Da anbefaler jeg paraply. \n",
+      "Da anbefaler jeg sko med brodder eller pigger.\n"
+     ]
+    }
+   ],
+   "source": [
+    "# EKSEMPEL 7\n",
+    "def paraply_og_brodder(regn, glatt):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    print(f\"Hvor glatt er det på en skala fra 1 til 10: {glatt}\")\n",
+    "    anbefaling = \"\"\n",
+    "    if regn > 0.2:\n",
+    "        anbefaling += \"Da anbefaler jeg paraply. \\n\"\n",
+    "    if glatt > 8:\n",
+    "        anbefaling += \"Da anbefaler jeg sko med brodder eller pigger.\"\n",
+    "    return anbefaling\n",
+    "\n",
+    "anbefaling = paraply_og_brodder(0.3, 9)\n",
+    "print(anbefaling)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "I andre tilfeller kan en beslutning være avhengig av en annen, f.eks. kun være aktuell ved et visst utfall av en foregående if-setning. Som i eksempel 8 under:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 80,
+   "metadata": {
+    "hidden": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Regn i mm: 0.3\n",
+      "Vind i sekundmeter: 9\n",
+      "Anbefaler regntøy, for mye vind for paraply.\n"
+     ]
+    }
+   ],
+   "source": [
+    "# EKSEMPEL 8\n",
+    "def paraply_i_vind(regn, vind):\n",
+    "    print(f\"Regn i mm: {regn}\")\n",
+    "    print(f\"Vind i sekundmeter: {vind}\")\n",
+    "    if regn > 0.2:\n",
+    "        if vind < 7.0:\n",
+    "            return \"Da anbefaler jeg paraply.\"\n",
+    "        else:\n",
+    "            return \"Anbefaler regntøy, for mye vind for paraply.\"\n",
+    "\n",
+    "anbefaling = paraply_i_vind(0.3, 9)\n",
+    "print(anbefaling)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Her ville if `regn > 0.2:` .....`elif vind < 7.0` ha blitt feil.\n",
+    "\n",
+    "Programmet ville da ha gjort vurderinger av vinden kun hvis det ikke regnet, og dermed ha vært ute av stand til å fraråde paraply hvis det regner og samtidig blåser kraftig.\n",
+    "\n",
+    "**Oppsummert:**\n",
+    "\n",
+    "- flere helt uavhengige beslutninger: bruk frittstående if-setninger\n",
+    "- beslutning med gjensidig utelukkende handlingsalternativer: bruk if-else (2 alternativer) eller if-elif-else (3 eller flere alternativer)\n",
+    "- beslutninger relatert på annen måte, f.eks. at en betingelse (som `vind < 7.0` ovenfor) kun er aktuell gitt et visst utfall av en annen betingelse: kan løses ved å nøste flere if-setninger inni hverandre\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## d)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Lag en utvidet versjon av programmet fra (c) som sier om personen kan stemme eller ikke, med følgende regler:\n",
+    "\n",
+    "- `alder >= 18`: Kan stemme både ved lokalvalg og Stortingsvalg\n",
+    "- `alder >= 16`: Kan stemme ved lokalvalg, men ikke ved Stortingsvalg\n",
+    "- ellers (`alder < 16`): Kan ikke stemme.\n",
+    "\n",
+    "Eksempel på kjøring:\n",
+    "\n",
+    "```\n",
+    "kan_stemme(19)\n",
+    "\n",
+    "Output:\n",
+    "Du kan stemme både ved lokalvalg og Stortingsvalg\n",
+    ">>>>\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "kan_stemme(17)\n",
+    "\n",
+    "Output:\n",
+    "Du kan stemme ved lokalvalg, men ikke ved Stortingsvalg\n",
+    ">>>>\n",
+    "```\n",
+    "\n",
+    "```\n",
+    "kan_stemme(12)\n",
+    "\n",
+    "Output:\n",
+    "Du kan ikke stemme ennå\n",
+    "```\n",
+    "\n",
+    "___Skriv din kode her:___"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "## e)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "Du skal lage en funskjon som sjekker hvilken billettpris en person skal betale ut ifra alderen til personen og returnerer prisen som et tall.\n",
+    "\n",
+    "Oversikt over alder og tilhørende billettpriser:\n",
+    "\n",
+    "Aldersgruppe | Billettpris\n",
+    "--- | ---\n",
+    "Under 3 år | Gratis\n",
+    "3-11 år | 30 kr\n",
+    "12-25 år | 50 kr\n",
+    "26-66 år | 80 kr\n",
+    "67 år og over | 40 kr"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "___Skriv din kode her:___"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "editable": false,
+    "heading_collapsed": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "#### Fremgangsmåte\n",
+    "Trykk på pilen til venstre"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "hidden": true,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "1. Først må det lages en funksjon som tar inn alderen til brukeren som argument.\n",
+    "2. Videre skal man sjekke hvilken billett personen skal ha, og dette gjøres med en if-elif-else-setning:\n",
+    "\n",
+    "```\n",
+    "if alder < 3:\n",
+    "  ...\n",
+    "elif alder < 12:\n",
+    "  ...\n",
+    "elif ...:\n",
+    "  ...\n",
+    "elif ...:\n",
+    "  ...\n",
+    "else:\n",
+    "  ...\n",
+    "```"
+   ]
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit Metadata",
+  "kernelspec": {
+   "display_name": "Python 3.9.7 ('tdt4195')",
+   "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.7"
+  },
+  "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": {
+    "height": "calc(100% - 180px)",
+    "left": "10px",
+    "top": "150px",
+    "width": "265px"
+   },
+   "toc_section_display": true,
+   "toc_window_display": false
+  },
+  "vscode": {
+   "interpreter": {
+    "hash": "63b89d9bfc14eb4486c27c9b239bf0a08c4c63a21c176f83036370f0e204c130"
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Ovinger/Oving2/_Oving2.ipynb b/Ovinger/Oving2/_Oving2.ipynb
new file mode 100644
index 0000000..e5421a2
--- /dev/null
+++ b/Ovinger/Oving2/_Oving2.ipynb
@@ -0,0 +1,89 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "deletable": false,
+    "run_control": {
+     "frozen": true
+    }
+   },
+   "source": [
+    "# Øving 2\n",
+    "\n",
+    "**Læringsmål:**\n",
+    "\n",
+    "- If-setninger, hvorfor og hvordan\n",
+    "- Betingelser, Logiske uttrykk\n",
+    "- Funksjoner\n",
+    " \n",
+    "\n",
+    "## Godkjenning:\n",
+    "\n",
+    "For å få godkjent øvingen må du gjøre \"Ulike typer if-setninger\", samt ***4*** av de ***9*** resterende oppgavene.\n",
+    "\n",
+    "Oppgaver som er litt ekstra vanskelig er markert med stjerne. Oppgaver som går forbi det som er blitt forelest er markert med to stjerner.\n",
+    "\n",
+    "Alle oppgavene skal demonstreres til en læringsassistent på sal. I oppgaver der du skriver programkode skal også denne vises fram. Lykke til!\n",
+    "\n",
+    "\n",
+    "Oppgave | Tema | Vanskelighetsgrad\n",
+    "--- | --- | ---\n",
+    "[Ulike typer if-setninger](Ulike%20typer%20if-setninger.ipynb) | Valg, forgreninger | \n",
+    "[Sammeligning av strenger](Sammenligning%20av%20strenger.ipynb) | Betingelser, Kodeforståelse | \n",
+    "[Logiske operatorer og logiske uttrykk](Logiske%20operatorer%20og%20logiske%20uttrykk.ipynb)|Betingelser, logiske uttrykk|\n",
+    "[Forbrytelse og straff](Forbrytelse%20og%20straff.ipynb)|Kodeforståelse, feilretting|\n",
+    "[Ã…rstider](Aarstider.ipynb)|Betingelser, logiske uttrykk|\n",
+    "[Tekstbasert spill](Tekstbasert%20spill.ipynb)|Betingelser|\n",
+    "[Andregradsligning](Andregradsligning.ipynb)|Betingelser avrundingsfeil|\n",
+    "[Betingede funksjoner](Betingede%20funksjoner.ipynb)|Betingelser, funksjoner|\n",
+    "[Sjakkbrett](Sjakkbrett.ipynb)|Betingelser, logiske uttrykk|![img](./../../Resources/Images/star_yellow.svg)\n",
+    "[Billettpriser og rabatter](Billettpriser%20og%20rabatter.ipynb)|Betingelser|![img](./../../Resources/Images/star_yellow.svg)\n",
+    "[Skatteetaten](Skatteetaten.ipynb)|Betingelser|![img](./../../Resources/Images/star_yellow.svg)\n",
+    "[Datamaskinen som tigget epler](Epletigging.ipynb)|Feilretting, betingelser|![img](./../../Resources/Images/star_yellow.svg)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Edit 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.9.2"
+  },
+  "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
+}
-- 
GitLab