From 79c5628ad2a7d4eb7af32c3dd46642c499edf62d Mon Sep 17 00:00:00 2001 From: suzanbones <106662876+suzanbones@users.noreply.github.com> Date: Wed, 2 Oct 2024 14:46:19 +0200 Subject: [PATCH] Week 8 Week 8 lectures and pracitcals. --- _toc.yml | 16 + course/opgaven_8.md | 18 +- lectures/8a_list_comprehension.ipynb | 751 ++++++++++++++++++++ lectures/8b_double_list_comprehension.ipynb | 436 ++++++++++++ lectures/9a_intro_recursie.ipynb | 446 ++++++++++++ lectures/9b_recursief.ipynb | 207 ++++++ practicals/8_klinkt_goed.ipynb | 579 +++++++++++++++ practicals/images/8/amplitude_freq.png | Bin 0 -> 90453 bytes practicals/images/8/notes.png | Bin 0 -> 55891 bytes practicals/images/8/reconstruction.jpg | Bin 0 -> 20403 bytes practicals/images/8/sampling.png | Bin 0 -> 23697 bytes practicals/images/8/wave.png | Bin 0 -> 2240 bytes problems/8_basis.ipynb | 390 ++++++++++ problems/8_extra.ipynb | 542 ++++++++++++++ problems/8_instap.ipynb | 125 ++++ 15 files changed, 3501 insertions(+), 9 deletions(-) create mode 100644 lectures/8a_list_comprehension.ipynb create mode 100644 lectures/8b_double_list_comprehension.ipynb create mode 100644 lectures/9a_intro_recursie.ipynb create mode 100644 lectures/9b_recursief.ipynb create mode 100644 practicals/8_klinkt_goed.ipynb create mode 100644 practicals/images/8/amplitude_freq.png create mode 100644 practicals/images/8/notes.png create mode 100644 practicals/images/8/reconstruction.jpg create mode 100644 practicals/images/8/sampling.png create mode 100644 practicals/images/8/wave.png create mode 100644 problems/8_basis.ipynb create mode 100644 problems/8_extra.ipynb create mode 100644 problems/8_instap.ipynb diff --git a/_toc.yml b/_toc.yml index 619a0869..07796164 100755 --- a/_toc.yml +++ b/_toc.yml @@ -146,6 +146,22 @@ parts: - file: solutions/7_basis - file: solutions/7_extra + - caption: PGM2 Week 1 + chapters: + - file: course/week_8 + sections: + - file: lectures/8a_list_comprehension + - file: lectures/8b_double_list_comprehension + - file: course/practical_8 + sections: + - file: practicals/8_klinkt_goed + - file: course/opgaven_8 + sections: + - file: problems/8_instap + - file: problems/8_basis + - file: problems/8_extra + + - caption: Oefening chapters: - file: extra/practice/pgm1_examen diff --git a/course/opgaven_8.md b/course/opgaven_8.md index f6bb6ab7..3430ff3a 100644 --- a/course/opgaven_8.md +++ b/course/opgaven_8.md @@ -1,12 +1,12 @@ -# Week 8 +# Opgaven ![Schotel](/images/saucer.png) -| | | Punten | | -|----------------|-------------------------------------------------------------------------------------------------------------------|--------|-----------| -| **Practicum** | [Mandelbrot](/problems/mandelbrot/index)
De mandelbrotset en afbeeldingen | 35 | | -| **Leesopgave** | [When Algorithms Discriminate](/readings/algoritmen_discrimineren.md)
De mogelijkheden en beperkingen van data | 5 | | -| **Huiswerk** | [PythonBat lussen](/problems/pythonbat_lussen/index)
Lussen oefenen met CodingBat | 5 | 6 bonus | -| | [Pi met pijltjes](/problems/pi_pijlen/index)
Pi bepalen door middel van simulatie | 30 | | -| | [De rij van Conway](/problems/rij_van_conway/index)
Lees en zeg, of lees en huiver | 25 | | -| | [ASCII Art](/problems/ascii_art/index)
Creatief met ASCII | 13 | Optioneel | + + +```{tableofcontents} +``` + +De basis opgave is een zelftest om te checken of je de stof van deze week hebt begrepen +De opstap opgaven zijn er om je te helpen als je moeite hebt +De extra opgaven zijn er om je uit te dagen. \ No newline at end of file diff --git a/lectures/8a_list_comprehension.ipynb b/lectures/8a_list_comprehension.ipynb new file mode 100644 index 00000000..37438a6a --- /dev/null +++ b/lectures/8a_list_comprehension.ipynb @@ -0,0 +1,751 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# List comprehensions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Verdubbel alle waarden in een lijst" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 10, 12]\n" + ] + } + ], + "source": [ + "l = [4, 5, 6]\n", + "for i in range(0, len(l)):\n", + " l[i] = l[i] * 2\n", + "\n", + "print(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Het komt vaak voor dat we een bewerking willen uitvoeren op alle elementen in een lijst. Python geeft de optie omdat in het kort op te schrijven: een list comprehension. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 10, 12]\n" + ] + } + ], + "source": [ + "l = [4, 5, 6]\n", + "l = [x * 2 for x in l]\n", + "print(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Dit werkt ook met de index versie van een for lus. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 10, 12]\n" + ] + } + ], + "source": [ + "l = [4, 5, 6]\n", + "l = [l[i] * 2 for i in range(0, len(l))]\n", + "print(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Naast berekening kunnen we ook een functie uitvoeren op alle elementen in een lijst. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 10, 12]\n" + ] + } + ], + "source": [ + "\n", + "def dbl(x):\n", + " \"\"\"Verdubbel een getal\n", + " \"\"\"\n", + " return x * 2\n", + "\n", + "l = [4, 5, 6]\n", + "l = [dbl(x) for x in l]\n", + "\n", + "print(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Soms komt het voor dat we alleen de elementen willen bewerken en toevoegen aan een nieuwe lijst als het aan een bepaalde voorwaarde voldoet. Dit kunnen we doen door een if-statement toe te voegen aan de list comprehension. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We kunnen bijvoorbeeld alle oneven getallen uit een list filteren." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 3, 5]\n" + ] + } + ], + "source": [ + "l = [1, 2, 3, 4, 5, 6]\n", + "l = [x for x in l if x % 2 == 1]\n", + "print(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Miljoen keer simuleren" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "57\n" + ] + } + ], + "source": [ + "import sys\n", + "from random import *\n", + "\n", + "def guess_np(hidden):\n", + " \"\"\"Raad een getal\n", + " \n", + " hidden: het te raden getal\n", + " \"\"\"\n", + " guesses = 0\n", + " while True:\n", + " comp_guess = choice(range(100)) # 0 tot en met 99.\n", + " guesses += 1\n", + " if comp_guess == hidden:\n", + " break\n", + " return guesses \n", + "\n", + "print(guess_np(42))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De functie geeft het aantal keer dat nodig is om een om een getal te raden terug op basis van steeds een *random* keus van de computer." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Combineren\n", + "\n", + "> [ **expressie** voor elke **waarde** in **collectie** ]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "LC = [guess_np(42) for x in range(1000)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Eén enkele regel voor het uitvoeren van 1000 simulaties, dat is best indrukwekkend! \n", + "\n", + "Bedenk dat je niet verplicht bent de waarde `x` in een expressie te gebruiken. In dit geval is `x` een nutteloze variabele die je alleen maar nodig hebt omdat de *syntax* jou dit verplicht. Vaak zal je zien dat in dit soort gevallen `_` wordt gebruikt om aan te geven dat het een \"wegwerp\" variabele is, bijvoorbeeld in ons geval\n", + "\n", + "```python\n", + "[guess_np(42) for _ in range(1000)]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[42, 84, 27, 58, 24, 20, 75, 105, 72, 17]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LC[0:10]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "List slicing ken je nu ook en dit komt in dit geval goed van pas om eerste de 10 elementen (het resultaat van de eerste 10 simulaties) te inspecteren." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gemiddeld aantal keer raden 95.552\n" + ] + } + ], + "source": [ + "print(\"Gemiddeld aantal keer raden\", sum(LC) / len(LC))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dubbele ogen" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "17\n" + ] + } + ], + "source": [ + "from random import *\n", + "\n", + "def count_doubles(N):\n", + " \"\"\"Tel aantal dubbele ogen bij N worpen\n", + " \"\"\"\n", + " doubles = 0\n", + " for _ in range(0, N):\n", + " d1 = choice([1,2,3,4,5,6]) # eerste dobbelsteen\n", + " d2 = choice([1,2,3,4,5,6]) # tweede dobbelsteen\n", + " if d1 == d2:\n", + " doubles += 1\n", + " return doubles\n", + "\n", + "print(count_doubles(100))\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "LC = [count_doubles(100) for x in range(1000)]" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[15, 17, 13, 14, 9, 14, 22, 17, 15, 19]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LC[0:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gemiddeld dubbele ogen (/100): 16.61\n" + ] + } + ], + "source": [ + "print(\"Gemiddeld dubbele ogen (/100):\", sum(LC)/len(LC))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Condities\n", + "\n", + "List comprehension met condities\n", + "\n", + "> [ **expressie** voor elke **waarde** in **collectie** als <**test**>]" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n" + ] + } + ], + "source": [ + "def vwl(s):\n", + " \"\"\"Tel het aantal klinkers\n", + " \"\"\"\n", + " LC = [1 for x in s if x in \"aeiou\"]\n", + " return sum(LC)\n", + "\n", + "print(vwl(\"hanze Hogeschool\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Een ander voorbeeld, tel het aantal elementen in de list `L` die gelijk is aan `e`." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "def count(e, L):\n", + " \"\"\"Tel het aantal e in L\n", + " \"\"\"\n", + " LC = [1 for x in L if x == e]\n", + " return sum(LC)\n", + "\n", + "print(count(\"o\", \"hanze Hogeschool\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Oneliners" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def len(L):\n", + " LC = [1 for x in L]\n", + " return sum(LC)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def len(L):\n", + " return sum([1 for x in L])\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "List comprehesion maakt het mogelijk om met een heel compacte syntax oplossingen te schrijven. Bedenk wel dat dit niet altijd de leesbaarheid ten goede komt en het is geen probleem om het in stukjes uit te schrijven, bijvoorbeeld door het gebruik van een variabele (`LC` in de eerste variant)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opdrachten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 1\n", + "Wat is het resultaat van de volgende list comprehensions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Vraag 1\n", + "\n", + "```python\n", + "[n ** 2 for n in range(0, 5)]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Vraag 2\n", + "\n", + "```python\n", + "[42 for z in [0, 1, 2]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Vraag 3\n", + "\n", + "```python\n", + "[z for z in [0, 1, 2]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Vraag 4\n", + "\n", + "```python\n", + "[s[1::2] for s in [\"elk\", \"ook\", \"vlo\"]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Vraag 5\n", + "```python\n", + "[a * (a - 1) for a in range(8) if a % 2 == 1]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maak de listcomprehension af zodat de functie `nodds(L)` voldoet aan de volgende eisen:\n", + "\n", + "- input: `L`, een list met getallen\n", + "- output: het aantal **oneven** getallen in `L`\n", + "\n", + "Voorbeeld:\n", + "\n", + "```python\n", + "nodds([3, 4, 5, 7, 42]) == 3\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def nodds(L):\n", + " LC = [... for ... in L ...]\n", + " return sum(LC)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Scrabble score" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We gaan een functie schrijven dat de srabble score van een woord kan berekenen. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gegeven de functie `letter_score(s)` dat voor de letter `s` de score teruggeeft." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def letter_score(s):\n", + " \"\"\"Scrabble letter score\n", + " \"\"\"\n", + " if s in \"adeinorst\":\n", + " return 1\n", + " elif s in \"ghl\":\n", + " return 2\n", + " elif s in \"bcmp\":\n", + " return 3\n", + " elif s in \"jkuvw\":\n", + " return 4\n", + " elif s == \"f\":\n", + " return 5\n", + " elif s == \"z\":\n", + " return 6\n", + " elif s in \"xy\":\n", + " return 8\n", + " elif s == \"q\":\n", + " return 10\n", + " else:\n", + " return 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maak de listcomprehension af in de onderstaande functie `Scrabble_score(s)` dat de score van de string `S` kan uitrekenen. Je mag ervan uitgaan dat `S` enkel bestaat uit kleine letters. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def scrabble_score(S):\n", + " LC = [... for ... in ...] #\n", + " return sum(LC)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maak de listcomprehension af zodat de functie `ndivs(N)` voldoet aan de volgende eisen:\n", + "\n", + "- input: `N`, een integer >= 2\n", + "- output: het aantal positieve delers van `N`\n", + "\n", + "Voorbeeld:\n", + "\n", + "```python\n", + "ndivs(12) == 6\n", + "```\n", + "\n", + "(de positieve delers van 12 zijn `[1, 2, 3, 4, 6, 12]`)\n", + "\n", + "Tip: gebruik `range` om een reeks getallen van 1 *tot en met* `N` te genereren" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def ndivs(N):\n", + " LC = [... for ... in ... if ...]\n", + " return sum(LC)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Een uitdaging!\n", + "\n", + "Maak de listcomprehension af zodat de functie `primes_up_to(N)` voldoet aan de volgende eisen:\n", + "\n", + "- input: `P` een integer >= 2\n", + "- output: de lijst van priemgetallen tot en met `P`\n", + "\n", + "Voorbeeld:\n", + "\n", + "```python\n", + "primes_up_to(12) == [2, 3, 5, 7, 11]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ter herinnering, een priemgetal is een heel getal dat precies door twee getallen kan worden gedeeld en waarmee je met de deling een heel getal overhoudt. Een priemgetal is altijd deelbaar door 1 en deelbaar door zichzelf.\n", + "\n", + "Bijvoorbeeld het getal 5 heeft precies 2 delers, namelijk 1 en 5. Het getal 4 is geen priemgetal, 4 heeft namelijk 3 delers (1, 2 en 4). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def primes_up_to(P):\n", + " LC = [... for ... in ... if ...]\n", + " return LC" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tip: je kan in de conditie de functie `ndivs` gebruiken als in `ndivs(x) == 2`." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/8b_double_list_comprehension.ipynb b/lectures/8b_double_list_comprehension.ipynb new file mode 100644 index 00000000..96be5f8b --- /dev/null +++ b/lectures/8b_double_list_comprehension.ipynb @@ -0,0 +1,436 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LoL's comprehension" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "List comprehension kunnen ook gebruikt worden met meer dan 1 lijst." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zelfde waarden in twee lijsten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- input: `Y` en `W`, twee lijsten met \"loterij\" getallen (integers)\n", + "- output: de getallen in `Y` dat ook in `W` voorkomt\n", + "\n", + "Voorbeeld:\n", + "\n", + "```python\n", + "lingo([5, 7, 42, 47], [3, 4, 5, 7, 44, 47]) == 3\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def same_numbers(Y, W):\n", + " LC = [x for x in Y if x in W]\n", + " return LC" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Met een kleine aanpassing kunnen we ook tellen hoeveel getallen in `Y` ook voorkomt in `W`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def lingo(Y, W):\n", + " LC = [1 for x in Y if x in W]\n", + " return sum(LC)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Paar gewijs optellen" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- input: `Y` en `W`, twee lijsten met evenveel getallen (integers)\n", + "- output: De elementen zijn paarsgewijs bij elkaar opgeteld. Met andere woorden. [Y[0] + W[0], Y[1]+W[1], ...]\n", + "\n", + "Voorbeeld:\n", + "\n", + "```python\n", + "pairwise([1, 2, 3, 4], [5, 6, 7, 8]) == [6, 8, 10, 12]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[6, 8, 10, 12]\n" + ] + } + ], + "source": [ + "def pairwise(Y, W):\n", + " LC = [Y[i] + W[i] for i in range(0, len(Y))]\n", + " return LC\n", + "\n", + "print(pairwise([1, 2, 3, 4], [5, 6, 7, 8]) )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tweedimensionale arrays" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zijn overal! (en zijn `LoL`'s)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def mul_table(n):\n", + " \"\"\"Returns a multiplication table for n\n", + " \"\"\"\n", + " return [[x * y for x in range(1, n + 1)] for y in range(1, n + 1)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Voor alle `y` in de range van `1` tot `n+1` wordt \n", + "```python \n", + "[x * y for x in range(1, n + 1)] \n", + "``` \n", + "uitgevoerd. Het wordt dus `n` keer uitgevoerd en dit creeert `n` lijsten binnen de list `rn`. Dit creëert dus een LoL. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[1, 2, 3, 4, 5],\n", + " [2, 4, 6, 8, 10],\n", + " [3, 6, 9, 12, 15],\n", + " [4, 8, 12, 16, 20],\n", + " [5, 10, 15, 20, 25]]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mul_table(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def mul_table(n):\n", + " \"\"\"Returns a multiplication table for n\n", + " \"\"\"\n", + " table = [] # start with an empty table\n", + " \n", + " for x in range(1, n + 1): # for every row in this table ...\n", + " row = [] # start with an empty row\n", + " \n", + " for y in range(1, n + 1): # for every column in this row ...\n", + " row += [x * y] # add the column value to the row\n", + " \n", + " table += [row] # add the row to the table\n", + " \n", + " return table # return table" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gegeven een LoL" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "L = [\n", + " [3, 2, 6, 8],\n", + " [9, 2, 5, 7],\n", + " [0, 3, 2, 3],\n", + " [1, 2, 3, 4]\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wat als we willen tellen hoeveel getallen er in de LoL zijn." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def sum_2D(lol):\n", + " LC = [len(row) for row in lol]\n", + " return sum(LC)\n", + "\n", + "print(sum_2D(L))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De expressie mag dus een lijst bevatten. `for row in lol` gaat elke rij langs en `len(row)` telt hoeveel elementen er in de rij staan. `sum(LC)` telt vervolgens alle lengtes van alle rijen bij elkaar op. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nu willen we alle getallen in de LoL verdubbelen. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[6, 4, 12, 16], [18, 4, 10, 14], [0, 6, 4, 6], [2, 4, 6, 8]]\n" + ] + } + ], + "source": [ + "def double(lol):\n", + " LC = [[x * 2 for x in row] for row in lol]\n", + " return LC\n", + "\n", + "print(double(L))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`for row in lol` gaat elke rij af in de LoL. \n", + "`[x * 2 for x in row]` gaat elk element af binnen de gegeven rij en verdubbelt deze. Zo worden dus alle elementen per rij verdubbelt." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Op deze manier kunnen we ook afbeeldingen bewerken. \n", + "Ter herinnering, een afbeelding bestaat uit rijen met pixels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "afbeelding = [\n", + " [[r, g, b], [r, g, b], [r, g, b], ...]\n", + " [[r, g, b], [r, g, b], [r, g, b], ...]\n", + " [[r, g, b], [r, g, b], [r, g, b], ...]\n", + " ...\n", + "]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We zouden dus elke pixel kunnen bewerken met behulp van een List comprehension. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "LC = [[change(pix) for pix in row] for row in afbeelding] \n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opdrachten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 1\n", + "In het werkcollege van week 6, Fraaie plaatjes, gebruikte we for loops om alle pixels binnen een afbeelding aan te passen" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def invert():\n", + " \"\"\" run this function to read in the in.png image,\n", + " change it, and write out the result to out.png\n", + " \"\"\"\n", + " im_pix = get_rgb('in.png') # lees het bestand in.png in\n", + " print(\"De eerste twee pixels van de eerste rij zijn\", im_pix[0][0:2])\n", + " #\n", + " # Onthoud dat im_pix een lijst (de afbeelding) van\n", + " # lijsten (elke rij) van lijsten (elke pixel is [R,G,B]) is\n", + " #\n", + " new_pix = []\n", + " for row in im_pix:\n", + " new_row=[]\n", + " for pixel in row:\n", + " new_pixel = change(pixel)\n", + " new_row+= [new_pixel]\n", + " new_pix += [new_row]\n", + " # sla nu het bestand 'out.png' op\n", + " save_rgb(new_pix, 'out.png')\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vervang de nested loops met een list comprehension zodanig dat alle pixels worden aangepast met behulp van de functie `change(pixel)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- input: row en colums, waarbij row aangeeft hoeveel rijen er zijn en colums hoe lang de rijen moeten zijn. \n", + "- output: een LoL met `row` aantal list van `colums` lang gevuld met 0-en. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Input: empty_board(5, 3): \n", + "output: \n", + "[[0,0,0] \n", + " [0,0,0] \n", + " [0,0,0] \n", + " [0,0,0] \n", + " [0,0,0]] " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- input: Een LoL \n", + "- output: Een LoL waarbij alle oneven getallen zijn verwijderd. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In: [[2,3,4][4,5,6][6,7,8]] \n", + "Out: [[2,4][4,6][6,8]]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/9a_intro_recursie.ipynb b/lectures/9a_intro_recursie.ipynb new file mode 100644 index 00000000..be7b4643 --- /dev/null +++ b/lectures/9a_intro_recursie.ipynb @@ -0,0 +1,446 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Intro Recursief" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Stel het volgende probleem voor. Je wilt alle namen van alle word documenten printen die in de map documenten staan. Dat is inclusief alle submappen. Deze submappen kunnen ook weer submappen bevatten. Dit kunnen best veel word documenten zijn. Voordat we dit meteen aan programmeren, eerst een plan opstellen. Onthoud, probeer, plan, programeer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plan" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Als je een plan opstelt kan je dit doen in zogenaamde psuedocode. Dit is niet bestaande programmeer code, maar het geeft wel aan wat je wilt bereiken. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plan 1\n", + "```python\n", + "functon print_names(folder):\n", + " print alle word documenten \n", + " for submap in folder\n", + " print alle word documenten\n", + " for subsubmap in submap\n", + " print alle word documenten\n", + " for subsubsubmap in subsubmap\n", + " Print alle word documenten\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hoeveel for loops zijn er nodig? Het lastige is dat we niet weten hoeveel submappen er zijn en hoe diep deze mappen gaan. Vergeet niet, het filesysteem is een boomstructuur. Elk map kan submappen bevatten en ook deze submappen kunnen weer hun eigen submappen bevatten en ook deze submappen kunnen weer hun eigen submappen bevatten enz...\n", + "\n", + "![Boomstructuur](images/0/tree_folders.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ik wil graag dat de functie print_names() alle namen binnen een map print. Als deze perfect werkt, zou ik deze kunnen gebruiken om ook alle submappen te laten printen. We hebben al eens eerder gezien dat een functie zichzelf mag aanroepen." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plan 2\n", + "```python\n", + "function print_names(folder):\n", + " print alle word documenten\n", + " for subfolder in folder:\n", + " print_names(subfolder)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Een oplossing die zichzelf herhaalt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Stel je een functie voor die het aantal i's in een string telt en dit als waarde teruggeeft. Dit is een lastig probleem, laten we proberen het eerst uit te schrijven zonder direct in Python te denken. Het resultaat van de functie zou het volgende moeten zijn:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Totaal aantal i's in `\"i💙aliens\"`?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Laat dit de string zijn die we willen gaan onderzoeken en je weet dat een string een opeenvolging van karakters is. We zullen karakter voor karakter moeten controleren (testen) of het gelijk is aan het karakter \"i\" (en ja, emoji zijn ook karakters :heart:). Karakter voor karakter betekent dat een eerste stap om dit probleem op te lossen de volgende zal zijn:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aantal i's in `\"i\"` + Aantal i's in `\"💙aliens\"`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We nemen het eerst karakter, tellen het aantal i's (dit kan voor een enkel karakter 0 of 1 zijn) en tellen daar het aantal i's in het *restant* van de string bij op. We herhalen deze handeling voor het eerste karakter van het restant, en tellen daar natuurlijk het resultaat van het eerste karakter bij op:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aantal i's in `\"i\"` + Aantal i's in `\"💙\"` + Aantal i's in `\"aliens\"`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Et cetera. Je zal hier een patroon zien, het probleem en oplossing herhaalt zich steeds: na het eerste karakter moeten we hetzelfde \"recept\" steeds weer herhalen voor het restant van de string. \n", + "\n", + "Terzijde, weet je nog dat je het eerste karakter en het restant van een string kan lezen met `s[0]` en `s[1:]`?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Paradigmas\n", + "\n", + "Verschillende manieren om problemen op te lossen:\n", + "\n", + "**sequentieeel** (iteratief)\n", + "\n", + "**zelfgelijkend** (recursief)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Problemen zijn op meer dan één manier op te lossen en we komen daarmee aan bij het bestaan van verschillende [programmeerparadigmas](https://nl.wikipedia.org/wiki/Programmeerparadigma), dat wil zeggen technieken en benaderingen voor het oplossen van een probleem. Tot nu toe hebben we voornamelijk interatieve constructies gebruikt met behulp van lussen. We gaan nu recursie gebruiken om problemen op te lossen. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sequentieel denken\n", + "\n", + "**faculteit**\n", + "\n", + "wiskunde: $5! = 120$\n", + "\n", + "informatica: `fac(5) = 5 * 4 * 3 * 2 * 1`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Laten we het geheugen even opfrissen wat de faculteit van een getal ook alweer is. Stel je 42 aliens voor en je zou willen weten op hoeveel manieren je deze aliens op een rij kan zetten. Je weet misschien het antwoord, dit is 42 x 41 x 41 ... 3 x 2 x 1, of ook wel bekend als de *42 faculteit* en (wiskundig) geschreven als $42!$. Sequentieel denken en daarmee dit probleem oplossen (uitschrijven) als `5 * 4 * 3 * 2 * 1` is heel natuurlijk voor mensen, zo hebben we het als oplossing geleerd!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`fac(N) = N * (N-1) * ... * 3 * 2 * 1`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maar zou je `fac(5)` als een meer algemene versie van zichzelf kunnen schrijven? Dat kan, laten we daar een begin mee maken en je zal zien dat een zichzelf herhalend (terugkerend?) patroon gaat ontstaan, net als bij het aantal i's in `\"i💙aliens\"`..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Recursief denken\n", + "\n", + "**faculteit**\n", + "\n", + "wiskunde: $5! = 120$\n", + "\n", + "informatica: `fac(5) = 5 * 4 * 3 * 2 * 1`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`fac(5) = 5 * fac(4)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`fac(N) = N * fac(N - 1)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dit is correct...\n", + "\n", + "```python\n", + "def fac(N):\n", + " return N * fac(N - 1)\n", + "```\n", + "\n", + "maar is niet aan te raden..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Je kan de funcie `fac(N)` met de meest algemene vorm (oplossing) nu invulllen. De functie roept zichelf aan met steeds `N-1`, dit is het patroon dat we hebben kunnen ontdekken. Maar dit is niet volledig correct zoals je misschien zelf al kan zien?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Oneindige Recursie](images/3/infinite_recursion.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Loop in gedachten eens na wat er gebeurt als je 1 hebt bereikt in deze functie, het zal vrolijk `fac(N-1)` blijven aanroepen! Dit zal dus doorgaan in een \"oneindige recursie\" want we hebben nog geen rekening gehouden met de \"base case\", het geval waar **geen** recursieve aanroep meer mogelijk is." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Een *base case* ontbreekt, de *noodstop*!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Er is een duidelijk moment dat we de recursie moeten beëindigen, het moment dat geen recursieve aanroep meer mogelijk is. Dit is het moment dat de base case is bereikt (de \"noodzakelijk\" stop). `N-1` gaat uiteindelijk naar negatieve getallen, zou de waarde 0 in dit geval de noodzakelijke stop (de base case) kunnen zijn?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recursief denken\n", + "\n", + "```python\n", + "def fac(N):\n", + " if N == 0: # base case \n", + " return 1\n", + " else: # recursive case\n", + " return N * fac(N - 1)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Je kan testen op de *base case*, in het geval van een faculteit is dit bereikt als N gelijk is aan 0. Maar als je naar de laatste regel kijkt (`N * fac(N-1)`), hoe kan iets (`N`) vermenigvudigd worden met iets dat nog niet is uitgevoerd (`fac(N-1)`)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recursief handelen\n", + "\n", + "```python\n", + "def fac(N):\n", + " if N == 0: # base case\n", + " return 1\n", + " else: # recursive case\n", + " rest = fac(N - 1)\n", + " return N * rest\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Deze uitwerking is meer in de buurt van wat achter schermen gebeurt. In het geval `N * fac(N - 1)` wordt door de computer de recursieve aanroep (`fac(N - 1)`) eerst aangeroepen om vervolgens daar `N` mee te vermenigvuldigen. Je kan dit goed vergelijken met het eerst zetten van een variabele (`rest` in dit geval) die later wordt gebruikt om het antwoord te berekenen (`N * rest`)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Voordelen van recursie\n", + "\n", + "Het kan *zelfstandig* in één keer een *willekeurige* diepte ingaan" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De functie heeft aan zichzelf genoeg en met één aanroep (van ons) lost het zichzelf tot elke willekeurige diepte op! Dit is perfect voor het probleem waar we mee begonnen, namelijk het printen van alle word documenten. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In principe zijn alle problemen iteratief of recursief op te lossen. Het ligt aan het type probleem welke optie de betere/makkelijkere is. We gaan later kijken naar problemen die zich heel goed lenen voor een recursieve oplossing. Eerst oefenen met recursief denken. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recursie unplugged" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Een groep gevangenen zitten op een rij. De meest rechter dief krijgt een beker in handen gevuld met getallen. Zijn taak is om erachter te komen of het getal `42` in de beker zit. Heeft hij gelijk, dan is de hele groep vrij, heeft hij ongelijk, dan blijft de hele groep een jaar langer gevangen. Er zijn wel een paar regels waar de hele groep zich aan moet houden. Doen ze dat niet, falen ze de test automatisch.\n", + "1. Elke dief mag maar èèn getal uit de beker halen. Niemand anders mag dit getal zien. Daarna geeft hij de beker aan degene die rechts van hem zit.\n", + "2. Elke dief mag 1 keer True of False fluisteren naar zijn/haar linker buur. De rest van de groep mag dit niet horen.\n", + "\n", + "Met welke strategie kunnen ze dit probleem oplossen?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Oplossing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Elke dief pakt 1 papiertje en geeft dan de beker door aan de linker buurman als 42 niet op het papiertje staat. Als een dief een lege beker krijgt, dan fluistert hij false naar zijn buurman. Die geeft het weer door aan zijn buurman en dat gaat door totdat de eerste dief de informatie heeft.\n", + "\n", + "Als een dief 42 pakt uit de beker stopt hij met het doorgeven van de beker en fluistert hij True naar zijn rechter buurman. Die geeft het weer door aan zijn rechter buurman en dat gaat door totdat de eerste dief de informatie heeft. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def find_forty_two(beker):\n", + " \n", + " if len(beker) == 0: # check of de beker leeg is. \n", + " return False # vertel je rechter buurman dat de beker leeg is\n", + " \n", + " papiertje = beker[0] # pak een papiertje\n", + " if papiertje == 42: # getal 42 is gevonden\n", + " return True # vertel je rechter buurman dat 42 is gevonden\n", + " buurman = find_forty_two(beker[1:]) #geef de beker aan je linker buurman en wacht op antwoord.\n", + " return buurman # geef vervolgens zijn antwoord door aan je rechter buurman\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Je kan het ook zien dat elke dief te lui is om de hele beker te checken voor het getal 42. Inplaats daarvan pakt hij 1 briefje, controleert die en geeft vervolgens aan zijn buurman de rest van beker om te controleren. Hoe de buurman het probleem oplost, dat maakt niet uit. Vervolgens is de buurman ook lui, checkt 1 papiertje en schuift de rest van het werk op een ander. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De functie doet dus 1 stap/berekening en schuift vervolgens de rest van het werk naar de volgende en wacht op resultaat." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opgave 1\n", + "\n", + "Een groep gevangenen zitten nogmaals op een rij. De meest rechter dief krijgt een beker in handen gevuld met getallen. Zijn taak is om het hoogste getal te achterhalen. Heeft hij gelijk, dan is de hele groep vrij, heeft hij ongelijk, dan blijft de hele groep een jaar langer gevangen. Er zijn wel een paar regels waar de hele groep zich aan moet houden. Doen ze dat niet, falen ze de test automatisch.\n", + "1. Elke dief mag maar èèn getal uit de beker halen. Daarna geeft hij de beker aan degene die rechts van hem zit.\n", + "2. Elke dief mag èèn getal aan zijn/haar linker buur laten zien.\n", + "\n", + "Met welke strategie kunnen ze dit probleem oplossen? " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opdracht 2\n", + "Een groep gevangenen zitten weer op een rij. Dit keer zijn ze geblinddoekt, ze kunnen elkaar dus niet zien en weten niet hoe groot de groep is. De meest rechter dief krijgt een beker in handen gevuld met papiertjes. Zijn taak is om erachter te komen hoeveel papiertjes er in de beker zit. Heeft hij gelijk, dan is de hele groep vrij, heeft hij ongelijk, dan blijft de hele groep een jaar langer gevangen. Er zijn wel een paar regels waar de hele groep zich aan moet houden. Doen ze dat niet, falen ze de test automatisch.\n", + "\n", + "1. Elke dief mag èèn papiertje uit de beker halen, Daarna geeft hij de beker aan degene die rechts van hem zit.\n", + "2. Elke dief mag èèn getal fluisteren naar zijn/haar linker buur. De rest van de groep mag dit niet horen.\n", + "\n", + "\n", + "Met welke strategie kunnen ze dit probleem oplossen? \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opdracht 3\n", + "\n", + "Een groep gevangenen zitten nogmaals op een rij. De meest rechter dief krijgt een beker in handen gevuld met getallen. Zijn taak is alle getallen bij ekaar op te tellen. Heeft hij gelijk, dan is de hele groep vrij, heeft hij ongelijk, dan blijft de hele groep een jaar langer gevangen. Er zijn wel een paar regels waar de hele groep zich aan moet houden. Doen ze dat niet, falen ze de test automatisch.\n", + "1. Elke dief mag maar èèn getal uit de beker halen. Daarna geeft hij de beker aan degene die rechts van hem zit.\n", + "2. Elke dief mag èèn getal fluisteren naar zijn/haar linker buur. De rest van de groep mag dit niet horen.\n", + "\n", + "Met welke strategie kunnen ze dit probleem oplossen? \n" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/9b_recursief.ipynb b/lectures/9b_recursief.ipynb new file mode 100644 index 00000000..69d90ad5 --- /dev/null +++ b/lectures/9b_recursief.ipynb @@ -0,0 +1,207 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Recursief ontwerpen" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zodra je een probleem recursief wil oplossen moet je twee belangrijke stappen maken. \n", + "- Bepaal de base case. Dit voorkomt dat je in een oneindige recursie terecht komt\n", + "- Bepaal de recursie case. Roept de functie opnieuw aan met een kleiner probleem. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Optelling: `plusone(n)`\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De functie `plusone(n)` telt `n` door 1-en op te tellen. Als `n` gelijk is aan 5 dan worden 5 1-en bij elkaar opgeteld. Hoe kan je dit recursief oplossen? Denk altijd eerst aan de base case, in welk geval is is geen recursie meer mogelijk? \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plan: \n", + "Wat moet in dit geval voor de `...` moeten worden ingevuld voor de base en recursieve case?\n", + "\n", + "- `plusone(0)` moet ... teruggeven\n", + "\n", + "**recursie case**:\n", + "\n", + "- `plusone(5)` is de waarde van `1+1+1+1+1` en is gelijk aan de waarde `1 + (...)`, wat gelijk is aan `1 + plusone(...)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### programmeren" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def plusone(n):\n", + " \"\"\"Geeft n terug door 1-en op te tellen!\n", + " \"\"\"\n", + " if n == 0: # base case\n", + " return ...\n", + " else: # recursive case\n", + " return ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De `...` zie je hier in de code terug. Wat moet voor de base- en recursieve case worden ingevuld? Denk hier terug aan aan `fac(x)`, hetzelfde patroon zal je hier moeten volgen!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Oplossing" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def plusone(n):\n", + " \"\"\"Geeft n terug door 1-en op te tellen!\n", + " \"\"\"\n", + " if n == 0: # base case\n", + " return 0\n", + " else: # recursive case\n", + " return 1 + plusone(n-1)\n", + "\n", + "assert plusone(0) == 0 # test de base case\n", + "assert plusone(5) == 5 # test de oplossing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Machtverheffing: `pow(b, p)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De functie `pow(b, p)` met de positieve integers `b` en `p` berekent $b^{p}$. Je mag de operator `**` niet gebruiken en het moet recursief opgelost worden. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### plan" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De base case:\n", + "\n", + "`pow(2, 0)` moet ... teruggeven\n", + "\n", + "recursie case:\n", + "\n", + "- `pow(2, 5)` is de waarde van `2*2*2*2*2` en is gelijk aan\n", + "- `2 * (...)`, wat gelijk is aan `2 * pow(..., ...)`\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Programmeren" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def pow(b, p):\n", + " \"\"\"b**p, recursief!\n", + " \"\"\"\n", + " if p == 0: # base case\n", + " return ...\n", + " else: # recursive case\n", + " return ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Oplossing" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def pow(b, p):\n", + " \"\"\"b**p, recursief!\n", + " \"\"\"\n", + " if p == 0: # base case\n", + " return 1.0\n", + " else: # recursive case\n", + " return b * pow(b, p-1)\n", + "\n", + "assert pow(2, 0) == 1.0 # test de base case\n", + "assert pow(2, 5) == 32.0 # test de oplossing" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/practicals/8_klinkt_goed.ipynb b/practicals/8_klinkt_goed.ipynb new file mode 100644 index 00000000..5986575b --- /dev/null +++ b/practicals/8_klinkt_goed.ipynb @@ -0,0 +1,579 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Klinkt goed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Geluid\n", + "\n", + "Geluid is, zoals je misschien al eerder hebt gehoord, een trilling en deze trilling kan te tekenen als een golfbeweging.\n", + "\n", + "![Sound wave](images/8/wave.png)\n", + "\n", + "Hard geluid heeft een hogere amplitude dan een zacht geluid en bij een hoog geluid hoort een kleinere golflengte\n", + "\n", + "![Amplitude and frequentie](images/8/amplitude_freq.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Geluidbestanden\n", + "\n", + "\n", + "Afhankelijk van het formaat kunnen audiogegevens op veel verschillende manieren gecodeerd en opgeslagen worden. Het opslaan van een gehele geluidsgolf kost de computer teveel geheugen want hij zou elke punt in zo'n grafiek op moeten slaan. Een van de meest eenvoudige coderingen staat bekend als *pulscodemodulatie* (PCM), waarbij de geluidsgolven om de zoveel tijd worden *gesampled*.\n", + "\n", + "![Sampling](images/8/sampling.png)\n", + "\n", + "Uiteindelijk heb je een lijst van waarden in het bereik -128 tot 127 (als er 1 byte per geluidssample wordt gebruikt) of -32768 tot 32767 (als er 2 bytes voor elke sample zijn). Daarnaast heb je een samplerate dat aangeeft hoeveel samples er per seconde aangeeft afgespeeld moet worden om de normale snelheid te bereiken. Met deze informatie kan de computer de originele geluid herconstructueren.\n", + "\n", + "![Reconstructie geluidbestand](images/8/reconstruction.jpg)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Geluid programmeren\n", + "\n", + "We laten twee voorbeelden zien hoe je geluidsdata kan lezen en bewerken. Probeer deze voorbeelden!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Voorbeeld 1**: `change_speed`\n", + "\n", + "De functie `change_speed` zou aanwezig moeten zijn in `wk4ex1.py`, zo niet dan kan je het hier kopiëren en in jouw bestand plakken:\n", + "\n", + "```python\n", + "# De voorbeeldfunctie change_speed\n", + "def change_speed(filename, newsr):\n", + " \"\"\"change_speed allows the user to change an audio file's speed.\n", + " Arguments: filename, the name of the original file\n", + " newsr, the new sampling rate in samples per second\n", + " Result: no return value, but\n", + " this creates the sound file 'out.wav'\n", + " and plays it\n", + " \"\"\"\n", + " print(\"Het originele geluid afspelen...\")\n", + " play(filename)\n", + "\n", + " sound_data = [0, 0] # een \"lege\" lijst\n", + " read_wav(filename, sound_data) # laad gegevens IN sound_data\n", + "\n", + " samps = sound_data[0] # de samples van de ruwe geluidsgolven\n", + "\n", + " print(\"De eerste 10 geluidsdruksamples zijn\\n\", samps[:10])\n", + " sr = sound_data[1] # de sampling rate, sr\n", + "\n", + " print(\"Het aantal samples per seconde is\", sr)\n", + "\n", + " # deze regel is niet echt nodig, maar staat hier voor de consistentie...\n", + " newsamps = samps # dezelfde samples als eerder\n", + " new_sound_data = [newsamps, newsr] # nieuwe geluidsgegevens\n", + " write_wav(new_sound_data, \"out.wav\") # sla de gegevens op naar out.wav\n", + " print(\"\\nNieuw geluid afspelen...\")\n", + " play(\"out.wav\") # speel het nieuwe bestand 'out.wav' af\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lees het voorbeeld door en probeer het met de volgende geluidsbestanden:\n", + "\n", + "```ipython\n", + "In: change_speed(\"swfaith.wav\", 44100) # snelle Vader\n", + "# ... aantal regels uitvoer ...\n", + "\n", + "In: change_speed(\"spam.wav\", 11025) # langzame Monty Python\n", + "# ... aantal regels uitvoer ...\n", + "\n", + "In: change_speed(\"swnotry.wav\", 22050) # Yoda op normale snelheid\n", + "# ... aantal regels uitvoer ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ":::{admonition} Hoe werkt deze code?\n", + ":class: info\n", + "\n", + "1. De geluidsdata wordt in *twee* onderdelen teruggegeven door de aanroep naar `read_wav`, via de regels\n", + "\n", + " ```python\n", + " read_wav(filename, sound_data)\n", + " samps = sound_data[0]\n", + " sr = sound_data[1]\n", + " ```\n", + "\n", + " Merk op dat dit losse regels zijn en dat `sound_data` begint met de waarde `[0, 0]`. Wat hier gebeurt is dat `read_wav` de lijst `sound_data` zo aanpast dat het element met index `0` de lijst samples bevat en het element met index `1` de sampling rate (`sr`).\n", + "\n", + "2. Na deze aanroep bevat de variabele `samps` een grote lijst met ruwe luchtdruksamples (floats). **Druk deze lijst niet af**, deze is mogelijk te groot en kan IPython vertragen of zelfs doen crashen!\n", + "\n", + "3. Bovendien bevat na de aanroep de variabele `sr` een integer waarde met de sampling rate, het aantal samples dat per seconde afgespeeld moet worden om de normale snelheid te bereiken.\n", + "\n", + "4. Er wordt hier en daar wat afgedrukt met `print` zodat je iets van de gegevens kan zien.\n", + "\n", + "5. We hebben de nieuwe sampling rate al, dat is het argument `newsr`. Voor de consistentie gebruiken we de variabele `newsamps` om de nieuwe geluidssamples een naam te geven. In dit geval veranderen ze helemaal niet, maar in sommige latere programma's zal `newsamps` verschillen van `samps`.\n", + "\n", + "6. De code schrijft dan `newsamps` en `newsr` weg naar een bestand `out.wav`, die in de map waar je in bezig bent opgeslagen zal worden. Hierbij wordt een oudere versie van dat bestand overschreven.\n", + "\n", + "7. Ten slotte speelt de functie het nieuwe bestand af, met de nieuwe sampling rate `newsr`.\n", + "\n", + "Variaties hierop zul je tegenkomen in alle geluidsfuncties.\n", + ":::\n", + "\n", + "Het volgende voorbeeld laat zien hoe je een nieuw geluid kunt creëren door de samples zelf te veranderen. Dat wil zeggen, `newsamps` zal anders zijn dan `samps` (de oude samples). Vergeet niet dat `samps` een zeer grote lijst van luchtdrukwaarden zal zijn ( ongeveer 50.000 elementen)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Voorbeeld 2**: `flipflop`\n", + "\n", + "De functie `flipflop` zou aanwezig moeten zijn in `wk4ex1.py`, zo niet dan kan je het hier kopiëren en in jouw bestand plakken:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def flipflop(filename):\n", + " \"\"\"flipflop swaps the halves of an audio file\n", + " Argument: filename, the name of the original file\n", + " Result: no return value, but\n", + " this creates the sound file 'out.wav'\n", + " and plays it\n", + " \"\"\"\n", + " print(\"Het originele geluid afspelen...\")\n", + " play(filename)\n", + "\n", + " print(\"Geluidsgegevens inlezen...\")\n", + " sound_data = [0, 0]\n", + " read_wav(filename, sound_data)\n", + " samps = sound_data[0]\n", + " sr = sound_data[1]\n", + "\n", + " print(\"Nieuw geluid berekenen...\")\n", + " # dit bepaalt het middelpunt en noemt dat x\n", + " x = len(samps) // 2\n", + " newsamps = samps[x:] + samps[:x]\n", + " newsr = sr\n", + " new_sound_data = [newsamps, newsr]\n", + "\n", + " print(\"De nieuwe geluidsgegevens opslaan...\")\n", + " write_wav(new_sound_data, \"out.wav\") # schrijf gegevens naar out.wav\n", + "\n", + " print(\"Nieuw geluid afspelen...\")\n", + " play(\"out.wav\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let op het middelste gedeelte van deze code, waar de nieuwe geluidssamples gemaakt worden op basis van de oude. In dit geval is `newsamps` een \"geflipflopde\" versie van de oude `samps`. Merk verder op dat deze code precies hetzelfde is als de opdracht `flipside` uit de [introductie van functies](/lectures/3_functies): `flipflop` plaatst de tweede helft van het geluid *voor* de eerste helft!\n", + "\n", + "Bij het schrijven van jouw geluidsbewerkende functies kan je `flipflop` als startpunt gebruiken.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 1:\n", + "\n", + "Probeer eerst onderstaande functie, die al in het bestand `wk4ex1.py` zou moeten staan. Je kan dit uitvoeren met `test()`:\n", + "\n", + "```python\n", + "# a function to make sure everything is working\n", + "def test():\n", + " \"\"\"A test function that plays swfaith.wav\n", + " You'll need swfaith.wav in this folder.\n", + " \"\"\"\n", + " play(\"swfaith.wav\")\n", + "```\n", + "\n", + "Om dit te laten werken, moet jouw Python versie wel geluid ondersteunen (normaal gesproken moet dit geen probleem zijn). Als het niet werkt, is het handig om met iemand samen te werken bij wie het wel werkt.\n", + "\n", + "Het is ook nodig dat het bestand `swfaith.wav` in dezelfde directory staat als `wk4ex1.py`. Als je in de directory werkt waar je de bestanden hebt uitgepakt, zou dit zo moeten zijn. Als dat niet zo is, dan kan je de bestanden die je hebt uitgepakt kopiëren naar de map waarin je aan het werk bent.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 2:\n", + "\n", + "Schrijf nu een geluidsbewerkende functie `reverse` met de volgende signature\n", + "\n", + "```python\n", + "def reverse(filename):\n", + " ...\n", + "```\n", + "\n", + "zodat `reverse` een `filename` accepteert, net als `flipflop`.\n", + "\n", + "Net als bij `flipflop` moet de sampling rate niet veranderen, maar de functie moet een *omgekeerde* lijst van geluidssamples maken en deze vervolgens op dezelfde manier verwerken als de twee bovenstaande voorbeelden. Dat wil zeggen dat je ze naar het bestand `out.wav` wilt schrijven en vervolgens dat bestand wilt afspelen." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ":::{admonition} Een lijst omdraaien\n", + ":class: tip\n", + "\n", + "Vergeet niet dat je in Python `samps[::-1]` kan schrijven om de lijst `samps` om te draaien!\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zie het volgende voorbeeld:\n", + "\n", + "```ipython\n", + "In: reverse(\"swfaith.wav\") # redaV htraD klinkt spookachtiger maar minder intimiderend\n", + "# ... veel uitvoer ...\n", + "```\n", + "\n", + "Merk op dat deze functie `reverse` *geen* gebruik hoeft te maken van de functies die je hiervoor geschreven hebt, maar de volgende functies wel!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 3: `volume`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Schrijf nu een geluidsbewerkende functie `volume` met de volgende signature\n", + "\n", + "```python\n", + "def volume(filename, scale_factor):\n", + " ...\n", + "```\n", + "\n", + "zodat `volume` een `filename` accepteert zoals gebruikelijk en een floating-point waarde `scale_factor`. Vervolgens moet `volume` op de gebruikelijke manier het geluid verwerken, waarbij het uitvoerbestand en het afgespeelde geluid de amplitude (volume) wordt geschaald met de schaalfactor `scale_factor`. Met andere woorden, elke sample moet worden vermenigvuldigd met `scale_factor`.\n", + "\n", + ":::{admonition} Gebruik de hulpfunctie `scale`\n", + ":class: tip\n", + "\n", + "Gebruik de hulpfunctie `scale` die je eerder hebt geschreven. Wat je nodig hebt is\n", + "\n", + "```python\n", + "newsamps = scale(..., ...)\n", + "```\n", + "\n", + "Dit is een typisch voorbeeld, steeds zullen maar kleine aanpassingen nodig zijn voor elke volgende audio functie die je gaat schrijven.\n", + ":::\n", + "\n", + "Zie de volgende voorbeelden:\n", + "\n", + "```ipython\n", + "In [1]: volume(\"swfaith.wav\", .1) # Een rustiger Darth...\n", + "# ... veel uitvoer ...\n", + "\n", + "In [2]: volume(\"swfaith.wav\", 10.0) # Een hele drukke Darth!\n", + "# ... veel uitvoer ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Je zult merken dat jouw gehoor zich opmerkelijk goed aanpast aan de veranderingen in het absolute volume van deze functie, waardoor het waargenomen effect aanzienlijk minder is dan je zou verwachten.\n", + "\n", + "Je zult ook merken dat als je het volume te veel verhoogt, het geluid vervormd raakt, net als wanneer een versterker op 11 wordt gezet." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opdracht 4: `static`\n", + "\n", + "Schrijf nu een geluidsbewerkende functie `static` met de volgende signature\n", + "\n", + "```python\n", + "def static(filename, probability_of_static):\n", + " ...\n", + "```\n", + "\n", + "zodat `static` een `filename` (zoals gebruikelijk) en een floating-point waarde `probability_of_static` accepteert, waarvan je mag aannemen dat deze tussen 0 en 1 ligt.\n", + "\n", + "`static` moet het geluid op de gebruikelijke manier verwerken, waarbij de uitvoersamples met een kans gelijk aan `probability_of_static` moeten worden vervangen door een willekeurig getal tussen -32768 en 32767.\n", + "\n", + "Je gebruikt hier de hulpfunctie `replace_some` die je al eerder hebt geschreven. Je hoeft `randomize` niet te gebruiken want deze wordt al door `replace_some` gebruikt!\n", + "\n", + "Zie de volgende voorbeelden:\n", + "\n", + "```ipython\n", + "In [1]: static(\"swfaith.wav\", .05) # Vader, die een tunnel in rijdt\n", + "# ... veel uitvoer ...\n", + "\n", + "In [2]: static(\"swfaith.wav\", .25) # Vader op een dial-upverbinding vanuit een galaxy far, far away\n", + "# ... veel uitvoer ...\n", + "```\n", + "\n", + "Je zou kunnen uitproberen hoe hoog je het percentage ruis kunt verhogen totdat het origineel niet meer herkenbaar is. Mensen kunnen zich hier minder goed aan aanpassen dan aan volumeveranderingen." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 5: `overlay`\n", + "\n", + "Schrijf nu een geluidsbewerkende functie `overlay` met de volgende signature\n", + "\n", + "```python\n", + "def overlay(filename1, filename2):\n", + " ...\n", + "```\n", + "\n", + "zodat `overlay` twee bestandsnamen accepteert, en een nieuw geluid creëert dat de twee overlapt (combineert). Het resultaat moet net zo lang zijn als de kortere van de twee. (negeer eventuele extra samples, net als in `add_scale_2`.)\n", + "\n", + "Gebruik de `add_scale_2` hulpfunctie om je hierbij te helpen! Op die manier kan je het relatieve volume van de twee bestanden aanpassen. Het is ook mogelijk, maar zeker niet verplicht, om meer argumenten toe te voegen aan de functie `overlay`, zodat je hiermee de relatieve volumes kan aanpassen (of samples kan bijsnijden, maar dat is lastiger).\n", + "\n", + "*Onthoud* dat `add_scale_2(samps1, samps2, 0.5, 0.5)` lijsten (`samps`) als argumenten accepteert en geen bestandsnamen, dat zijn gewoon strings! De `samps` zijn lijsten van de ruwe geluidsdata.\n", + "\n", + "Zie het volgende voorbeeld:\n", + "\n", + "```ipython\n", + "In: overlay(\"swfaith.wav\", \"swnotry.wav\") # Vader vs. Yoda\n", + "# ... veel uitvoer ...\n", + "```\n", + "\n", + "Extra: hoe kun je `overlay` zo aanpassen dat deze het langere geluid niet afkapt? In plaats van het af te kappen, zou je het kunnen laten doorgaan tegen stilte, of je zou het kortere geluid kunnen herhalen?\n", + "\n", + "De volgende functie combineert een bestand met een verschoven versie van zichzelf." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 6: `echo`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Probeer een geluidsbewerkende functie `echo` te schrijven met de volgende signature\n", + "\n", + "```python\n", + "def echo(filename, time_delay):\n", + "```\n", + "\n", + "zodat `echo` een bestandsnaam accepteert zoals gebruikelijk en een floating-point waarde `time_delay`, die een aantal seconden voostelt.\n", + "\n", + "Dan moet `echo` het geluid op de gebruikelijke manier verwerken, waarbij het originele geluid wordt overlapt door een kopie van zichzelf die in de tijd wordt verschoven met `time_delay` seconden.\n", + "\n", + "Om de geluiden te laten overlappen zal je `add_scale_2` weer willen gebruiken, zoals eerder.\n", + "\n", + "Om de geluiden te verschuiven kan je de sampling rate gebruiken om het aantal samples voor een bepaald aantal seconden te bepalen:\n", + "\n", + "- Als bijvoorbeeld `time_delay` een waarde `0.1` heeft en de sampling rate `22050`, dan moet je `2205` samples wachten\n", + "\n", + "- Of, als `time_delay` een waarde `0.25` heeft en de sampling rate `44100`, dan is het aantal samples dat je moet wachten `11025`\n", + "\n", + ":::{admonition} Stilte toevoegen\n", + ":class: tip\n", + "\n", + "De meest gemakkelijke manier om een \"wachttijd\" aan samples toe te voegen is om een \"lege ruimte\" of \"leeg geluid\" aan het begin\n", + "van `samps` toe te voegen, en dit kan je doen door een lijst nullen aan het begin van `samps` te plaatsen! Bijvoorbeeld,\n", + "\n", + "```python\n", + "samps2 = [0] * 42 + samps\n", + "```\n", + "\n", + "zal 42 samples \"wachten\" door 42 samples *zonder* geluid aan het begin van de geluidsdata `samps` toe te voegen.\n", + "\n", + "Je hebt waarschijnlijk een andere waarde dan 42 nodig, de uitdaging is om daar de juiste waarde te berekenen! Hoe zou je er nu achter kunnen komen welke integer waarde je nodig hebt *in plaats van* 42?\n", + "\n", + "- Bedenk dat je weet hoe lang je wilt wachten (in seconden) en wat de sampling rate is (in samples per seconde).\n", + "\n", + "- Zorg ervoor dat je een integer gebruikt. Bendenk dat als je een floating-pointg getal `f` hebt, je daar een integer van kan maken met `int(f)`.\n", + "\n", + "Terzijde, dit is maar één mogelijke aanpak, er zijn ook andere benaderingen mogelijk voor `echo`.\n", + ":::\n", + "\n", + "Zie het volgende voorbeeld:\n", + "\n", + "```ipython\n", + "In [1]: echo(\"swfaith.wav\", .1) # Hoe veel nullen zijn er aan het begin nodig?\n", + "# ... veel uitvoer ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opdracht 7: `gen_pure_tone`\n", + "\n", + "De laatste voorbeeldfuncties genereren een zuivere sinusvormige toon. Hier is de code, hoewel deze ook in het bestand zou moeten staan:\n", + "\n", + "```python\n", + "def gen_pure_tone(freq, seconds, sound_data):\n", + " \"\"\"pure_tone returns the y-values of a cosine wave\n", + " whose frequency is freq Hertz.\n", + " It returns nsamples values, taken once every 1/44100 of a second.\n", + " Thus, the sampling rate is 44100 hertz.\n", + " 0.5 second (22050 samples) is probably enough.\n", + " \"\"\"\n", + " if sound_data != [0, 0]:\n", + " print(\"De waarde van sound_data moet [0, 0] zijn.\")\n", + " return\n", + " sampling_rate = 22050\n", + " # hoeveel samples we moeten genereren\n", + " nsamples = int(seconds * sampling_rate) # naar beneden afgerond\n", + " # de factor f om de frequentie te schalen\n", + " f = 2 * math.pi / sampling_rate # omrekenen van samples naar Hz\n", + " # de factor a om de amplitude te schalen\n", + " a = 32767.0\n", + " sound_data[0] = [a * math.sin(f * n * freq) for n in range(nsamples)]\n", + " sound_data[1] = sampling_rate\n", + " return sound_data\n", + "\n", + "\n", + "def pure_tone(freq, time_in_seconds):\n", + " \"\"\"Generates and plays a pure tone of the given frequence.\"\"\"\n", + " print(\"Toon genereren...\")\n", + " sound_data = [0, 0]\n", + " gen_pure_tone(freq, time_in_seconds, sound_data)\n", + "\n", + " print(\"De nieuwe geluidsgegevens opslaan...\")\n", + " write_wav(new_sound_data, \"out.wav\") # schrijf gegevens naar out.wav\n", + "\n", + " print(\"Nieuw geluid afspelen...\")\n", + " play(\"out.wav\")\n", + "```\n", + "\n", + "\n", + "\n", + "**a** Bekijk deze code en probeer het uit om een gevoel te krijgen voor wat het doet, hoewel de wiskunde achter de sinusgolf niet cruciaal is.\n", + "\n", + "De belangrijke details zijn dat de functie `pure_tone` een gewenste frequentie `freq` en een tijdsduur `time_in_seconds` accepteert. De wiskundige details worden dan overgelaten aan `gen_pure_toon`.\n", + "\n", + "Zie het volgende voorbeeld:\n", + "\n", + "```ipython\n", + "In [1]: pure_tone(440, 0.5) # een A van 0,5 seconde in concertstemming\n", + "# ... veel uitvoer ...\n", + "```\n", + "\n", + "Je kan de frequenties van andere noten vinden op [Wikipedia](https://nl.wikipedia.org/wiki/Toonhoogtetabel) en op vele andere plekken. Hier is ook een klein overzicht:\n", + "\n", + "![Frequentietabel](images/8/notes.png)\n", + "\n", + "Het is interessant om op te merken dat C0 onder het bereik van het normale menselijke gehoor ligt (we kunnen slechts tot ongeveer 20 Hz horen), maar B8 laat veel ruimte over (de meeste mensen onder de 40 jaar kunnen tot 20.000 Hz of hoger horen). Ook gaan de meeste piano's alleen naar A0 (28 Hz), maar de Bösendorfer Imperial Concert Grand heeft extra toetsen (zwart gekleurd) die helemaal naar C0 gaan. Voor het geval je extra bas nodig hebt!\n", + "\n", + "\n", + "\n", + "**b** Audiofunctie 6: `chord`\n", + "\n", + "Het laatste probleem is om op basis van het bovenstaande voorbeeld een functie te schrijven die akkoorden maakt, met de volgende handtekening:\n", + "\n", + "```python\n", + "def chord(f1, f2, f3, time_in_seconds):\n", + " ...\n", + "```\n", + "\n", + "zodat `chord` drie floating-point frequenties `f1`, `f2` en `f3` accepteert, en een floating-point getal `time_in_seconds` voor de tijdsduur.\n", + "\n", + "De functie `chord` moet een akkoord van 3 noten maken en spelen gebaseerd op deze frequenties.\n", + "\n", + "\n", + "Je zult drie *sets* van `samps` en `sr` uit `gen_pure_tone` willen krijgen, bijvoorbeeld,\n", + "\n", + "```python\n", + "samps1, sr1 = gen_pure_tone(f1, time_in_seconds, [0, 0])\n", + "samps2, sr2 = gen_pure_tone(f2, time_in_seconds, [0, 0])\n", + "samps3, sr3 = gen_pure_tone(f3, time_in_seconds, [0, 0])\n", + "```\n", + "\n", + "Vervolgens heb je echt een `add_scale_3` functie nodig, hoewel we die nog niet hebben. Maar je kunt deze wel maken! (Je zou `add_scale_2` en `add_3` als uitgangspunt kunnen nemen, maar we raden aan om `add_scale_3` als zelfstandige functie te schrijven, en niet om die andere functies aan te roepen).\n", + "\n", + "Tot slot moet je de resulterende lijst samples nemen (noem deze bijvoorbeeld `newsamps`) en deze verwerken met behulp van code die je van de vorige functies hebt geleend:\n", + "\n", + "```python\n", + "new_sound_data = [newsamps, newsr]\n", + "\n", + "print(\"De nieuwe geluidsgegevens opslaan...\")\n", + "write_wav(new_sound_data, \"out.wav\") # schrijf gegevens naar out.wav\n", + "\n", + "print(\"Nieuw geluid afspelen...\")\n", + "play(\"out.wav\")\n", + "```\n", + "\n", + "Zie het volgende voorbeeld:\n", + "\n", + "```ipython\n", + "In [1]: chord(440.000, 523.251, 659.255, 1.0) # A mineur\n", + "# ... veel uitvoer ...\n", + "```\n", + "\n", + "Klinkt jouw akkoord vreselijk? Weet je nog wat er gebeurde toen je het volume te veel verhoogde? `gen_pure_tone` produceert een toon die op maximaal volume staat. Wanneer je twee (of drie) van dergelijke tonen combineert, tellen hun piekvolumes bij elkaar op en het resultaat is te luid voor de computer, waardoor er vervorming ontstaat. Bedenk wat je zou\n", + "kunnen doen om hiervoor te compenseren zonder het akkoord *te stil* te maken. In andere woorden:\n", + "\n", + "- Je zult de totale amplitude op `1.0` willen houden.\n", + "\n", + "- Aangezien de amplitude van elk origineel `1.0` is, moet je een breuk (fractie) als schaalfactor gebruiken om ervoor te zorgen dat de totale amplitude van de opgetelde golven op 1.0 of minder blijft.\n", + "\n", + "- Als de amplitude van golf groter is dan `1.0`, zal hij \"afgekapt\" worden door de luidsprekers. Dit klinkt alsof er luide ruis in het geluid zit (of het klinkt gewoon heel slecht)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Uitdaging: Gebruik de bovenstaande frequentietabel om het akkoord te veranderen van een A-mineur naar een A-majoor akkoord. Of maak jouw eigen akkoord...\n", + "\n", + "Maar hoe zit het met het creëren van een *C mineur septiem* (of overmatig) akkoord?\n", + "\n", + "Inderdaad, je zou grotere akkoorden kunnen maken met willekeurig veel tonen... of andere ongewone/onbelangrijke/inspirerende/verstorende algoritmisch gegenereerde geluidseffecten. We moedigen je zeker aan om dingen uit te proberen! Het is niet vreselijk moeilijk om iets te schrijven dat echte muziek speelt!\n", + "\n", + ":::{admonition} Verder uitbreiden\n", + ":class: tip\n", + "\n", + "Het kan helpen om functies als `a_flat(duration)` of `cm7(duration)` te hebben, en dan iets te schrijven dat daarop voortbouwt.\n", + ":::\n" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/practicals/images/8/amplitude_freq.png b/practicals/images/8/amplitude_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..3c296ffcbdd159eabc8bfe85a5e3e828f47b6f7a GIT binary patch literal 90453 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%0D+ud5ElAD>T0{URT%vT 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 literal 0 HcmV?d00001 diff --git a/practicals/images/8/notes.png b/practicals/images/8/notes.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb6379b30297b819e398edfe8fbf17803ab9307 GIT binary patch literal 55891 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 qP#w}wT{m<-Qvwp%+yWIH=d#Wzp$PyVnCOuJ literal 0 HcmV?d00001 diff --git a/practicals/images/8/reconstruction.jpg b/practicals/images/8/reconstruction.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffdc5cf45c3b4c36cce9721fe52d0b096bc88e00 GIT binary patch literal 20403 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 5]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## opgave 10\n", + "```python\n", + "fruits = [\"appel\", \"banaan\", \"kiwi\", \"citroen\", \"mango\" ]\n", + "L = [len(x) for x in fruits]\n", + "```" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}