In Bayern beschäftigen sich Schülerinnen und Schüler der 9. Jahrgangsstufe (Gymnasium, naturwissenschaftlich-technologischer Zweig) mit Tabellenkalkulations- und Datenbanksoftware. Das ist bei dem aktuellen, etwa zehn Jahre alten Lehrplan so, und bei dem kommenden neuen ebenfalls. Dabei sollen die Schülerinnen nicht Excel lernen, sondern vor allem: Datenflussmodellierung, und ein Verständnis für Funktionen im informatischen Sinn. Und sie sollen auch bei Datenbanken neben SQL vor allem Datentypen und die Modellierung mit Klassendiagrammen lernen, als Vorarbeit für die 10. Jahrgangsstufe, die ganz unter dem Stern der Objektorientierten Programmierung steht.
Ein halbes Jahr Excel, ein halbes Jahr SQL – das hängt einem zum Hals heraus. Beides braucht man danach im Informatikunterricht nur spärlich, jedenfalls nicht bis in die jeweiligen Feinheiten.
Da ich dieses Jahr zum Halbjahr unter anderem meine 9. Klasse abgeben muss (und stattdessen eine Deutschklasse übernehme; so etwas kommt zum Halbjahr immer mal wieder vor), habe ich nicht mit Datenbanken angefangen, obwohl ich schon vor einer Weile mit Tabellenkalkulation abgeschlossen habe. Stattdessen habe ich mit den Schülern das getan, was sich logischerweise anschließt an die Auseinandersetzung mit Tabellenkalkulation unter funktionalem Begriff: selber Funktionen programmiert.
Das geht mit Python so kinderleicht und so natürlich, dass die Schüler damit keine Probleme haben. Man kann fast die gleichen Aufgaben, die sie vorher mit Calc gelöst haben, jetzt mit Python programmieren. Aus Zellbezeichnern werden Variablenbezeichner, schließlich ist so eine Zelle fast auch nur ein Behälter für einen Wert – wie Variablen.
Arbeiten mit der Programmiersprache Python
Python ist eine einfache Programmiersprache. Du schreibst die Befehle dazu in eine Datei (Menü: “File>New Window” oder einfach STRG+N), die du dann mit der Taste F5 (“Run”) ausführen lässt.
Die Funktionen darin ähnen denen in Tabellenkalkulationsprogrammen, nur dass du die Zellen nicht siehst:
| a1 = 14 | in Zelle a1 wird 14 eingetragen |
| b1 = 12 | in Zelle b1 wird 12 eingetragen |
| c1 = a1+b1 | in Zelle c1 wird die Summe von a1 und b1 eingetragen |
| a1 = -5 | in Zelle a1 wird -5 eingetragen – anders als bisher ändert sich dabei c1 nicht, die Werte anderer gemerkter Sachen werden nicht automatisch aktualisiert |
Um die Werte anzuzeigen, kannst du die print-Funktion verwenden:
| print(c1) | druckt “26” aus |
| print(„Ergebnis:“, c1) | druckt “Ergebnis: 26” aus |
| print(a1, b1, c1) | druckt “-5 12 26” aus |
Vordefiniert sind diese Funktionen in Infix-Schreibweise: +, -, /, *
Andere Funktionen musst du dir selber schreiben. Das geht so:
def quadrat(x):
return x*x
Wichtig sind dabei das Schlüsselwort def für Definition, die Klammern, der Doppelpunkt und die automatische Einrückung nach dem Doppelpunkt. Mit dem Schlüsselwort return bestimmst du, was die Funktion zurückgeben soll.
Sobald du das getan hast, kannst du die Funktion in den Zeilen darunter benutzen:
| d1 = quadrat(3) | |
| print(d1) | druckt “9” aus |
| print(quadrat(quadrat(3+2)) | druckt “625” aus |
AUFGABE 1: Ergänze und teste folgende Funktionen
|
Testwerte |
Ergebnis | |
| def quader_volumen(laenge, breite, hoehe) |
2,3,4 |
24 |
| def kreis_flaeche(radius) |
3 |
28.27431 |
| def kreis_umfang(radius) |
3 |
18.84954 |
| def zylinder_volumen(radius, hoehe) |
3,4 |
113.09724 |
| def quadrat_umfang(seitenlaenge) |
3.5 |
12.25 |
Hinweise: Nimm für Pi den Wert 3.14159 – achte darauf, wie bisher kein Komma zu nehmen, sondern einen Dezimalpunkt.
Umlaute und Sonderzeichen funktionieren meistens bei Programmiersprachen, machen aber ab und zu doch Probleme, deshalb verzichte ich meistens ganz auf sie
AUFGABE 2: Schreibe dir eine Funktion, mit der du die vorherigen Funktionen testest:
def test():
print("Quadrat von 2:", quadrat(2))
print("Volumen Quader 2*3*4:", quader_volumen(2,3,4))
print("Kreis Umfang Radius 1:", kugel_umfang(1))
Und so weiter. (Diese Funktion gibt nichts zurück.)
Starte den test mit der Zeile: test()
AUFGABE 3: Ergänze Funktionen
- zum Berechnen des Durchschnitts zweier Zahlen
- zum Berechnen der Fläche eines Trapezes
- zum Berechnen der Blutalkoholkonzentration, abhängig von Masse des Menschen, Menge des Getränks, Alkoholgehalt des Getränks – entscheide dich dabei für die Formel für Männer oder Frauen
AUFGABE 4:
- Schreibe eine Funktion
verschieben(zeichen), die- ein eingebenes Zeichen in eine Zahl umwandelt. Das geht mit der bereits vorhandenen Funktion
ord(zeichen)(=> wandelt Zeichen in Zahl um). - Zähle dann 1 zu dem Ergebnis dazu
- und wandle das Ergebnis mit der vorhandenen Funktionen
chr(Zahl)(=> wandelt
Zahl in Zeichen um) wieder in ein neues Zeichen um, - das die Funktion dann zurückgibt
- ein eingebenes Zeichen in eine Zahl umwandelt. Das geht mit der bereits vorhandenen Funktion
- Schreibe eine entsprechende Funktion
zurueckschieben(zeichen) - Schreibe die neuen Funktionen
verschiebenUm(zeichen, verschiebung_um)undzurueckschiebenUm(zeichen, verschiebung_um) - Teste das jeweils mit der folgenden Funktion an einem ganzen Satz:
def verschluesseln(satz):
for buchstabe in satz:
print (verschiebenUm(buchstabe, 2))
Aufgabe 5: Die Kontrollstruktur: Wenn, dann, sonst (“Bedingte Anweisung”)
Es gibt keine wenn-Funktion, aber so etwas Ähnliches. Du kennst das noch von Robot Karol:
def darfBierBestellen(alter, eltern_sind_dabei):
if alter>16:
return True
else:
if alter>14 and eltern_sind_dabei==True:
return True
else:
return False
Zum Testen:
| x1 = darfBierBestellen(15, False) | |
| print (x1) | druckt “False” aus |
Warum steht das nicht im Lehrplan, wo es sich doch organisch an die Tabellenkalkulation anfügt? Und eine gute Vorbereitung für die 10. Klasse ist? Außerdem halte ich es für äußerst sinnvoll, erst einmal nicht objektorientiert zu programmieren, Algorithmik zu üben – nur dann erkennen Schüler später auch den Sinn und Nutzen von objektorientierter Programmierung.
Ich vermute mal, dass das mit der Geschichte des Pflichtfachs Informatik in Bayern zu tun hat. Bayern ist da ja mit Vorreiter, und wenn ich mir anschaue, wie schwer sich andere Länder mit dem Einführen eines solchen Fachs tun, dann war das wohl auch hier eine große Leistung. Bei den Entscheidungsträgern hatte Informatik, und das ist wohl immer noch so, den Ruf, etwas mit Programmierung zu tun – und das war ja total verpönt. Das brauchte man allenfalls in der Berufsbildung, aber doch nicht an allgemeinbildenden Schulen. — Und so hat man sich mit dem Verzicht auf frühes Programmieren vielleicht den Pflichtfachstatus erkauft. Trotzdem schade, dass der neue Lehrplan keien Verbesserung gegenüber dem alten bringt.
Schreibe einen Kommentar