lehrkraefte:snr:informatik:ideen

Videos von Ivos Seite

Koordinatengrafik

Lass zuerst zwei konzentrische Fünfecke mit Turtle zeichnen!

Dann mit kantigrafik und Trigonometrie.

Pen verwenden, mit Python

dann vielleicht Escherbilder malen? Kaleidoskop?

Pygame Installationsprobleme

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”

Planung

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

in terminal: python -m turtledemo

  • 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

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.

  • 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?
  • 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.

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!

  • 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…

Click to display ⇲

Click to hide ⇱

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")

Ja, muss jedoch vorher:

pip install numpy

pip install opencv-python

Click to display ⇲

Click to hide ⇱

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()

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.

Click to display ⇲

Click to hide ⇱

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)

Link zum ersten Versuch (Herbst 2022): Funktionen

Altes, ausgesondertes Material

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

Hinweis

Hinweis

Verwende // (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.

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.
  • lehrkraefte/snr/informatik/ideen.txt
  • Last modified: 2023/02/18 11:34
  • by Olaf Schnürer