From 1e2bdd626e02787addd4f58a480d6c2fdd3a7817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Bu=20M=C3=B8rland?= Date: Sun, 9 Nov 2025 19:20:57 +0100 Subject: [PATCH] =?UTF-8?q?Legger=20til=20uke46=20med=20eksamens=C3=B8ving?= =?UTF-8?q?=20(notebooks)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pensum/uke46/eksamensoving.ipynb | 296 ++++++++++++++++++++ pensum/uke46/eksamensovingLF.ipynb | 433 +++++++++++++++++++++++++++++ 2 files changed, 729 insertions(+) create mode 100644 pensum/uke46/eksamensoving.ipynb create mode 100644 pensum/uke46/eksamensovingLF.ipynb diff --git a/pensum/uke46/eksamensoving.ipynb b/pensum/uke46/eksamensoving.ipynb new file mode 100644 index 0000000..379eb20 --- /dev/null +++ b/pensum/uke46/eksamensoving.ipynb @@ -0,0 +1,296 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7b5c67f9", + "metadata": {}, + "source": [ + "\n", + "# TDT4109 øvingsøkt: Eksamenslignende kodeoppgaver (ca. 45 min). \n", + "\n", + "Dette er et eksempelsett på de oppgavene på eksamen dere skriver og som ikke kan kjøres. Det anbefales derfor at dere prøver dere på alle oppgavene ordentlig, før dere eventuelt kjører koden. Hvis du ikke får til en oppgave kan du fortsatt bruke løsningen av den i videre oppgaver.\n", + "\n", + "\n", + "Oppgavene er basert på at det for tiden er festivalfeber i Trondheim, men de frivillige har svært dårlig programmeringskompetanse og trenger derfor din hjelp til å fikse opp i noen uregelmessigheter. \n", + "\n", + "# 🧩 Oppgave 1 – hent_konsertnavn(...)\n", + "\n", + "Navn på konsertene har blitt tuklet med, og kan komme på formatet \"Cez3i.n2and0!\", mens vi her helst skulle hatt \"Cezinando\" her. Du må altså fjerne alle tegn som ikke er bokstaver fra konsertnavnet. \n", + "\n", + "Skriv funksjonen hent_festivalnavn(string) som returnerer konsertnavnet som streng med alle elementer som bokstaver, i samme rekkefølge slik de var i input (store/små bokstaver skal også beholdes). Eksempel på kjøring:\n", + "```python\n", + ">>> hent_konsertnavn(\"Cez3i.n2and0o!\")\n", + "\"Cezinando\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bbd1c706", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "ae03ff51", + "metadata": {}, + "source": [ + "# 🎤 Oppgave 2 – lag_konsert(...)\n", + "\n", + "Hver konsert skal representeres som en dictionary med informasjon. Lag funksjonen lag_konsert(navn, scene, starttid, varighet) som returnerer et dictionary på formatet:\n", + "```python\n", + "{'navn': 'Cezinando', 'scene': 'Hovedscenen', 'start': 18.0, 'slutt': 19.5}\n", + "```\n", + "Her er altså varighet = 1.5. Navnet på artisten kan fortsatt være tuklet med... Disse hersens festivalfolka assa. Eksempel på kjøring:\n", + "```python\n", + ">>> lag_konsert(\"Cez3i.n2and0!0\", \"Byscenen\", 22.5, 4)\n", + "{'navn': 'Cezinando', 'scene': 'Bycenen', 'start': 22.5, 'slutt': 2.5}\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f24e36d", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "fe0fe983", + "metadata": {}, + "source": [ + "# 🎬 Oppgave 3 – film_info(...)\n", + "\n", + "Festivalen har også filmoppvisninger. Hver film har tilhørende informasjon om regissør og årstall lagret som et dictionary:\n", + "```python\n", + "film = {\"tittel\": \"Barbie\", \"regissør\": \"Greta Gerwig\", \"år\": 2023}\n", + "```\n", + "Skriv funksjonen film_info(film) som returnerer en streng på formatet: \n", + "```python\n", + "\"Barbie (2023) - regissert av Greta Gerwig\"\n", + "```\n", + "Du kan anta at feltene har gyldige data i input." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "85b646cb", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "44dca63e", + "metadata": {}, + "source": [ + "# 🎟️ Oppgave 4 - CSV til liste\n", + "\n", + "Du har fått tekstfilen \"konserter.csv\" i et CSV-liknende filformat (CSV-fil = Comma-Separated Values) som vist her:\n", + "```\n", + "Dag,Artist 1,Artist 2,Artist 3, ...\n", + "1,Cezinando,Flo Rida,Pikekyss\n", + "2,Undergunn,Børge Haugset\n", + "3,Dagny,Ka2,Erna,Arif&Stig\n", + "```\n", + "Her er separatoren komma. Vi kan ha vilkårlig mange artister per linje.\n", + "\n", + "Lag koden som laster den inn som en Python-tabell (2D-liste, eller liste-med-lister).\n", + "CSV-filen har headers/overskrifter (Dag:Artist 1,Artist 2,Artist 3, ...). De skal vi ikke inkludere her.\n", + "```python\n", + ">>> hent_tabell('data.csv')\n", + "[[\"Cezinando\", \"Flo Rida\", \"Pikekyss\"], [\"Undergrunn\", \"Børge Haugset\"], [\"Dagny\", \"Ka2\", \"Erna\", \"Arif&Stig\"]]\n", + "```\n", + "Lag funksjonen `hent_tabell` som tar inn `filnavn`, laster inn filen og returnerer den som en Python-tabell som vist i eksempelet over. \n", + "\n", + "OBS! Hvis filen ikke finnes skal funksjonen returnere strengen `\"File not found\"`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89c5c75d", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "c7fc7d1b", + "metadata": {}, + "source": [ + "# ⚠️ Oppgave 5 - lenge siden sist Cez?\n", + "\n", + "Lag funksjonen `sist_dato` som tar i mot:\n", + "- 2 datoer formatert som tuple: (år, måned, dag)\n", + "\n", + "Du skal finne avstanden mellom datoene, og sist_dato skal returnere ny dato.\n", + " \n", + "Gå ut i fra at:\n", + "- Skuddår ikke finnes\n", + "- Alle måneder har 31 dager\n", + " \n", + "Eksempler:\n", + "```python\n", + ">>> sist_dato((2024, 11, 28), (2024, 11, 29))\n", + "(0, 0, 1)\n", + " \n", + ">>> sist_dato((2024, 11, 28), (2025, 11, 28))\n", + "(1, 0, 0)\n", + " \n", + ">>> sist_dato((2024, 1, 1), (2025, 3, 4))\n", + "(1, 2, 3)\n", + " \n", + ">>> sist_dato((2024, 11, 1), (2028, 1, 2))\n", + "(3, 2, 1)\n", + " \n", + ">>> sist_dato((2024, 10, 31), (2026, 1, 3))\n", + "(1, 2, 3)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c0a8dcf8", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "52d5c71b", + "metadata": {}, + "source": [ + "# 🎸 Oppgave 6 - summer_heiarop(...)\n", + "\n", + "Ulike artister er ulikt populære, så vi ønsker å avgjøre hvem som heies mest på.\n", + "\n", + "Lag funksjonen `summer_heiarop` som tar i mot:\n", + "\n", + " En liste l\n", + "\n", + " Et dictionary d\n", + "\n", + "Oppførsel og krav:\n", + "Funksjonen SKAL være rekursiv, og resultatet av kallet til funksjonen skal være:\n", + "En dictionary med artistene i lista l som nøkler, og antallet ganger de opptrer som verdier.\n", + "Du får ikke lov til å iterere over lista.\n", + "\n", + "Ja, denne er enkel å løse uten rekursjon. Poenget med oppgaven er å se om du klarer å løse oppgaven med de verktøyene du er gitt.\n", + " \n", + "Eksempler:\n", + "```python\n", + ">>> summer_heiarop([\"Cezinando\", \"Aurora\", \"Aurora\", \"Aurora\", \"Børge\"], {})\n", + "{'Cezinando': 1, 'Aurora': 3, 'Børge': 1}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f69b57be", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d158476f", + "metadata": {}, + "source": [ + "# 📂 Oppgave 7 - lagre til fil\n", + "\n", + "Artistenes heiarop skal nå lagres til en fil.\n", + "\n", + "Lag funksjonen save_scores(heiarop)\n", + "Funksjonen skal ha dictionarien *heiarop* fra forrige oppgave som parameter, og lagre til fil slik:\n", + "- Artistenes navn og deres totale heiarop i filen *heiarop.txt*. \n", + "- Artistene skal sorteres etter hvor mange heiarop de har fått, der høyeste antall kommer først og laveste antall kommer sist. \n", + "- Hvis flere artister har fått like mange heiarop så skal de skrives på den samme linjen, disse artistenes navn skal i så fall sorteres etter navn (A før B) separert med komma og mellomrom.\n", + "```\n", + ">>> save_scores(heiarop)\n", + "```\n", + "Filen skal da ende opp med følgende innhold:\n", + "```\n", + "3: Aurora\n", + "1: Børge, Cezinando\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ab86d14b", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "80022db7", + "metadata": {}, + "source": [ + "# 🧮 Oppgave 8 - avg_heiarop(heiarop)\n", + "\n", + "Vi ønsker å finne ut hva gjennomsnittlig antall heiarop på festivalen er. Slår vi fjorårets?\n", + "\n", + "Lag funksjonen avg_heiarop(heiarop) som tar inn dictionarien heiarop som parameter. Funksjonen SKAL bruke numpy til å beregne gjennomsnittlig antall heiarop og returnere dette som et avrundet tall med to desimaler.\n", + "```python\n", + ">>> import numpy as np\n", + ">>> print(avg_heiarop(heiarop))\n", + "1.67\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1aa2372d", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pensum/uke46/eksamensovingLF.ipynb b/pensum/uke46/eksamensovingLF.ipynb new file mode 100644 index 0000000..e13251a --- /dev/null +++ b/pensum/uke46/eksamensovingLF.ipynb @@ -0,0 +1,433 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7b5c67f9", + "metadata": {}, + "source": [ + "\n", + "# TDT4109 øvingsøkt løsningsforslag: Eksamenslignende kodeoppgaver (ca. 45 min). \n", + "\n", + "Dette er et eksempelsett på de oppgavene på eksamen dere skriver og som ikke kan kjøres. Det anbefales derfor at dere prøver dere på alle oppgavene ordentlig, før dere eventuelt kjører koden. Hvis du ikke får til en oppgave kan du fortsatt bruke løsningen av den i videre oppgaver.\n", + "\n", + "Oppgavene er basert på at det for tiden er festivalfeber i Trondheim, men de frivillige har svært dårlig programmeringskompetanse og trenger derfor din hjelp til å fikse opp i noen uregelmessigheter. \n", + "\n", + "# 🧩 Oppgave 1 – hent_konsertnavn(...)\n", + "\n", + "Navn på konsertene har blitt tuklet med, og kan komme på formatet \"Cez3i.n2and0!\", mens vi her helst skulle hatt \"Cezinando\" her. Du må altså fjerne alle tegn som ikke er bokstaver fra konsertnavnet. \n", + "\n", + "Skriv funksjonen hent_festivalnavn(string) som returnerer konsertnavnet som streng med alle elementer som bokstaver, i samme rekkefølge slik de var i input (store/små bokstaver skal også beholdes). Eksempel på kjøring:\n", + "```python\n", + ">>> hent_konsertnavn(\"Cez3i.n2and0o!\")\n", + "\"Cezinando\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bbd1c706", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cezinando\n" + ] + } + ], + "source": [ + "def hent_konsertnavn(string):\n", + " resultat = \"\"\n", + " for tegn in string:\n", + " if tegn.isalpha():\n", + " resultat += tegn\n", + " return resultat\n", + "\n", + "print(hent_konsertnavn(\"Cez3i.n2and0!o\"))" + ] + }, + { + "cell_type": "markdown", + "id": "ae03ff51", + "metadata": {}, + "source": [ + "# 🎤 Oppgave 2 – lag_konsert(...)\n", + "\n", + "Hver konsert skal representeres som en dictionary med informasjon. Lag funksjonen lag_konsert(navn, scene, starttid, varighet) som returnerer et dictionary på formatet:\n", + "```python\n", + "{'navn': 'Cezinando', 'scene': 'Hovedscenen', 'start': 18.0, 'slutt': 19.5}\n", + "```\n", + "Her er altså varighet = 1.5. Navnet på artisten kan fortsatt være tuklet med... Disse hersens festivalfolka assa. Eksempel på kjøring:\n", + "```python\n", + ">>> lag_konsert(\"Cez3i.n2and0!o\", \"Byscenen\", 22.5, 4)\n", + "{'navn': 'Cezinando', 'scene': 'Bycenen', 'start': 22.5, 'slutt': 2.5}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8f24e36d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'navn': 'Cezinando', 'scene': 'Byscenen', 'start': 22.5, 'slutt': 2.5}\n" + ] + } + ], + "source": [ + "def lag_konsert(navn, scene, starttid, varighet):\n", + " navn = hent_konsertnavn(navn) # Bruker funksjonen fra forrige oppgave\n", + " sluttid = (starttid + varighet) % 24\n", + " return {\n", + " 'navn': navn,\n", + " 'scene': scene,\n", + " 'start': starttid,\n", + " 'slutt': sluttid\n", + " }\n", + "\n", + "print(lag_konsert(\"Cez3i.n2and0!o\", \"Byscenen\", 22.5, 4))" + ] + }, + { + "cell_type": "markdown", + "id": "fe0fe983", + "metadata": {}, + "source": [ + "# 🎬 Oppgave 3 – film_info(...)\n", + "\n", + "Festivalen har også filmoppvisninger. Hver film har tilhørende informasjon om regissør og årstall lagret som et dictionary:\n", + "```python\n", + "film = {\"tittel\": \"Barbie\", \"regissør\": \"Greta Gerwig\", \"år\": 2023}\n", + "```\n", + "Skriv funksjonen film_info(film) som returnerer en streng på formatet: \n", + "```python\n", + "\"Barbie (2023) - reggisert av Greta Gerwig\"\n", + "```\n", + "Du kan forvente at alle felt er gyldige i input." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "85b646cb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Barbie (2023) - regissert av Greta Gerwig\n" + ] + } + ], + "source": [ + "def film_info(film):\n", + " return f\"{film['tittel']} ({film['år']}) - regissert av {film['regissør']}\"\n", + "\n", + "film = {\"tittel\": \"Barbie\", \"regissør\": \"Greta Gerwig\", \"år\": 2023}\n", + "print(film_info(film))\n" + ] + }, + { + "cell_type": "markdown", + "id": "44dca63e", + "metadata": {}, + "source": [ + "# 🎟️ Oppgave 4 - CSV til liste\n", + "\n", + "Du har fått tekstfilen \"konserter.csv\" i et CSV-liknende filformat (CSV-fil = Comma-Separated Values) som vist her:\n", + "```\n", + "Dag,Artist 1,Artist 2,Artist 3, ...\n", + "1,Cezinando,Flo Rida,Pikekyss\n", + "2,Undergunn,Børge Haugset\n", + "3,Dagny,Ka2,Erna,Arif&Stig\n", + "```\n", + "Her er separatoren komma. Vi kan ha vilkårlig mange artister per linje.\n", + "\n", + "Lag koden som laster den inn som en Python-tabell (2D-liste, eller liste-med-lister).\n", + "CSV-filen har headers/overskrifter (Dag:Artist 1,Artist 2,Artist 3, ...). De skal vi ikke inkludere her.\n", + "```python\n", + ">>> hent_tabell('data.csv')\n", + "[[\"Cezinando\", \"Flo Rida\", \"Pikekyss\"], [\"Undergrunn\", \"Børge Haugset\"], [\"Dagny\", \"Ka2\", \"Erna\", \"Arif&Stig\"]]\n", + "```\n", + "Lag funksjonen `hent_tabell` som tar inn `filnavn`, laster inn filen og returnerer den som en Python-tabell som vist i eksempelet over.\n", + "\n", + "OBS! Hvis filen ikke finnes skal funksjonen returnere strengen `\"File not found\"`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89c5c75d", + "metadata": {}, + "outputs": [], + "source": [ + "def hent_tabell(filnavn):\n", + " out = []\n", + " try:\n", + " with open(filnavn, encoding=\"utf-8\") as f:\n", + " f.readline() # hopper over overskriften\n", + " for line in f:\n", + " line = line.strip()\n", + " deler = line.split(\",\")[1:] # hopper over dagnummeret\n", + " ny_liste = []\n", + " for artist in deler:\n", + " ny_liste.append(artist.strip())\n", + " out.append(ny_liste)\n", + " return out\n", + " except FileNotFoundError:\n", + " return \"File not found\"" + ] + }, + { + "cell_type": "markdown", + "id": "c7fc7d1b", + "metadata": {}, + "source": [ + "# ⚠️ Oppgave 5 - lenge siden sist Cez?\n", + "\n", + "Lag funksjonen `sist_dato` som tar i mot:\n", + "- 2 datoer formatert som tuple: (år, måned, dag)\n", + "\n", + "Du skal finne avstanden mellom datoene, og sist_dato skal returnere ny dato.\n", + " \n", + "Gå ut i fra at:\n", + "- Skuddår ikke finnes\n", + "- Alle måneder har 31 dager\n", + " \n", + "Eksempler:\n", + "```python\n", + ">>> sist_dato((2024, 11, 28), (2024, 11, 29))\n", + "(0, 0, 1)\n", + " \n", + ">>> sist_dato((2024, 11, 28), (2025, 11, 28))\n", + "(1, 0, 0)\n", + " \n", + ">>> sist_dato((2024, 1, 1), (2025, 3, 4))\n", + "(1, 2, 3)\n", + " \n", + ">>> sist_dato((2024, 11, 1), (2028, 1, 2))\n", + "(3, 2, 1)\n", + " \n", + ">>> sist_dato((2024, 10, 31), (2026, 1, 3))\n", + "(1, 2, 3)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c0a8dcf8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0, 0, 1)\n", + "(1, 0, 0)\n", + "(1, 2, 3)\n", + "(3, 2, 1)\n", + "(1, 2, 3)\n" + ] + } + ], + "source": [ + "def sist_dato(dato1, dato2):\n", + " y1, m1, d1 = dato1\n", + " y2, m2, d2 = dato2\n", + "\n", + " år = y2 - y1\n", + " måned = m2 - m1\n", + " dag = d2 - d1\n", + "\n", + " if dag < 0:\n", + " dag += 31\n", + " måned -= 1\n", + " if måned < 0:\n", + " måned += 12\n", + " år -= 1\n", + "\n", + " return (år, måned, dag)\n", + "\n", + "print(sist_dato((2024, 11, 28), (2024, 11, 29)))\n", + "print(sist_dato((2024, 11, 28), (2025, 11, 28)))\n", + "print(sist_dato((2024, 1, 1), (2025, 3, 4)))\n", + "print(sist_dato((2024, 11, 1), (2028, 1, 2)))\n", + "print(sist_dato((2024, 10, 31), (2026, 1, 3)))\n" + ] + }, + { + "cell_type": "markdown", + "id": "52d5c71b", + "metadata": {}, + "source": [ + "# 🎸 Oppgave 6 - summer_heiarop(...)\n", + "\n", + "Ulike artister er ulikt populære, så vi ønsker å avgjøre hvem som heies mest på.\n", + "\n", + "Lag funksjonen `summer_heiarop` som tar i mot:\n", + "\n", + " En liste l\n", + "\n", + " Et dictionary d\n", + "\n", + "Oppførsel og krav:\n", + "Funksjonen SKAL være rekursiv, og resultatet av kallet til funksjonen skal være:\n", + "En dictionary med artistene i lista l som nøkler, og antallet ganger de opptrer som verdier.\n", + "Du får ikke lov til å iterere over lista.\n", + "\n", + "Ja, denne er enkel å løse uten rekursjon. Poenget med oppgaven er å se om du klarer å løse oppgaven med de verktøyene du er gitt.\n", + " \n", + "Eksempler:\n", + "```python\n", + ">>> summer_heiarop([\"Cezinando\", \"Aurora\", \"Aurora\", \"Aurora\", \"Børge\"], {})\n", + "{'Cezinando': 1, 'Aurora': 3, 'Børge': 1}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f69b57be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'Cezinando': 1, 'Aurora': 3, 'Børge': 1}\n" + ] + } + ], + "source": [ + "def summer_heiarop(liste, d):\n", + " if not liste:\n", + " return d\n", + " \n", + " artist = liste[0]\n", + " if artist in d:\n", + " d[artist] += 1\n", + " else:\n", + " d[artist] = 1\n", + "\n", + " return summer_heiarop(liste[1:], d)\n", + "\n", + "print(summer_heiarop([\"Cezinando\", \"Aurora\", \"Aurora\", \"Aurora\", \"Børge\"], {}))\n" + ] + }, + { + "cell_type": "markdown", + "id": "d158476f", + "metadata": {}, + "source": [ + "# 📂 Oppgave 7 - lagre til fil\n", + "\n", + "Artistenes heiarop skal nå lagres til en fil.\n", + "\n", + "Lag funksjonen save_scores(heiarop)\n", + "Funksjonen skal ha dictionarien *heiarop* fra forrige oppgave som parameter, og lagre til fil slik:\n", + "- Aristenes navn og deres totale heiarop i filen *heiarop.txt*. \n", + "- Artistene skal sorteres etter hvor mange heiarop de har fått, der høyeste antall kommer først og laveste antall kommer sist. \n", + "- Hvis flere artister har fått like mange heiarop så skal de skrives på den samme linjen, disse artistenes navn skal i så fall sorteres etter navn (A før B) separert med komma og mellomrom.\n", + "```\n", + ">>> save_scores(heiarop)\n", + "```\n", + "Filen skal da ende opp med følgende innhold:\n", + "```\n", + "3: Aurora\n", + "1: Børge, Cezinando\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ab86d14b", + "metadata": {}, + "outputs": [], + "source": [ + "def save_scores(heiarop):\n", + " # Finn alle unike antall heiarop og sorter synkende\n", + " antall = sorted(set(heiarop.values()), reverse=True)\n", + "\n", + " with open(\"heiarop.txt\", \"w\") as f:\n", + " for verdi in antall:\n", + " navn_liste = []\n", + " for artist, count in heiarop.items():\n", + " if count == verdi:\n", + " navn_liste.append(artist)\n", + " navn_liste.sort()\n", + " linje = f\"{verdi}: {', '.join(navn_liste)}\\n\"\n", + " f.write(linje)\n" + ] + }, + { + "cell_type": "markdown", + "id": "80022db7", + "metadata": {}, + "source": [ + "# 🧮 Oppgave 8 - avg_heiarop(heiarop)\n", + "\n", + "Vi ønsker å finne ut hva gjennomsnittlig antall heiarop på festivalen er. Slår vi fjorårets?\n", + "\n", + "Lag funksjonen avg_heiarop(heiarop) som tar inn dictionarien heiarop som parameter. Funksjonen SKAL bruke numpy til å beregne gjennomsnittlig antall heiarop og returnere dette som et avrundet tall med to desimaler.\n", + "```python\n", + ">>> import numpy as np\n", + ">>> print(avg_heiarop(heiarop))\n", + "1.67\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "1aa2372d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.67\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "def avg_heiarop(heiarop):\n", + " verdier = list(heiarop.values())\n", + " gjennomsnitt = np.mean(verdier)\n", + " return round(gjennomsnitt, 2)\n", + "\n", + "heiarop = {'Cezinando': 1, 'Aurora': 3, 'Børge': 1}\n", + "print(avg_heiarop(heiarop))\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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}