Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:ideen [2022/11/26 10:51] – Olaf Schnürer | lehrkraefte:snr:informatik:ideen [2023/02/18 10:34] (current) – [Videos von Ivos Seite] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | |||
| + | ===== Zu konjunktiver Normalform ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Dort sind Links zu | ||
| + | |||
| + | https:// | ||
| + | |||
| + | und | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ====== Videos von Ivos Seite ====== | ||
| + | |||
| + | * https:// | ||
| + | * 8-Bit Adder mit TTL-Logic https:// | ||
| + | |||
| + | |||
| + | ====== Koordinatengrafik ====== | ||
| + | |||
| + | Lass zuerst zwei konzentrische Fünfecke mit Turtle zeichnen! | ||
| + | |||
| + | Dann mit '' | ||
| + | |||
| + | ====== Pen verwenden, mit Python ====== | ||
| + | |||
| + | dann vielleicht Escherbilder malen? Kaleidoskop? | ||
| + | |||
| + | ===== Online turtle (and python) tutorial ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ====== Pygame Installationsprobleme ====== | ||
| + | |||
| + | Vermutlich ist " | ||
| + | |||
| + | relativ neu: | ||
| + | https:// | ||
| + | |||
| + | älter: | ||
| + | https:// | ||
| + | |||
| + | |||
| + | ===== Pygame docu ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | test pygame with " | ||
| + | |||
| + | Example files are located in | ||
| + | |||
| + | ~/ | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Command palette: " | ||
| + | |||
| + | ===== Turtle demo files ===== | ||
| + | |||
| + | / | ||
| + | |||
| + | https:// | ||
| + | |||
| + | |||
| + | |||
| + | ====== Planung ====== | ||
| + | |||
| + | Ivo nimmt https:// | ||
| + | ===== Erwartetes Vorankommen ===== | ||
| + | |||
| + | Jeweils " | ||
| + | |||
| + | * Klasse 2aLIM: | ||
| + | * am 13.09. fertig mit Abschnitt 3. | ||
| + | * am 20.09. Mitte Abschnitt 5 | ||
| + | * am 27.09. Abschnitt 6 beginnen | ||
| + | * am 25.10. Abschnitt 7 beginnen | ||
| + | * ------ ab hier Planung ------ | ||
| + | * (1.11. Allerheiligen) | ||
| + | * am 08.11. Biber-Training und Abschnitt 7 beenden | ||
| + | * am 15.11. Biber und Abschnitt 8 beginnen | ||
| + | * am 22.11. Abschnitt 9 beginnen | ||
| + | * am 29.11. Abschnitt 10 beginnen | ||
| + | * am 06.12. u.a. ? Infos zum Ablauf der Prüfung ? | ||
| + | * am 13.12. Prüfung | ||
| + | * Klasse 2lW: | ||
| + | * am 14.09. fertig mit Abschnitt 3. | ||
| + | * am 20.09. Mitte Abschnitt 5 | ||
| + | * am 28.09. Abschnitt 6 beginnen | ||
| + | * am 26.10. Abschnitt 7 beginnen | ||
| + | * ------ ab hier Planung ------ | ||
| + | * am 02.11. Abschnitt 8 beginnen | ||
| + | * am 09.11. Biber-Training und Abschnitt 8 beenden | ||
| + | * am 16.11. Biber und Abschnitt 9 beginnen | ||
| + | * am 23.11. Abschnitt 10 beginnen | ||
| + | * am 30.11. Abschnitt 10 fertig, ? Infos zum Ablauf der Prüfung ? | ||
| + | * am 07.12. | ||
| + | * am 14.12. Prüfung | ||
| + | * Klasse 2rG und 2kWG (eine Doppellektion fiel aus wegen " | ||
| + | * am 23.09. fertig mit Abschnitt 3. | ||
| + | * am 30.09. Mitte Abschnitt 5 | ||
| + | * am 28.10. Mitte Abschnitt 6 | ||
| + | * ------ ab hier Planung ------ | ||
| + | * am 04.11. Biber-Training und Abschnitt 7 beginnen | ||
| + | * am 11.11. Biber und Abschnitt 7 beenden | ||
| + | * am 18.11. Abschnitt 8 | ||
| + | * am 25.11. Abschnitt 9 | ||
| + | * am 02.12. Abschnitt 10, ? Infos zum Ablauf der Prüfung ? | ||
| + | * am 09.12. Prüfung | ||
| + | |||
| + | |||
| + | ==== Diverses ==== | ||
| + | |||
| + | in terminal: python -m turtledemo | ||
| + | |||
| + | * https:// | ||
| + | * Jupyter-Notebooks (haben neuen Namen, habe dies irgendwo ausprobiert): | ||
| + | * https:// | ||
| + | | ||
| + | * Kopfrechentrainer schreiben | ||
| + | * per python | ||
| + | * per pyscript | ||
| + | * per javascript (hatte schon mal angefangen, mit Latex-Syntax für Brüche!) | ||
| + | * per beeware (für Handys) | ||
| + | |||
| + | ====== von Karlheinz gelernt bzw. mit ihm ====== | ||
| + | |||
| + | * Wahrheitstabellen mit Python erzeugen: https:// | ||
| + | * AREPL for python | ||
| + | * .vscode folder, wohl bei workspaces | ||
| + | * Hexeditor (python extension) | ||
| + | * https:// | ||
| + | * für Robotik: wohl eigene SD-Card oder so (hat Karlheinz mit Ivo besprochen) | ||
| + | * wie geht Oxocard? allgemein bzw. mit VSCode? | ||
| + | |||
| + | ====== Ideen für Informatik, 2. Klassen im Schuljahr 2022/23 ====== | ||
| + | |||
| + | Bei logischen Schaltungen: | ||
| + | |||
| + | Bei Unicode: KCharSelect zum Auswählen/ | ||
| + | |||
| + | Online Python-Shell: | ||
| + | |||
| + | Debugger für pygame in vs code? Geht schon so halbwegs, setze Breakpoint und bewege Spielfeld weg von VSCode-Fenster (etwa anderer Bildschirm). | ||
| + | |||
| + | Pygame: Ohne update, einfach reinzeichnen? | ||
| + | |||
| + | Schreibe falsches Programm. Lass es debuggen! | ||
| + | |||
| + | Als Art Verständnistest. | ||
| + | "Spass mit der Turtle: jedes Thema, eine Aufgabe!" | ||
| + | |||
| + | * Ausgabe: Haus des Nikolaus, Eingabe und Variablen | ||
| + | * Wahrheitswerte und logische Verknüpfungen | ||
| + | * for-loops (n-Eck zeichnen, Spirale zeichnen) | ||
| + | * if-(else-)statements (frage, ob Spirale oder n-Eck gezeichnet werden soll) | ||
| + | * while | ||
| + | |||
| + | Labyrinth/ | ||
| + | |||
| + | vorher Listen? Dann könnte for-loop über listen laufen lassen. Reicht aber eigentlich auch, wenn ich das mache, sobald wir Listen haben. | ||
| + | |||
| + | Mehr Zeit einplanen, denn ab jetzt kann nette Aufgaben stellen. | ||
| + | |||
| + | ====== Recursion ====== | ||
| + | |||
| + | Podcast mit Al Sweigart gehört, er hat neues Buch. | ||
| + | |||
| + | Schlechte Beispiele sind: Fakultät und Fibonacci (Fakultät liefert stackoverflow bei Argument 1000, Fibonacci wohl schon bei 50 länger als Universum). | ||
| + | |||
| + | Gut alles baumartige: Weg aus Irrgarten finden! Turtle für fraktale Graphiken. | ||
| + | |||
| + | recursive function: Muss sich selbst aufrufen (recursive case) und base case haben. | ||
| + | |||
| + | In Python maximal Rekursionstiefe 1000, wird von Interpreter abgefangen (kann man aber erhöhen, ab ca. 2700 stürzt Betriebssystem ab), schon bei trivialem sich selbst aufrufendem Miniprogramm. (Vorteil von Interpreter zu Compiler). | ||
| + | |||
| + | Jede Rekursion lässt sich auch mit Schleife=Iteration und Stack erledigen | ||
| + | |||
| + | Misnomer sind: | ||
| + | bottom-up recursion (ist gar keine Rekursion) und top-down recursion (das ist jede Rekursion). Beides per Fibonacci leicht erläuterbar. | ||
| + | |||
| + | Ebenso ist dynamic programming misnomer (nur wegen NSA-project so genannt, wohl von Bell(?), wollte Geld). Ist im wesentlichen Schleife mit Stack statt Rekursion, in der wohl diverses mehrfach berechnet wird. Wie bei Fibonacci recursive. | ||
| + | |||
| + | auch sowas wie tail optimazation ist nur Auflösen einer Rekursion durch Schleife mit Stack. | ||
| + | |||
| + | Rekursion unnötig, falls nur ein rekursiver Aufruf am Ende, dann besser Schleife. | ||
| + | ===== bald zu machen ===== | ||
| + | |||
| + | * Debuggen? | ||
| + | * Strings? length, Substrings mit [::] (alles dann wieder bei Listen); replace, find, uppercase, split, Befehl '' | ||
| + | * Funktionen (Modularisierung); | ||
| + | * Listen; Listen VOR '' | ||
| + | * Zufall '' | ||
| + | * Farben | ||
| + | * Graph zeichnen? Histogramm? | ||
| + | * Goethe-Analyse? | ||
| + | * " | ||
| + | |||
| + | |||
| + | ====== optional, als Bonus-Sachen ====== | ||
| + | |||
| + | * Dateien: lesen schreiben? | ||
| + | * Ascii-Escape-Codes, | ||
| + | * mehr zu strings: raw strings mit '' | ||
| + | |||
| + | |||
| + | ===== Nettes ===== | ||
| + | |||
| + | * Koralle? | ||
| + | * roten Kasten mit Tastatur steuern! | ||
| + | * Snake! | ||
| + | * Männchen durch Labyrinth steuern? Ich gebe Labyrinth vor in Bibliothek/ | ||
| + | * Tastatur-Listening (Bibliothek bereitstellen oder pygame? PYGAME: Ich habe wormy von Al Sweigart verändert!) | ||
| + | * einfache Grafik-Bibliothek? | ||
| + | * selbst Turtle-Grafik erstellen? | ||
| + | * Ascii-Pixel-Testfeld mit Farben? (was geht wo unter Windows?) | ||
| + | * auch dort könnte Cursor steuern. | ||
| + | |||
| + | ===== Prüfung ===== | ||
| + | |||
| + | Am liebsten Open Book. Wie verhindere ich stupides Kopieren/ | ||
| + | |||
| + | Bei jeder Aufgabe irgendwo deinen Namen einbauen! Als Variablennamen, | ||
| + | |||
| + | Lasse Programm debuggen! | ||
| + | |||
| + | |||
| + | ===== Erledigtes ===== | ||
| + | |||
| + | * f-Strings; im Prinzip können sie Sachen mit casting und Konkatenation ausgeben. auch print mit mehreren Argumenten erklären, end="" | ||
| + | * bei " | ||
| + | * Wahrheitswerte (evtl. vor '' | ||
| + | |||
| + | als Bonus-Sache erklärt: | ||
| + | * print(..., sep = " | ||
| + | * print(a, b, " | ||
| + | |||
| + | |||
| + | ====== readchar ====== | ||
| + | |||
| + | Muss testen, ob das unter Windows geht... | ||
| + | |||
| + | < | ||
| + | <code python> | ||
| + | from readchar import readkey, key | ||
| + | |||
| + | x = 0 | ||
| + | |||
| + | print(dir(key)) | ||
| + | weiter = True | ||
| + | while weiter: | ||
| + | taste = readkey() | ||
| + | if taste == key.RIGHT: | ||
| + | if x < 20: | ||
| + | x = x + 1 | ||
| + | elif taste == key.LEFT: | ||
| + | if x > 0: | ||
| + | x = x - 1 | ||
| + | else: | ||
| + | weiter = False | ||
| + | print(x * " " + " | ||
| + | </ | ||
| + | </ | ||
| + | ===== Geht cv2 alias opencv-python in Windows? ===== | ||
| + | |||
| + | Ja, muss jedoch vorher: | ||
| + | |||
| + | pip install numpy | ||
| + | |||
| + | pip install opencv-python | ||
| + | |||
| + | < | ||
| + | import numpy as np | ||
| + | # Musste opencv-python installieren. | ||
| + | import cv2 | ||
| + | |||
| + | |||
| + | bild = np.zeros((512, | ||
| + | |||
| + | cv2.line(bild, | ||
| + | cv2.rectangle(bild, | ||
| + | cv2.circle(bild, | ||
| + | |||
| + | cv2.putText(bild, | ||
| + | |||
| + | cv2.imshow(" | ||
| + | cv2.waitKey(0) | ||
| + | cv2.destroyAllWindows() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Geht curses in Windows? ===== | ||
| + | curses gibt es nicht (unter Linux ist das im Python module index, also Standard), es gibt aber windows-curses, | ||
| + | < | ||
| + | <code python curses-test.py> | ||
| + | import curses | ||
| + | import os | ||
| + | import random | ||
| + | |||
| + | def main(bildschirm): | ||
| + | bildschirm.clear() | ||
| + | maxY, maxX = bildschirm.getmaxyx() | ||
| + | bildschirm.addstr(1, | ||
| + | |||
| + | curses.mousemask(curses.BUTTON1_CLICKED) | ||
| + | for y in range(maxY): | ||
| + | for x in range(maxX): | ||
| + | try: | ||
| + | bildschirm.addstr(y, | ||
| + | except curses.error as e: | ||
| + | pass | ||
| + | |||
| + | xPos = maxX // 2 | ||
| + | yPos = maxY // 2 | ||
| + | |||
| + | while True: | ||
| + | bildschirm.addstr(0, | ||
| + | |||
| + | zeichen = chr(bildschirm.inch(yPos, | ||
| + | if zeichen == " ": | ||
| + | neu = " | ||
| + | elif zeichen == " | ||
| + | neu = " | ||
| + | else: | ||
| + | neu = chr(ord(zeichen) + 1) | ||
| + | |||
| + | try: | ||
| + | bildschirm.addstr(yPos, | ||
| + | except curses.error as e: | ||
| + | pass | ||
| + | bildschirm.move(yPos, | ||
| + | |||
| + | taste = bildschirm.getch() | ||
| + | bildschirm.addstr(1, | ||
| + | |||
| + | if taste == curses.KEY_UP: | ||
| + | if yPos > 0: | ||
| + | yPos = yPos - 1 | ||
| + | elif taste == curses.KEY_DOWN: | ||
| + | if yPos + 1 < maxY: | ||
| + | yPos = yPos + 1 | ||
| + | elif taste == curses.KEY_LEFT: | ||
| + | xPos = max(xPos - 1, 0) | ||
| + | elif taste == curses.KEY_RIGHT: | ||
| + | xPos = min(xPos + 1, maxX - 1) | ||
| + | elif taste == curses.KEY_MOUSE: | ||
| + | mausID, mausX, mausY, mausZ, drueckZustand = curses.getmouse() | ||
| + | if 0 <= mausX < maxX and 0 <= mausY < maxY: | ||
| + | xPos = mausX | ||
| + | yPos = mausY | ||
| + | elif taste == 27: | ||
| + | break | ||
| + | |||
| + | # https:// | ||
| + | os.environ.setdefault(' | ||
| + | |||
| + | curses.wrapper(main) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====== Link zum ersten Versuch (Herbst 2022): Funktionen ====== | ||
| + | |||
| + | https:// | ||
| + | ====== Altes, ausgesondertes Material ====== | ||
| + | |||
| + | |||
| + | ===== aus Abschnitt über while-loop: Bonus-Aufgabe: | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schreibe ein Programm, das einen Bankautomat simuliert: Der Benutzer gibt den gewünschten Betrag (in Franken) ein, der Computer gibt diesen Betrag in Banknoten aus und versucht dabei, die Anzahl der ausgegebenen Noten möglichst gering zu halten. | ||
| + | |||
| + | Welche Banknoten es gibt, erfährst du zum Beispiel hier: https:// | ||
| + | |||
| + | <hidden Hinweis> | ||
| + | Verwende ''< | ||
| + | |||
| + | Verwende '' | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | <WRAP round todo> | ||
| + | DIESE AUFGABE IST VIELLEICHT EINFACH ÜBERFLÜSSIG UND KANN AUSGELASSEN WERDEN (UND ICH SOLLTE SIE LOESCHEN ...). | ||
| + | |||
| + | Bis jetzt haben wir auf dieser Seite fast nur in der Python-Shell gearbeitet. Alles geht natürlich auch in Python-Programmen. | ||
| + | |||
| + | Welche Ausgaben erwartest du bei dem folgenden Programm? Es gibt 18 Mal " | ||
| + | |||
| + | Prüfe deine Antworten, indem du das Programm abspeicherst und laufen lässt! Zum Erleichtern des Vergleichs habe ich alle '' | ||
| + | |||
| + | <code python logische-verknuepfungen.py> | ||
| + | # 1 | ||
| + | print(True and False) | ||
| + | # 2 | ||
| + | print(True or True) | ||
| + | # 3 | ||
| + | print(2 < 5) | ||
| + | # 4 | ||
| + | print((235236235 < 2346346) or True) | ||
| + | |||
| + | a = (5 != 6) | ||
| + | # a ist eine Boolesche Variable | ||
| + | # Es ist erlaubt, hier die Klammern wegzulassen, | ||
| + | # Klammern verbessern aber oft die Lesbarkeit und dienen der Fehlervermeidung. | ||
| + | # (Nur als Vielprogrammierer wird man sich genau merken können, was staerker bindet.) | ||
| + | # 5 | ||
| + | print(a) | ||
| + | |||
| + | b = not (False or (True and (2 < 5))) | ||
| + | # 6 | ||
| + | print(b) | ||
| + | |||
| + | # 7 | ||
| + | print(True != True) | ||
| + | # 8 | ||
| + | print(True == (False or True)) | ||
| + | |||
| + | # 9 | ||
| + | print((2 > 3) == (-1 >= 0)) | ||
| + | # Die Leerzeichen sind optional, dienen aber der besseren Lesbarkeit: | ||
| + | # print((2> | ||
| + | # hat dieselbe Bedeutung. | ||
| + | # Ebenso dienen Leerzeilen der besseren Lesbarkeit. | ||
| + | |||
| + | # 10 | ||
| + | print(2 * " | ||
| + | # 11 | ||
| + | print(not(" | ||
| + | |||
| + | antwort = " | ||
| + | # 12 | ||
| + | print(antwort == "St. Gallen" | ||
| + | |||
| + | x = 100 | ||
| + | # 13 | ||
| + | print(4 <= x and x < 10) | ||
| + | |||
| + | x = -10 | ||
| + | # 14 | ||
| + | print(4 <= x and x < 10) | ||
| + | |||
| + | x = 10 | ||
| + | # 15 | ||
| + | print(4 <= x and x < 10) | ||
| + | |||
| + | x = 4 | ||
| + | # 16 | ||
| + | print(4 <= x and x < 10) | ||
| + | |||
| + | # 17 | ||
| + | print(x*x*x == x**3) | ||
| + | |||
| + | x = 2 | ||
| + | # 18 | ||
| + | print(x+x+x+x == x**3) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====== Aus Funktionen-Abschnitt ====== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schreibe nun eine Funktion mit drei Parametern '' | ||
| + | |||
| + | Verwende diese Funktion und die Funktion '' | ||
| + | |||
| + | Verschachtelte (und gedrehte) Quadrate? | ||
| + | |||
| + | </ | ||
| + | |||
| + | ====== EINZUFUEGEN ====== | ||
| + | |||
| + | |||
| + | Schreibe Buchstaben/ | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Dort gefallen mir besonders die ineinanderliegenden $n$-Ecke. | ||
| + | |||
| + | Diverse Erklärtexte dort sind auch gut. | ||
| + | |||
| + | Quadrat fixer bzw. variabler Seitenlänge. | ||
| + | |||
| + | * Funktionen oder: Wie man grössere Programm übersichtlich gestaltet: modularer Entwurf, Baukastenprinzip. | ||
| + | |||
| + | |||