lehrkraefte:snr:informatik:ideen

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:ideen [2022/11/26 11:05] – [Pygame docu] Olaf Schnürerlehrkraefte: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://de.wikipedia.org/wiki/Konjunktive_Normalform
 +
 +Dort sind Links zu 
 +
 +https://de.wikipedia.org/wiki/Verfahren_nach_Quine_und_McCluskey
 +
 +und
 +
 +https://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm
 +
 +====== Videos von Ivos Seite ======
 +
 +  * https://www.youtube.com/watch?v=QZwneRb-zqA, https://www.youtube.com/watch?v=I0-izyq6q5s, Minecraft: https://www.youtube.com/watch?v=tDxKhiJfgYk
 +  * 8-Bit Adder mit TTL-Logic https://www.youtube.com/watch?v=X31B1pVow1o
 +
 +
 +====== Koordinatengrafik ======
 +
 +Lass zuerst zwei konzentrische Fünfecke mit Turtle zeichnen!
 +
 +Dann mit ''kantigrafik'' und Trigonometrie.
 +
 +====== Pen verwenden, mit Python ======
 +
 +dann vielleicht Escherbilder malen? Kaleidoskop?
 +
 +===== Online turtle (and python) tutorial =====
 +
 +https://hourofpython.trinket.io/a-visual-introduction-to-python#/welcome/an-hour-of-code
 +
 +====== Pygame Installationsprobleme ======
 +
 +Vermutlich ist "python -m pip install" besser als "pip install":
 +
 +relativ neu:
 +https://stackoverflow.com/questions/60782785/python3-m-pip-install-vs-pip3-install
 +
 +älter:
 +https://stackoverflow.com/questions/25749621/whats-the-difference-between-pip-install-and-python-m-pip-install
 +
 +
 +===== Pygame docu =====
 +
 +https://www.pygame.org/wiki/GettingStarted
 +
 +test pygame with "python -m pygame.examples.aliens"
 +
 +Example files are located in
 +
 +~/.local/lib/python3.10/site-packages/pygame/examples
 +
 +https://stackoverflow.com/questions/71742916/no-module-named-pygame-after-using-pip
 +
 +Command palette: "Python: Select interpreter"
 +
 +===== Turtle demo files =====
 +
 +/usr/lib/python3.10/turtledemo
 +
 +https://docs.python.org/3/library/turtle.html#module-turtledemo
 +
 +
 +
 +====== Planung ======
 +
 +Ivo nimmt https://pypi.org/project/graphics.py/
 +===== Erwartetes Vorankommen =====
 +
 +Jeweils "spätester" Termin (vermutlich sind einige deutlich schneller):
 +
 +  * 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 "Impulse Day"):
 +    * 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://code.visualstudio.com/docs
 +  * Jupyter-Notebooks (haben neuen Namen, habe dies irgendwo ausprobiert): Sinnvoll für Unterricht?
 +  * https://www.youtube.com/watch?v=qUeud6DvOWI
 +  
 +  * 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://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:sbtsnr:python:logic
 +  * AREPL for python
 +  * .vscode folder, wohl bei workspaces
 +  * Hexeditor (python extension)
 +  * https://simulator.io/ für logische Schaltungen
 +  * 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: Nimm Schaltjahr Beispiel auf! Wahrheitstabelle
 +
 +Bei Unicode: KCharSelect zum Auswählen/Finden von Unicode-Symbolen. Wenn es nur um Emojis etc. geht, tut es der Emoji-Selector (oder ibus?)
 +
 +Online Python-Shell: https://pyodide.org/en/latest/console.html
 +
 +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? (Punkte gehen, so wie ich im Chaosgame) (Gibt auch pixelarray in pygame, kann wohl direkt reinschreiben)
 +
 +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/snake/roter Kasten mit Tastatursteuerung mit while!
 +
 +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 ''dir'' erklären. Dann "Drei Chinesen ..." ersetze. Uppercase.
 +  * Funktionen (Modularisierung); dabei evtl. Turtle-Grafik.
 +  * Listen; Listen VOR ''if''? Dann wird ''range'' klarer...
 +  * Zufall ''random'' bzw. ''randint''
 +  * Farben
 +  * Graph zeichnen? Histogramm?
 +  * Goethe-Analyse?
 +  * "Brauche" Listen: String-Befehle, rauskriegen etwa per ''dir(s)'' wobei ''s'' String ist
 +
 +
 +====== optional, als Bonus-Sachen ======
 +
 +  * Dateien: lesen schreiben?
 +  * Ascii-Escape-Codes, Cursor positionieren, einfaches Game? Farben
 +  * mehr zu strings: raw strings mit ''r"er sagte:"Hallo \n"'' oder so ähnlich. Alternative mit Escape-Sachen oder verschiedenen Anführungszeichen. Wie gebe ''\n'' mit print aus?
 +
 +
 +===== Nettes =====
 +
 +  * Koralle?
 +  * roten Kasten mit Tastatur steuern!
 +  * Snake!
 +  * Männchen durch Labyrinth steuern? Ich gebe Labyrinth vor in Bibliothek/Module/Library. Dafür nötig:
 +  * 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/Emailen der Lösungen?
 +
 +Bei jeder Aufgabe irgendwo deinen Namen einbauen! Als Variablennamen, als Ausgabe, n = Anzahl Buchstaben in deinem Namen.
 +
 +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="". Also sollte eventuell erklären, wie man Stellenanzahl, Platz etc. angibt..., vgl. https://stackoverflow.com/questions/45310254/fixed-digits-after-decimal-with-f-strings
 +  * bei "for" einfach sagen, dass noch keine Listen, aber trotzdem mal ''list(range(30))'' hinschreiben?
 +  * Wahrheitswerte (evtl. vor ''if'' and ''while''), Vergleiche, gleich, ungleich, groesser, kleiner
 +
 +als Bonus-Sache erklärt:
 +  * print(..., sep = "----|")
 +  * print(a, b, "hallo", c)
 +
 +
 +====== readchar ======
 +
 +Muss testen, ob das unter Windows geht...
 +
 +<hidden>
 +<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 * " " + "X")
 +</code>
 +</hidden>
 +===== Geht cv2 alias opencv-python in Windows? =====
 +
 +Ja, muss jedoch vorher:
 +
 +pip install numpy
 +
 +pip install opencv-python
 +
 +<hidden><code python opencv-test.py>
 +import numpy as np
 +# Musste opencv-python installieren.
 +import cv2
 +
 +
 +bild = np.zeros((512, 512, 3), np.uint8)
 +
 +cv2.line(bild, (20, 200), (300, 30), (0,0,255), 5)
 +cv2.rectangle(bild, (200, 60), (20, 200), (255, 0, 0), 3)
 +cv2.circle(bild, (80, 80), 50, (0, 255, 0), 4)
 +
 +cv2.putText(bild, "Hello World!", (100, 300), cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 1, (255, 255, 0))
 +
 +cv2.imshow("Bild", bild)
 +cv2.waitKey(0)
 +cv2.destroyAllWindows()
 +</code>
 +</hidden>
 +
 +===== Geht curses in Windows? =====
 +curses gibt es nicht (unter Linux ist das im Python module index, also Standard), es gibt aber windows-curses, was zwar läuft, aber nicht richtig.
 +<hidden>
 +<code python curses-test.py>
 +import curses
 +import os
 +import random
 +
 +def  main(bildschirm):
 +    bildschirm.clear()
 +    maxY, maxX = bildschirm.getmaxyx()
 +    bildschirm.addstr(1, 0, f"({maxY}, {maxX})")
 +
 +    curses.mousemask(curses.BUTTON1_CLICKED)
 +    for y in range(maxY):
 +        for x in range(maxX):
 +            try:
 +                bildschirm.addstr(y, x, " ")
 +            except curses.error as e:
 +                pass
 +
 +    xPos = maxX // 2
 +    yPos = maxY // 2
 +
 +    while True:
 +        bildschirm.addstr(0, 0, f"({yPos}, {xPos})")
 +
 +        zeichen = chr(bildschirm.inch(yPos, xPos) & 0xFF) 
 +        if zeichen == " ":
 +            neu = "A"
 +        elif zeichen == "Z":
 +            neu = "A"
 +        else: 
 +            neu = chr(ord(zeichen) + 1)
 +
 +        try:
 +            bildschirm.addstr(yPos, xPos, neu)
 +        except curses.error as e:
 +            pass
 +        bildschirm.move(yPos, xPos)
 +
 +        taste = bildschirm.getch()
 +        bildschirm.addstr(1, 0, str(taste))
 +
 +        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://stackoverflow.com/questions/27372068/why-does-the-escape-key-have-a-delay-in-python-curses  
 +os.environ.setdefault('ESCDELAY', '25')
 +
 +curses.wrapper(main)
 +</code>
 +</hidden>
 +
 +
 +====== Link zum ersten Versuch (Herbst 2022): Funktionen ======
 +
 +https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:snr:informatik:glf22:python:funktionen-erster-versuch
 +====== Altes, ausgesondertes Material ======
 +
 +
 +===== aus Abschnitt über while-loop: Bonus-Aufgabe: Bankautomat =====
 +
 +<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://www.snb.ch/de/iabout/cash/history/id/cash_history_serie9
 +
 +<hidden Hinweis>
 +Verwende ''<nowiki>//</nowiki>'' (ganzzahlige Division) um herauszufinden, wie oft eine Banknote ausgegeben werden soll.
 +
 +Verwende ''%'' (Rest der ganzzahligen Division) um den Betrag herauszufinden, der dann noch übrig bleibt.
 +</hidden> 
 +
 +</WRAP>
 +
 +<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 "True" oder "False" aus. Notiere die 18 Ausgaben, die du erwartest, auf einem Zettel.
 +
 +Prüfe deine Antworten, indem du das Programm abspeicherst und laufen lässt! Zum Erleichtern des Vergleichs habe ich alle ''print''-Befehle durchnummeriert (durch die Zahl in der jeweiligen Kommentarzeile davor).
 +
 +<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, denn das Vergleichszeichen != bindet staerker als das Zuweisungszeichen =.
 +# 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>3)==(-1>=0))
 +# hat dieselbe Bedeutung.
 +# Ebenso dienen Leerzeilen der besseren Lesbarkeit.
 +
 +# 10
 +print(2 * "python" == "python" + "python")
 +# 11
 +print(not("Python" != "python"))
 +
 +antwort = "Sanggalle"
 +# 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)
 +</code>
 +</WRAP>
 +
 +====== Aus Funktionen-Abschnitt ======
 +
 +<WRAP center round todo>
 +Schreibe nun eine Funktion mit drei Parametern ''setzeZustand(x, y, alpha)'', die die Turtle //ohne zu zeichnen// auf den Punkt ''(x, y)'' setzt mit Blickrichtung ''alpha''.
 +
 +Verwende diese Funktion und die Funktion ''quadrat(s)'' aus der vorigen Aufgabe, um das folgende Bild zu erstellen!
 +
 +Verschachtelte (und gedrehte) Quadrate? 
 +
 +</WRAP>
 +
 +====== EINZUFUEGEN ======
 +
 +
 +Schreibe Buchstaben/Zahlen! Funktion für jeden Buchstaben! (das ist jedenfalls sinnvoll)
 +
 +https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:snr:informatik:bruehl-2022:funktionen
 +
 +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.
 +
 +