{"id":2800,"date":"2017-06-04T10:36:48","date_gmt":"2017-06-04T10:36:48","guid":{"rendered":"http:\/\/wp.andreas.bieri.name\/myblog\/?p=2800"},"modified":"2018-01-14T12:26:21","modified_gmt":"2018-01-14T11:26:21","slug":"python-im-schulunterricht","status":"publish","type":"post","link":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/","title":{"rendered":"Python im Schulunterricht"},"content":{"rendered":"<h3>Python\/Jython in der Schule<\/h3>\n<p>F\u00fcr mein erstes Praktikum auf meinem Weg zum Lehrer habe ich einer Schulklasse (Gymnasium, Tertia) ein paar Stunden Informatikunterricht erteilt. Als Thema w\u00e4hlten wir einige Kapitel aus dem &#8222;Lehrbuch&#8220; <a href=\"http:\/\/www.tigerjython.ch\" target=\"_blank\" rel=\"noopener noreferrer\">Tigerjython<\/a> aus. Dieses besteht aus einem mehrere 100 Seiten dicken online Buch und einer dazugeh\u00f6rigen Programmierumgebung f\u00fcr Python. Programmiert wird also in Python, die Umgebung und einige Zusatzmdoule sind in Java realisiert.\u00a0Bestechend ist f\u00fcr mich daran, dass keine Installationen n\u00f6tig sind (Kopieren reicht, z.B. auch auf einen USB Stick) und fast alle Programme aus dem Buch per Copy&amp;Paste lauff\u00e4hig sind.<\/p>\n<p>Ich habe Unterlagen f\u00fcr 5 Doppellektionen erstellt und hier im Blog verlinkt.<\/p>\n<hr \/>\n<p><strong>Kryptographie (Tigerjython Kap. 10.5)<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Pr\u00e4sentation-Kryptologie.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Pr\u00e4sentation Kryptologie<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Zusatzaufgaben-Kryptologie.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabenblatt mit Zusatzaufgaben<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/caesar-histogramm.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">L\u00f6sung Caesar Histogramm<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/skytale-encrypt.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">L\u00f6sung Skytale Verschl\u00fcsselung<\/a> und <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/skytale-decrypt.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Entschl\u00fcsselung<\/a><\/li>\n<\/ul>\n<p>Die Berechungen zum RSA-Verfahren f\u00fcge ich hier exemplarisch direkt ein. Die Zahlentheorie dahinter ist nicht so banal, wenn man sie l\u00fcckenlos pr\u00e4sentieren will.<\/p>\n<p>Die Berechnungen der Modular Inversen erfolgt im Buch mit einem Brute Force Verfahren (man rechnet einfach alle durch). Berechnen kann man sie mit dem Satz von Euler\u00a0 resp. mit dem erweiterten Euklidischen Algorithmus.<\/p>\n<pre># RSA Berechungen\r\n# RSA Wiki\r\n# Beispiel: (-1071)*11 + 2 * 5891 = 1\r\n# Rechnungen im Tigerjython\r\n\r\nfrom math import *\r\np = 73\r\nq = 151\r\nm = p * q\r\nphi = (p-1) * (q-1)\r\ne = 11\r\nd =  e** (phi - 1) % phi\r\n\r\nprint \"p =\", p\r\nprint \"q =\", q\r\nprint \"m =\", m\r\nprint \"phi =\", phi\r\nprint \"e =\", e\r\nprint \"d = e** (phi - 1) % phi = \", d\r\nprint \"d*e = \", d * e\r\nprint \"d*e mod phi =\", d*e, \"modulo\", phi,\"=\",  d * e % phi\r\n<\/pre>\n<p>Berechnung der modular Inversen mit dem erweiterten Euklidischen Algorithmus (wie er im Beweis des Lemma von B\u00e9zouts gebraucht wird):<\/p>\n<pre># RSA Berechungen\r\n# RSA Wiki\r\n# Bezout Rechner: http:\/\/www.dcode.fr\/bezout-identity\r\n# (-1071)*11 + 2 * 5891 = 1\r\n# RSA Caclculator https:\/\/www.cs.drexel.edu\/~jpopyack\/IntroCS\/HW\/RSAWorksheet.html\r\n# https:\/\/de.wikibooks.org\/wiki\/Algorithmensammlung:_Zahlentheorie:_Euklidischer_Algorithmus\r\n# https:\/\/de.wikipedia.org\/wiki\/Erweiterter_euklidischer_Algorithmus\r\n\r\n# Berechung mit Lemma von Bezout\r\n# http:\/\/www.inf-schule.de\/kommunikation\/kryptologie\/rsa\/modmultiplikation\/station_berechnungmodinv\r\n# siehe auch https:\/\/www.cryptool.org\/de\/\r\n\r\ndef erweiterterEuklidischerAlgorithmus(a, b):\r\n    aalt = a\r\n    amitte = b\r\n    xalt = 1\r\n    xmitte = 0\r\n    yalt = 0\r\n    ymitte = 1\r\n    while amitte != 0:\r\n        q = aalt \/\/ amitte\r\n        aneu = aalt - q * amitte\r\n        xneu = xalt - xmitte * q\r\n        yneu = yalt - ymitte * q\r\n        xalt = xmitte\r\n        xmitte = xneu\r\n        yalt = ymitte\r\n        ymitte = yneu\r\n        aalt = amitte\r\n        amitte = aneu\r\n        print(amitte, ' = ', xmitte, ' * ', a, ' + ', ymitte, ' * ', b)\r\n    return (aalt, xalt, yalt)\r\n\r\ndef modInv(a, m):\r\n    (ggt, x, y) = erweiterterEuklidischerAlgorithmus(a, m)\r\n    if ggt &gt; 1:\r\n        return -1\r\n    else:\r\n        if x &lt; 0:\r\n            x = x + m\r\n        return x\r\n\r\nerweiterterEuklidischerAlgorithmus(11, 11023)\r\nprint modInv(11,10800)\r\n<\/pre>\n<hr \/>\n<h3>Endliche Automaten<\/h3>\n<ul>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Pr\u00e4sentation-Automata-V4-Addendum.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Pr\u00e4sentation<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Zusatzaufgaben-zu-TigerJython-Automaten.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabenblatt<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Parkautomat-enum-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">L\u00f6sung Parkautomat<\/a><\/li>\n<\/ul>\n<p>Die L\u00f6sung der Aufgabe &#8222;Fleissiger Biber&#8220; sei auch hier direkt abgedruckt. Zur sehr interessanten Theorie dahinter siehe <a href=\"https:\/\/de.wikipedia.org\/wiki\/Flei%C3%9Figer_Biber\">Wikipedia<\/a>. Der Automatengraph sieht dermassen aus:<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-2882 aligncenter\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/biber.png\" alt=\"\" width=\"810\" height=\"319\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/biber.png 810w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/biber-300x118.png 300w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/biber-768x302.png 768w\" sizes=\"(max-width: 810px) 100vw, 810px\" \/><\/p>\n<pre># Busy beaver mit 3 Zust\u00e4nden\r\n# schreibt in 13 Schritten 6 Einer auf ein leeres Band\r\n# A. Bieri\r\n\r\nfrom gconsole import *\r\ntape = range(2 * 10)\r\nfor i in range(2 * 10):\r\n tape[i] = \"0\"\r\n\r\ntape_middle = 10\r\ntape_pos = 0 #-9 bis 9, es wird dazu tape_middle addiert \r\nState = enum(\"state_1\", \"state_2\", \"state_3\", \"state_halt\")\r\nstate = State.state_1\r\nEvents = enum(\"read0\", \"read1\")\r\n\r\ndef getField():\r\n if tape[tape_middle + tape_pos] == \"0\":\r\n ch = Events.read0\r\n elif tape[tape_middle + tape_pos] == \"1\":\r\n ch = Events.read1 \r\n return ch\r\n\r\nmakeConsole()\r\n\r\nwhile state != State.state_halt:\r\n gprintln(\"State: \" + str(state))\r\n event = getField()\r\n if event == Events.read0:\r\n if state == State.state_1:\r\n state = State.state_2\r\n tape[tape_pos + tape_middle] = \"1\"\r\n tape_pos = tape_pos + 1\r\n elif state == State.state_2:\r\n state = State.state_1\r\n tape[tape_pos + tape_middle] = \"1\"\r\n tape_pos = tape_pos - 1\r\n elif state == State.state_3:\r\n state = State.state_2\r\n tape[tape_pos + tape_middle] = \"1\"\r\n tape_pos = tape_pos - 1\r\n if event == Events.read1:\r\n if state == State.state_1:\r\n state = State.state_3\r\n tape[tape_pos + tape_middle] = \"1\" \r\n tape_pos = tape_pos - 1\r\n elif state == State.state_2:\r\n state = State.state_2\r\n tape[tape_pos + tape_middle] = \"1\" \r\n tape_pos = tape_pos + 1\r\n elif state == State.state_3:\r\n state = State.state_halt\r\n tape[tape_pos + tape_middle] = \"1\"\r\n gprintln(\"State: \" + str(state))\r\n \r\ngprintln(tape)<\/pre>\n<hr \/>\n<h3>SQL Teil 1<\/h3>\n<ul>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Pr\u00e4sentation-SQL-V2.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Pr\u00e4sentation I<\/a> und <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Zusatzaufgaben-zu-TigerJython-SQL.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabenblatt I<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Palindrom-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">L\u00f6sung Palindrom Aufgabe<\/a> mit <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/worte-1.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Wortliste<\/a><\/li>\n<li>CSV Listen\u00a0<a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/personen.csv\" target=\"_blank\" rel=\"noopener noreferrer\">personen<\/a> <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/schule.csv\" target=\"_blank\" rel=\"noopener noreferrer\">schule<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe2d-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabe2d-L\u00f6sung.py<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe3a-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabe3a-L\u00f6sung.py<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe3b-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabe3b-L\u00f6sung.py<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe3c-L\u00f6sung1.py_.txt\">Aufgabe3c-L\u00f6sung1.py<\/a> <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe3c-L\u00f6sung2.py_.txt\">Aufgabe3c-L\u00f6sung2.py<\/a> <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe3c-L\u00f6sung3.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabe3c-L\u00f6sung3.py<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/create-unidb.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">create-unidb.py<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/CSV-Adressen-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">CSV-Adressen-L\u00f6sung.py<\/a><\/li>\n<li>Hausaufgabe:\u00a0<a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/average-db.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">average-db.py<\/a> <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/select-bern.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">select-bern.py<\/a><\/li>\n<\/ul>\n<p>Auch hier ein Beispiel zur Veranschaulichung:<\/p>\n<pre>import csv   #zum Lesen von CSV Dateien\r\n\r\nwith open('example3.csv') as csvfile:\r\n    readCSV = csv.reader(csvfile, delimiter=';')    #Felder durch Strichpunkt getrennt\r\n    lNamen = []\r\n    lVornamen = []\r\n    lWohnort = []\r\n    lGeschlecht = []   \r\n    lAlter = []\r\n    \r\n    for row in readCSV:\r\n        print(\"Ganze Zeile: \", row)  \r\n        lNamen.append(row[0])\r\n        lVornamen.append(row[1]) \r\n        lWohnort.append(row[2])\r\n        lGeschlecht.append(row[3])       \r\n        lAlter.append(row[4])                \r\n\r\nprint(\"Liste Namen: \")\r\nprint (lNamen)\r\nprint(\"Liste Vornamen: \")\r\nprint (lVornamen)\r\nprint(\"Liste Wohnorte: \")\r\nprint(lWohnort)\r\nprint(\"Liste Geschlechter: \")\r\nprint(lGeschlecht)\r\nprint(\"Liste Alter: \")\r\nprint(lAlter) \r\n\r\nprint(\"Altersdurchschnitt\")\r\n# hier Code einf\u00fcgen\r\n\r\ndschnitt = 0\r\nfor i in lAlter[1::]:\r\n    dschnitt += int(i)\r\n\r\nprint(dschnitt\/(len(lAlter)-1))\r\n<\/pre>\n<hr \/>\n<h3>SQL Teil 2<\/h3>\n<ul>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Pr\u00e4sentation-SQL2-V3.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Pr\u00e4sentation SQL 2<\/a> und <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Zusatzaufgaben-zu-TigerJython-SQL2.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabenblatt SQL2<\/a><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe1a-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabe1a-L\u00f6sung.py<\/a> <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe1b-L\u00f6sung.py_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabe1b-L\u00f6sung.py<\/a><\/li>\n<li>Aufgabe 2<img loading=\"lazy\" class=\"alignnone size-full wp-image-2846\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/sqlitestudiio-woerterbuch.png\" alt=\"\" width=\"2130\" height=\"1005\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-woerterbuch.png 2130w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-woerterbuch-300x142.png 300w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-woerterbuch-768x362.png 768w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-woerterbuch-1024x483.png 1024w\" sizes=\"(max-width: 2130px) 100vw, 2130px\" \/><\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe2d-L\u00f6sung.sql_.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabe2d-L\u00f6sung.sql<\/a><\/li>\n<li>Aufgabe 3a im SQLite Studio<img loading=\"lazy\" class=\"alignnone size-full wp-image-2845\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/sqlitestudiio-schuledb.png\" alt=\"\" width=\"1390\" height=\"534\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-schuledb.png 1390w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-schuledb-300x115.png 300w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-schuledb-768x295.png 768w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/sqlitestudiio-schuledb-1024x393.png 1024w\" sizes=\"(max-width: 1390px) 100vw, 1390px\" \/><\/li>\n<li>Aufgabe 3b<br \/>\n<img loading=\"lazy\" class=\"alignnone size-full wp-image-2852\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe3b.png\" alt=\"\" width=\"1621\" height=\"949\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3b.png 1621w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3b-300x176.png 300w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3b-768x450.png 768w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3b-1024x599.png 1024w\" sizes=\"(max-width: 1621px) 100vw, 1621px\" \/><\/li>\n<li>Aufgabe 3c-d<br \/>\n<img loading=\"lazy\" class=\"alignnone size-full wp-image-2853\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Aufgabe3-c-d.png\" alt=\"\" width=\"2282\" height=\"931\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3-c-d.png 2282w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3-c-d-300x122.png 300w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3-c-d-768x313.png 768w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/06\/Aufgabe3-c-d-1024x418.png 1024w\" sizes=\"(max-width: 2282px) 100vw, 2282px\" \/><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<hr \/>\n<h3>Spektralanalyse<\/h3>\n<ul>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Pr\u00e4sentation-Fourier-V3.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Pr\u00e4sentation Fourier &#8211; V3<\/a>, mit separatem <a href=\"https:\/\/www.dropbox.com\/s\/thajxgs0qydnlp9\/Bucht-vorspielen.wav?dl=0\" target=\"_blank\" rel=\"noopener noreferrer\">Audio<\/a>\u00a0(Flederm\u00e4use) und <a href=\"https:\/\/www.dropbox.com\/s\/xns4knjh30meq1z\/LoRa-1-cut.mp4?dl=0\" target=\"_blank\" rel=\"noopener noreferrer\">Video <\/a>(LoRa)<\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/Zusatzaufgaben-zu-TigerJython-Fourier-V2.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Aufgabenblatt<\/a>\u00a0und die <a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/AlleAudiof\u00fcrAufgaben.zip\" target=\"_blank\" rel=\"noopener noreferrer\">Audio Dateien<\/a> dazu<\/li>\n<li><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/WhyDoMath-Gezeiten.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Gezeiten &#8211; WhyDoMath<\/a><\/li>\n<\/ul>\n<p>Zeit- und Spektralanalyse f\u00fcr einige Grundfunktionen wie Rechteck- und Dreieckfunktionen:<\/p>\n<pre>from gpanel import *\r\nfrom soundsystem import *\r\n\r\nfs  = 40000 # Sampling frequency\r\nA   = 1000 # Amplitude\r\nsamples = [0] * 120000  # sampled data for 3 s\r\nt   = 0\r\ndt  = 1 \/ fs # sampling period\r\n\r\nmakeGPanel(0, len(samples), -33000, 33000)\r\n\r\nfor i in range(120000):\r\n   samples[i] = sine(A, 400, t) +  sine(A, 390, t) \r\n   #samples[i] = sine(A, 4000, t) +  sine(A\/2, 3000, t)\r\n   #samples[i] = sine(A, 500, t) \r\n   #samples[i] = square(A, 1000, t)\r\n   #samples[i] = triangle(A, 1000, t)\r\n   #samples[i] = sawtooth(A, 1000, t) \r\n   #samples[i] = chirp(A, 1000, t)   \r\n   #samples[i] = sine(100, 4000, t) * sine(100, 3000, t)  \r\n   t += dt\r\n\r\nopenMonoPlayer(samples, 40000)\r\nplay()\r\n\r\nfor i in range (len(samples)\/\/100):\r\n    draw(100*i, 10*samples[i])\r\n\r\n# Kurvenform anzeigen: \r\n# experimentiere mit der Anzahl der Punkte und der y-Achse\r\n# \"Mikroskop\":\r\n#for i in range (len(samples)\/\/100):\r\n#    draw(100*i, samples[i])\r\n\r\n# Gesamtsicht:\r\n#for i in range(12000):\r\n#   draw(i, samples[i])\r\n\r\n# mit Faktor 10 vergr\u00f6ssert:\r\n#for i in range(120000):\r\n#   draw(i, 10*samples[i])\r\n<\/pre>\n<pre>from gpanel import *\r\nfrom soundsystem import *\r\n\r\ndef showSpectrum(text):\r\n    makeGPanel(-2000, 22000, -0.2, 1.2)\r\n    drawGrid(0, 20000, 0, 1.0, 10, 5, \"blue\")\r\n    title(text)\r\n    lineWidth(2)\r\n    r = fs \/ n # Resolution\r\n    f = 0\r\n    for i in range(n \/\/ 2): \r\n        line(f, 0, f, a[i])\r\n        f += r  \r\n\r\nn = 10000\r\nfs = 40000 # Sampling frequency\r\nA = 1000 # Amplitude\r\nsamples= [0] * 120000  # sampled data for 3 s\r\nt = 0\r\ndt = 1 \/ fs # sampling period\r\n\r\nfor i in range(120000):\r\n   #samples[i] = sine(A, 4000, t) +  sine(A\/2, 3990, t) \r\n   #samples[i] = sine(A, 4000, t) +  sine(A\/2, 3000, t)\r\n   #samples[i] = sine(A, 500, t) \r\n   samples[i] = square(A, 1000, t)\r\n   #samples[i] = triangle(A, 1000, t)\r\n   #samples[i] = sawtooth(A, 1000, t) \r\n   #samples[i] = chirp(A, 1000, t)   \r\n   #samples[i] = sine(100, 4000, t) * sine(100, 3000, t)  \r\n   t += dt\r\n\r\nopenMonoPlayer(samples, 40000)\r\nplay()\r\na = fft(samples, n)\r\nshowSpectrum(\"Spectrum\")<\/pre>\n<hr \/>\n<p><em>Update 20171117: SQL Skript und Python Skript von <a href=\"https:\/\/www.uweziegenhagen.de\/?page_id=159\" target=\"_blank\" rel=\"noopener\">Uwe Ziegenhagen.<\/a><\/em><em> Update 20180114 typos<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python\/Jython in der Schule F\u00fcr mein erstes Praktikum auf meinem Weg zum Lehrer habe ich einer Schulklasse (Gymnasium, Tertia) ein paar Stunden Informatikunterricht erteilt. Als Thema w\u00e4hlten wir einige Kapitel aus dem &#8222;Lehrbuch&#8220; Tigerjython aus. Dieses besteht aus einem mehrere 100 Seiten dicken online Buch und einer dazugeh\u00f6rigen Programmierumgebung f\u00fcr Python. Programmiert wird also in [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[19,65,102],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python im Schulunterricht - Merkbar.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python im Schulunterricht - Merkbar.\" \/>\n<meta property=\"og:description\" content=\"Python\/Jython in der Schule F\u00fcr mein erstes Praktikum auf meinem Weg zum Lehrer habe ich einer Schulklasse (Gymnasium, Tertia) ein paar Stunden Informatikunterricht erteilt. Als Thema w\u00e4hlten wir einige Kapitel aus dem &#8222;Lehrbuch&#8220; Tigerjython aus. Dieses besteht aus einem mehrere 100 Seiten dicken online Buch und einer dazugeh\u00f6rigen Programmierumgebung f\u00fcr Python. Programmiert wird also in [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/\" \/>\n<meta property=\"og:site_name\" content=\"Merkbar.\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-04T10:36:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-01-14T11:26:21+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/biber.png\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"wp_blogadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\",\"url\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\",\"name\":\"Merkbar.\",\"description\":\"IT, Elektronik und Mathematik\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/biber.png\",\"contentUrl\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/biber.png\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#webpage\",\"url\":\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/\",\"name\":\"Python im Schulunterricht - Merkbar.\",\"isPartOf\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#primaryimage\"},\"datePublished\":\"2017-06-04T10:36:48+00:00\",\"dateModified\":\"2018-01-14T11:26:21+00:00\",\"author\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\"},\"breadcrumb\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python im Schulunterricht\"}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\",\"name\":\"wp_blogadmin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"caption\":\"wp_blogadmin\"},\"url\":\"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python im Schulunterricht - Merkbar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/","og_locale":"de_DE","og_type":"article","og_title":"Python im Schulunterricht - Merkbar.","og_description":"Python\/Jython in der Schule F\u00fcr mein erstes Praktikum auf meinem Weg zum Lehrer habe ich einer Schulklasse (Gymnasium, Tertia) ein paar Stunden Informatikunterricht erteilt. Als Thema w\u00e4hlten wir einige Kapitel aus dem &#8222;Lehrbuch&#8220; Tigerjython aus. Dieses besteht aus einem mehrere 100 Seiten dicken online Buch und einer dazugeh\u00f6rigen Programmierumgebung f\u00fcr Python. Programmiert wird also in [&hellip;]","og_url":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/","og_site_name":"Merkbar.","article_published_time":"2017-06-04T10:36:48+00:00","article_modified_time":"2018-01-14T11:26:21+00:00","og_image":[{"url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/biber.png"}],"twitter_card":"summary","twitter_misc":{"Verfasst von":"wp_blogadmin","Gesch\u00e4tzte Lesezeit":"6 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website","url":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/","name":"Merkbar.","description":"IT, Elektronik und Mathematik","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"ImageObject","@id":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#primaryimage","inLanguage":"de","url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/biber.png","contentUrl":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/06\/biber.png"},{"@type":"WebPage","@id":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#webpage","url":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/","name":"Python im Schulunterricht - Merkbar.","isPartOf":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website"},"primaryImageOfPage":{"@id":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#primaryimage"},"datePublished":"2017-06-04T10:36:48+00:00","dateModified":"2018-01-14T11:26:21+00:00","author":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d"},"breadcrumb":{"@id":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.29.166.97\/myblog\/2017\/06\/04\/python-im-schulunterricht\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/"},{"@type":"ListItem","position":2,"name":"Python im Schulunterricht"}]},{"@type":"Person","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d","name":"wp_blogadmin","image":{"@type":"ImageObject","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo","inLanguage":"de","url":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","caption":"wp_blogadmin"},"url":"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/"}]}},"_links":{"self":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/2800"}],"collection":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/comments?post=2800"}],"version-history":[{"count":5,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/2800\/revisions"}],"predecessor-version":[{"id":3556,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/2800\/revisions\/3556"}],"wp:attachment":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/media?parent=2800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/categories?post=2800"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/tags?post=2800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}