diff --git a/Losningsforslag/Oving1/Bakekurs lf.ipynb b/Losningsforslag/Oving1/Bakekurs lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..c142c6fc0bb9c70eccac8329c563a1e82bcb75ea
--- /dev/null
+++ b/Losningsforslag/Oving1/Bakekurs lf.ipynb	
@@ -0,0 +1,80 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "antallCookies = int(input(\"Hvor mange cookies ønsker du å bake? \"))\n",
+    "gramSukker = antallCookies/48 * 400\n",
+    "gramSmør = antallCookies/48 * 320\n",
+    "gramSjokolade = antallCookies/48 * 500\n",
+    "egg = antallCookies/48 * 2\n",
+    "hvetemel = antallCookies/48 * 460\n",
+    " \n",
+    "print(\"Antall Cookies:\", antallCookies, \" \\nsukker(g):\", gramSukker,\n",
+    "      \"\\nsmør(g):\", gramSmør, \"\\nsjokolade(g):\", gramSjokolade, \"\\negg:\", egg,\n",
+    "      \"\\nhvetemel(g):\", hvetemel)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "cookies1=int(input(\"Hvor mange cookies vil du lage? \"))\n",
+    "cookies2=int(input(\"og hvor mange cookies vil du lage nå? \"))\n",
+    "cookies3=int(input(\"og hvor mange cookies vil du lage til slutt? \"))\n",
+    " \n",
+    "sukker1=cookies1/48*400\n",
+    "sukker2=cookies2/48*400\n",
+    "sukker3=cookies3/48*400\n",
+    "sjokolade1=cookies1/48*500\n",
+    "sjokolade2=cookies2/48*500\n",
+    "sjokolade3=cookies3/48*500\n",
+    " \n",
+    "print(\"Antall cookies: \\tsukker(g) \\tsjokolade(g)\" )          \n",
+    "print(str(cookies1).ljust(17), str(sukker1).rjust(15), str(sjokolade1).rjust(17))\n",
+    "print(str(cookies2).ljust(17), str(sukker2).rjust(15), str(sjokolade2).rjust(17))\n",
+    "print(str(cookies3).ljust(17), str(sukker3).rjust(15), str(sjokolade3).rjust(17))"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Geometri lf.ipynb b/Losningsforslag/Oving1/Geometri lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..c92abad506634fe49bf96290deb2a2051f07b86f
--- /dev/null
+++ b/Losningsforslag/Oving1/Geometri lf.ipynb	
@@ -0,0 +1,57 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a) og b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "r = 5\n",
+    "print(\"Vi har en sirkel med radius\", r)\n",
+    "omkrets = 2 * 3.14 * r\n",
+    "print(\"Omkretsen er\", omkrets)\n",
+    "#b) print(\"Omkretsen er\", format(omkrets, '.2f'))\n",
+    "areal = 3.14 * r**2\n",
+    "print(\"Arealet er\", areal)\n",
+    "h = 8\n",
+    "volum = areal * h\n",
+    "print(\"Sylinder med høyde\", h, \": Volumet er, volum\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c)  Det skyldes at flyttall ikke lagres nøyaktig i Python."
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Input og variable lf.ipynb b/Losningsforslag/Oving1/Input og variable lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..a527e3ac5f79ecbbf4cf18752511811ac35d30ac
--- /dev/null
+++ b/Losningsforslag/Oving1/Input og variable lf.ipynb	
@@ -0,0 +1,109 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(input(\"Navn? \"), \"- fint navn!\")\n",
+    "print(input(\"Favorittfag? \"), \"- interessant!\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "navn = input(\"Navn? \")\n",
+    "print(\"Hei,\", navn)\n",
+    "fag = input(\"Favorittfag? \")\n",
+    "print(fag, \"- interessant!\")\n",
+    "print(\"Ha en fin dag,\", navn)\n",
+    "print(\"- og lykke til med\", fag)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import math\n",
+    "   \n",
+    "r = 5.4\n",
+    "h = 7.9\n",
+    "print(\"Har en sirkel med radius\", r, \"som er grunnflate i en sylinder med høyde\", h)\n",
+    "omkrets = math.tau * r\n",
+    "print(\"Omkrets av sirkelen:\", omkrets)  #tau er det samme som 2 pi\n",
+    "areal_sirkel = math.pi * r**2\n",
+    "print(\"Areal av sirkelen:\", areal_sirkel)\n",
+    "areal_sylinder = omkrets * h + 2 * areal_sirkel\n",
+    "print(\"Areal av sylinderen:\", areal_sylinder)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "d)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fornavn = \"Per\"\n",
+    "ideal_alder = 42\n",
+    "kundensAlder = 37\n",
+    "differanse = ideal_alder - kundensAlder\n",
+    "print(fornavn, \"er\", differanse, \"år unna idealalderen\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/James Bond lf.ipynb b/Losningsforslag/Oving1/James Bond lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..02d69f15f7c9b28c8eb696be2355ea2cf4f9ad9f
--- /dev/null
+++ b/Losningsforslag/Oving1/James Bond lf.ipynb	
@@ -0,0 +1,188 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)\n",
+    "\n",
+    "Denne løsningen klarer seg med det som er pensum som er undervist før øvingen, men har en liten skjønnhetsfeil (det kommer .0 bak tall som skal være heltall)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tall = float(input(\"Tallet som skal avrundes: \"))\n",
+    "d = int(input(\"Ønsket antall desimaler: \"))\n",
+    "faktor = 10 ** d\n",
+    "resultat = int(tall * faktor + 0.5) / faktor\n",
+    "print(\"Avrundet til\", d, \"desimaler:\", resultat)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "For å få vekk skjønnhetsfeilen er det mest hensiktsmessig å bruke en if-setning:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tall = float(input(\"Tallet som skal avrundes: \"))\n",
+    "d = int(input(\"Ønsket antall desimaler: \"))\n",
+    "resultat = int(tall + 0.5)\n",
+    "faktor = 10 ** d\n",
+    "resultat = int(tall * faktor + 0.5) / faktor\n",
+    "if d <= 0:  # skal ende med et heltall\n",
+    "    resultat = int(resultat)      \n",
+    "print(\"Avrundet til\", d, \"desimaler:\", resultat)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b) Ideen her er å sette sammen heltallsdel og desimaldel til ett heltall og gjøre avrundingen på det (siden heltall alltid lar seg representere eksakt), da kan vi bruke round() med negativt antall desimaler for å kvitte oss med passende mange desimaler. Hvor mange kan regnes ut som differansen mellom antall desimaler vi har (lengden av desimalstrengen) og antallet vi ønsker. De overflødige desimalene kuttes vekk med heltallsdivisjon og til slutt må punktumet settes tilbake på rett plass (ved hjelp av heltallsdivisjon og modulo)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "hel = input(\"Oppgi heltallsdelen av tallet (det foran punktum): \")\n",
+    "des = input(\"Oppgi desimaldelen av tallet (det bak punktum): \")\n",
+    "inn_des = len(des) #lengden av strengen, dvs antall desimaler nå\n",
+    "tall = int(hel + des)\n",
+    "ant = int(input(\"Oppgi ønsket antall desimaler i avrunding: \"))\n",
+    "kuttes = max(inn_des - ant, 0) #hvor mange desimaler skal kuttes\n",
+    "avr = round(tall, -kuttes)\n",
+    "# bruker heltallsdivisjon for å finne sifrene som er heltallet\n",
+    "nytt_heltall = avr // 10 ** inn_des\n",
+    "hel_ut = str(nytt_heltall)\n",
+    "# bruker modulo for å finne sifrene som er desimaler\n",
+    "# og deretter heltallsdivisjon for å kutte desimaler som skal bort\n",
+    "nytt_destall = (avr % 10**inn_des) // 10**kuttes\n",
+    "# setter sammen tallet, \".\" tilbake på riktig plass\n",
+    "# bool(ant) blir False hvis ant er 0, da tom streng for desimaldel\n",
+    "tall_ut = str(nytt_heltall) + (\".\" + str(nytt_destall)) * bool(ant)\n",
+    "d = \"desimal\" + \"er\" * bool(ant-1)\n",
+    "print(hel + \".\" + des, \"avrundet til\", ant, d, \"blir\", tall_ut)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c) Denne kan løses på mange måter. En mulighet er å bruke for-løkke og if-setning som vist under."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "navn= input(\"Jeg heter: \")\n",
+    "sist = len(navn)\n",
+    "start = sist\n",
+    "for i in range(len(navn)):\n",
+    "    if navn[i]==\" \":\n",
+    "        start = i + 1\n",
+    "         \n",
+    "print(\"The name is\", navn[start:sist]+\", \" + navn)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "En annen mulighet er å bruke strengmetoden split():"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "navn = input(\"Jeg heter: \")\n",
+    "liste = navn.split()\n",
+    "print(\"The name is\", liste[-1] + \",\", navn)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Forklaring av denne løsningen: Linje 2, split() gir en oppdeling av tekststrengen der det er mellomrom, med navn \"Grace Murray Hopper\" vil vi få liste med ordene \"Grace\", \"Murray\", \"Hopper\".\n",
+    "\n",
+    "Linje 3: liste[-1] vil være bakerste element i variabelen liste, altså \"Hopper\" med eksemplet gitt ovenfor.\n",
+    "\n",
+    " \n",
+    "\n",
+    "Begge de ovenstående løsningene vil imidlertid få problemer med navn med påheng som Jr, Sr, d.y., III osv., såvel som med navn med preposisjoner som Von, De, ... Hvis man skal ta høyde for dette, blir løsningen noe mer innfløkt, nedenfor en mulighet som en videreutvikling av løsningen med split() ovenfor.\n",
+    "\n",
+    "Det fins selvsagt flere mulige elementer man kunne ha lagt til både i PREP og EXT. Løsningen tar ikke høyde for at noen kan ha flere tillegg bak navnet (f.eks. både Jr og III i samme navn), eller navn hvor det fins flere enn ett mellomord som skal være del av etternavnet (f.eks. Alan van der Aalst).\n",
+    "\n",
+    "Dette kunne f.eks. ha vært taklet ved å kjøre både sjekken vs. EXT og sjekken vs. PREP i while-løkker heller enn som engangstester, koden ville da ha blitt noe mer komplisert enn den er nå."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "PREP = {\"De\", \"de\", \"Di\", \"di\", \"von\", \"Von\", \"van\", \"Van\", \"St\", \"Saint\"}\n",
+    "EXT = {\"Jr\", \"jr\", \"Sr\", \"sr\", \"d.e.\", \"d.y.\",\n",
+    "       \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"}\n",
+    " \n",
+    "navn = input(\"Jeg heter: \")\n",
+    "liste = navn.split() # får ei liste med alle delnavn i navnet\n",
+    " \n",
+    "if liste[-1] in EXT: #bakerste ord er ikke et navn\n",
+    "    i_enavn = -2 # etternavnet da nest bakerst i lista\n",
+    "else:\n",
+    "    i_enavn = -1 # etternavnet er bakerst i lista\n",
+    "etternavn = liste[i_enavn]\n",
+    " \n",
+    "if len(liste) > abs(i_enavn - 1): # det fins mellomnavn\n",
+    "    mellom = liste[i_enavn - 1] # mellomnavnet er like foran etternavn\n",
+    "    if mellom in PREP: # mellomnavn skal inngå i etternavnet\n",
+    "        etternavn = mellom + \" \" + etternavn # putter mellomnavn foran\n",
+    " \n",
+    "print(\"The name is\", etternavn + \",\", navn)"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Jeg elsker ITGK lf.ipynb b/Losningsforslag/Oving1/Jeg elsker ITGK lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..52474018d16078d6a51070e0c0a26af64b41f407
--- /dev/null
+++ b/Losningsforslag/Oving1/Jeg elsker ITGK lf.ipynb	
@@ -0,0 +1,140 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"Jeg elsker ITGK!\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print('Norge')\n",
+    "print()\n",
+    "print('Areal (kv.km):', 385180)\n",
+    "print('Folketall (mill.):', 5.3)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print('\"Jeg elsker ITGK!\" ropte studenten da 1c funket.')\n",
+    "#tatt enkle fnutter rundt strengen slik at de doble fnuttene printes ut"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "d)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"Noen barn sto og hang ved lekeplassen.\")\n",
+    "print(\"Diskusjonstemaet deres var noe uventet.\")\n",
+    "print('''- Hvorfor heter'e \"Python\"?''')\n",
+    "print(\"- Var'e slanger som laget det? - Nei, Guido van Rossum.\")\n",
+    "print('- Likte slanger kanskje da? - Nei, digga \"Monty Python\".')\n",
+    "print(\"- Hva er det? Et fjell?\")\n",
+    "print(\"- Nei, engelsk komigruppe. Begynte i '69.\"\n",
+    "print(\"- Wow! Var'e fremdeles dinosaurer da?\")\n",
+    "  \n",
+    "# alternativt kan oppgaven løses med en enkelt print-setning,\n",
+    "# med triple fnutter rundt hele den 8-linjers teksten"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "e)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# i oppgave b tok jeg enkle fnutter rundt strengen slik at de doble fnuttene kunne printes ut\n",
+    "# i oppgave c tok jeg tre enkle/doble fnutter rundt strengen ettersom strengen inneholdt både en enkel fnutt og doble fnutter\n",
+    "#print('Hei\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "f)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"Heihei, jeg vil visst ikke kompilere jeg :(\")  #evt. med enkle fnutter rundt hele strengen.\n",
+    "print('Halla, så \"bra\" du ser ut i dag')              #dersom det skal være doble fnutter rundt bra, må det være enkle fnutter rundt strengen.\n",
+    "print(\"Hei på deg\")                                   #sette på fnutter rundt strengen.\n",
+    "print(\"Er ikke dette gøy?\")                           #sette på parentes på starten."
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Kalkulasjoner lf.ipynb b/Losningsforslag/Oving1/Kalkulasjoner lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..5147764758415a7991635ab8ebf691c2c28f2a5c
--- /dev/null
+++ b/Losningsforslag/Oving1/Kalkulasjoner lf.ipynb	
@@ -0,0 +1,96 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print('1+2(−3) =', 1+2*(-3))\n",
+    "print('[(3+5·2) +1]:2 =', ((3+5*2)+1)/2)\n",
+    "print('-3^2 + 5*3 - 7 =', -3**2+5*3-7)\n",
+    "#1)\n",
+    "print('5:2-4 =', 5/2 -4)\n",
+    "#2)\n",
+    "print('5·12+6-1 =', 5*12 + 6 - 1)\n",
+    "#3)\n",
+    "print('3(5+2) =', 3*(5+2))\n",
+    "#4)\n",
+    "print('4[(5+3):2 +7] =', 4*((5+3)/2+7))\n",
+    "#5)\n",
+    "print('(−4)^(-3)+5·(3−7:2) =', (-4)**(-3)+5*(3-7/2))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(355, \"minutt blir\", 355 // 60, \"timer og\", 355 % 60, \"minutt.\")\n",
+    "print(403, \"sekund blir\", 403 // 60, \"minutt og\", 403 % 60, \"sekund.\")\n",
+    "print(67, \"dager blir\", 67 // 7, \"uker og\", 67 % 7, \"dager.\")\n",
+    "print(100, \"timer blir\", 100 // 24, \"døgn og\", 100 % 24, \"timer.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import math\n",
+    "# importerer fra math-biblioteket\n",
+    "print(\"|-8|, dvs. absoluttverdien til -8, er\", abs(-8))\n",
+    "print(2.544, \"avrundet til helt tall er\", round(2.544))\n",
+    "print(\"Funksjonen int() derimot bare kutter vekk desimalene:\", int(2.544) )\n",
+    "print(2.544, \"avrundet til to desimaler er\", round(2.544, 2))\n",
+    "print(\"Kvadratroten til\", 10, \"er\", math.sqrt(10) )\n",
+    "print(\"En sirkel med radius 7 har omkrets\", math.tau * 7)\n",
+    "print(\"En sirkel med radius 7 har areal\", math.pi * 7**2)"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Pizza lf.ipynb b/Losningsforslag/Oving1/Pizza lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..7b04503497770bd10a0a78aef3767109a542bc4d
--- /dev/null
+++ b/Losningsforslag/Oving1/Pizza lf.ipynb	
@@ -0,0 +1,79 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pizza = 750\n",
+    "Studentrabatt = 0.20\n",
+    "Tips = 0.08"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "totalt = pizza*(1-Studentrabatt)*(1+Tips)\n",
+    "print(\"Total pris:\",totalt)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "antall = int(input(\"Hvor mange deltok på middagen? \"))\n",
+    "prisPerPers = totalt/antall\n",
+    "print(\"Ettersom dere var\",antall, \"personer, så må hver person betale\",\n",
+    "      prisPerPers, \"kroner.\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Tallkonvertering lf.ipynb b/Losningsforslag/Oving1/Tallkonvertering lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..ba1456a6f4ea6a824f06082591a449329bb47511
--- /dev/null
+++ b/Losningsforslag/Oving1/Tallkonvertering lf.ipynb	
@@ -0,0 +1,113 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "flyt1 = float(input(\"Skriv inn et flyttall: \"))\n",
+    "flyt2 = float(input(\"Skriv inn enda et flyttall: \"))\n",
+    "flyt3 = float(input(\"Skriv inn et siste flyttall: \"))\n",
+    " \n",
+    "print(\"Konvertert til heltall blir det\", int(flyt1),int(flyt2),int(flyt3))\n",
+    " \n",
+    "int1 = int(input(\"Skriv inn et heltall: \"))\n",
+    "print(\"Konvertert til flyttall blir det:\",float(int1))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "navn = input(\"Skriv ditt navn: \")\n",
+    "alder = int(input(\"Hei, \" + navn + \", hvor gammel er du? \"))\n",
+    "alderProgStart = int(input(\"Hvor gammel var du da du startet å programmere? \"))\n",
+    "progTid = alder - alderProgStart\n",
+    "print(\"Da har du programmert i\", progTid, \"år.\")\n",
+    "svar = input(\"Syns du de \" + str(progTid) + \" årene har vært givende?\" )\n",
+    "print(\"Takk for svar,\" , navn)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"Vennligst gi inn et flyttall med minst 5 siffer både før og etter .\")\n",
+    "tall = float(input(\"Hva er tallet ditt? \")\n",
+    "heltall = int(tall)\n",
+    "print(\"Konvertert til heltall med int():\", heltall)\n",
+    "print(\"Avrundet til nærmeste heltall:\", round(tall))\n",
+    "print(\"Avrundet til to desimaler:\", round(tall, 2))\n",
+    "print(\"Avrundet til fire desimaler:\", round(tall, 4))\n",
+    "print(\"Avrundet til nærmeste tusen:\", round(tall, -3))\n",
+    "print(\"Heltall fra int() konvertert tilbake til flyttall:\", float(heltall))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "d)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "flyttall = float(input(\"Skriv et flyttall: \"))\n",
+    "antallDesimaler = int(input(\"Hvor mange deismaler er ønskelig? \"))\n",
+    "print(\"Tallet du skrev var\",flyttall, \"og med\",antallDesimaler,\n",
+    "      \"desimaler blir det til\", round(flyttall, antallDesimaler))"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Tetraeder lf.ipynb b/Losningsforslag/Oving1/Tetraeder lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..290b964f6d06fd3ad7e33b4cedd31c4c55371892
--- /dev/null
+++ b/Losningsforslag/Oving1/Tetraeder lf.ipynb	
@@ -0,0 +1,86 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import math\n",
+    "h = 3\n",
+    "a = 3/math.sqrt(6)*h\n",
+    "areal = math.sqrt(3)*pow(a,2)\n",
+    "print(\"Et tetraeder med høyde\",h,\"har areal\",areal)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import math\n",
+    "h = 3\n",
+    "a = 3/math.sqrt(6)*h\n",
+    "volum = 1/12*math.sqrt(2)*pow(a,3)\n",
+    "print(\"Et tetraeder med høyde\",h,\"har volum\",volum)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "c)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import math\n",
+    "h = float(input(\"Skriv inn en høyde: \"))\n",
+    "a = 3/math.sqrt(6)*h\n",
+    "areal = math.sqrt(3)*pow(a,2)\n",
+    "volum = 1/12*math.sqrt(2)*pow(a,3)\n",
+    "print(\"Et tetraheder med høyde\",h,\"har volum\",round(volum,2),\"og areal\",round(areal,2),\".\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving1/Vitenskapelig notasjon lf.ipynb b/Losningsforslag/Oving1/Vitenskapelig notasjon lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..cb092354889819ba88aa0e2eaa68f9c5208e216f
--- /dev/null
+++ b/Losningsforslag/Oving1/Vitenskapelig notasjon lf.ipynb	
@@ -0,0 +1,64 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "stoff = input(\"Si et stoff du er i besittelse av: \")\n",
+    "molvekt = float(input(\"Hva er molvekt i gram for \"+stoff+\"? \"))\n",
+    "gram = float(input(\"Hvor mange gram har du? \"))\n",
+    "mol = gram/molvekt\n",
+    "antall = mol*6.022e+23\n",
+    "print(\"Du har\", format(antall, '.1e'), \"molekyler \"+stoff)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "antallHørt = int(input(\"Antall ulike 10-toners melodilinjer du har hørt? \"))\n",
+    "prosent = antallHørt/8.25e+19*100\n",
+    "print(\"Du har hørt\", format(prosent, '.15e'), \"av melodier som er mulig\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Andregradsligning - lf.ipynb b/Losningsforslag/Oving2/Andregradsligning - lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..8acaa89f48296bb0e2f058d73fdea34bb30ba68b
--- /dev/null
+++ b/Losningsforslag/Oving2/Andregradsligning - lf.ipynb	
@@ -0,0 +1,96 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a = float ( input (\"a: \"))\n",
+    "b = float ( input (\"b: \"))\n",
+    "c = float ( input (\"c: \"))\n",
+    "d = b**2 - 4*a*c\n",
+    " \n",
+    "#Kode for å få rett fortegn/unngå dobbelt fortegn i utskrift. Må ikke ha dette.\n",
+    "if b<0:\n",
+    "    if c<0:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 %.2f*x %.2f har\" % (a, b, c), end=\"\")\n",
+    "    else:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 %.2f*x + %.2f har\" % (a, b, c), end=\"\")\n",
+    "else:\n",
+    "    if c<0:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 + %.2f*x %.2f har\" % (a, b, c), end=\"\")\n",
+    "    else:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 + %.2f*x + %.2f har\" % (a, b, c), end=\"\")\n",
+    " \n",
+    "  \n",
+    "if d < 0.0:\n",
+    "    print (\" to imaginære løsninger \")\n",
+    "elif d > 0.0:\n",
+    "    import math\n",
+    "    x1 = (-b+math.sqrt(d))/(2*a)\n",
+    "    x2 = (-b-math.sqrt(d))/(2*a)\n",
+    "    print (\" de to reelle løsningene %.2f og %.2f\"%(x1,x2))\n",
+    "else:\n",
+    "    x = -b/(2*a)\n",
+    "    print (\" en reell dobbeltrot %.2f\"%x)\n",
+    " \n",
+    " \n",
+    "  \n",
+    "  \n",
+    "#Stjerne-oppgaven:\n",
+    "a = float ( input (\"a: \"))\n",
+    "b = float ( input (\"b: \"))\n",
+    "c = float ( input (\"c: \"))\n",
+    "d = b**2 - 4*a*c\n",
+    " \n",
+    "if b<0:\n",
+    "    if c<0:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 %.2f*x %.2f har\" % (a, b, c), end=\"\")\n",
+    "    else:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 %.2f*x + %.2f har\" % (a, b, c), end=\"\")\n",
+    "else:\n",
+    "    if c<0:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 + %.2f*x %.2f har\" % (a, b, c), end=\"\")\n",
+    "    else:\n",
+    "        print (\"Andregradsligningen %.2f*x^2 + %.2f*x + %.2f har\" % (a, b, c), end=\"\")\n",
+    " \n",
+    "if d < 0.0:\n",
+    "    print (\" to imaginære løsninger \")\n",
+    "elif d > 0.0:\n",
+    "    import math\n",
+    "    if b <= 0:\n",
+    "        x1 = (-b+math.sqrt(d))/(2*a)\n",
+    "        x2 = c/(a*x1)\n",
+    "    else:\n",
+    "        x2 = (-b-math.sqrt(d))/(2*a)\n",
+    "        x1 = c/(a*x2)\n",
+    "    print (\" de to reelle løsningene %.3e og %.3e\"%(x1,x2))\n",
+    "else:\n",
+    "    x = -b/(2*a)\n",
+    "    print (\" en reell dobbeltrot %.2f\"%x)\n"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Billettpriser og rabatter lf.ipynb b/Losningsforslag/Oving2/Billettpriser og rabatter lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..d324a25ac424d3f2bc8a27112c89ed6eacb33530
--- /dev/null
+++ b/Losningsforslag/Oving2/Billettpriser og rabatter lf.ipynb	
@@ -0,0 +1,119 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#Oppgave a\n",
+    "dager = int(input(\"Dager til du skal reise? \"))\n",
+    "if dager >= 14:\n",
+    "    print(\"Du kan få minipris: 199,-\")\n",
+    "else:\n",
+    "    print(\"For sent for minipris; fullpris 440,-\")\n",
+    "    \n",
+    "#Oppgave b\n",
+    "dager = int(input(\"Dager til du skal reise? \"))\n",
+    "if dager >= 14:\n",
+    "    print(\"Minipris 199,- kan ikke refunderes/endres\")\n",
+    "    svar = input(\"Ønskes dette (J/N)? \")\n",
+    "    if svar == 'J' or svar == 'j':\n",
+    "        print(\"Takk for pengene, god reise!\")\n",
+    "    else:\n",
+    "        print(\"Da tilbyr vi fullpris: 440,-\")\n",
+    "else:\n",
+    "    print(\"For sent for minipris; fullpris 440,-\")\n",
+    "\n",
+    "#Oppgave c\n",
+    "pris = 440\n",
+    "mini = False\n",
+    " \n",
+    "# deler beslutningen i to deler:\n",
+    "# 1) finne ut om det er minipris eller fullpris...\n",
+    "dager = int(input(\"Dager til du skal reise? \"))\n",
+    "if dager >= 14:\n",
+    "    print(\"Minipris 199,- kan ikke refunderes/endres\")\n",
+    "    svar = input(\"Ønskes dette (J/N)? \")\n",
+    "    if svar == 'J' or svar == 'j':\n",
+    "        print(\"Minipris valgt\")\n",
+    "        mini = True\n",
+    "    else:\n",
+    "        print(\"Fullpris valgt\")\n",
+    "else:\n",
+    "    print(\"For sent for minipris.\")\n",
+    " \n",
+    "# 2) regne ut pris, finne ut om det er noen rabatter \n",
+    "if mini:\n",
+    "    pris = 199\n",
+    "else:\n",
+    "    alder = int(input(\"Alder: \"))\n",
+    "    if alder < 16:\n",
+    "        pris = pris * 0.5\n",
+    "    elif alder >= 60:\n",
+    "        pris = pris * 0.75\n",
+    "    else:\n",
+    "        annet = input(\"Student / militær (J/N)? \")\n",
+    "        if annet.upper() == 'J':\n",
+    "            pris = pris * 0.75\n",
+    "print(\"Å betale:\", pris)\n",
+    "\n",
+    "#Oppgave d\n",
+    "pris = 440\n",
+    "mini = False\n",
+    " \n",
+    "dager = int(input(\"Dager til du skal reise? \"))\n",
+    "if dager >= 14:\n",
+    "    print(\"Minipris 199,- kan ikke refunderes/endres\")\n",
+    "    svar = input(\"Ønskes dette (J/N)? \")\n",
+    "    if svar == 'J' or svar == 'j':\n",
+    "        print(\"Minipris valgt\")\n",
+    "        mini = True\n",
+    "    else:\n",
+    "        print(\"Fullpris valgt\")\n",
+    "else:\n",
+    "    print(\"For sent for minipris.\")\n",
+    " \n",
+    "stud = input(\"Student (J/N)? \")\n",
+    "if mini:\n",
+    "    pris = 199\n",
+    "    if stud.upper() == 'J':\n",
+    "        pris = pris * 0.9\n",
+    "else:\n",
+    "    if stud.upper() == 'J':\n",
+    "        pris = pris * 0.75\n",
+    "    alder = int(input(\"Alder: \"))\n",
+    "    if alder < 16:\n",
+    "        pris = pris * 0.5\n",
+    "    elif alder >= 60:\n",
+    "        pris = pris * 0.75\n",
+    "    else:\n",
+    "        mil = input(\"Militær (J/N)? \")\n",
+    "        if mil.upper() == 'J':\n",
+    "            pris = pris * 0.75\n",
+    "print(\"Å betale:\", pris)"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Datamaskinen som tigget epler - lf.ipynb b/Losningsforslag/Oving2/Datamaskinen som tigget epler - lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..749d7f678607dfb8f1b6065ad81b9fced2251d9b
--- /dev/null
+++ b/Losningsforslag/Oving2/Datamaskinen som tigget epler - lf.ipynb	
@@ -0,0 +1,85 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#Oppgave a\n",
+    "print(\"Dette er et program for å teste din sjenerøsitet.\")\n",
+    "har = int(input(\"Hvor mange epler har du? \"))\n",
+    "if har == 0:\n",
+    "    print(\"Æsj, det sier du bare for å slippe å gi noe!\")\n",
+    "else:\n",
+    "    gir = int(input(\"Hvor mange kan du gi til meg? \"))\n",
+    "    if gir < har / 2:\n",
+    "        print(\"Du beholder det meste for deg selv...\")\n",
+    "    else:\n",
+    "        print(\"Takk, det var snilt!\")\n",
+    "    print(\"Du har nå\", har - gir, \"epler igjen.\")\n",
+    "  \n",
+    "#Oppgave b\n",
+    "print(\"Dette er et program for å teste din sjenerøsitet.\")\n",
+    "har = int(input(\"Hvor mange epler har du? \"))\n",
+    "if har == 0:\n",
+    "    print(\"Æsj, det sier du bare for å slippe å gi noe!\")\n",
+    "else:\n",
+    "    gir = int(input(\"Hvor mange kan du gi til meg? \"))\n",
+    "    if gir < har / 2:\n",
+    "        print(\"Du beholder det meste for deg selv...\")\n",
+    "    else:\n",
+    "        print(\"Takk, det var snilt!\")\n",
+    "    rest = har - gir\n",
+    "    if rest == 1:\n",
+    "        tekst = \"eple\"\n",
+    "    else:\n",
+    "        tekst = \"epler\"\n",
+    "    print(\"Du har nå\", rest, tekst, \"igjen.\")\n",
+    "    \n",
+    "#Oppgave c\n",
+    "print(\"Dette er et program for å teste din sjenerøsitet.\")\n",
+    "har = int(input(\"Hvor mange epler har du? \"))\n",
+    "if har == 0:\n",
+    "    print(\"Æsj, det sier du bare for å slippe å gi noe!\")\n",
+    "else:\n",
+    "    gir = int(input(\"Hvor mange kan du gi til meg? \"))\n",
+    "    if gir < har / 2:\n",
+    "        print(\"Du beholder det meste for deg selv...\")\n",
+    "    else:\n",
+    "        print(\"Takk, det var snilt!\")\n",
+    "    rest = har - gir\n",
+    "    if rest >= 0:\n",
+    "        if rest == 1:\n",
+    "            tekst = \"eple\"\n",
+    "        else:\n",
+    "            tekst = \"epler\"\n",
+    "        print(\"Du har nå\", rest, tekst, \"igjen.\")\n",
+    "    else:\n",
+    "        print(\"Du har nå 0 epler igjen. Gi meg de\", -rest)\n",
+    "        print(\"du skylder meg neste gang vi møtes.\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Forbrytelse of straff lf.ipynb b/Losningsforslag/Oving2/Forbrytelse of straff lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..d47b788398b5844c753fe3b47b4958e3bd4e3454
--- /dev/null
+++ b/Losningsforslag/Oving2/Forbrytelse of straff lf.ipynb	
@@ -0,0 +1,240 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a)\n",
+    "\n",
+    "Syntaksfeilene i denne koden inkluderer et glemt kolon, at de to nederste linjene er innrykket feil, og flere feil med operatorer som skal være == (i stedet brukt =, ett sted = =)\n",
+    "\n",
+    "Korrigert kode blir:"
+   ]
+  },
+  {
+   "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.\")\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b) \n",
+    "\n",
+    "Den første feilen er at det står prom < 0.2, skulle ha stått prom > 0.2 når dette er i betingelsen for at det skal være straffbart.\n",
+    "\n",
+    "Den andre feilen er relatert til operatorpresedens. Slik den sammensatte betingelsen i if-setningen står i utgangspunktet, vil Python først evaluere prom>0.2 and motor==\"j\", deretter leds==\"j\" and n==\"n\", og så ta or mellom disse to (or gjøres sist fordi den har lavest presedens). Med or er det nok at en av sidene er sann, dermed kan programmet komme til konklusjon straffbar hvis mistenkte var ledsager og det ikke var nødrett - helt uavhengig av hvilken verdi som er gitt for promille. Den enkleste og mest intuitive måten å fikse dette på er å sette parentes rundt (f==\"j\" or leds==\"j\") siden disse hører sammen - enten var man fører eller ledsager i bilen. Parentesene vil gjøre at dette blir evaluert først og deretter kombinert med and med resten av betingelsen. Med and må begge sider være sanne."
+   ]
+  },
+  {
+   "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": {},
+   "source": [
+    "c) \n",
+    "\n",
+    "En løsning her er å endre rekkefølge på betingelsene i if-elif-setningen. Når operatoren er >, bør den første betingelsen være den med høyest verdi, da vil situasjoner med lavere verdi fortsatt oppfanges av de neste betingelsene."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "prom = float(input(\"Hvor stor var promillen? \"))\n",
+    "if prom > 0.5:\n",
+    "    print(\"Bot: en halv brutto månedslønn, samt fengsel.\")\n",
+    "elif prom > 0.4:\n",
+    "    print(\"Forelegg: 10000,-\")\n",
+    "elif prom > 0.2:\n",
+    "    print(\"Forelegg: 6000,-\")\n",
+    "else:\n",
+    "    print(\"Ikke straffbart, ingen bot.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "En annen mulig løsning ville være å beholde verdiene i samme rekkefølge som de sto i det opprinnelige programmet, mens bruke motsatt operator (<=). Igjen er poenget at hvis den første betingelsen feiler, må det fortsatt være mulig å komme videre til de neste."
+   ]
+  },
+  {
+   "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.4:\n",
+    "    print(\"Forelegg: 6000,-\")\n",
+    "elif prom <= 0.5:\n",
+    "    print(\"Forelegg: 10000,-\")\n",
+    "else:\n",
+    "    print(\"Bot: en halv brutto månedslønn, samt fengsel.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "d) Problemet i den gitte koden var\n",
+    "\n",
+    " \n",
+    "i) tidl == \"j\" er ikke i seg selv nok til å få inndratt førerkortet på livstid; det må skje en gjentatt promillekjøring. Første betingelse etter kommentaren #vurderer inndragning må derfor starte\n",
+    "\n",
+    "ii) videre nedover er det satt opp som en serie frittstående if-setninger. Disse blir dermed vurdert hver for seg. Så med høy promille (f.eks. 1.3), vil programmet først skrive \"...minst 2 år\" men deretter fortsette med også å skrive 20-22 med, 18 mnd. osv. Løsningen her blir at det ikke må stå som frittstående setninger men i en if-elif-struktur. Med dette blir betingelsen prom>0.2 stående to steder, men første gang er det i sammenheng med at man er tidligere dømt, mens nederst vil det da være at det kun var snakk om promille > 0.2 uten noen andre komplikasjoner."
+   ]
+  },
+  {
+   "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 prom > 0.2 and tidl == \"j\" or nekt == \"j\" and aar < 5:\n",
+    "    print(\"Førerkort inndras for alltid.\")\n",
+    "elif prom > 1.2 or nekt == \"j\":\n",
+    "    print(\"Førerkort inndras minst 2 år.\")\n",
+    "elif prom > 0.8:\n",
+    "    print(\"Førerkort inndras 20-22 mnd.\")\n",
+    "elif prom > 0.5:\n",
+    "    print(\"Førerkort inndras vanligvis 18 mnd.\")\n",
+    "elif prom > 0.2:\n",
+    "    print(\"Førerkort inndras inntil 1 år.\")\n",
+    "else:\n",
+    "    print(\"Ingen inndragning av førerkort.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "e) Her er det flere måter å gjøre det på. De fleste av utfallene når det gjelder inndragning av førerkortet gjelder hvis det var promillekjøring, og må derfor befinne seg inni if-setningen som fastslår at det var et motorkjøretøy, at vedkommende var ansvarlig fører, at det ikke var nødrett. Samtidig må noen betingelser vedrørende nekting av legetest også testes selv om det ikke var promillekjøring, dvs. i else-delen nederst. Merk at nekt==\"j\" må være begge steder; hvis det var promillekjøring kan det utgjøre en forverrende omstendighet mhp inndragning av førerkort, og hvis det ikke var promille, kan det likevel føre til inndragning. Det er derfor vanskelig å få til her en løsning hvor man printer både bot og inndragning samme sted i if-strukturen. F.eks. kunne det ha vært fristende å printe både halv månedslønn og 18 med på samme betingelse prom > 0.5. Problemet med dette ville være at det fins situasjoner hvor en promille på f.eks. 0.6 likevel skal føre til mye lenger inndragning av førerkortet, nemlig hvis det var en gjentakelse, eller hvis man nektet å samarbeide ved legetest. Man måtte da evt. ha lagt til and tidl == \"n\" på hver eneste av disse testene. \n",
+    "\n",
+    "**Hele programmet**"
+   ]
+  },
+  {
+   "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",
+    "else:\n",
+    "    aar = 999\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",
+    "    # vurderer bot\n",
+    "    if prom > 0.5:\n",
+    "        print(\"Bot: en halv brutto månedslønn, samt fengsel.\")\n",
+    "    elif prom > 0.4:\n",
+    "        print(\"Forelegg: 10000,-\")\n",
+    "    else:\n",
+    "        print(\"Forelegg: 6000,-\")\n",
+    " \n",
+    "    # vurderer inndragning\n",
+    "    if tidl == \"j\":\n",
+    "        print(\"Førerkort inndras for alltid.\")\n",
+    "    elif prom > 1.2 or nekt == \"j\":\n",
+    "        print(\"Førerkort inndras minst 2 år.\")\n",
+    "    elif prom > 0.8:\n",
+    "        print(\"Førerkort inndras 20-22 mnd.\")\n",
+    "    elif prom > 0.5:\n",
+    "        print(\"Førerkort inndras vanligvis 18 mnd.\")\n",
+    "    else:\n",
+    "        print(\"Førerkort inndras inntil 1 år.\")\n",
+    "else:\n",
+    "    print(\"Ikke straffbar promillekjøring, ingen bot.\")\n",
+    "    # vurderer mulig inndragning selv om det ikke var straffbar kjøring\n",
+    "    if nekt == \"j\":\n",
+    "        print(\"Men da mistenkte slo seg vrang ved legetesten,\")\n",
+    "        if aar < 5:\n",
+    "            print(\"<5 år etter en promilledom, inndras førerkort på livstid.\")\n",
+    "        else:\n",
+    "            print(\"inndras førerkortet i 2 år.\")\n"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Logiske operatorer og logiske uttrykk - lf.ipynb b/Losningsforslag/Oving2/Logiske operatorer og logiske uttrykk - lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..05d60db430301efde0a6cbb0abc09fd3958b7693
--- /dev/null
+++ b/Losningsforslag/Oving2/Logiske operatorer og logiske uttrykk - lf.ipynb	
@@ -0,0 +1,84 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### a)\n",
+    "True: 1, 3, 5\n",
+    "False: 2, 4\n",
+    "\n",
+    "### b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "if ((a>70 and a<90) or (a>40 and not a>50)) and (70<b<90 or (b>40 and b<50)):\n",
+    "    ...\n",
+    "# eventuelt:\n",
+    "if ((a>70 and a<90) or (a>40 and not a>50)) and ((70<b and b<90) or (b>40 and b<50)):\n",
+    "    ...\n",
+    "# (Flere mulige løsninger, men minimal retting gir øverste)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### c)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "if p<0 or p>10:\n",
+    "    ..."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### d)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "if not elsker_pannekaker or p<0 or p>10:\n",
+    "    ..."
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Sammenligning av strenger - lf.ipynb b/Losningsforslag/Oving2/Sammenligning av strenger - lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6614b88b2bbe49487146d5c655a3d93a3c181e12
--- /dev/null
+++ b/Losningsforslag/Oving2/Sammenligning av strenger - lf.ipynb	
@@ -0,0 +1,86 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a = \"druer\"\n",
+    "b = \"DrUer\"\n",
+    " \n",
+    "print(\"Sammenligner\",a,\"og\",b)\n",
+    "if a.lower() == b.lower():\n",
+    "    print(\"Det er samme matvare\")\n",
+    "else:\n",
+    "    print(\"Dette er to forskjellige matvarer\")\n",
+    "  "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "navn1 = input(\"Første navn: \")\n",
+    "navn2 = input(\"Andre navn: \")\n",
+    " \n",
+    "print(\"Under følger navnene i alfabetisk rekkefølge:\")\n",
+    "if navn1 < navn2:\n",
+    "    print(navn1)\n",
+    "    print(navn2)\n",
+    "else:\n",
+    "    print(navn2)\n",
+    "    print(navn1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### c)\n",
+    "Kodesnutt 1: k er større enn b\n",
+    "\n",
+    "Kodesnutt 2: Los Angeles New York\n",
+    "\n",
+    "Kodesnutt 3: druer"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Sjakkbrett lf.ipynb b/Losningsforslag/Oving2/Sjakkbrett lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6125115e4d1b7ebfd27e4a114e00141756a30265
--- /dev/null
+++ b/Losningsforslag/Oving2/Sjakkbrett lf.ipynb	
@@ -0,0 +1,140 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "a) Løsning med sammensatt betingelse og nøstet if-setning:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pos = input(\"Posisjon: \")\n",
+    " \n",
+    "bokstav = pos[0]\n",
+    "tall = int(pos[1])\n",
+    " \n",
+    "if bokstav == 'a' or bokstav == 'c' or bokstav == 'e' or bokstav == 'g':\n",
+    "    if tall % 2 == 0:\n",
+    "        print(\"Hvit\")\n",
+    "    else:\n",
+    "        print(\"Svart\")\n",
+    "else:\n",
+    "    if tall % 2 == 0:\n",
+    "        print(\"Svart\")\n",
+    "    else:\n",
+    "        print(\"Hvit\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Den litt lange if-testen av fire ulike bokstaver vil kunne skrives enklere ved bruk av in-operatoren og en streng med alle aktuelle bokstaver:\n",
+    "\n",
+    "if bokstav in 'aceg':                  (og resten av koden som før)\n",
+    "\n",
+    " \n",
+    "\n",
+    "En enda mye kortere løsning kan imidlertid oppnås ved å utnytte bokstavenes ASCII-nummer, som finnes ved standardfunksjonen ord(). ord('a') har verdien 97, ord('b') 98, ord('c') 99, osv.\n",
+    "\n",
+    "Vi merker oss at a1 er svart; 97+1 er 98, altså et partall. Mer generelt er det slik at alle ruter hvor summen av bokstavens ASCII-verdi og radens nummer er partall, vil være svarte, mens sum som er oddetall vil være hvite ruter.\n",
+    "\n",
+    "Dette vil funke også for store bokstaver, siden ord('A) er 65, ord('B') 66, osv.\n",
+    "\n",
+    "Løsning med ord()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pos = input(\"Posisjon: \")\n",
+    " \n",
+    "bokstav = pos[0]\n",
+    "tall = int(pos[1])\n",
+    "  \n",
+    "# Svart rute: bokstavs ascii-verdi + radnummer blir partall\n",
+    "# Hvit rute: summen blir oddetall\n",
+    "if (ord(bokstav) + tall) % 2 == 0:\n",
+    "    print(\"Svart\")\n",
+    "else:\n",
+    "    print(\"Hvit\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pos = input(\"Posisjon: \")\n",
+    "if len(pos) == 2:\n",
+    "    ch = pos[0]\n",
+    "    if ('A'<= ch <='H' or 'a' <= ch <='h') and '1'<=pos[1]<='8':\n",
+    "        #input OK\n",
+    "        tall = int(pos[1])\n",
+    "        if (ord(ch) + tall) % 2 == 0:\n",
+    "            print(\"Svart\")\n",
+    "        else:\n",
+    "            print(\"Hvit\")\n",
+    "    else:\n",
+    "        print(\"Feil input.\")\n",
+    "        print(\"Første tegn må være en bokstav A-H eller a-h\")\n",
+    "        print(\"Andre tegn må være et tall 1-8\")\n",
+    "else:\n",
+    "    print(\"Feil lengde på input, skal være 2 tegn.\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Her er det viktig at testen len(pos)==2 gjøres først. Hvis vi først prøver å teste bokstaver og tall ved å se på pos[0] og pos[1] vil dette feile i tilfelle bruker skrev inn null tegn (slo Enter med en gang).\n",
+    "\n",
+    "Likeledes er det lurt å teste tegnet pos[1] mellom '1' og '8' heller enn å konvertere til  tall med int() og teste at tallet er mellom 1 og 8. Hvis bruker har skrevet noe annet enn et tall som andre tegn (f.eks. enda  en bokstav), vil int() komme til å feile.\n",
+    "\n",
+    "Merk også at det trengs parentes rundt de to betingelsene som tester at vi er mellom A-H eller a-h. Dette fordi or har lavere presedens enn and. Hvis vi fjerner denne parentesen, vil testen i praksis bli\n",
+    "\n",
+    "* at bokstaven - her variabelen ch - er mellom A-H\n",
+    "* ELLER at bokstaven er mellom a-h og tallet mellom 1-8\n",
+    "\n",
+    "Dvs. hvis det kommer stor bokstav vil vi da unnlate å teste på tallet, så A9 (f.eks.) vil  gå gjennom og gi svaret Svart, heller enn å gi feilmelding som det egentlig skulle."
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Skatteetaten lf.ipynb b/Losningsforslag/Oving2/Skatteetaten lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6ce777145279b6500798531737c9691998a6b114
--- /dev/null
+++ b/Losningsforslag/Oving2/Skatteetaten lf.ipynb	
@@ -0,0 +1,99 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#a)\n",
+    "\n",
+    "print (\"\"\"INFO\n",
+    "Dette programmet besvarer om din utleie av egen bolig er skattepliktig.\n",
+    "Først trenger vi å vite hvor stor del av boligen du har leid ut.\n",
+    "Angi dette i prosent, 100 betyr hele boligen, 50 betyr halve,\n",
+    "20 en mindre del av boligen som f.eks. en hybel.\n",
+    "----------------------------------------------------------------------\n",
+    "DATAINNHENTING:\"\"\")\n",
+    "rentShare = int(input(\"Oppgi hvor mye av boligen som ble utleid: \"))\n",
+    "rentIncome = int(input(\"Skriv inn hva du har hatt i leieinntekt: \"))\n",
+    "print(\"\\n----------------------------------------------------------------------\")\n",
+    "print(\"SKATTEBEREGNING:\")\n",
+    "if (rentShare <= 50) or (rentIncome <= 20000):\n",
+    "    print(\"Inntekten er ikke skattepliktig\")\n",
+    "else:\n",
+    "    print(\"Inntekten er skattepliktig\")\n",
+    "    print(\"Skattepliktig beløp er \" + str(rentIncome))\n",
+    "    \n",
+    "#b) \n",
+    "\n",
+    "print(\"\"\"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",
+    "propertyType = input(\"Skriv inn type annen bolig (Sekundærbolig/Fritidsbolig) du har leid ut: \")\n",
+    "print(\"INFO\")\n",
+    "if (propertyType == \"Sekundærbolig\"):\n",
+    "    print(\"Du har valgt sekundærbolig.\")\n",
+    "    rentIncome = int(input(\"Skriv inn inntekt på sekundærboligen: \"))\n",
+    "    print(\"Skattepliktig beløp er \" + str(rentIncome))\n",
+    "elif (propertyType == \"Fritidsbolig\"):\n",
+    "    print(\"\"\"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",
+    "    propertyUsageType = input(\"Skriv inn formålet med fritidsboligen(e): \")\n",
+    "    numberOfProperties = int(input(\"Skriv inn antallet fritidsboliger du leier ut: \"))\n",
+    "    incomePerProperty = int(input(\"Skriv inn utleieinntekten pr. fritidsbolig: \"))\n",
+    "    print(\"\\n---------------------------------------------------------------------\")\n",
+    "    print(\"SKATTEBEREGNING:\")\n",
+    "    if (propertyUsageType == \"Fritid\"):\n",
+    "        if(incomePerProperty<=10000):\n",
+    "            print(\"Inntekten er ikke skattepliktig\")\n",
+    "        else:\n",
+    "            print(\"Inntekten er skattepliktig\")\n",
+    "            taxBasePerProperty = incomePerProperty - 10000\n",
+    "            print(\"Overskytende beløp pr. fritidsbolig er \" + str(taxBasePerProperty))\n",
+    "            taxPerProperty = int(0.85*taxBasePerProperty)\n",
+    "            print(\"Skattepliktig beløp pr. fritidsbolig er \" + str(taxPerProperty))\n",
+    "            print(\"Totalt skattepliktig beløp er \" + str(numberOfProperties*taxPerProperty))\n",
+    "    else:\n",
+    "        print(\"Inntekten er skattepliktig\")\n",
+    "        print(\"Totalt skattepliktig beløp er \" + str(numberOfProperties*incomePerProperty))\n",
+    "else:\n",
+    "    print(\"Du har skrevet inn en ugyldig boligtype.\")\n",
+    "    \n",
+    "#c)\n",
+    "\n",
+    "#Vi lar denne være opp til studenten. Ideelt sett kombinerer vedkommende if-setningene fra ovenstående kode \n",
+    "#til et stort, helhetlig skript. Første nøkkelbetingelse blir hvorvidt boligen er en primærbolig eller en \n",
+    "#sekundær-/fritidsbolig. "
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Losningsforslag/Oving2/Tekstbasert spill lf.ipynb b/Losningsforslag/Oving2/Tekstbasert spill lf.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..e1199b1bbe57e3cd949f458dc212b042a76d36e2
--- /dev/null
+++ b/Losningsforslag/Oving2/Tekstbasert spill lf.ipynb	
@@ -0,0 +1,47 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#disse er bare eksempler på hvordan en kan tenke, oppgaven kan gjøres på vilt forskjellige måter.\n",
+    "\n",
+    "#a, b, c, d\n",
+    "\n",
+    "print(\"Du står ved enden av en vei, foran et hus med en lukket dør, det er en postkasse foran huset\")\n",
+    "a = input(\"Hva gjør du?\").lower()\n",
+    "if a == \"går tilbake\" or a == \"går andre veien\":\n",
+    "    print(\"Du snur deg og vandrer hjem igjen. Du kjøper en is på veien.\")\n",
+    "elif a == \"åpner døren\" or a == \"åpne døren\":\n",
+    "    print(\"Døren er låst\")\n",
+    "elif a == \"åpner postkassen\" or a == \"åpne postkassen\":\n",
+    "    print(\"Du finner en nøkkel i postkassen\")\n",
+    "else:\n",
+    "    print(\"Ikke en støttet kommando\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git "a/Losningsforslag/Oving2/Ulike typer if-setninger l\303\270sning lf.ipynb" "b/Losningsforslag/Oving2/Ulike typer if-setninger l\303\270sning lf.ipynb"
new file mode 100644
index 0000000000000000000000000000000000000000..91581e950736c3f0b39b76e7ee6d2349d69fd4be
--- /dev/null
+++ "b/Losningsforslag/Oving2/Ulike typer if-setninger l\303\270sning lf.ipynb"	
@@ -0,0 +1,84 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#oppgave a\n",
+    "tid = int(input(\"Hvor mange minutt har kaken stått i ovnen? \"))\n",
+    "if tid >= 50:\n",
+    "    print(\"Kaken kan tas ut av ovnen.\")\n",
+    "print(\"Tips til servering: vaniljeis.\")\n",
+    " \n",
+    "  \n",
+    "#oppgave b\n",
+    "  \n",
+    "epler = int(input(\"Hvor mange epler har du? \"))\n",
+    "barn = int(input(\"Hvor mange barn passer du? \"))\n",
+    "if barn > 0:\n",
+    "    print(\"Da blir det\", epler // barn, \"epler til hvert barn\")\n",
+    "    print(\"og\", epler % barn, \"epler til overs til deg selv.\")\n",
+    "print(\"Takk for i dag!\")\n",
+    " \n",
+    " \n",
+    "#oppgave c\n",
+    "alder = int(input(\"Skriv inn din alder: \"))\n",
+    " \n",
+    "if alder >= 18:\n",
+    "    print(\"Du kan stemme:)\")\n",
+    "else:\n",
+    "    print(\"Du kan ikke stemme ennå\")\n",
+    "  \n",
+    "  \n",
+    "#oppgave c\n",
+    "alder = int(input(\"Skriv inn din alder: \"))\n",
+    " \n",
+    "if alder >= 18:\n",
+    "    print(\"Du kan stemme både ved lokalvalg og Stortingsvalg.)\")\n",
+    "elif alder >= 16:\n",
+    "    print(\"Du kan stemme ved lokalvalg men ikke ved Stortingsvalg.)\")\n",
+    "else:\n",
+    "    print(\"Du kan ikke stemme ennå\")\n",
+    " \n",
+    " \n",
+    " \n",
+    "#oppgave e\n",
+    "alder = int(input(\"Din alder: \"))\n",
+    " \n",
+    "if alder < 3:\n",
+    "    print(\"Billetten er gratis\")\n",
+    "elif alder < 12:\n",
+    "    print(\"Billettpris: 30kr\")\n",
+    "elif alder < 26:\n",
+    "    print(\"Billettpris: 50kr\")\n",
+    "elif alder < 67:\n",
+    "    print(\"Billettpris: 80kr\")\n",
+    "else:\n",
+    "    print(\"Billettpris: 40kr\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git "a/Losningsforslag/Oving2/\303\205rstider - lf.ipynb" "b/Losningsforslag/Oving2/\303\205rstider - lf.ipynb"
new file mode 100644
index 0000000000000000000000000000000000000000..66b8141bc43cb2aec4f31669f2b0f7f0b4fd5a6d
--- /dev/null
+++ "b/Losningsforslag/Oving2/\303\205rstider - lf.ipynb"	
@@ -0,0 +1,65 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m = input(\"Måned: \")\n",
+    "d = int(input(\"Dag: \"))\n",
+    " \n",
+    " \n",
+    "if m == 'mars':\n",
+    "    if d<20:\n",
+    "        print(\"Vinter\")\n",
+    "    else:\n",
+    "        print(\"Vår\")\n",
+    "elif m == 'juni':\n",
+    "    if d<21:\n",
+    "        print(\"Vår\")\n",
+    "    else:\n",
+    "        print(\"Sommer\")\n",
+    "elif m == 'september':\n",
+    "    if d<22:\n",
+    "        print(\"Sommer\")\n",
+    "    else:\n",
+    "        print(\"Høst\")\n",
+    "elif m == 'desember':\n",
+    "    if d<21:\n",
+    "        print(\"Høst\")\n",
+    "    else:\n",
+    "        print(\"Vinter\")\n",
+    "elif m == 'april' or m == 'mai':\n",
+    "    print(\"Vår\")\n",
+    "elif m == 'juli' or m == 'august':\n",
+    "    print(\"Sommer\")\n",
+    "elif m == 'oktober' or m == 'november':\n",
+    "    print(\"Høst\")\n",
+    "else:\n",
+    "    print(\"Vinter\")"
+   ]
+  }
+ ],
+ "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"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/README.md b/README.md
index 697276d33960b8c87230e5e971831e09ed746d28..946e7db8746334f653b43911b4dd9da79af482b8 100644
--- a/README.md
+++ b/README.md
@@ -13,4 +13,11 @@
 
 ### Løsningsforslag
 
-_Kommer senere_
+-   [Øving 1](./Losningsforslag/Oving1/)
+-   [Øving 2](./Losningsforslag/Oving2/)
+-   Øving 3 (kommer senere)
+-   Øving 4 (kommer senere)
+-   Øving 5 (kommer senere)
+-   Øving 6 (kommer senere)
+-   Øving 7 (kommer senere)
+-   Øving 8 (kommer senere)