Programmieren in einer textbasierten Sprache
In einer blockbasierten Umgebung wie Scratch steckst du Programme aus Blöcken zusammen. Bei größeren Programmen wird das mühsam: Hunderte Blöcke passen nicht auf den Bildschirm, und eine Änderung mitten im Programm kostet viel Mausarbeit. Darum sind fast alle Programme im Alltag als Text geschrieben.
Du lernst, dasselbe in Python zu tun: womit ein Programm rechnet, wie du es in Teile zerlegst, wie es mit Benutzern und Dateien spricht und wie du Fehler findest.
Vom Block zum Text
In einer textbasierten Programmiersprache schreibst du jede Anweisung als Zeile Text, und der Computer liest sie von oben nach unten. Die Schreibregeln der Sprache heißen Syntax. In Python gehört die Einrückung zur Syntax: Was zu einer Wiederholung oder Verzweigung gehört, steht eingerückt unter der Zeile mit dem Doppelpunkt. Ein Kommentar beginnt mit , der Computer überspringt ihn.
| Block | Python |
|---|---|
| setze zahl auf 5 | |
| sage zahl | |
| wiederhole 3 mal | |
| falls zahl größer als 4, sonst | und |
| wiederhole, solange zahl kleiner als 50 |
Das Zeichen heißt "speichere den Wert rechts in der Variablen links". liefert 0, 1 und 2, die Schleife läuft also dreimal.
Datentypen, Variablen und Operatoren
Jeder Wert hat einen Datentyp. Er bestimmt, was man mit dem Wert tun kann.
| Datentyp | Python | Beispiele |
|---|---|---|
| Ganzzahl | , | |
| Gleitkommazahl (mit Nachkommastellen) | (Punkt statt Komma) | |
| Wahrheitswert | , | |
| Zeichenkette (Text) |
Eine Variable ist ein Name für einen gespeicherten Wert, legt sie an. Operatoren verknüpfen Werte:
| Operator | Bedeutung | Beispiel mit Ergebnis |
|---|---|---|
| rechnen wie in der Mathematik | ergibt 12 | |
| Division, Ergebnis immer | ergibt 3.5 | |
| ganzzahlige Division, Rest verworfen | ergibt 3 | |
| Rest der Division | ergibt 1 | |
| Vergleich, Ergebnis ein Wahrheitswert | ergibt True |
Logische Verknüpfungen und Wahrheitstafel
Wahrheitswerte verknüpfst du mit (und), (oder) und (nicht). Die Wahrheitstafel listet für jede Belegung von und das Ergebnis:
| a | b | a and b | a or b | not a |
|---|---|---|---|---|
| False | False | False | False | True |
| False | True | False | True | True |
| True | False | False | True | False |
| True | True | True | True | False |
ist nur wahr, wenn beide Seiten wahr sind. ist wahr, sobald eine Seite wahr ist. Vergleiche werden vor und ausgewertet.
Felder und Listen
Ein Feld (englisch Array) speichert viele Werte unter einem Namen. Jeder Wert hat eine Nummer, den Index, und der Index beginnt bei 0. In Python heißt dieser Typ Liste; sie kann wachsen und schrumpfen.
| Anweisung | Wirkung |
|---|---|
| legt eine Liste an | |
| erstes Element, hier 4 | |
| Länge der Liste, hier 3 | |
| hängt 23 hinten an | |
| durchläuft alle Elemente der Reihe nach |
Unterprogramme, Modularisierung, Bibliotheken und Zufallszahlen
Ein Unterprogramm (in Python eine Funktion) ist ein benannter Programmteil, den du immer wieder aufrufen kannst. Werte kommen über Parameter hinein, und gibt einen Rückgabewert zurück.
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 | |
| 2 | 1 |
ergibt 14. Modularisierung heißt, ein großes Programm in Teile mit je einer Aufgabe zu zerlegen, die du einzeln schreibst und testest. Eine Programmbibliothek ist eine fertige Sammlung von Unterprogrammen, die du mit holst. Die Bibliothek liefert Zufallszahlen: gibt eine ganze Zahl von 1 bis 6 zurück, beide Grenzen eingeschlossen. Der Computer erzeugt sie nach einer Rechenvorschrift, die zufällig wirkt (Pseudozufall).
Ein Unterprogramm mit einer Liste
Ein Unterprogramm mit einer Liste
Wie lautet die Ausgabe?
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 | |
| 2 | 1 | |
| 3 | 1 | |
| 4 | 2 | |
| 5 | 1 | |
| 6 | 0 |
Zeile 6 ruft die Funktion auf, der Parameter bekommt die Liste. Die Schleife addiert die Elemente: summe wird 4, dann 12, dann 27, dann 32. ist 4. Der Rückgabewert ist 32 / 4 = 8.0, und gibt 8.0 aus.
Eingabe, Dateien und grafische Oberfläche
Mit zeigt das Programm den Text an und wartet. liefert das Eingegebene immer als Zeichenkette. Eine Zahl wandelst du mit oder um.
Nach dem Programmende sind die Variablen weg. Dauerhaft bleiben Daten nur in Dateien. öffnet eine Datei zum Schreiben, und eingerückt darunter schreibt Text hinein. Mit statt öffnest du sie zum Lesen, und liefert den Inhalt als Zeichenkette.
Eine grafische Benutzeroberfläche (GUI) hat Fenster, Knöpfe und Textfelder. Python bringt dafür die Bibliothek mit. Jeder Knopf bekommt ein Unterprogramm, das beim Klick läuft. Das Programm wartet auf Ereignisse wie Klicks, statt nur von oben nach unten zu laufen.
Spezifikation, Lesbarkeit und Kommentare
Bevor du programmierst, legst du die Spezifikation fest: eine genaue Beschreibung, was das Programm bei welchen Eingaben liefern soll, auch in Sonderfällen. Für lautet sie: "Eingabe ist eine Liste mit mindestens einer Zahl, Ausgabe ist die Summe geteilt durch die Anzahl."
Der Quelltext soll lesbar sein: sprechende Namen ( statt ), kurze Unterprogramme, saubere Einrückung. Ein Kommentar erklärt, warum etwas so geschrieben ist, nicht nur, was dort steht: .
Fehlerarten, Tests, Debugger und Logging
Es gibt drei Fehlerarten. Bei einem Syntaxfehler versteht Python das Programm nicht, und es startet gar nicht (zum Beispiel fehlt der Doppelpunkt hinter ). Bei einem Laufzeitfehler startet es, bricht aber in einer Zeile ab, etwa bei oder . Bei einem Semantikfehler läuft es durch und liefert ein falsches Ergebnis.
Semantikfehler findest du durch Testen. Ein Testfall besteht aus einer Eingabe und dem erwarteten Ergebnis, das du aus der Spezifikation bestimmst. Ein automatisierter Test prüft das selbst: bricht mit einer Fehlermeldung ab, wenn das Ergebnis nicht stimmt. Teste normale Fälle und Grenzfälle.
Der Debugger führt das Programm Zeile für Zeile aus. An einem Haltepunkt hält er an, und du siehst alle Variablen. Logging heißt: Das Programm schreibt beim Laufen Meldungen auf, etwa mit oder der Bibliothek .
Einen Fehler mit einem Testfall finden
Einen Fehler mit einem Testfall finden
Diese Funktion soll den Mittelwert berechnen. Der Test in Zeile 6 schlägt fehl.
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 | |
| 2 | 1 | |
| 3 | 1 | |
| 4 | 2 | |
| 5 | 1 | |
| 6 | 0 |
Erwartet wird (4 + 8) / 2 = 6. Das Programm rechnet 12 / 3 = 4.0, der Vergleich 4.0 == 6 ist falsch, und bricht ab. Ohne den Test gäbe es nur ein falsches Ergebnis ohne Meldung: ein Semantikfehler. Die Ursache steckt in Zeile 5, der Teiler ist um 1 zu groß. Richtig ist , dann gilt 12 / 2 = 6.0, und der Test besteht.
Grenzfall: teilt durch 0 (Laufzeitfehler). Die Spezifikation schließt die leere Liste aus, das ist erlaubt.
Gleichheitszeichen und Vergleich
Gleichheitszeichen und Vergleich
„ und bedeuten dasselbe.“
speichert den Wert 5 in x. vergleicht und liefert True oder False. In einer Bedingung schreibst du . Mit nur einem Gleichheitszeichen meldet Python einen Syntaxfehler.
Eingaben sind Zahlen
Eingaben sind Zahlen
„ liefert die Zahl, die ich eintippe, ich kann gleich damit rechnen.“
liefert immer eine Zeichenkette. Aus "3" und "4" macht das Pluszeichen "34", nicht 7. Erst gibt dir eine Zahl.
Zusammenfassung
Python schreibt Programme als Zeilen. Die Einrückung gehört zur Syntax, Kommentare beginnen mit #.
Datentypen: Ganzzahl, Gleitkommazahl, Wahrheitswert, Zeichenkette. Operatoren rechnen, vergleichen und verknüpfen (and, or, not).
Listen speichern viele Werte unter einem Namen, der Index beginnt bei 0.
Unterprogramme haben Parameter und einen Rückgabewert. Modularisierung und Bibliotheken wie random halten Programme übersichtlich.
Eingaben liefern Zeichenketten, Dateien bewahren Daten dauerhaft, eine GUI reagiert auf Ereignisse.
Eine Spezifikation legt vorher fest, was das Programm tun soll. Lesbarer Quelltext und Kommentare helfen beim Verstehen.
Syntax-, Laufzeit- und Semantikfehler unterscheiden sich. Testfälle, Debugger und Logging helfen bei der Suche.
Übungen
Das Programm setzt und gibt dann aus. Welche Zahl erscheint?
Für welche Belegung ist "a or not b" falsch?
Ein Programm startet ohne Meldung und läuft bis zum Ende, gibt aber für den Mittelwert von 2 und 4 den Wert 2.0 aus. Welche Fehlerart liegt vor?
Du schreibst und dann . Das Programm bricht mit einem Laufzeitfehler ab. Erkläre die Ursache und gib die verbesserte Zeile an.