From 6b7c73e2fd26b0788c6d419033f8d84964e78dc9 Mon Sep 17 00:00:00 2001 From: Ole-Magnus Pedersen <ole-magnus.pedersen@ntnu.no> Date: Wed, 19 Aug 2020 10:23:00 +0200 Subject: [PATCH] =?UTF-8?q?=C3=98ving=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ovinger/Oving01/Bakekurs.ipynb | 265 +++++++ Ovinger/Oving01/Geometri.ipynb | 293 +++++++ Ovinger/Oving01/Input og variable.ipynb | 718 ++++++++++++++++++ Ovinger/Oving01/Intro til jupyter.ipynb | 356 +++++++++ .../James Bond and Operation round().ipynb | 256 +++++++ Ovinger/Oving01/Jeg elsker ITGK!.ipynb | 527 +++++++++++++ Ovinger/Oving01/Kalkulasjoner.ipynb | 559 ++++++++++++++ "Ovinger/Oving01/MUSTEK-\303\230VING_1.ipynb" | 277 +++++++ Ovinger/Oving01/Peppes Pizza.ipynb | 305 ++++++++ Ovinger/Oving01/Tallkonvertering.ipynb | 495 ++++++++++++ Ovinger/Oving01/Tetraeder.ipynb | 225 ++++++ Ovinger/Oving01/Vitenskapelig notasjon.ipynb | 286 +++++++ Ovinger/Oving01/_Oving1.ipynb | 92 +++ 13 files changed, 4654 insertions(+) create mode 100644 Ovinger/Oving01/Bakekurs.ipynb create mode 100644 Ovinger/Oving01/Geometri.ipynb create mode 100644 Ovinger/Oving01/Input og variable.ipynb create mode 100644 Ovinger/Oving01/Intro til jupyter.ipynb create mode 100644 Ovinger/Oving01/James Bond and Operation round().ipynb create mode 100644 Ovinger/Oving01/Jeg elsker ITGK!.ipynb create mode 100644 Ovinger/Oving01/Kalkulasjoner.ipynb create mode 100644 "Ovinger/Oving01/MUSTEK-\303\230VING_1.ipynb" create mode 100644 Ovinger/Oving01/Peppes Pizza.ipynb create mode 100644 Ovinger/Oving01/Tallkonvertering.ipynb create mode 100644 Ovinger/Oving01/Tetraeder.ipynb create mode 100644 Ovinger/Oving01/Vitenskapelig notasjon.ipynb create mode 100644 Ovinger/Oving01/_Oving1.ipynb diff --git a/Ovinger/Oving01/Bakekurs.ipynb b/Ovinger/Oving01/Bakekurs.ipynb new file mode 100644 index 0000000..2938949 --- /dev/null +++ b/Ovinger/Oving01/Bakekurs.ipynb @@ -0,0 +1,265 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li ><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li ><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li ><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li ><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li class=\"active\"><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Bakekurs\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Printe ut tekst til skjerm pÃ¥ en fin mÃ¥te\n", + "\n", + "* Kalkulasjoner i Python\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2.3\n", + "\n", + "* Kap. 2.8\n", + "\n", + "* Kap. 8\n", + "\n", + "I denne oppgaven skal du beregne mengden ingredienser som trengs for Ã¥ lage cookies og printe resultatet pÃ¥ et fint format. \n", + "\n", + "Du skal lage cookies og har en oppskrift som gir 48 cookies. Den oppskriften krever følgende ingredienser:\n", + "\n", + "* 400 g sukker \n", + "* 320 g smør\n", + "* 500 g sjokolade\n", + "* 2 egg \n", + "* 460 g hvetemel " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Spør brukeren om hvor mange cookies han eller hun ønsker Ã¥ bake og skriv ut hvor mange ingredienser som trengs for Ã¥ lage sÃ¥ mange cookies.\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "\n", + " \n", + "```python\n", + "Hvor mange cookies ønsker du Ã¥ bake? 24\n", + "Antall cookies: 24 \n", + "sukker(g): 200.0\n", + "smør(g): 160.0\n", + "sjokolade(g): 250.0\n", + "egg: 1.0\n", + "hvetemel(g): 230.0\n", + "```\n", + " \n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Tips til oppgave a: Escape Character" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "`\\n` er nyttig Ã¥ bruke her for Ã¥ fÃ¥ en ny linje! Eks. `print(“hei\\npÃ¥\\ndegâ€)` gir\n", + "\n", + "**Utskrift**\n", + " \n", + "```\n", + "hei \n", + "pÃ¥ \n", + "deg\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Be brukeren om hvor mange cookies han eller hun ønsker Ã¥ lage tre ganger og skriv ut ingrediensene pÃ¥ en fin og elegant mÃ¥te. Du trenger kun Ã¥ skrive ut antall cookies, og hvor mye sjokolade og sukker som trengs i gram.\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "\n", + " \n", + "```python\n", + "Hvor mange cookies vil du lage? 24\n", + "og hvor mange cookies vil du lage nÃ¥? 48\n", + "og hvor mange cookies vil du lage til slutt? 72\n", + "Antall cookies: sukker(g) sjokolade(g)\n", + "24 200.0 250.0\n", + "48 400.0 500.0\n", + "72 600.0 750.0\n", + "```\n", + "\n", + "`rjust()` og `ljust()` er nyttige funksjoner her, men for Ã¥ bruke dem mÃ¥ man først konvertere antall cookies til en streng vha. `str()`. Andre ting som kan være nyttig er `\\t` som lager et innrykk i teksten.\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### ljust() og rjust()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "`streng.ljust(width)` returnerer strengen \"left justified\" i en streng av lengde `width`. `streng.rjust(width)` gjør det sammen bare at strengen blir \"right justified\". For eksempel blir `print('hei'.rjust(15))` til:\n", + "\n", + " \n", + "```python\n", + " hei #teksten printes altsÃ¥ ut etter 12 white spaces, ettersom strengen har lengde 3\n", + "```\n", + " \n", + "Du kan lese mer om `rjust()` og `ljust()` [her](https://docs.python.org/2/library/stdtypes.html?highlight=rjust#str.rjust). " + ] + } + ], + "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.4" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Geometri.ipynb b/Ovinger/Oving01/Geometri.ipynb new file mode 100644 index 0000000..ae882d7 --- /dev/null +++ b/Ovinger/Oving01/Geometri.ipynb @@ -0,0 +1,293 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li ><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li class=\"active\"><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Geometri\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* ForstÃ¥ at kode mÃ¥ være feilfri for Ã¥ kjøre, og rette enkle syntaksfeil\n", + "\n", + "* Debugging\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2\n", + "\n", + "I denne oppgaven skal vi rette feil i koden og endre utskriftsformat.\n", + "\n", + "Norsklæreren din kunne utmerket godt lest en stil og forstÃ¥tt den pÃ¥ tross av noen smÃ¥feil, og til og med gitt god karakter hvis innholdet forøvrig var bra. Datamaskinen er ikke like tilgivende: I et Python-program mÃ¥ alt være pinlig nøyaktig, en enkelt skrivefeil kan være nok til at programmet slett ikke kjører." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Rett alle syntaksfeilene i koden under slik at koden kjører uten problemer. Hver av syntaksfeilene her kan rettes ved Ã¥ fjerne, legge til eller endre ett enkelt tegn, dvs. det er ikke nødvendig Ã¥ gjøre større endringer i koden. Ved Ã¥ kjøre programmet (velg â€Run†i menyen) og se pÃ¥ feilmeldinger vil du fÃ¥ hint om hvor hver enkelt syntaksfeil befinner seg." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-01T11:56:48.846273Z", + "start_time": "2019-07-01T11:56:48.833816Z" + } + }, + "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", + "areal = 3.14 * radius * * 2\n", + "print(\"Arealet er\", areal\n", + "h = 8\n", + "volum = aral * h\n", + "Print(\"Sylinder med høyde\", h, \": Volumet er, volum)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "NÃ¥r koden fungerer bør du fÃ¥ følgende output:\n", + "\n", + " \n", + "```python\n", + "Vi har en sirkel med radius 5\n", + "Omkretsen er 31.400000000000002\n", + "Arealet er 78.5\n", + "Sylinder med høyde 8 : Volumet er 628.0\n", + " ```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-01T11:57:35.984163Z", + "start_time": "2019-07-01T11:57:35.979863Z" + }, + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Tenk pÃ¥ parenteser, fnutter, variabelnavn og (+/,) i kombinasjon av tekst og variabelnavn." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Formatering av antall desimaler" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "At omkretsen fÃ¥r en liten hale med ...002 skyldes at flyttall ikke kan lagres helt nøyaktig i dataens minne. Derfor kan det være ønskelig med kun to desimaler. Det er en innebygd funksjon i Python som tar seg av formatering og den ser slik ut: `format(tall, formatering)`. `tall` er her tallet som skal konverteres, dvs. omkretsen i eksempelet over, mens formatering gÃ¥r ut pÃ¥ hvordan man ønsker Ã¥ formere tallet. Et eksempel er format`(2/3, ‘.3f’)` som gir `0.667`. 3-tallet indikerer at det ønskes 3 desimaler." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Endre koden fra **a)** til Ã¥ skrive ut omkretsen med kun 2 desimaler. Dvs. at linje to over skal bli endret til Omkretsen er 31.40.\n", + "\n", + "Kjøring av oppdatert kode:\n", + "\n", + " \n", + "```python\n", + "Vi har en sirkel med radius 5\n", + "Omkretsen er 31.40\n", + "Arealet er 78.5\n", + "Sylinder med høyde 8 : Volumet er 628.0\n", + " ```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "(frivillig vanskelig oppgave) I oppgave a fÃ¥r omkretsen verdien 31.400...002, hvorfor blir ikke omkretsen sin verdi lik 31.400...000?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Dobbelklikk pÃ¥ teksten under og skriv svaret ditt der:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Svar:** <dobbelklikk her\\>" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Input og variable.ipynb b/Ovinger/Oving01/Input og variable.ipynb new file mode 100644 index 0000000..b33b622 --- /dev/null +++ b/Ovinger/Oving01/Input og variable.ipynb @@ -0,0 +1,718 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li class=\"active\"><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Input og variable\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Lage programmer der brukeren gir inn tekst med input()\n", + "\n", + "* Enkel bruk av variable\n", + "\n", + "* Korrekt navngivning av variable\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2.2\n", + "\n", + "* Kap. 2.5-2.6" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "heading_collapsed": true + }, + "source": [ + "## **Tutorial del 1: funksjonen input()**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "**Hvorfor trenger vi input?** I mange programmer er det viktig Ã¥ kunne la brukeren gi input. I en nettbutikk mÃ¥ kunden kunne velge produkt, oppgi adresse det skal sendes til, betalingsmÃ¥te, osv.\n", + "\n", + "Input kan gis pÃ¥ mange mÃ¥ter, f.eks. via berøringsskjermer, mus, eller med stemme. Her skal du lære den mÃ¥ten som er lettest Ã¥ programmere, nemlig input av tekst fra tastatur.\n", + "Dette gjøres i Python ved hjelp av funksjonen `input()`. I likhet med `print()` er dette en funksjon i Pythons standardbibliotek.\n", + "Kjør koden under, sÃ¥ ser du noen viktige forskjeller pÃ¥ print() og input()\n", + "\n", + "**print() og input()**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(\"print() skriver tekst ut pÃ¥ skjerm og skifter linje\")\n", + "input(\"input() venter at du skriver noe og slÃ¥r Enter: \")\n", + "print(\"print() kan ha\", \"mange tekster\", \"skilt med komma\")\n", + "input(\"input() tillater kun en tekst! OK? \")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Den ene teksten `input()` kan inneholde, er den sÃ¥kalte **ledeteksten** som skal forklare brukeren hva slags input som forventes.\n", + "Ledeteksten bør være presis sÃ¥ brukeren vet hva slags opplysning det er spurt om. \n", + "F.eks. er \"Oppgi vekt i kg: \" en bedre ledetekst enn bare \"Oppgi vekt: \", som igjen er mye bedre enn \"Skriv et tall: \" eller \"Gi input: \".\n", + "Blankt tegn bakerst i ledeteksten er ofte en fordel, ellers kommer brukerens input kloss i ledeteksten. \n", + "I det lille eksemplet over brukte vi ikke resultatet fra `input()`, men vanligvis ber vi brukeren om data fordi dataen trengs til noe.\n", + "For noe litt mer nyttig, anta at vi ønsker Ã¥ spørre brukeren om navn - og deretter benytte dette navnet i en pÃ¥følgende print-setning, sÃ¥ vi fÃ¥r en liten dialog mellom bruker og maskin:\n", + "\n", + "```\n", + "Hei, hva heter du? Nina \n", + "Nina - det var et fint navn. \n", + ">>>\n", + "```\n", + "\n", + "Her spør maskinen \"Hei, hva heter du?\", brukeren svarer \"Nina\" og maskinen skriver \"Nina - det var et fint navn.\" \n", + "Denne lille dialogen kan oppnÃ¥s med følgende kodelinje:\n", + "\n", + "**Enkel dialog med bruker:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(input(\"Hei, hva heter du? \"), \"- det var et fint navn.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Denne koden funker fordi parenteser alltid utføres innenfra og ut. Print-setningen kan ikke kjøres før man vet hva som skal printes,\n", + "Derfor mÃ¥ input-setningen kjøres først, den gir som resultat det navnet brukeren skriver inn (f.eks. Nina). \n", + "Dette navnet skrives deretter ut sammen med den pÃ¥følgende teksten \"- det var et fint navn.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a) Simpel bruk av input direkte i print()-setning" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Ta utgangspunkt i tutorial-koden nedenfor (og kjør den gjerne en gang for Ã¥ se hvordan den virker; hvis du ikke forstÃ¥r hvordan, les først tutorial):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(input(\"Hei, hva heter du? \"), \"- det var et fint navn.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Endre tekststrengene i denne kodelinjen sÃ¥ dialogen med brukeren i stedet blir som vist nedenfor. Maskinen skal alltid gjenta det navnet brukeren skrev, Nina er bare et eksempel.\n", + "```\n", + "Navn? Nina \n", + "Nina - kult navn!\n", + "```\n", + "Legg sÃ¥ til en ny, lignende kodelinje som spør om brukerens favorittfag. Ved ferdig program skal dialogen se ut som nedenfor. \n", + "Utskriften til programmet skal selvsagt tilpasse seg det brukeren skriver inn som navn og favorittfag.\n", + "```\n", + "Navn? Per\n", + "Per - kult navn! \n", + "favorittfag? Ex.phil. \n", + "Ex.phil. - interessant!\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## Tutorial del 2: variable - grunnleggende intro" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Hvorfor trenger vi variable? Poenget med variable er Ã¥ **huske data underveis** i utførelsen av et program.\n", + "\n", + "Variable er derfor et sentralt konsept i programmering, ikke bare i Python men uansett hva slags sprÃ¥k man programmerer i.\n", + "\n", + "Uten variable støter vi fort pÃ¥ en rekke problemer fordi programmet vÃ¥rt ikke kan huske noe, f.eks. at\n", + "\n", + "* vi mÃ¥ be brukeren gi inn opplysninger pÃ¥ nytt som brukeren har gitt tidligere\n", + "* vi mÃ¥ regne ut pÃ¥ nytt data vi allerede har regnet ut tidligere\n", + "\n", + "Dette sløser tid og strøm og vil i mange tilfeller gjøre programmet fullstendig ubrukelig.\n", + "\n", + "I det lille eksempelprogrammet i tutorial del 1 klarte vi oss uten noen variabel, fordi navnet vi innhentet fra bruker kun ble benyttet én gang, og dette skjedde umiddelbart etter at det var tastet inn.\n", + "\n", + " \n", + "```python \n", + "print(input(\"Hei, hva heter du? \"), \"- det var et fint navn.\") \n", + "```\n", + "\n", + " \n", + "```\n", + "Hei, hva heter du? Nina \n", + "Nina - det var et fint navn. \n", + ">>>>\n", + "```\n", + "\n", + "Men ofte skal samme data brukes flere ganger, og etter at vi har gjort andre ting i mellomtiden. Da mÃ¥ data huskes i variable. Anta at vi ønsker en bare litt mer avansert dialog med brukeren:\n", + "\n", + " \n", + "```\n", + "Hei, hva heter du? Nina \n", + "Nina - det var et fint navn. \n", + "Lykke til med ITGK, Nina! \n", + ">>>>\n", + "```\n", + "\n", + "Her vil vi bruke det innleste navnet i to pÃ¥følgende print-setninger. Hvis vi prøver samme triks som tidligere med Ã¥ sette input-setning direkte i print-setning, fÃ¥r vi koden:\n", + "\n", + " \n", + "```python\n", + "print(input(\"Hei, hva heter du? \"), \"- det var et fint navn.\")\n", + "print(\"Lykke til med ITGK,\", input(\"Hei, hva heter du?\")) \n", + "```\n", + "\n", + "Kjøring viser hva som er dumt med denne koden, nemlig at spørsmÃ¥let \"Hei, hva heter du?\" kommer to ganger.\n", + "\n", + "\n", + "```\n", + "Hei, hva heter du? Nina \n", + "Nina - det var et fint navn. \n", + "Hei, hva heter du? Nina \n", + "Lykke til med ITGK, Nina\n", + "```\n", + "\n", + "Ikke noe katastrofalt problem her, men tenk deg et program hvor samme opplysning skal brukes 100 ganger eller mer i en kritisk arbeidsoppgave som haster.\n", + "\n", + "Kan vi løse det pÃ¥ en bedre mÃ¥te? JA - med en variabel for Ã¥ huske navnet. Koden blir da" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "navn = input(\"Hei, hva heter du?\" )\n", + "print(navn, \"- det var et fint navn.\")\n", + "print(\"Lykke til med ITGK,\", navn)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Dette programmet kan forklares som følger:\n", + "\n", + "* linje 1, til høyre for `=` : bruker `input()` for Ã¥ spørre hva brukeren heter\n", + "* linje 1, til venstre for `=`: oppretter en variabel som heter `navn`.\n", + "* linje 1, tegnet `=`. Dette er **tilordningsoperatoren**. Betyr at verdien av uttrykket pÃ¥ høyre side, resultatet av `input()`, blir husket i variabelen kalt `navn`. Hvis brukeren skriver Nina, vil variabelen `navn` da inneholde strengen `'Nina'`\n", + "* linje 2, variabelen `navn` brukes fremst i print-setningen. Merk at variabelnavnet **ikke** skal ha fnutter rundt seg. Med fnuttter ville vi i stedet ha skrevet \"navn - det var et fint navn\". Ordet navn som stÃ¥r bakerst i setningen \"det var et fint navn.\" er ikke variabelen, her er ordet navn bare del av en tekststreng.\n", + "* linje 3, variabelen `navn` brukes bakerst i print-setningen. Igjen uten fnutter; det er ikke ordet navn vi ønsker Ã¥ skrive, men den tekststrengen som variabelen `navn` inneholder (f.eks. Nina)\n", + "\n", + "Ved hjelp av variabelen som her ble kalt navn, unngÃ¥r vi Ã¥ stille samme spørsmÃ¥l to ganger. Vi spør bare én gang, i starten av programmet, og husker da opplysningen brukeren gir oss ved Ã¥ putte den inn i en variabel.\n", + "\n", + "Videre i programmet kan vi benytte denne variabelen hver gang vi trenger navnet - enten det som her var bare to ganger, eller om det hadde vært flere." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b) Huske input i variable" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Kjør koden under for Ã¥ se hvordan den virker. Som du vil se, plager den brukeren med Ã¥ gjenta begge spørsmÃ¥lene to ganger.\n", + "\n", + "Forbedre koden ved Ã¥ introdusere en variabel for navn og en annen variabel for favorittfag, slik at brukeren fÃ¥r hvert av spørsmÃ¥lene bare en gang (dvs. spørres kun en gang om navn og kun en gang om favorittfag).\n", + "\n", + "Hvis du er i tvil om hvordan du skal angripe problemet, se lignende eksempel i tutorial like over." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Hei,\", input(\"Navn? \"))\n", + "print(input(\"Favorittfag? \"), \"- interessant!\")\n", + "print(\"Ha en fin dag,\", input(\"Navn? \"))\n", + "print(\"- og lykke til med\", input(\"Favorittfag? \"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Hvis du fÃ¥r til Ã¥ bruke de to variablene som tenkt, skal kjøringen av det forbedrede programmet se slik ut (men ogsÃ¥ funke om brukeren skriver inn noe annet enn Ada pÃ¥ spørsmÃ¥let Navn? og noe annet enn ITGK pÃ¥ Favorittfag?)\n", + "\n", + "```\n", + "Navn? Ada \n", + "Hei, Ada \n", + "Favorittfag? ITGK \n", + "ITGK - interessant! \n", + "Ha en fin dag, Ada \n", + "- og lykke til med ITGK\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## Tutorial del 3 - bruk av variable i beregninger" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Variable brukes ikke bare i sammenheng med `input()`, men i alle mulige slags program. I matematiske beregninger skal resultatet av en beregning ofte brukes videre i nye beregninger. Da mÃ¥ disse tallene huskes i variable. \n", + "Koden under viser samme eksempel gjort pÃ¥ to mÃ¥ter, nemlig utregning av areal for en sirkel, samt volum for en sylinder som har denne sirkelen som grunnflate. Versjon 1 er gjort uten variable, mens Versjon 2 bruker variable.\n", + "\n", + "**Sirkel og sylinder**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "import math\n", + " \n", + "# VERSJON 1, uten variable\n", + "print(\"Areal av sirkelen:\", math.pi * 5.4**2)\n", + "print(\"Volum av sylinderen:\", math.pi * 5.4**2 * 7.9)\n", + " \n", + "print()\n", + " \n", + "# VERSJON 2, med variable\n", + "r = 5.4 # radius for en sirkel\n", + "A_sirkel = math.pi * r**2\n", + "print(\"Areal av sirkelen:\", A_sirkel)\n", + "h = 7.9 # høyde sylinder hvor sirkelen er grunnflate\n", + "V_syl = A_sirkel * h\n", + "print(\"Volum av sylinderen:\", V_syl)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Hvis du kjører koden, vil du se at begge gir samme resultat. Hva er da forskjellen?\n", + "\n", + "* Versjon 2 er vesentlig lenger (6 kodelinjer, mot bare 2) fordi det brukes ekstra linjer pÃ¥ variable. Lenger kode er en mulig ulempe. MEN:\n", + "* Formlene i Versjon 2 er lettere Ã¥ forstÃ¥ fordi det er intuitive navn som `r`, `h`, `A_sirkel` heller enn bare tall direkte.\n", + "* Koden i V2 er mer fleksibel for Ã¥ kjapt endre verdier. Hvis radius skal byttes fra 5.4 til 6.2 mÃ¥ dette tallet bare endres ett sted i V2, mens flere i V1.\n", + "* Versjon 1 utfører **5 operasjoner** av type `*` og `**`, mens Versjon 2 bare utfører ***3***. Dette fordi Versjon 2 husker arealet i A_sirkel og deretter kan bruke dette, mens Versjon 1 mÃ¥ regne ut `math.pi * 5.4**2` pÃ¥ nytt.\n", + "**Med færre multiplikasjoner vil VERSJON 2 spare bÃ¥de strøm og tid i forhold til VERSJON 1, dvs. koden utfører mindre jobb og gÃ¥r raskere selv om det er flere kodelinjer.**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c) Bruke variable i beregninger " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Nedenfor stÃ¥r et program hvor vi regner ut omkrets og areal for en sirkel etter de velkjente formlene O=2Ï€r og A = Ï€r2. Bortsett fra de innebygde konstantene `math.pi` og `math.tau` (=2Ï€) bruker vi ingen variable. Dette gjør at nÃ¥r vi skal regne ut arealet av en sylinder hvor sirkelen er grunnflate, mÃ¥ vi gjøre om igjen flere beregninger som vi allerede har gjort tidligere.\n", + "\n", + "Arealet av sylinderen med høyde h vil være `mOmkrets_sirkel * h + 2 * Areal_sirkel`, hvor det første leddet er arealet av sylinderveggen og det siste leddet er topp- og bunnlokket.\n", + "\n", + "***Oppgave: Endre koden ved Ã¥ tilordne og deretter bruke variable for radiusen, høyden, sirkelens omkrets og areal, slik at programmet unngÃ¥r Ã¥ gjøre pÃ¥ nytt beregninger som allerede er gjort før.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-01T10:54:16.358742Z", + "start_time": "2019-07-01T10:54:16.351684Z" + } + }, + "outputs": [], + "source": [ + "import math\n", + " \n", + "print(\"Har en sirkel med radius\", 5.4, \"som er grunnflate i en sylinder med høyde\", 7.9)\n", + "print(\"Omkrets av sirkelen:\", math.tau * 5.4) #tau er det samme som 2 pi\n", + "print(\"Areal av sirkelen:\", math.pi * 5.4**2)\n", + "print(\"Areal av sylinderen:\", math.tau * 5.4 * 7.9 + 2 * math.pi * 5.4 ** 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Resultatet av kjøring av koden skal være uendret, dvs utskrift skal bli som vist nedenfor (men hvis du vil, kan du gjerne i tillegg avrunde svarene til én desimal).\n", + "\n", + " \n", + "```\n", + "Har en sirkel med radius 5.4 som er grunnflate i en sylinder med høyde 7.9\n", + "Omkrets av sirkelen: 33.929200658769766\n", + "Areal av sirkelen: 91.60884177867838\n", + "Areal av sylinderen: 451.25836876163794\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## Tutorial del 4: Navngiving av variable" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "En variabel er et navn som representerer en verdi som lagres i datamaskinens minne. Den vanligste mÃ¥ten Ã¥ opprette en variabel pÃ¥ er ved en tilordningssetning:\n", + "\n", + "`variable = expression`\n", + "\n", + "I dette tilfellet er variable navnet til variabelen, mens expression er verdien. Noen regler for slike tilordningssetninger:\n", + "\n", + "* variabelen som opprettes skal alltid stÃ¥ pÃ¥ venstre side av uttrykket, og venstre side skal kun inneholde denne variabelen, ikke noe annet\n", + "* høyde side kan alt fra en enkelt verdi (f.eks. et tall) eller en enkelt variabel, til mer sammensatte uttrykk som mÃ¥ beregnes. Hvis høyre side inneholder variable, mÃ¥ dette være variable som allerede er opprettet tidligere i koden.\n", + "* variabelnavnet mÃ¥ tilfredsstille følgende regler:\n", + " * ord som er reserverte ord i Python, f.eks. `if`, `def`, eller som er navn pÃ¥ standardfunksjoner som `print`, `min`, `max`, ... bør unngÃ¥s som varibelnavn\n", + " * variabelnavn mÃ¥ begynne med en bokstav eller tegnet _ (understrek)\n", + " * kan ellers inneholde bokstaver, tall og understrek, dvs. kan f.eks. ikke inneholde blanke tegn.\n", + "* Python skiller mellom smÃ¥ og store bokstaver, sÃ¥ `Areal` og `areal` vil være to ulike variable.\n", + "\n", + "Det anbefales Ã¥ lage variabelnavn som er intuitivt forstÃ¥elige, f.eks. er `areal` et bedre navn enn `x` pÃ¥ en variabel som inneholder et areal. Sammensatte variabelnavn skrives typisk som pukkelord (eng.: camelCase) eller med understrek for Ã¥ vise hvor ett ord slutter og det neste begynner, f.eks. `startTime`, `pricePerLiter` eller `start_time`, `price_per_liter`, siden direkte sammensetning uten noe som helst skille vil gi lange variabelnavn som blir vanskelige Ã¥ lese.\n", + "\n", + "Kodeblokka under viser eksempler pÃ¥ variable som funker og ikke funker:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Eksempel pÃ¥ tilordningssetninger som funker\n", + "pokemon_name = \"Tyranitar\"\n", + "MaxCP = 3670\n", + "antall = 3\n", + "antall = antall + 1 # høyre side regnes ut som 3+1, sÃ¥ 4 blir ny verdi i variabelen antall\n", + "resists_fighting = False\n", + "level42 = \"to be done\" # tall er OK i variabelnavn unntatt helt fremst\n", + " \n", + "# Eksempel pÃ¥ tilordninger som IKKE funker\n", + "1 = antall # variabelen mÃ¥ stÃ¥ pÃ¥ venstre side\n", + "antall + 1 = antall # og v.s. kan KUN inneholde et variabelnavn, ikke et større uttrykk\n", + "10kamp = \"gøy\" # variabel kan ikke begynne med tall, kun bokstav eller _\n", + "antall = 3 # denne er OK, men se neste linje\n", + "antall = Antall + 1 # Python skiller mellom store og smÃ¥ bokstaver, Antall vil være en annen\n", + " # variabel og gir NameError her fordi den ikke er opprettet i en tidligere setning\n", + "happy hour = 20 # navn kan ikke inneholde mellomrom, burde vært happy_hour eller happyHour\n", + "alkohol% = 4.5 # % kan ikke brukes i variabelnavn (betyr modulo). Samme gjelder andre spesialtegn,\n", + " # hold deg til vanlige bokstaver og tall" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## d) Variabelnavn" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Prøv Ã¥ kjør koden under. Som du vil se, funker den ikke pga. diverse feil med variabelnavn og tilordningssetninger. Fiks feilene sÃ¥ programmet kjører som det skal." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "4navn = \"Per\"\n", + "ideal alder = 42\n", + "37 = kundensAlder\n", + "differanse = ideal alder - kundensAlder\n", + "print(4navn, \"er\", Differanse, \"Ã¥r unna idealalderen\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## e) Variabel-program" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et program i kodeblokka under som først lagrer navnet ditt i en variabel og alderen din i en annen variabel, for sÃ¥ Ã¥ printe det ut med `print()`-funksjonen. Her trenger du altsÃ¥ ikke Ã¥ bruke `input()`-funksjonen!\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "```\n", + "Jeg heter Bob Bernt, og er 46 Ã¥r.\n", + "```\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Intro til jupyter.ipynb b/Ovinger/Oving01/Intro til jupyter.ipynb new file mode 100644 index 0000000..82dc916 --- /dev/null +++ b/Ovinger/Oving01/Intro til jupyter.ipynb @@ -0,0 +1,356 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li class=\"active\"><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Introduksjon til Jupyter\n", + "\n", + "Hei, og velkommen til Jupyter, en annen mÃ¥te Ã¥ skrive kode pÃ¥! Jupyter er et system som lar deg lage dokumenter som inneholder bÃ¥de tekst og kode pÃ¥ en gang. Det fine her er at du kan kjøre koden i dokumentet og se resultatet umiddelbart. Dette kan du prøve ut nÃ¥. \n", + "\n", + "**oppgave a)** Klikk pÃ¥ kodeblokken under og trykk `ctrl + enter` pÃ¥ tastaturet for Ã¥ kjøre koden. (Det er ogsÃ¥ mulig Ã¥ klikke pÃ¥ kodeblokken for sÃ¥ Ã¥ klikke `run` i menyen pÃ¥ toppen)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Velkommen til jupyter\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Som du ser kommer resultatet av koden ut rett nedenfor kodeblokken. Dette er veldig praktisk og du kan kjøre koden sÃ¥ mange ganger du vil! Hvis du trykker pÃ¥ `ctrl + enter` i kodeblokken over en gang til vil du se at tallet til venstre for kodeblokken øker. Dette tallet brukes bare som referanse og er ikke noe du trenger Ã¥ tenke pÃ¥ til vanlig.\n", + "\n", + "Alle kodeblokker i et dokument kan endres pÃ¥, og dette oppfordres pÃ¥ det sterkeste! Det er mye god læring i Ã¥ endre kode, tenke seg til hva som skal skje og sjekke om dette faktisk skjer. Du kan for eksempel prøve Ã¥ kjøre programmet under med `ctrl + enter`, gjøre et par endringer og sjekke om den nye versjonen din gjør det du hadde tenkt." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "**Oppgave b)** Endre første linje i koden under til `print(\"Dette er mitt første Jupyter-program\")`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Dette er et program i jupyter\") #endre denne linjen\n", + "print(\"NÃ¥ skal programmet stille et spørsmÃ¥l\")\n", + "navn = input(\"Hva heter du? \")\n", + "print(\"Hei\", navn)\n", + "\n", + "alder = int(input(\"Hvor gammel er du? \")) # Her mÃ¥ du kun skrive et tall\n", + "print(\"Da er du\", alder + 5, \"Ã¥r gammel om 5 Ã¥r\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "# Variabler mellom kodeblokker" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Noe som er verdt Ã¥ merke seg er at data kan eksistere mellom kodeblokkene i en Jupyter Notebook. La oss se pÃ¥ et eksempel. Trykk `ctrl + enter` i kodeblokken nedenfor slik at den kjører." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "message = \"Wow! Dette var kult!\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Kjør sÃ¥ kodeblokken nedenfor:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(message)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Som du ser fÃ¥r vi printet ut verdien av `message` selv om `message` ikke er definert i den nederste kodeblokken. Dette kan være veldig praktisk, men kan noen ganger være forvirrende. Prøv Ã¥ endre pÃ¥ verdien til `message` (\"Wow! Dette var kult!\") i den første kodeblokken, for sÃ¥ Ã¥ trykke `ctrl + enter` i den andre blokken.\n", + "\n", + "Som du ser er ikke `message` blitt oppdatert. Dette er fordi **vi er nødt til Ã¥ kjøre kodeblokken med `message =` for at `message` skal bli oppdatert**. \n", + "\n", + "Prøv nÃ¥ Ã¥ kjøre kodeblokken med `message =` igjen for sÃ¥ Ã¥ kjøre blokken med `print` pÃ¥ nytt. Da burde riktig melding printes.\n", + "\n", + "**Oppgave c)** Endre message til `\"Wow, Jupyter er kult!\"`, og print det ut i blokken under.\n", + "\n", + "Dette gjelder ikke bare for *variabler*, men ogsÃ¥ for *funksjoner*, som dere skal lære Ã¥ bruke etterhvert. Hvis du skriver en funksjon og ønsker Ã¥ bruke den i en annen kodeblokk mÃ¥ du kjøre kodeblokken hver gang funksjonen endres akkurat som med variabler." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "# Restarting dersom problemer skulle oppstÃ¥" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Hvis du ønsker Ã¥ fjerne all output fra dokumentet og *starte pÃ¥ nytt* kan du trykke pÃ¥ `Kernel -> Restart and clear output` i menyen pÃ¥ toppen. Det vil komme opp en boks med en skummel rød knapp, men dette gÃ¥r helt fint. Ã… kunne restarte kan ogsÃ¥ være nyttig hvis dokumentet henger seg opp. Dette skal vi se et eksempel pÃ¥ nÃ¥.\n", + "\n", + "Kjør kodeblokken under to ganger uten Ã¥ taste inn noe i inputfeltet som dukker opp (du mÃ¥ trykke pÃ¥ blokken igjen for Ã¥ kjøre den andre gang)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "navn = input(\"Hva heter du?\")\n", + "print(\"Hei,\", navn)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Dette var veldig uheldig. NÃ¥ skjer det ingenting og vi kan heller ikke kjøre andre kodeblokker i dokumentet :(\n", + "\n", + "NÃ¥r en kodeblokk venter pÃ¥ input kan man ikke kjøre andre kodeblokker, sÃ¥ hvis man da prøver Ã¥ kjøre andre kodeblokker vil disse bli satt pÃ¥ vent.\n", + "\n", + "NÃ¥ ser vi at det stÃ¥r `In [*]` ved flere av blokkene vÃ¥re, dette betyr at de venter pÃ¥ andre blokker før de selv kjører, i vÃ¥rt tilfelle kjørte vi input-blokken pÃ¥ nytt, uten Ã¥ gi inn noe til forrige kjøring av blokken. Programmet venter fortsatt pÃ¥ input til forrige kjøring av blokken, selv om feltet er borte, som ikke er helt optimalt! Om du ikke forstÃ¥r helt hva som skjer her er ikke det noe farlig. For Ã¥ komme oss ut av dette kan vi restarte med `Kernel -> Restart and clear output` i toppmenyen. **Merk: Dette endrer ikke pÃ¥ koden du selv har skrevet.**\n", + "\n", + "**Oppgave d)** Restart notebooken med kommandoen beskrevet over." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "# Endring av tekst" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Det er ogsÃ¥ mulig Ã¥ endre pÃ¥ teksten i et dokument ved Ã¥ dobbelklikke pÃ¥ en tekstboks, men dette er noe du sjeldent trenger Ã¥ gjøre. For Ã¥ gjøre teksten «vanlig» igjen etter at du har endret trykker du her ogsÃ¥ pÃ¥ `ctrl + enter`.\n", + "\n", + "Jupyter bruker noe som heter markdown til formatering av tekst. Dette er ikke pensum, men hvis du ønsker Ã¥ se litt pÃ¥ det finnes det en ganske fin oversikt (pÃ¥ engelsk) [her](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet?fbclid=IwAR2PRFaYr3YAPnKBzNRpgaumRufU4WHbT6Xd-0v9EsJwxtgqxOyzLluvPOA#tables). Det er ogsÃ¥ mulig Ã¥ legge til LaTeX (et tekst-format til Ã¥ lage fine matteuttrykk) i jupyter-tekstbokser. Dette er heller ikke pensum.\n", + "\n", + "Hvis vi skal be dere om et tekst-svar vil vi dere se noe sÃ¥nt som under. Her kan dere selv fjerne det som stÃ¥r inne i krokodilletegnene.\n", + "\n", + "**Oppgave e)** Endre tekstboksen under til `ITGK er gøy`. *Merk: I en tekstboks trenger man ikke skrive python-kode*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Ditt svar:** <dobbelklikk her for Ã¥ svare\\>" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "# En advarsel" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Jupyter er generelt ikke sÃ¥ glad i at du har samme dokument Ã¥pnet i flere faner. Hvis du har dette er det mulig at endringene du gjør i den ene fanen overskriver endringene du gjør i en annen fane, noe som kan være uheldig. Sørg derfor for at du aldri har mer enn en fane Ã¥pnet med det samme dokumentet." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "# Til slutt" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Det er mange muligheter som ligger inne i jupyter, og vi skal ikke bruke alt i dette kurset. Det er ingenting som hindrer dere fra i Ã¥ finne andre jupyter-notatbøker pÃ¥ nettet selv hvis dere ønsker mer utfordring eller Ã¥ utforske hva som er mulig.\n", + "\n", + "**Lykke til videre med jupyter!**" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/James Bond and Operation round().ipynb b/Ovinger/Oving01/James Bond and Operation round().ipynb new file mode 100644 index 0000000..38b12bf --- /dev/null +++ b/Ovinger/Oving01/James Bond and Operation round().ipynb @@ -0,0 +1,256 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li ><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li ><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li ><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li ><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li ><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li class=\"active\"><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# James Bond and Operation round()\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Bruk av heltallsdivisjon og modulo, konvertering av data\n", + "\n", + "* Avrunding\n", + "* (særlig c) Oppdeling / hÃ¥ndtering av strenger\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2.3\n", + "\n", + "* Kap. 3.1\n", + "\n", + "* Kap. 4.2\n", + "\n", + "* Kap. 8.2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a) Kjøpmannsavrunding" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "\"Kjøpmannsavrunding\" innebærer at man alltid runder opp nÃ¥r et tall er midt mellom to runde tall. F.eks. at 2.5 rundes til 3 og 3.5 til 4 hvis vi skal ha hele tall, og 2.25 likeledes rundes til 2.3 hvis vi skal ha en desimal. Som forklart i tutorial i oppgaven Tallkonvertering (tidligere i denne samme øvingen) bruker Pythons funksjon `round()` **ikke** kjøpmannsavrunding, men runder i stedet i partallsretning i situasjoner hvor tallet er midt mellom to alternativer. Dvs., 2.5 vil da rundes ned til 2 fordi 2 er partall, mens 3.5 rundes opp til 4. Det er fornuftige grunner til dette (unngÃ¥ systematiske feil som man fÃ¥r hvis man alltid runder opp). I noen situasjoner - f.eks. hvis man er kjøpmann - kan det imidlertid være at man faktisk ønsker kjøpmannsavrunding.\n", + "\n", + "Oppgaven din her er Ã¥ lage et program som fÃ¥r til kjøpmannsavrunding. Det skal be bruker om Ã¥ skrive inn et desimaltall, samt ønsket antall desimaler det skal avrundes til - og sÃ¥ foreta denne avrundingen. Dette mÃ¥ da gjøres pÃ¥ annet vis enn Ã¥ bruke Pythons `round()`-funksjon, siden du f.eks. skal runde 2.5 til 3 (hvis null desimaler) og 2.25 til 2.3 (hvis en desimal) mens `round()` ville runde nedover her. Et par eksempler pÃ¥ kjøring:\n", + "\n", + " \n", + "```python\n", + "Gi inn et desimaltall: 2.5 \n", + "Antall desimaler i avrunding: 0 \n", + "Avrundet til 0 desimaler: 3\n", + "```\n", + " \n", + "```python\n", + "Gi inn et desimaltall: 2.25 \n", + "Antall desimaler i avrunding: 1 \n", + "Avrundet til 1 desimal: 2.3\n", + " ```\n", + " \n", + "```python\n", + "Gi inn et desimaltall: 2500.0 \n", + "Antall desimaler i avrunding: -3 \n", + "Avrundet til -3 desimaler: 3000 \n", + "```\n", + "\n", + "Som eksemplet viser skal det ogsÃ¥ være mulig Ã¥ gi inn negativt antall desimaler for Ã¥ fÃ¥ grovere avrunding enn nærmeste heltall. OgsÃ¥ da med kjøpmannsavrunding (dvs. 2500 blir 3000, ikke 2000).\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b) Avrunding som unngÃ¥r unøyaktig tallrepresentasjon" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Selv hvis vi er fornøyde med IEEE-standarden for avrunding (heller enn kjøpmannsavrunding), kan `round()` av og til gi overraskende resultater. F.eks.\n", + "\n", + "* `round(2.50000000000000000001)` gir 2, selv om tallet er litt nærmere 3\n", + "* `round(2.15, 1)` gir 2.1, selv om regelen om Ã¥ gÃ¥ mot partall skulle tilsi 2.2\n", + "\n", + "Begge disse og andre lignende tilfeller skyldes egentlig ikke noen feil ved `round()`-funksjonen, men problemer med selve representasjonen av tall i det binære systemet.\n", + "\n", + "2.50000000000000000001 lar seg ikke representere eksakt i maskinen, sÃ¥ den tar det nærmeste den fÃ¥r til, som her blir 2.5 - og dermed vipper `round()` ned.\n", + "\n", + "2.15 lar seg heller ikke representere eksakt (i det binære tallsystemet, selv om det kun trengs tre siffer i titallssystemet), det nærmeste maskinen fÃ¥r til er 2.14999999999999999999. Dermed ligger tallet ikke lenger midt imellom men litt nærmere 2.1, sÃ¥ avrunding vipper ned.\n", + "\n", + "Oppgaven her er Ã¥ lage et program som klarer Ã¥ avrunde korrekt selv med slike tall som dette. For Ã¥ klare oss mest mulig med det som er undervist av pensum hittil, kan heltallsdelen og desimaldelen til tallet vi skal behandle, leses inn hver for seg. Eksempel pÃ¥ kjøring blir da:\n", + "\n", + " \n", + "```\n", + "Oppgi heltallsdelen av tallet (det foran punktum): 2\n", + "Oppgi desimaldelen av tallet (det bak punktum): 5\n", + "Oppgi ønsket antall desimaler i avrunding: 0\n", + "2.5 avrundet til 0 desimaler blir 2\n", + "\n", + "Oppgi heltallsdelen av tallet (det foran punktum): 2\n", + "Oppgi desimaldelen av tallet (det bak punktum): 15\n", + "Oppgi ønsket antall desimaler i avrunding: 1\n", + "2.15 avrundet til 1 desimal blir 2.2\n", + "\n", + "Oppgi heltallsdelen av tallet (det foran punktum): 2\n", + "Oppgi desimaldelen av tallet (det bak punktum): 500000000000000000001\n", + "Oppgi ønsket antall desimaler i avrunding: 0\n", + "2.500000000000000000001 avrundet til 0 desimaler blir 3\n", + "```\n", + "\n", + "Denne oppgaven gÃ¥r delvis utenfor det som undervist hittil i emnet.\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c) StrenghÃ¥ndtering" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et program hvor brukeren skriver inn navnet sitt fra tastaturet etter ledeteksten \"Jeg heter:\", og la maskinen svare med setningen The name is... som vist i boksen under.\n", + "\n", + " \n", + "```\n", + "Jeg heter: James Bond\n", + "The name is Bond, James Bond\n", + "```\n", + "\n", + "Her vil du mest sannsynlig mÃ¥tte benytte deg av programmeringsmekanismer som ikke er forelest ennÃ¥, enten if-setninger, løkker og strengindeksering, eller strengmetoder som `split()` med tilhørende listebehandling. Hvis du vil gjøre det ekstra vanskelig for deg selv (**VALGFRITT**, ikke nødvendig for Ã¥ fÃ¥ godkjent), prøv Ã¥ lage et program som ogsÃ¥ funker for personer med flere enn to navn (f.eks. The name is Hopper, Grace Murray Hopper), men som tar hensyn til at preposisjoner som Von, Van, De, Di er del av etternavnet (f.eks. The name is Von Neumann, John Von Neumann; The name is De Morgan, Augustus De Morgan... dog likevel bare hvis dette kommer i midten, det mÃ¥ fortsatt bli The name is Morrison, Van Morrison). Dessuten, hvis et navn slutter med Jr, Sr eller romertall, er det ikke det siste ordet som er etternavnet men det nest siste: The name is Northug, Petter Northug Jr; The name is Huxtable, Henry Huxtable III.\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Jeg elsker ITGK!.ipynb b/Ovinger/Oving01/Jeg elsker ITGK!.ipynb new file mode 100644 index 0000000..6262d5f --- /dev/null +++ b/Ovinger/Oving01/Jeg elsker ITGK!.ipynb @@ -0,0 +1,527 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + }, + "solution": "hidden" + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li class=\"active\"><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Jeg elsker ITGK!\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Printe tekst og tall til konsoll\n", + "\n", + "* Skrive et enkelt program\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 1.5\n", + "\n", + "* Kap. 2.2-2.4" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "### print() - tutorial del 1:\n", + "Les gjerne denne før du gjør de neste oppgavene, særlig hvis du ikke kan programmere fra før." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Programmer som skal brukes av mennesker, mÃ¥ ofte vise informasjon pÃ¥ skjermen. En enkel mÃ¥te for dette i Python er funksjonen print().\n", + "\n", + "NedenstÃ¥ende kode gir en mest mulig selvforklarende intro til print-setningen.\n", + "\n", + "**Trykk control + enter med cellen under aktiv for Ã¥ kjøre koden, prøv eventuelt Ã¥ endre pÃ¥ noe og se hva som skjer!**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-25T13:22:53.510622Z", + "start_time": "2019-06-25T13:22:53.493007Z" + }, + "hidden": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "print('Det som skal ut pÃ¥ skjermen, settes inni parentesen bak print.')\n", + "print('Tekst mÃ¥ omsluttes med fnutter (apostrof)')\n", + "print(\"eller med dobbelfnutter (hermetegn).\")\n", + "print(\"Tall trenger ikke fnutter rundt seg:\")\n", + "print(42)\n", + "print('En blank linje kan printes med tom parentes:')\n", + "print()\n", + "print('Du kan printe flere ting', 'med komma mellom:', 5, 6)\n", + "print('Desimaltall mÃ¥ skrives med punktum i Python:', 3.14)\n", + "print('Hvis du bruker komma, tolkes det som to adskilte tall:', 3,14)\n", + "print('Komma inni en tekst kommer ut pÃ¥ skjermen: ,,,,,', 'komma', 'mellom', 'tekster gjør ikke det.')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true + }, + "source": [ + "Som forklaringen sier, er det **to alternative tegn** som kan brukes for Ã¥ omslutte tekststrenger i Python:\n", + "\n", + "* Apostrof. PÃ¥ norsk PC-tastatur er den mellom Æ og Enter. PÃ¥ Mac pÃ¥ tasten til venstre for tallet 1.\n", + "* Hermetegn - bÃ¥de pÃ¥ PC og Mac pÃ¥ samme tast som tallet 2.\n", + "\n", + "Om du bruker apostrof eller hermetegn, er et spørsmÃ¥l om smak og behag - bare du er konsekvent og bruker samme tegn foran og bak tekststrengen. I visse situasjoner vil ett av alternativene være Ã¥ foretrekke, som forklart i del 2 av tutorialen.\n", + "\n", + "Hvis du ved et uhell fÃ¥r feil tegn, som bøyd apostrof eller bøyd hermetegn i stedet for rett (nøytral) apostrof og rett (nøytralt) hermetegn som det er snakk om her, vil koden din ikke funke. Hvis du f.eks. skriver Python-kode i Word, kan Word automatisk omforme hermetegn til bøyde hermetegn (som ser forskjellig ut avhengig av om det stÃ¥r før eller etter teksten som hermes). Dette er en av mange gode grunner til Ã¥ ikke skrive Python-kode i Word - bruk en dedikert kode-editor som Jupyter, Spyder eller PyCharm." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + }, + "solution": "hidden" + }, + "source": [ + "### a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "**Lag et program som gir følgende utskrift til skjermen:**\n", + "\n", + "```\n", + "Jeg elsker ITGK!\n", + "```\n", + "\n", + "***Skriv koden din i boksen under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### b)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et program som bruker fire print-setninger for Ã¥ skrive informasjonen nedenfor til skjermen (linje 2 skal være blank). Tallene skal skrives ut som tall, **ikke** som en del av en tekststreng omgitt av fnutter." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-25T13:03:36.211485Z", + "start_time": "2019-06-25T13:03:36.201649Z" + }, + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "```python\n", + "Norge\n", + " \n", + " \n", + "Areal (kv.km): 385180\n", + " \n", + "Folketall (mill.): 5.3\n", + "```\n", + "\n", + "***Skriv koden din i boksen under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + }, + "solution": "hidden" + }, + "source": [ + "### print() - tutorial del 2:\n", + "Nyttig info om fnutter i streng før oppgave c og d." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Koden under viser hvorfor Python har flere alternativer for fnutter rundt tekststrenger heller enn Ã¥ standardisere pÃ¥ bare ett fast tegn for dette formÃ¥let. **Ta gjerne Ã¥ endre pÃ¥ koden for Ã¥ se hva som skjer!**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-25T13:37:55.517387Z", + "start_time": "2019-06-25T13:37:55.490047Z" + }, + "hidden": true + }, + "outputs": [], + "source": [ + "print('Hvorfor tilbys bÃ¥de enkle', \"og doble fnutter?\")\n", + "print('Jo, hvis det er doble \"fnutter\" i teksten, funker kun enkle rundt,')\n", + "print(\"og med enkle fnutter i teksten er'e bare doble som funker rundt.\")\n", + "print(\"Med samme fnutt bÃ¥de rundt og inni, tror Python teksten slutter midt i.\")\n", + "print(\"Skal du ha begge typer fnutter i teksten? Da mÃ¥ du ha triple fnutter rundt:\")\n", + "print('''Er'u gær'n? spurte \"Arne\" og lo sykt.''')\n", + "print(\"\"\"Trippel apostrof ' og trippel hermetegn \" funker begge deler\"\"\")\n", + "print(\"\"\"Triple fnutter kan ogsÃ¥ brukes\n", + "for tekststrenger\n", + "som skal gÃ¥ over flere linjer.\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "**Lag et program som skriver ut pÃ¥ skjermen teksten:** \n", + "```\n", + "\"Jeg elsker ITGK\" ropte studenten da 1c funket.\n", + "```\n", + "\n", + "Hermetegnene rundt teksten skal være med i det som kommer ut pÃ¥ skjermen. \n", + "\n", + "***Skriv koden i boksen under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### d)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et program som skriver ut pÃ¥ skjermen teksten vist under.\n", + "\n", + "Hint: For Ã¥ slippe Ã¥ skrive sÃ¥ mye, kopier teksten inn i boksen under, sÃ¥ trenger du bare selv Ã¥ skrive print, parenteser og passende fnutter rundt teksten.\n", + "\n", + "**Tekst til oppgave d:**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "```\n", + "Noen barn sto og hang ved lekeplassen.\n", + "Diskusjonstemaet deres var noe uventet.\n", + "\n", + "- Hvorfor heter'e \"Python\"?\n", + "- Var'e slanger som laget det? - Nei, Guido van Rossum.\n", + "- Likte slanger kanskje da? - Nei, digga \"Monty Python\".\n", + "- Hva er det? Et fjell?\n", + "- Nei, engelsk komigruppe. Begynte i '69\n", + "- Wow! Var'e fremdeles dinosaurer da?\n", + "```\n", + "***Skriv koden i boksen under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "### Kommentarer i Python - tutorial del 3:\n", + "Nyttig info før oppgave e" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Kommentarer er en annen nyttig ting nÃ¥r vi skriver kode. Det brukes mest for din egen del, i tillegg til andre som skal tyde koden, ettersom det gjør koden mer oversiktlig. Det er blant annet veldig nyttig viss du eller andre skal se gjennom kode i etterkant. Kommentarer ignoreres av programmet nÃ¥r koden kjører, sÃ¥ hva du skriver i en kommentar pÃ¥virker ikke koden. Kommentarer lages ved Ã¥ sette en hashtag(#) foran det du ønsker Ã¥ skrive. Prøver du Ã¥ kjøre koden under vil du fÃ¥ en feil. **Prøv Ã¥ rette opp koden!**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-25T13:30:57.214061Z", + "start_time": "2019-06-25T13:30:57.200831Z" + }, + "hidden": true + }, + "outputs": [], + "source": [ + "# Dette er en kommentar!\n", + "Dette er ikke en kommentar. Mangler #." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### e)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Legg til to kommentarer i koden din fra b) og c) hvor du forklarer hva som ble gjort i hver av oppgavene. Legg ogsÃ¥ til kommentaren `print('Hei\")` i en av deloppgavene.\n", + "\n", + "Merk at dersom du hadde skrevet print('Hei\") i koden ville ikke koden kjørt. Dette skyldes at det først blir brukt en enkel fnutt og deretter en dobbel fnutt. SÃ¥ lenge dette er skrevet i en kommentar slik det ble gjort i e) vil det ikke pÃ¥virke koden og alt gÃ¥r fint. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### f)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Koden i kodeblokken under kjører ikke pga. syntaksfeil i alle print-funksjonene. Din oppgave er Ã¥ rette opp i feilene slik at koden kjører." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Heihei, jeg vil visst ikke kompilere jeg :(')\n", + "print(\"Halla, sÃ¥ \"bra\" du ser ut i dag\")\n", + "print(Hei pÃ¥ deg)\n", + "print \"Er ikke dette gøy?\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Kalkulasjoner.ipynb b/Ovinger/Oving01/Kalkulasjoner.ipynb new file mode 100644 index 0000000..c6a4edb --- /dev/null +++ b/Ovinger/Oving01/Kalkulasjoner.ipynb @@ -0,0 +1,559 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li class=\"active\"><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Kalkulasjoner\n", + "\n", + "**LæringsmÃ¥l**:\n", + "\n", + "* Basisferdigheter, sekvensiell programmering\n", + "\n", + "* Utføre enkle kalkulasjoner\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2.7\n", + "\n", + "I denne oppgaven skal du lære hvordan du skriver matematiske uttrykk for Ã¥ gjøre utregninger i Python." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + }, + "solution": "hidden" + }, + "source": [ + "### Tutorial - Matteoperasjoner del 1: Vanlige operatorer, parenteser, presedens" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Det er mange likheter mellom Python og vanlig matematisk skrivemÃ¥te av aritmetiske uttrykk, men ogsÃ¥ noen forskjeller.\n", + "\n", + "Tabellen under oppsummerer det mest grunnleggende:\n", + " \n", + "Matematikk | Python | Merknad\n", + "--- | --- | ---\n", + "a + b | a + b | Det er vanlig Ã¥ sette et mellomrom pÃ¥ hver side av + men ikke pÃ¥krevd. <br> Kunne ogsÃ¥ ha skrevet a+b. Samme gjelder for andre regneoperatorer. <br> Smak og behag, men litt luft gjør ofte uttrykk lettere Ã¥ lese.\n", + "a - b | a - b | Bruk det vanlige bindestrek-tegnet for minus\n", + "a · b |a * b| Bruk stjerntegn (asterisk) for multiplikasjon\n", + "ab|<span style=\"color:red\">**NEI**</span>| I Python mÃ¥ gangetegn **alltid** skrives eksplisitt, kan ikke utelates\n", + "a : b|a / b|Vanlig skrÃ¥strek brukes for divisjon, **ikke** kolon eller horsintal brøkstrek.\n", + "a<sup>b</sup>|a ** b| Dobbel stjerne for potens. De to stjernene mÃ¥ stÃ¥ kloss inntil hverandre.\n", + "[(a + b) * c - d]|((a + b) * c - d)|I matematisk notasjon brukes av og til ulike parentessymboler () [] {} <br> hvis det er uttrykk med flere nivÃ¥er av parenteser nøstet inn i hverandre. <br> I Python mÃ¥ vanlig parentes () brukes for **alle** nivÃ¥er. [] og {} har en annen betydning.\n", + "\n", + "**Presedens** mellom operatorer fungerer som i matematikken.\n", + "\n", + "* Multiplikasjon og divisjon har høyere presedens enn addisjon og subtraksjon.\n", + " * 3 + 2 * 5 blir 13, fordi * gjøres før +.\n", + " * 5 - 1 / 2 blir 4.5, fordi / gjøres før -.\n", + "* Potens har høyere presedens enn multiplikasjon og divisjon.\n", + " * 5 * 2 ** 3 blir 40, fordi ** gjøres før *.\n", + "* Parenteser kan brukes for Ã¥ fÃ¥ en annen rekkefølge pÃ¥ regneoperasjonene:\n", + " * (3 + 2) * 5 blir 25, fordi + gjøres før *.\n", + " * (5 - 1) / 2 blir 2, fordi - gjøres før /.\n", + " * (5 * 2) ** 3 blir 343, fordi * nÃ¥ gjøres før **.\n", + "* Hvis du skal \"oversette\" et matematisk uttrykk med parenteser til Python, bruk parenteser pÃ¥ samme sted ogsÃ¥ i Python-koden.\n", + "\n", + "**I noen tilfeller kan du trenge ekstra parenteser i Python-koden som ikke var i det matematiske uttrykket. F.eks.:** \n", + "\n", + " $$\\frac{2-x}{2+x}$$ \n", + "\n", + "Horisontal brøkstrek viser tydelig at hele 2-x er teller og hele 3+x nevner. Med Pythons skrÃ¥strek for divisjon mÃ¥ man bruke parenteser her: (2 - x) / (3 + x)\n", + "\n", + " $$3^{xy+1}$$\n", + "\n", + "Opphøyet skrift viser at hele xy+1 er potensen. I Python mÃ¥ man skrive 3 ** (x * y + 1)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### a) Korrekt programmering av aritmetiske utrykk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Fyll inn riktig Python-kode i stedet for None pÃ¥ samme mÃ¥te som vist i de tre øverste linjene,\n", + "\n", + "Kjør deretter programmet for Ã¥ se at det virker (kjør gjerne hver gang du har fullført en ny linje, sÃ¥ du fÃ¥r testet en og en)." + ] + }, + { + "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 =', None)\n", + "#2)\n", + "print('5·12+6-1 =', None)\n", + "#3)\n", + "print('3(5+2) =', None)\n", + "#4)\n", + "print('4[(5+3):2 +7] =', None)\n", + "#5)\n", + "print('(−4)^(-3)+5·(3−7:2) =', None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Hvis du har fÃ¥tt det til riktig, skal utskrift til skjerm ved kjøring av programmet bli:\n", + "\n", + "**Utskrift til skjerm:**\n", + "```python\n", + "1+2(-3) = -5\n", + "[(3+5· 2)+1]:2 = 7.0\n", + "-3^2 + 5*3 - 7 = -1\n", + "5:2-4 = -1.5\n", + "5· 12+6-1 = 65\n", + "3(5+2) = 21\n", + "4[(5+3):2 +7] = 44.0\n", + "(-4)^(-3)+5·(3-7:2) = -2.515625\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + }, + "solution": "hidden" + }, + "source": [ + "### Tutorial - Matteoperasjoner del 2: Heltallsdivisjon og Modulo:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "I tillegg til vanlig divisjon / har Python ogsÃ¥ heltallsdivisjon som skrives // og modulo som skrives med operatoren %.\n", + "\n", + "Heltallsdivisjon og modulo minner om mÃ¥ten du lærte divisjon pÃ¥ barneskolen før du hadde lært desimaltall, altsÃ¥ med hele tall og rest.\n", + "\n", + "Tabellen under illustrerer hvordan disse operatorene virker:\n", + "\n", + "**Utrykk i Python**|**Resultat**|**Forklaring**\n", + "---|---|---\n", + "17 / 5\t|3.4\t|Vanlig divisjon\n", + "17 // 5|\t3\t|Heltallsdivisjon, gir hvor mange hele ganger nevneren 5 gÃ¥r opp i telleren 17\n", + "17 % 5\t|2|\tModulo, gir resten av 17 // 5, dvs. de 2 som blir til over\n", + "7.75 / 2.5\t|3.1|\tVanlig divisjon\n", + "7.75 // 2.5\t|3.0|\tHeltallsdivisjon, gir hvor mange hele ganger nevneren 2.5 gÃ¥r opp i 7.75.<br> Her blir svaret et flyttall (3.0) heller enn heltallet 3, fordi teller og nevner er flyttall.\n", + "7.75 % 2.5\t|0.25|\tModulo, Resten av 7.75//2.5 er 0.25 fordi 2.5 * 3.0 er 7.5\n", + "\n", + "Heltallsdivisjon og modulo har en rekke nyttige bruksomrÃ¥der i programmering.\n", + "\n", + "Ett eksempel er regning med enheter som aggregeres pÃ¥ andre mÃ¥ter enn det typiske 10, 100, 1000, slik som 60 sekund per minutt, 60 minutt per time, 24 timer per døgn, 7 døgn per uke.\n", + "\n", + "Koden under viser hvordan // og % kan brukes til slike beregninger. Prøv Ã¥ kjør den." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(215, \"sekund blir\", 215 // 60, \"minutt og\", 215 % 60, \"sekund.\")\n", + "print(53, \"dager blir\", 53 // 7, \"uker og\", 53 % 7, \"dager\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-01T09:01:23.971652Z", + "start_time": "2019-07-01T09:01:23.962336Z" + }, + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Det fins ogsÃ¥ mange andre nyttige anvendelser av // og %, som vil vise seg etter hvert som vi kommer til mer avanserte problemer." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### b) Bruk av heltallsdivisjon og modulo\n", + "\n", + "Erstatt ordet **None** i print-setningene i linje 2, 3 og 4 med uttrykk med // og % pÃ¥ tilsvarende mÃ¥te som i linje 1, sÃ¥ pÃ¥standene blir riktige." + ] + }, + { + "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\", None, \"minutt og\", None, \"sekund.\")\n", + "print(67, \"dager blir\", None, \"uker og\", None, \"dager.\")\n", + "print(100, \"timer blir\", None, \"døgn og\", None, \"timer.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "**Riktig utskrift hvis du har fÃ¥tt det til, skal bli**\n", + "```\n", + "355 minutt blir 5 timer og 55 minutt. \n", + "403 sekund blir 6 minutt og 43 sekund. \n", + "67 dager blir 9 uker og 4 dager. \n", + "100 timer blir 4 døgn og 4 timer.\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + }, + "solution": "hidden" + }, + "source": [ + "### Tutorial - Matteoperasjoner del 3: Innebygde funksjoner og konstanter" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Python har en rekke innebygde funksjoner. Vi kan skille mellom\n", + "\n", + "* funksjoner i **standardbiblioteket**. Disse er alltid tilgjengelige og kan dermed brukes uten videre.\n", + "* funksjoner i **andre biblioteker**. For Ã¥ kunne bruke slike funksjoner mÃ¥ vi importere det aktuelle biblioteket i starten av programmet.\n", + "\n", + "En fullstendig liste over funksjoner i standardbiblioteket fins [her](https://docs.python.org/3/library/functions.html).\n", + "\n", + "Noen standardfunksjoner som inngÃ¥r i ulike deloppgaver pÃ¥ Øving 1 er print(), input(), str(), int(), float().\n", + "\n", + " Spesielt relatert til matematikk fins dessuten **abs()** for absoluttverdi og **round()** for avrunding i standardbiblioteket.\n", + "\n", + "Kodeblokken under viser bruk av noen standardfunksjoner:\n", + "\n", + "**Standardfunksjoner**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(\"Standardfunksjoner kan brukes direkte.\")\n", + "print(\"Funksjonen print() viser info pÃ¥ skjermen.\")\n", + "print(\"|-3|, dvs. absoluttverdien til -3, er\", abs(-3) )\n", + "print(4.75, \"avrundet til helt tall er\", round(4.75) )\n", + "print(4.75, \"avrundet til én desimal er\", round(4.75, 1) )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Noen andre biblioteker som man vil komme borti i dette emnet:\n", + "\n", + "* **math** som inneholder en rekke matematiske funksjoner, som f.eks. sin(), cos(), tan(), sqrt(), log(), gcd(), factorial(), samt noen vanlige matematiske konstanter som pi og e.\n", + "* **random**. som inneholder funksjoner for Ã¥ generere tilfeldige tall, f.eks. random() som gir et tilfeldig tall mellom 0 og 1, og randint(a, b) for tilfeldige heltall a <= x <= b.\n", + "* **turtle**, som inneholder funksjoner for Ã¥ tegne enkle grafiske figurer pÃ¥ skjermen, f.eks. circle() for Ã¥ tegne en sirkel. Kan ikke brukes med Jupyter.\n", + "\n", + "Kodeblokken under viser bruk av noen funksjoner og konstanter fra math-biblioteket.\n", + "\n", + "**Math-funksjoner**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "import math\n", + "print(\"Kvadratroten til 8 er\", math.sqrt(8) )\n", + "print(\"Sinus til 2 er\", math.sin(2) )\n", + "print(\"Største felles faktor for 18 og 12 er\", math.gcd(18, 12) )\n", + "print(\"Konstantene pi og e er lagret i Python som hhv.\", math.pi, \"og\", math.e)\n", + "print(\"Har ogsÃ¥ konstanten tau som tilsvarer 2*pi:\", math.tau)\n", + "print(\"En sirkel med radius 4 har areal\", math.pi * r**2, \"og omkrets\", math.tau * r)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Til forskjell fra standardbiblioteket mÃ¥ math-biblioteket importeres, jfr. setningen import math\n", + "\n", + "Hver funksjon fra math-biblioteket er ogsÃ¥ prefikset med ordet math. i kodeeksemplet over.\n", + "\n", + "Hvis du ønsker Ã¥ slippe det gjentatte prefikset math foran funksjonsnavn, kan alternativ importsetning brukes:\n", + "\n", + "**Alternativ import**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-01T09:14:10.412403Z", + "start_time": "2019-07-01T09:14:10.400269Z" + }, + "hidden": true + }, + "outputs": [], + "source": [ + "from math import sqrt, sin, gcd, pi, e, tau\n", + "print(\"Kvadratroten til 8 er\", sqrt(8) )\n", + "print(\"Sinus til 2 er\", sin(2) )\n", + "print(\"Største felles faktor for 18 og 12 er\", gcd(18, 12) )\n", + "print(\"Konstantene pi og e er lagret i Python som hhv.\", pi, \"og\", e)\n", + "print(\"Har ogsÃ¥ konstanten tau som tilsvarer 2*pi:\", tau)\n", + "print(\"En sirkel med radius 4 har areal\", pi * 4**2, \"og omkrets\", tau * 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Et enda latere alternativ er Ã¥ skrive **from math import *** i første linje over, * betyr da \"alt mulig\". Da slipper du Ã¥ liste opp sqrt, sin, ... Ulempen vil være at du i sÃ¥ fall importerer alt som fins i math-biblioteket, ikke bare de fÃ¥ funksjonene og konstantene du faktisk bruker. I profesjonelle programmer hvor hurtighet og ryddighet vil være viktig, er det derfor ikke anbefalt Ã¥ bruke **from ... import *** , men det kan være greit i smÃ¥ eksempler." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### c) Bruk av innebygde funksjoner og konstanter\n", + "\n", + "Se pÃ¥ koden i blokken under. Legg til en passende import-setning øverst i programmet i stedet for # ??\n", + "\n", + "Bytt ut alle forekomster av **None** med bruk av innebygde funksjoner og konstanter fra standardbiblioteket og math-biblioteket, slik at svarene blir riktige.\n", + "\n", + "Dvs., der det nÃ¥ stÃ¥r None skal det fylles inn en eller annen funksjon eller matematisk uttrykk tilsvarende det som allerede er gjort i print-setning nr 3.\n", + "\n", + "Hvis du er usikker pÃ¥ hvilke funksjoner og konstanter det er lurt Ã¥ bruke, ta først en kikk pÃ¥ Tutorial like foran deloppgaven." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# ??\n", + "# importerer fra math-biblioteket\n", + " \n", + "print(\"|-8|, dvs. absoluttverdien til -8, er\", None)\n", + "print(2.544, \"avrundet til helt tall er\", None)\n", + "print(\"Funksjonen int() derimot bare kutter vekk desimalene:\", int(2.544) )\n", + "print(2.544, \"avrundet til to desimaler er\", None)\n", + "print(\"Kvadratroten til\", 10, \"er\", None)\n", + "print(\"En sirkel med radius 7 har omkrets\", None)\n", + "print(\"En sirkel med radius 7 har areal\", None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "**Utskrift til skjerm**\n", + "``` \n", + "|-8|, dvs. absoluttverdien til -8, er 8 \n", + "2.544 avrundet til helt tall er 3 \n", + "Funksjonen int() derimot bare kutter vekk desimalene: 2 \n", + "2.544 avrundet til to desimaler er 2.54 \n", + "Kvadratroten til 10 er 3.1622776601683795 \n", + "En sirkel med radius 7 har omkrets 43.982297150257104 \n", + "En sirkel med radius 7 har areal 153.93804002589985\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" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git "a/Ovinger/Oving01/MUSTEK-\303\230VING_1.ipynb" "b/Ovinger/Oving01/MUSTEK-\303\230VING_1.ipynb" new file mode 100644 index 0000000..1e5d33d --- /dev/null +++ "b/Ovinger/Oving01/MUSTEK-\303\230VING_1.ipynb" @@ -0,0 +1,277 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ØVING 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Under ser du eksempler pÃ¥ ulike variabeltyper i Python. Prøv Ã¥ kjøre snutten og ta en titt pÃ¥ hva den printer ut." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Python', 3, 0.7, 3.7, 'Python 3.7')\n" + ] + } + ], + "source": [ + "#streng / string\n", + "var1 = \"Python\"\n", + "\n", + "#heltall / integer\n", + "var2 = 3\n", + "\n", + "#flyttall / float\n", + "var3 = 0.7\n", + "\n", + "#heltall + flyttall = flyttall\n", + "var4 = var2 + var3\n", + "\n", + "#konverterer flyttall til streng og slÃ¥r sammen / konkatenerer til en lengre streng\n", + "var5 = var1 + \" \" + str(var4)\n", + "\n", + "#print out\n", + "print(var1,var2,var3,var4,var5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Oppgave 1\n", + "\n", + "Skriv et enkelt program som ber brukeren om navn, lagrer dette i en variabel og printer ut en en vennlig hilsen som svar. \n", + "\n", + "Eksempel pÃ¥ kjøring av koden:\n", + "\n", + "Hva er navnet ditt? Anders\n", + "\n", + "Heisann, Anders! Fryktelig hyggelig Ã¥ møte deg!" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hva er navnet ditt? Anders\n", + "Heisann, Anders! Fryktelig hyggelig Ã¥ møte deg!\n" + ] + } + ], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "input() og print() er eksempler pÃ¥ innebygde funksjoner i Python. Ved Ã¥ importere bibliotek kan vi utvide Pythons funksjonalitet. Under ser du for eksempel hvordan vi kan inkludere modulen date fra datetime-biblioteket, og med det finne ut hvilket Ã¥r det er i Ã¥r.\n", + "\n", + "Utvid koden under til Ã¥ spørre om brukerens alder, og anslÃ¥ omtrentlig fødselsÃ¥r. Print ut en beskjed som inneholder bÃ¥de brukerens navn og anslÃ¥tt fødselsÃ¥r.\n", + "\n", + "\n", + "\n", + "\n", + "Eksempel pÃ¥ kjøring av koden:\n", + "\n", + "Hvor gammel er du, Anders? 28\n", + "\n", + "Okay, Anders! Etter mine kalkulasjoner er du født enten i 1991 eller i 1990!" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2019\n" + ] + } + ], + "source": [ + "from datetime import date\n", + "presentyear = date.today().year\n", + "print(presentyear)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Oppgave 2\n", + "\n", + "PÃ¥ planeten vÃ¥r har vi et atmosfærisk trykk som ligger pÃ¥ 101.325 kiloPascal (kPa) ved havoverflaten og nÃ¥r en beveger seg oppover. All lyd som beveger seg gjennom luft er variasjoner i luftpartiklenes posisjon rundt et \"nullpunkt\" gitt av det atmosfæriske trykket - en oscillasjon skyver og trekker luftpartiklene ved sitt høy- og lavtrykk. Svingningen med lavest intensitet et menneske potensielt er i stand til Ã¥ høre ligger pÃ¥ 20 microPascal (µPa). Dette er utgangspunktet for den logaritmiske amplitudeskalaen deciBel Sound Pressure Level (dBSPL), som har sitt laveste punkt - 0dBSPL, satt til nettopp 20µPa. Maksamplituden til en norsk konsert er satt til 90dBSPL, et lydtrykknivÃ¥ som vil pÃ¥føre skade om en utsettes for det over lengre tid. En jagerflymotor kan ha et lydtrykknivÃ¥ opp mot 150dBSPL pÃ¥ én meters avstand, som medfører umiddelbar hørselsskade. \n", + "\n", + "Likningen for omregning fra Pascal til dBSPL:\n", + "\n", + "Lp(dBSPL)=20·log(10)p/p0\n", + "\n", + "hvor p0 er den lavest hørbare lufttrykksendringen (20µPa) og p er input til likningen i form av en verdi i Pacal. \n", + "\n", + "Likningen for omregning fra dBSPL til Pascal:\n", + "\n", + "p(Pa)=p0·10^Lp(dBSPL)/20\n", + "\n", + "hvor p0 fortsatt er 20µPa og Lp er input til likningen i form av en verdi i dBSPL. Disse formlene finner du i kodesnutten under. Legg merke til at vi har importert math-biblioteket som lar oss bruke mer avanserte matematiske funksjoner, slik som log10.\n", + "\n", + "I denne oppgaven skal du lage et program som spør brukeren om en amplitudeverdi i dBSPL. Denne verdien skal du putte inn i likningen som konverterer fra dBSPL til Pascal, og resultatet av denne konverteringen skal sÃ¥ konverteres tilbake til dBSPL. Formater de to konverterte verdiene slik at programmet printer ut Pascal-verdien som et flyttall med fem desimaler og dBSPL som kun et heltall (uten desimaler).\n", + "\n", + "\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "\n", + "Amplitude i dBSPL? 50\n", + "\n", + "0.00632 Pascal\n", + "\n", + "50 dBSPL\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "amp = 50\n", + "pascal = 0.00002*(10**(int(amp)/20))\n", + "dbspl = 20*math.log10(pascal/0.00002)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En fin kilde for Ã¥ undersøke temaet videre finner du her: http://www.sengpielaudio.com/calculator-soundlevel.htm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Oppgave 3\n", + "\n", + "En sinusbølge kan forstÃ¥s som en sirkulær bevegelse hvor en gitt grad mellom 0 og 360 representerer et punkt i bølgen - et utsving gitt i en amplitudeverdi. Om en sinustone blir gitt en relativ amplitude pÃ¥ 1 vil for eksempel 0° tilsvare startpunktet og ha en amplitude pÃ¥ 0, 90° tilsvarer maksimalt positivt utsving og har en verdi pÃ¥ 1, mens 270° tilsvarer maksimalt negativt utsving og har en verdi pÃ¥ -1. Denne gradverdien kan ogsÃ¥ leses som bølgens fase.\n", + "\n", + "Likningen for amplitudeverdien pÃ¥ en gitt grad i en sinusbølge er som følger:\n", + "\n", + "A=dB·sin(w·t+phase)\n", + "\n", + "hvor w=2piFREKVENS. \n", + "\n", + "Ta utgangspunkt i koden fra oppgave 1 og utvid med Ã¥ la brukeren sjekke utsvinget pÃ¥ ulike punkter (0-360) i en sinusbølge med amplitude gitt av input fra oppgave 1. Resultatet skal printes som et flyttall med to desimaler rundet opp eller ned til andre desimalplass. Programmet skal ogsÃ¥ printe en absolutt prosentverdi for mÃ¥lepunktets utsving fra nullpunktet, hvor 100% tilsvarer den maksimale amplituden gitt som input." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "degree = 72\n", + "y = dbspl * math.sin(math.radians(degree))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Se mer om temaet her: http://www.sengpielaudio.com/calculator-timedelayphase.htm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Oppgave 4 \n", + "\n", + "Turtle er et Python-library som lar deg tegne enkle illustrasjoner med Python. I koden under ser du et eksempel pÃ¥ Turtle-kode som først plotter et koordinatsystem og sÃ¥ en sirkel inn i det. Endre de tre variablene du finner øverst i koden, slik at fase- og amplitude-informasjon fra oppgave 3 vises grafisk." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "import turtle\n", + "\n", + "\n", + "radius = 180\n", + "vinkel = 300\n", + "amplitude = 177.94\n", + "\n", + "\n", + "turtle.hideturtle()\n", + "turtle.screensize(radius*3,radius*3)\n", + "turtle.pensize(1)\n", + "turtle.color('black')\n", + "turtle.setheading(-90)\n", + "turtle.forward(radius)\n", + "turtle.backward(radius*2)\n", + "turtle.home()\n", + "turtle.backward(radius)\n", + "turtle.forward(radius*2)\n", + "\n", + "turtle.color('green')\n", + "turtle.setheading(90)\n", + "turtle.circle(radius)\n", + "\n", + "turtle.color('red')\n", + "turtle.home()\n", + "turtle.setheading(degree)\n", + "turtle.forward(radius)\n", + "\n", + "turtle.penup()\n", + "turtle.color('blue')\n", + "turtle.write(str(degree)+'° = ',True)\n", + "turtle.write(round(amplitude,2),True)\n", + "turtle.write('dBFS',True)" + ] + } + ], + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Peppes Pizza.ipynb b/Ovinger/Oving01/Peppes Pizza.ipynb new file mode 100644 index 0000000..d6e99b4 --- /dev/null +++ b/Ovinger/Oving01/Peppes Pizza.ipynb @@ -0,0 +1,305 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li class=\"active\"><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Peppes Pizza\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Gjøre enkle kalkulasjoner i python\n", + "* Skrive et enkelt program\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2\n", + "\n", + "Du har nettopp spist middag pÃ¥ Peppes Pizza med noen venner, og mottar denne kvitteringen:\n", + "\n", + " \n", + "```python\n", + "Pizza: 750kr\n", + "Studentrabatt: 20%\n", + "Tips: 8%\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et program som lagrer verdiene fra regningen i variabler. Variablene skal altsÃ¥ være `Pizza`, `Studentrabatt` og `Tips`.\n", + "\n", + "***Skriv koden i blokken under***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Eksempel pÃ¥ lignende tilfelle" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Bob Bernt var pÃ¥ kino i helgen og mottok denne regningen:\n", + "\n", + "**Regning fra Prinsen kino:**\n", + " \n", + "```python\n", + "Kinobillett: 125kr\n", + "Popcorn: 70kr\n", + "Brus: 25kr\n", + "Rabatt = 10%\n", + "```\n", + "\n", + "I programmet under er verdiene fra regningen blitt lagret i variablene `Kinobillett`, `Popcorn` og `Brus`.\n", + "\n", + "**Kode:**\n", + "\n", + " \n", + "```python\n", + "Kinobillett = 125\n", + "Popcorn = 70\n", + "Brus = 25\n", + "Rabatt = 0.10\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag en variabel `totalt` som er lik den totale summen av middagen. Du kan skrive i samme kodeblokk som oppgave a." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Eksempel pÃ¥ lignende tilfelle" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Tar utgangspunkt i regningen fra Prinsen kino som Bob Bernt fikk under Eksempel pÃ¥ lignende tilfelle under oppgave a. For Ã¥ regne ut den totale summen kan dette gjøres pÃ¥ følgende mÃ¥te:\n", + "\n", + " \n", + "```python\n", + "Total = (Kinobillett + Brus + Popcorn) * (1-Rabatt)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c) " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Gjør slik at brukeren kan skrive inn hvor mange som deltok pÃ¥ middagen, og print ut hvor mye hver person mÃ¥ betale.\n", + "\n", + "**Eksempel pÃ¥ kjøring:**\n", + "\n", + " \n", + "```python\n", + "Total pris: 648.0\n", + "Hvor mange deltok pÃ¥ middagen? 6\n", + "Ettersom dere var 6 personer, sÃ¥ mÃ¥ hver person betale 108.0 kroner.\n", + "```\n", + "\n", + "***Skriv koden i blokken under***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "For at man skal bruke input i beregninger mÃ¥ den gjøres om til en int." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Tallkonvertering.ipynb b/Ovinger/Oving01/Tallkonvertering.ipynb new file mode 100644 index 0000000..65a8f1f --- /dev/null +++ b/Ovinger/Oving01/Tallkonvertering.ipynb @@ -0,0 +1,495 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li class=\"active\"><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Tallkonvertering\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Konvertering mellom datatyper med standardfunksjoner som int() og float()\n", + "\n", + "* ForstÃ¥ definisjonen av heltall og flyttall\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2.6\n", + "\n", + "* Kap. 2.8" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## Tutorial del 1: Konvertering mellom datatyper" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Vi kan ha ulike typer data, som tekststrenger (f.eks. `\"Python\"`), heltall (f.eks. `42`), flyttall (f.eks. `9.80`) og sannhetsverdier (`True`, `False`). Ofte kommer vi i situasjoner hvor vi har data av en viss type, men vi trenger samme data bare med en annen type. Da mÃ¥ vi konvertere dataene. Noen vanlige konverteringsfunksjoner:\n", + "\n", + "**`int()`** - konverterer til heltall.\n", + "- `int('423')` gir 423 (dvs. tekststrengen blir konvertert til et tall). Virker kun hvis tekststrengen faktisk inneholder et heltall.\n", + "- `int(5.69)` gir 5 (dvs. for flyttall blir desimaldelen fjernet)\n", + "\n", + "**`float()`** - konverterer til flyttall\n", + "- `float('5.69')` gir 5.69 (tekststreng konvertert til tall)\n", + "- `float('5')` gir 5.0, dvs. float() virker pÃ¥ tekststrenger enten de inneholder flyttall eller heltall (men ikke pÃ¥ strenger som er noe annet enn tall)\n", + "- `float(5)` gir 5.0\n", + "\n", + "**`str()`** - konverterer til tekststreng\n", + "- `str(42)` gir '42'\n", + "- `str(5.69)` gir '5.69'\n", + "Koden under feiler fordi vi har glemt Ã¥ konvertere. Kjør den og se hva som skjer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "alder = input(\"Hvor gammel er du?\")\n", + "alder_mor = input(\"Hvor gammel er din mor?\")\n", + "sum_alder = alder + alder_mor\n", + "print(\"Gratulerer, til sammen er dere\", sum_alder, \"Ã¥r!\")\n", + "svar = input(\"Hva syns dere om Ã¥ være \", sum_alder, \"? \")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Et eksempel pÃ¥ kjøring kan være som følger:\n", + " \n", + " \n", + "```python\n", + "Hvor gammel er du? 13\n", + "Hvor gammel er din mor? 37\n", + "Gratulerer, til sammen er dere 1337 Ã¥r!\n", + "Traceback (most recent call last):\n", + " File \"/Users/guttorm/Documents/tut2.py\", line 5, in <module>\n", + " svar = input(\"Hva syns dere om Ã¥ være \", sum_alder, \"? \")\n", + "TypeError: input expected at most 1 arguments, got 3\n", + ">>>\n", + "```\n", + "\n", + "Den første feilen viser seg i linjen \"Gratulerer...\" Summen skulle ha blitt 50 Ã¥r. Men vi har de to alderne fortsatt bare lagret som tekststrenger. Da betyr `+` Ã¥ hekte sammen strengene, ikke Ã¥ gjøre noen addisjon. AltsÃ¥ fÃ¥r vi `'13' + '37'` som blir `'1337'` heller enn `13 + 37` som blir `50`. Her mÃ¥tte vi ha konvertert fra tekst til tall før vi gjorde addisjonen.\n", + "\n", + "Den andre feilen oppstÃ¥r i input-setninga. I `print()` er det lov Ã¥ liste opp mange argumenter, bÃ¥de tekst og tall, med komma mellom. I en `input()` er det bare lov Ã¥ ha ett argument, som mÃ¥ være en tekststreng (ledeteksten). Som det sies i feilmeldinga: \"input expected at most 1 arguments, got 3\". For Ã¥ klare oss med bare ett argument - men samtidig fÃ¥ stilt det spørsmÃ¥let vi ønsker (\"Hva syns dere om Ã¥ være 50?\" hvis summen var 50) - mÃ¥ vi plusse sammen delene til én tekststreng heller enn Ã¥ ha delene skilt med komma. `input(\"Hva syns dere om Ã¥ være\" + sum_alder + \"? \")` vil imidlertid ikke funke hvis sum_alder er et tall, for Ã¥ det gÃ¥r ikke Ã¥ plusse sammen tekst og tall. To tekster kan derimot godt plusses sammen (som vi nettopp sÃ¥ med `'1337'`). Hvis vi konverterer `sum_alder` til tekst, vil det funke. Fikset kode vist under:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "alder = int(input(\"Hvor gammel er du?\"))\n", + "alder_mor = int(input(\"Hvor gammel er din mor?\"))\n", + "sum_alder = alder + alder_mor\n", + "print(\"Gratulerer, til sammen er dere\", sum_alder, \"Ã¥r!\")\n", + "svar = input(\"Hva syns dere om Ã¥ være \" + str(sum_alder) + \"? \")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "AltsÃ¥: bruker `int()` i linje 1 og 2, dette gjør at vi fÃ¥r heltall i variablene `alder` og `alder_mor` sÃ¥ vi blir i stand til Ã¥ regne med dem. Bruker deretter `str()` i linje 5 sÃ¥ denne opplysningen kan settes sammen med annen tekst og brukes i ledeteksten til en ny `input()`. Dette eksemplet viser dermed bÃ¥de et tilfelle hvor vi har tekst men trenger tall, og ett hvor vi har et tall men trenger tekst. Hvis det er aktuelt at brukeren skriver inn desimaltall pÃ¥ alder (f.eks. `13.5`) vil imidlertid koden over ikke funke. Da mÃ¥tte vi ha brukt funksjonen `float()` der vi nÃ¥ har brukt `int()`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Be brukeren om Ã¥ skrive inn 3 flyttall. Konverter først strengene til flyttall med `float()`, bruk sÃ¥ `int()` til Ã¥ konvertere dem til heltall. Be ogsÃ¥ brukeren om Ã¥ skrive inn et heltall og bruk `float()` til Ã¥ konvertere tallet til et desimaltall." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Eksempel pÃ¥ utskrift fra programmet hvis du fÃ¥r til det til Ã¥ funke:\n", + "\n", + "\n", + "```python\n", + "Skriv inn et flyttall: 4.232443\n", + "Skriv inn enda et flyttall: 3.24324\n", + "Skriv inn et siste flyttall: 1.22342454\n", + "Konvertert til heltall blir det: 4 3 1\n", + "Skriv inn et heltall: 13\n", + "Konvertert til flyttall blir det: 13.0\n", + "```\n", + "\n", + "***Skriv koden din i blokka under:***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-01T11:24:13.550825Z", + "start_time": "2019-07-01T11:24:13.542723Z" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Hver gang du skal be brukeren om noe benyttes `input()`. Husk Ã¥ ha det i en `int()` dersom det er et heltall du ber om og `float()` dersom det er et flyttall. En tekststreng som inneholder et flyttall, f.eks. `\"4.325\"`, kan ikke konverteres direkte til heltall. Dvs., `int(\"4.325\")` vil gi feilmelding. Hvis du fÃ¥r en slik streng og egentlig ønsker int, mÃ¥ du først konvertere fra streng til float, deretter fra float til int." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Skriv et program som ber brukeren oppgi navn og alder, samt hvor gammel vedkommende var da han/hun begynte Ã¥ programmere. Et eksempel pÃ¥ kjøring er vist nedenfor, hvor *Martin, 21*, *19* og *Ja* bakerst i linjene 1, 2, 3 og 5 skrives av brukeren mens resten skrives av maskinen. Lag programmet slik at det tilpasser seg dataene som skrives inn. (Særlig for denne deloppgaven lønner det seg Ã¥ se pÃ¥ tutorial lenger oppe hvis du ikke fÃ¥r den til)\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + " \n", + "```\n", + "Skriv ditt navn: Martin\n", + "Hei, Martin, hvor gammel er du? 21\n", + "Hvor gammel var du da du begynte Ã¥ programmere? 19\n", + "Da har du programmert i 2 Ã¥r.\n", + "Syns du de 2 Ã¥rene har vært givende? Ja\n", + "Takk for svar, Martin!\n", + "```\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "## Tutorial del 2: int() vs. round()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Ofte har man flyttall, men trenger heltall, f.eks. hvis man skal bruke innebygde Python-funksjoner som krever heltall som argument, eller skal bruke tallet som indeks til en streng eller liste (som vi vil se senere i pensum). Flyttall kan konverteres til heltall med funksjoner som `int()` eller `round()`. Kodeblokka under viser litt forskjell pÃ¥ hvordan disse virker." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "print(\"int() bare kutter desimalene, uansett hvor stor eller liten desimaldelen er:\")\n", + "print(\"int(2.25) er\", int(2.25))\n", + "print(\"int(2.5) er\", int(2.5))\n", + "print(\"int(2.99) er\", int(2.99))\n", + "print(\"round() runder av til nærmeste heltall, f.eks.\")\n", + "print(\"round(2.25) er\", round(2.25))\n", + "print(\"round(2.51) er\", round(2.51))\n", + "print(\"Hva hvis tallet er midt mellom to heltall?\")\n", + "print(\"round(2.5) er\", round(2.5))\n", + "print(\"round(3.5) er\", round(3.5))\n", + "print(\"round() bruker en IEEE standard som velger partallet for midt-imellom-situasjoner.\")\n", + "print(\"Mens int() alltid gir heltall kan round() brukes for antall desimaler:\")\n", + "print(\"round(2.5488, 1) blir\", round(2.5488, 1))\n", + "print(\"round(2.5488, 3) blir\", round(2.5488, 3))\n", + "print(\"Med negativt antall desimaler kan vi fÃ¥ round() til Ã¥ runde større enn heltall:\")\n", + "print(\"round(12345.67, -3) blir\", round(12345.67, -3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Som du ser i eksemplet, blir 2.5 rundet av til 2 mens 3.5 blir rundet til 4. Dette kan virke litt uvant, i dagliglivet er man mest kjent med sÃ¥kalt \"kjøpmannsavrunding\", hvor det alltid rundes opp hvis man er midt mellom (dvs., 2.5 skulle i sÃ¥ fall ha blitt rundet til 3). Konsekvent runding oppover nÃ¥r man er midt mellom har imidlertid en uheldig side, nemlig at man pÃ¥drar seg en systematisk feil hvis man har mange data som avrundes. Tenk f.eks. temperaturmÃ¥linger for lange perioder, hvor man deretter skal regne ut et snitt for hele perioden. Hvis alle temperaturer som er midt nÃ¥r det gjelder siste brukte siffer, rundes opp, vil snittet for perioden alltid bli litt for høyt. Hvis man i stedet gÃ¥r i partallsretning i alle slike midt mellom situasjoner, vil man runde opp cirka halvparten av gangene og ned cirka halvparten av gangene og dermed unngÃ¥ slike systematiske feil. Men for kjøpmannen er systematisk runding oppover selvsagt bedre med tanke pÃ¥ Ã¥ fÃ¥ inn mest mulig penger." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Be brukeren om skrive inn et flyttall med minst 5 siffer bÃ¥de før og etter punktum. Ta vare pÃ¥ flyttallet i en variabel, konverter det deretter pÃ¥ diverse mÃ¥ter som antydet i eksempelutskriften under. Til slutt skal heltallet du fikk fra `int()` konverteres tilbake til et flyttall.\n", + "\n", + "Kjøring av kode:\n", + " \n", + "```python\n", + "Vennligst gi inn et flyttall med minst 5 siffer bÃ¥de før og etter .\n", + "Hva er tallet ditt? 123456.724353\n", + "Konvertert til heltall med int(): 123456\n", + "Avrundet til nærmeste heltall: 123457\n", + "Avrundet til to desimaler: 123456.72\n", + "Avrundet til fire desimaler: 123456.7244\n", + "Avrundet til nærmeste tusen: 123000\n", + "Heltall fra int() konvertert tilbake til flyttall: 123456.0\n", + "```\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## d)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Ta først inn et flyttall fra brukeren og spør deretter brukeren om hvor mange desimaler i det avrundede tallet som er ønskelig, og bruk `round()` med dette tallet.\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + " \n", + "```python\n", + "Skriv et flyttall: 3.14159263\n", + "Hvor mange desimaler er ønskelig? 2\n", + "Tallet du skrev er 3.14159263 og med 2 desimaler blir det til 3.14\n", + "```\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.4" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Tetraeder.ipynb b/Ovinger/Oving01/Tetraeder.ipynb new file mode 100644 index 0000000..59b4060 --- /dev/null +++ b/Ovinger/Oving01/Tetraeder.ipynb @@ -0,0 +1,225 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li ><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li ><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li ><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li class=\"active\"><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Tetraeder \n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Input/output\n", + "* Formatere utskreven tekst\n", + "* Bruke innebygde funksjoner\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2.8\n", + "\n", + "\n", + "\n", + "<br><br>I denne oppgaven skal du finne overflateareal og volum til regulære tetraedere (ogsÃ¥ kjent som trekantede pyramider). Et regulært tetraeder er et geometrisk objekt bestÃ¥ende av fire likesidede trekanter.\n", + "\n", + "* **Overflatearealet til et tetraeder er A=$\\sqrt{3}a^{2}$** \n", + "* **Volumet til et tetraeder er V=$\\frac{\\sqrt{2}a^{3}}{12}$ hvor a=$\\frac{3}{\\sqrt{6}}h$** " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Lag et program som beregner og skriver ut pÃ¥ skjerm overflatearealet til et tetraeder. Test at programmet skriver ut 23.383 som resultat nÃ¥r høyden, h, er 3 (det gjør ikke noe om svaret fÃ¥r flere siffer).\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + " \n", + "```python\n", + "Et tetraeder med høyde 3 har areal 23.383\n", + "```\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Kvadratrot kan regnes ut enten ved Ã¥ opphøye et tall i 1/2, f.eks. `x ** 0.5`, eller ved `import math` og `math.sqrt` for Ã¥ regne ut røttene. Det kan være lurt Ã¥ lagre verdiene i variabler." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Utvid programmet slik at det ogsÃ¥ skriver ut volumet til et tetraeder. Test at programmet skriver 5.846 nÃ¥r høyden (h) er 3 (det gjør ikke noe om svaret fÃ¥r flere siffer). Du kan skrive i samme kodeblokk som i oppgave a.\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "\n", + " \n", + "```python\n", + "Et tetraeder med høyde 3 har volum 5.846\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Utvid programmet sÃ¥ brukeren blir bedt om Ã¥ skrive inn verdien pÃ¥ høyden (h) fra tastaturet, og fÃ¥r ut volum og areal. Eksempel pÃ¥ kjøring vist i boksen under. Du kan skrive i samme kodeblokk som i oppgave a.\n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "\n", + " \n", + "```python\n", + "Skriv inn en høyde: 3\n", + "Et tetraheder med høyde 3.0 har volum 5.85 og areal 23.38\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.1" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/Vitenskapelig notasjon.ipynb b/Ovinger/Oving01/Vitenskapelig notasjon.ipynb new file mode 100644 index 0000000..729503e --- /dev/null +++ b/Ovinger/Oving01/Vitenskapelig notasjon.ipynb @@ -0,0 +1,286 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "<nav class=\"navbar navbar-default\">\n", + " <div class=\"container-fluid\">\n", + " <div class=\"navbar-header\">\n", + " <a class=\"navbar-brand\" href=\"_Oving1.ipynb\">Øving 1</a>\n", + " </div>\n", + " <ul class=\"nav navbar-nav\">\n", + " <li><a href=\"Intro%20til%20jupyter.ipynb\">Intro til Jupyter</a></li>\n", + " <li ><a href=\"Jeg%20elsker%20ITGK!.ipynb\">Jeg elsker ITGK!</a></li>\n", + " <li ><a href=\"Kalkulasjoner.ipynb\">Kalkulasjoner</a></li>\n", + " <li><a href=\"Input%20og%20variable.ipynb\">Input og variable</a></li>\n", + " <li><a href=\"Tallkonvertering.ipynb\">Tallkonvertering</a></li>\n", + " <li ><a href=\"Peppes%20Pizza.ipynb\">Peppes Pizza</a></li>\n", + " <li ><a href=\"Geometri.ipynb\">Geometri</a></li>\n", + " <li class=\"active\"><a href=\"Vitenskapelig%20notasjon.ipynb\">Vitenskapelig notasjon</a></li>\n", + " <li><a href=\"Tetraeder.ipynb\">Tetraeder</a></li>\n", + " <li><a href=\"Bakekurs.ipynb\">Bakekurs</a></li>\n", + " <li ><a href=\"James%20Bond%20and%20Operation%20round().ipynb\">James Bond and Operation Round</a></li>\n", + " </ul>\n", + " </div>\n", + "</nav>\n", + "\n", + "# Vitenskapelig notasjon\n", + "\n", + "**LæringsmÃ¥l:**\n", + "\n", + "* Vitenskapelig notasjon for spesielt smÃ¥ og spesielt store flyttall\n", + "\n", + "**Starting Out with Python:**\n", + "\n", + "* Kap. 2.8" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "### Nyttig info om formatering av store tall" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "NÃ¥r vi skriver flyttall i Python, er det enkleste ofte Ã¥ skrive tallet rett frem, for eksempel 9.80665 eller 0.0002. Hvis tallet blir veldig stort (~$10^{6}$) eller lite (~$10^{-6}$), er det derimot tidkrevende Ã¥ skrive tallet fullt ut, samtidig som at det lett dukker opp slurvefeil. Da vil resultatet av en beregning bli helt feil. Derfor er det vanlig Ã¥ bruke vitenskapelig notasjon for store og smÃ¥ tall.\n", + "\n", + "I Python kan vi skrive tallene 3.0 × 10 $^{9}$ og 3.19 × 10$^{-10}$ ved bruk av multiplikasjon(`*`) og potensregning(`**`) slik: `3.0*10**9` og `3.19*10 **(-10)`. Det vil gi riktig resultat, men kaster bort tid og strøm pÃ¥ Ã¥ gjøre helt unyttige beregninger, først en potensering, sÃ¥ en multiplikasjon, for Ã¥ finne fram til et tall vi egentlig allerede vet hva er. Det er derfor bedre Ã¥ bruke notasjonen `3.0e9` og `3.19e-10`, hvor tallet bak `e` viser tierpotensen for Ã¥ uttrykke store og smÃ¥ tall. \n", + "\n", + "Notasjonen med `e` (som her ikke har noe med konstanten e Ã¥ gjøre) lar oss legge tallet rett inn i variabelen uten noe regning. Eksemplet under viser bruk av denne notasjonen i linje 3.\n", + "\n", + "Eksempel pÃ¥ kode (**Prøv Ã¥ kjør koden!**)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-01T12:28:51.461020Z", + "start_time": "2019-07-01T12:28:46.220125Z" + } + }, + "outputs": [], + "source": [ + "tid = float(input(\"Hva er din pers pÃ¥ 60m? \"))\n", + "m_sek = 60/tid\n", + "lysfart = 3.0e8\n", + "x = lysfart / m_sek\n", + "print(\"Bra! Men for Ã¥ nÃ¥ igjen lyset...\")\n", + "print(\"...mÃ¥ du løpe\", x, \"ganger fortere\")\n", + "print(\"som ogsÃ¥ kan skrives\", format(x, '.1e'), \"ganger fortere.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "`.1e` i format viser at det er ønskelig med én desimal i den vitenskapelige notasjonen. `.2e` ville gitt `4.25e+07`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## a) Fysikk / kjemi" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false + }, + "source": [ + "Avogadros konstant 6.022 × 10<sup>23</sup> sier hvor mange molekyler av et stoff som fins i ett mol av stoffet. Lag et program som ber brukeren navngi et stoff hun er i besittelse av, oppgi hvilken molvekt dette stoffet har, og hvor mye av stoffet hun har, og sÃ¥ skriver ut pÃ¥ skjermen hvor mange molekyler brukeren har av stoffet. Bruk gjerne `format()`-funksjonen for Ã¥ unngÃ¥ for mange desimaler i svaret. \n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "\n", + " \n", + "```python\n", + "Si et stoff du er i besittelse av: vann\n", + "Hva er molvekt i gram for vann? 18\n", + "Hvor mange gram vann har du? 500\n", + "Du har 1.7e+25 molekyler vann\n", + "```\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Hint 1: `print(\"...mÃ¥ du løpe\", x, \"ganger fortere\")` tillater at en varibel som f.eks. `x` kan listes opp sammen med tekststrenger fordi `print()` kan ta flere argumenter. Funksjonen `input()` kan derimot bare ta ett argument, sÃ¥ hvis du ønsker navnet pÃ¥ stoffet med i promptet for de neste input-setningene, mÃ¥ det plusses med annen tekst heller enn Ã¥ listes opp med komma.\n", + "\n", + "Hint 2: Regn først ut antall mol ved Ã¥ ta hvor mye stoff hun har i antall gram og dele pÃ¥ molvekten. Deretter multipliserer du antall mol med avogadros tall." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "## b) Musikk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "Antall mulige melodilinjer pÃ¥ 10 toner (inkludert rytmevariasjoner) er anslÃ¥tt til Ã¥ være 8.25 x 10<sup>19</sup>, jfr https://plus.maths.org/content/how-many-melodies-are-there. Lag et program i samme stil som 60m-programmet over som spør brukeren hvor mange ulike ti-toners melodilinjer hun selv tror hun har komponert og / eller hørt, og skriver ut som resultat hvor stor andel dette utgjør av antall mulige melodier (her vil dette sluttresultatet sannsynligvis bli et svært lite tall). \n", + "\n", + "Eksempel pÃ¥ kjøring:\n", + "\n", + " \n", + "```python\n", + "Antall ulike 10-toners melodilinjer du har hørt? 3288\n", + "Du har hørt 3.985454545454546e-15 prosent av melodier som er mulig.\n", + "```\n", + "\n", + "***Skriv koden din i blokka under.***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "heading_collapsed": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "#### Hint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "hidden": true, + "run_control": { + "frozen": true + } + }, + "source": [ + "Ta antall ulike ti-toners melodilinjer du har hørt og divider pÃ¥ antall mulige melodilinjer pÃ¥ 10 toner og regn deretter tallet om til prosent." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ovinger/Oving01/_Oving1.ipynb b/Ovinger/Oving01/_Oving1.ipynb new file mode 100644 index 0000000..8fe41a9 --- /dev/null +++ b/Ovinger/Oving01/_Oving1.ipynb @@ -0,0 +1,92 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "run_control": { + "frozen": true + } + }, + "source": [ + "# Øving 1\n", + "\n", + "## LæringsmÃ¥l:\n", + "\n", + "* Kunne bruke vanlige regneoperatorer i Python: addisjon + , subtraksjon – , multiplikasjon * , divisjon / , heltallsdivisjon '// , modulo % og potens **\n", + "* ForstÃ¥ forskjellen pÃ¥ de fire elementære datatypene: heltall (int), flyttall (float), tekststrenger (str) og sannhetsverdier (boolean)\n", + "* Skjønne hvordan regneoperatorene virker for de ulike datatypene\n", + "* Kunne bruke vitenskapelig notasjon for spesielt smÃ¥ og spesielt store flyttall\n", + "* ForstÃ¥ at kode mÃ¥ være uten feil for Ã¥ kjøre, og kunne rette enkle syntaksfeil\n", + "* ForstÃ¥ hvorfor og hvordan vi bruker variable i programmering, og at variabeltilordning ikke er det samme som matematisk likhet\n", + "* Kunne skrive ut til skjerm og lese inn data fra brukeren via tastaturet med standardfunksjonene print() og input()\n", + "* Kunne utføre enkel konvertering mellom datatyper med standardfunksjoner som int() og float()\n", + "\n", + "## Starting Out with Python:\n", + "\n", + "* Kap. 2: Input, Processing, and Output\n", + "\n", + "\n", + " \n", + "\n", + "## Godkjenning:\n", + "\n", + "For Ã¥ fÃ¥ godkjent øvingen mÃ¥ du gjøre Intro til Jupyter oppgaven og **4** av 10 andre oppgaver. \n", + "\n", + "Oppgaver som er litt ekstra vanskelig er markert med stjerne. Oppgaver som gÃ¥r forbi det som er blitt forelest er markert med to stjerner.\n", + "\n", + "Alle oppgavene skal demonstreres til en læringsassistent pÃ¥ sal. I oppgaver der du skriver programkode skal ogsÃ¥ denne vises fram. Lykke til!\n", + "\n", + "\n", + "Oppgave | Tema | Vanskelighetsgrad\n", + "--- | --- | ---\n", + "[Intro til Jupyter](Intro%20til%20jupyter.ipynb) | Jupyter notebooks | \n", + "[Jeg elsker ITGK!](Jeg%20elsker%20ITGK!.ipynb) | Output | \n", + "[Kalkulasjoner](Kalkulasjoner.ipynb)|Matteoperasjoner|\n", + "[Input og variable](Input%20og%20variable.ipynb)|Input/output og variabler|\n", + "[Tallkonvertering](Tallkonvertering.ipynb)|Konvertering|\n", + "[Peppes pizza](Peppes%20Pizza.ipynb)|Matteoperasjoner|\n", + "[Geometri](Geometri.ipynb)|Debugging\n", + "[Vitenskapelig notasjon](Vitenskapelig%20notasjon.ipynb)|konvertering|\n", + "[Tetraeder](Tetraeder.ipynb)|innebygde funksjoner|\n", + "[Bakekurs](Bakekurs.ipynb)|Formatering|\n", + "[James Bond and Operation round](James%20Bond%20and%20Operation%20round().ipynb)|Strenger, avrunding, heltallsdivisjon, modulo| " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} -- GitLab