This is an old revision of the document!
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
Pygame docu
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
- Jupyter-Notebooks (haben neuen Namen, habe dies irgendwo ausprobiert): Sinnvoll für Unterricht?
- 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 wirdrange
klarer… - Zufall
random
bzw.randint
- Farben
- Graph zeichnen? Histogramm?
- Goethe-Analyse?
- “Brauche” Listen: String-Befehle, rauskriegen etwa per
dir(s)
wobeis
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
andwhile
), 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…
Geht cv2 alias opencv-python in Windows?
Ja, muss jedoch vorher:
pip install numpy
pip install opencv-python
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.
Link zum ersten Versuch (Herbst 2022): Funktionen
Altes, ausgesondertes Material
aus Abschnitt über while-loop: Bonus-Aufgabe: Bankautomat
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
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).
- 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)
Aus Funktionen-Abschnitt
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?
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.