Bedingungen
Kurz gesagt: Mit einer Bedingung wählt das Programm aus, was es tut: if führt einen Block nur aus, wenn der Vergleich wahr ist, elif und else geben die anderen Wege vor, und match wählt zwischen vielen Werten.
Problem
Die Lieferung, die es nicht geben sollte
Ein Onlineshop verspricht kostenlose Lieferung für Bestellungen ab 50 €. Unter 50 € kostet die Lieferung 4,99 €. Die Bestellung liegt bei 62 €, und das Programm rechnet trotzdem die Lieferung dazu:
total = 62.0shipping = 4.99print(f"Zu zahlen: {total + shipping} €")Zu zahlen: 66.99 €Das Programm führt jede Zeile aus, eine nach der anderen. Hier muss es aber auswählen: in einem Fall die eine Zeile, im anderen Fall eine andere.
Die Idee
Ein Vergleich antwortet mit ja oder nein
Zuerst muss das Programm fragen: Ist die Summe 50 € oder mehr? Dafür gibt es Vergleichsoperatoren. Ihre Antwort ist keine Zahl, sondern True (wahr) oder False (falsch): ein Wert vom Typ bool.
total = 62.0print(total >= 50)print(total == 50)print(total != 50)TrueFalseTrue| Du schreibst | Es fragt |
|---|---|
a > b, a < b |
größer, kleiner |
a >= b, a <= b |
größer oder gleich, kleiner oder gleich |
a == b |
sind sie gleich |
a != b |
sind sie verschieden |
Pass auf: == vergleicht, und = speichert einen Wert. total == 50 fragt, ob die Summe 50 ist, und total = 50 setzt sie auf 50.
Text wird in Python mit demselben == verglichen:
answer = "ja"yes = answer == "ja"print(yes)TrueGenauer, für Neugierige
Kommazahlen sind selten genau gleich. Der Computer speichert 0.1 und 0.2 nur ungefähr, deshalb ist ihre Summe nicht genau 0.3:
print(0.1 + 0.2 == 0.3)print(0.1 + 0.2)False0.30000000000000004Bei Kommazahlen fragst du besser, ob sie nah genug beieinander liegen: abs(a - b) < 0.000001. Vergleiche mit > und < haben dieses Problem nicht.
Die Idee
if und else: einer von zwei Wegen
Jetzt kann das Programm auswählen. if prüft die Bedingung dahinter. Ist sie wahr, führt es den Block nach dem Doppelpunkt aus. Ist sie es nicht, führt es den Block nach else: aus. Der Block sind die Zeilen, die um 4 Leerzeichen eingerückt sind. Es gibt keine geschweiften Klammern: Die Einrückung zeigt, was drinnen ist.
total = 62.0if total >= 50: shipping = 0else: shipping = 4.99print(f"Lieferung: {shipping} €")Lieferung: 0 €Bei einer Bestellung von 18,50 € gibt dasselbe Programm Lieferung: 4.99 € aus. Es wird nur einer der Blöcke ausgeführt, nie beide.
else ist nicht Pflicht. Ohne else wird der Block übersprungen, wenn die Bedingung nicht wahr ist, und das Programm macht danach weiter.
Genauer, für Neugierige
- In Python ist die Einrückung nicht zur Zierde da, sie gehört zum Code. Eine Zeile, die genauso weit eingerückt ist wie das
ifselbst, steht schon außerhalb des Blocks und wird immer ausgeführt. - Die Bedingung kann jeder Wert sein, nicht nur
TrueoderFalse. Die Zahl 0 und der leere Text""zählen als falsch, alles andere als wahr:
total = 0if total: print("Es gibt eine Summe")else: print("0 zählt als falsch")0 zählt als falschif total = 50:stoppt schon, bevor das Programm startet, mitSyntaxError: Python erlaubt=in einer Bedingung nicht.
Probier es aus
Eine Bestellung über dem Lagerbestand
Im Lager sind 3 Stück, und der Kunde bestellt 5.
Was gibt das Programm aus?
stock = 3ordered = 5if ordered > stock: print("Nicht genug auf Lager") ordered = stockprint(f"Wir versenden {ordered} Stück")5 > 3 ist wahr, also wird der Block ausgeführt: Er gibt die Meldung aus und senkt die Bestellung auf 3. Die letzte Zeile steht nach dem Block und wird immer ausgeführt.
Die Idee
elif: mehr als zwei Wege
Eine Lehrerin macht aus den Punkten eines Tests eine Note. Es gibt vier Möglichkeiten. Zwischen if und else setzt du elif (kurz für else if, „sonst wenn“):
points = 76if points >= 90: print("Ausgezeichnet")elif points >= 75: print("Sehr gut")elif points >= 50: print("Gut")else: print("Ungenügend")Sehr gutDie Prüfungen laufen von oben nach unten. Ausgeführt wird der erste Zweig mit einer wahren Bedingung, die anderen werden übersprungen. 76 ist nicht >= 90, aber >= 75, also ist es „Sehr gut“. Bis zu >= 50 kommt das Programm nie, obwohl auch das wahr ist.
Deshalb ist die Reihenfolge wichtig: Die strengste Bedingung kommt zuerst. Stünde points >= 50 ganz oben, bekäme jeder mit 50 Punkten oder mehr „Gut“.
points = 76if points >= 90: print("Ausgezeichnet")elif points >= 75: print("Sehr gut")elif points >= 50: print("Gut")else: print("Ungenügend")Schritt für Schritt, in Worten
- points ist 76.
- 76 >= 90? Nein. Der Zweig „Ausgezeichnet“ wird übersprungen.
- 76 >= 75? Ja. Wir gehen in den Zweig „Sehr gut“.
- Ausgegeben wird „Sehr gut“.
- Auch 76 >= 50 ist wahr, wird aber nicht geprüft. Die Kette endet beim ersten wahren Zweig.
Probier es aus
Finde den Fehler
Jeder mit 90 Punkten oder mehr bekommt „Ausgezeichnet“. Ein Schüler mit genau 90 Punkten bekommt „Sehr gut“. In welcher Zeile ist der Fehler?
Wähle die Zeile mit dem Fehler.
points > 90 lässt genau die 90 aus. Richtig ist points >= 90. Solche Fehler „um eins daneben“ sind häufig: Wenn die Bedingung „ab … aufwärts“ lautet, prüf, was genau an der Grenze passiert.
Die Idee
Und, oder, nicht
Das Kino gibt Kindern und Studierenden ein ermäßigtes Ticket. Es gibt zwei Bedingungen, und eine reicht. Du verbindest sie mit logischen Operatoren:
age = 16student = Falseif age < 18 or student: print("Ermäßigtes Ticket: 6 €")else: print("Ticket: 10 €")Ermäßigtes Ticket: 6 €In Python sind die Operatoren Wörter:
a and bist wahr, wenn beide wahr sind („und“).a or bist wahr, wenn mindestens eine wahr ist („oder“).not aist wahr, wennanicht wahr ist („nicht“):not student.
Kostenlose Lieferung ab 50 € und nur in der Stadt ist total >= 50 and in_city. Eine Zahl liegt zwischen 1 und 12, wenn month >= 1 and month <= 12. In Python funktioniert auch die Schreibweise aus der Mathematik, 1 <= month <= 12: Sie bedeutet dasselbe.
month = 13print(1 <= month <= 12)print(month >= 1 and month <= 12)FalseFalseGenauer, für Neugierige
- Wenn der linke Operand die Antwort schon entscheidet, wird der rechte nicht geprüft: bei
False and …und beiTrue or …. Das heißt Kurzschlussauswertung und schützt manchmal vor einem Fehler:count != 0 and total / count > 10teilt nie durch 0 (in Python stoppt eine Division durch 0 das Programm mitZeroDivisionError). andkommt voror, so wie*vor+. Wenn du sie mischst, setz Klammern, damit es klar lesbar ist:(a and b) or c.- Eine Bedingung kann auch in einem anderen
ifstehen. Das ist ein verschachteltesif. Dieser Code ist dasselbe wieif total >= 50 and in_city:
if total >= 50: if in_city: shipping = 0Probier es aus
Durch 5 und durch 7
Was gehört in die Lücke, damit die Bedingung nur für Zahlen wahr ist, die sowohl durch 5 als auch durch 7 teilbar sind?
number = 35
if number % 5 == 0 number % 7 == 0:
print("Durch 5 und durch 7 teilbar")and: Beide Prüfungen müssen wahr sein. Mit or würde eine reichen, und 10 käme auch durch.Die Idee
Der bedingte Ausdruck if … else
Manchmal ist das ganze if nur dazu da, einen von zwei Werten auszuwählen. Dafür gibt es eine Kurzform in einer Zeile, den bedingten Ausdruck:
points = 76message = "Du hast bestanden!" if points >= 50 else "Leider nicht bestanden."print(message)Du hast bestanden!Er liest sich fast wie ein Satz: Wert, wenn wahr, if Bedingung, else Wert, wenn nicht. Dasselbe mit if und else braucht mehrere Zeilen, hier ist es eine.
In Java, C# und JavaScript schreibt man dasselbe mit ? : und nennt es ternären Operator. Python hat kein ? :. Die Entsprechung ist der bedingte Ausdruck.
Nimm ihn, um einen Wert auszuwählen. Wenn das Programm in den beiden Fällen verschiedene Dinge tun soll, schreib if.
Genauer, für Neugierige
- Die beiden Werte können verschiedene Typen haben: im einen Fall Text, im anderen eine Zahl. Das Programm läuft, aber danach weißt du nicht, was in der Variable steckt. Wähle zwischen Werten desselben Typs.
points = 40result = "Bestanden" if points >= 50 else 0print(result)0- Bedingte Ausdrücke lassen sich ineinander verschachteln, aber solcher Code ist schwer zu lesen. Für drei oder mehr Möglichkeiten schreib
elif.
Die Idee
match: Auswahl nach Wert
Der Shop hat werktags von 9:00 bis 18:00 geöffnet, am Samstag bis 14:00, und am Sonntag ist er geschlossen. Wenn der Tag eine Zahl ist (1 ist Montag, 7 ist Sonntag), vergleichst du sie mit mehreren genauen Werten. Dafür gibt es match:
day = 6match day: case 6: print("10:00–14:00") case 7: print("Geschlossen") case _: print("9:00–18:00")10:00–14:00matchnimmt den Wert dahinter und vergleicht ihn von oben nach unten mit jedemcase. Ausgeführt wird der erste, der passt.- Nach seinem
caseistmatchfertig: Die anderen werden nicht ausgeführt, und du brauchst keinbreak. case _:ist für alle anderen Werte da, wie das letzteelse.- Mehrere Werte mit derselben Aktion schreibst du mit
|in eincase:case 6 | 7:.
match gibt es in Python seit 3.10. In älterem Code schreibt man dasselbe mit if und elif. Für Prüfungen wie „ab 50 aufwärts“ schreib if.
Genauer, für Neugierige
- Ein
casemit einem bloßen Namen, zum Beispielcase sunday:, vergleicht nicht mit der Variablesunday. Er passt auf jeden Wert und speichert ihn unter diesem Namen. Hier ist der Tag 3, und das Programm gibt „Geschlossen“ aus:
sunday = 7day = 3match day: case sunday: print("Geschlossen")GeschlossenSchreib in einen case die Zahlen und den Text selbst: case 7:, case "+":.
- In Java und C# kann
switchauch einen Wert liefern.matchkann das nicht: Speichere den Wert in jedemcasein einer Variable. Ein Beispiel mit|:
day = 7match day: case 6 | 7: print("Wochenende") case _: print("9:00–18:00")WochenendeÜbung
Programme, die auswählen
Löse die Aufgaben in deinem Editor. Jede Zahl der Eingabe steht in einer eigenen Zeile. Probier jede Lösung auch mit einer Eingabe aus, die durch die anderen Zweige läuft.
1. Eine Kinokarte. Lies das Alter ein. Bis 6 Jahre ist der Eintritt frei, bis 17 kostet das Ticket 6 €, bis 64 kostet es 10 €, ab 65 kostet es 5 €. Ein negatives Alter ist ein Fehler.
15Das Ticket kostet 6 €2. Ein Mini-Taschenrechner. Lies eine Zahl, eine Operation (+, -, * oder /) und eine zweite Zahl ein. Wähle die Rechnung mit match nach dem Text der Operation aus. Durch 0 darf nicht geteilt werden.
12/5Ergebnis: 2.43. Eine quadratische Gleichung. Lies a, b und c aus ax² + bx + c = 0 ein. Die Diskriminante ist D = b² − 4ac. Ist D positiv, gibt es zwei Lösungen: (−b ± √D) / 2a. Ist D gleich 0, gibt es eine Lösung: −b / 2a. Ist D negativ, gibt es keine reellen Lösungen. Ist a = 0, ist die Gleichung nicht quadratisch.
1-32x1 = 2.00, x2 = 1.004. Ein gültiges Datum. Lies einen Tag, einen Monat und ein Jahr ein und sag, ob es das Datum gibt. Die Anzahl der Tage im Monat findest du mit match heraus. Der Februar hat in einem Schaltjahr 29 Tage: Das Jahr ist durch 4 teilbar, aber nicht durch 100, oder es ist durch 400 teilbar.
2922023Ungültiges DatumFür 29, 2, 2024 lautet die Ausgabe Gültiges Datum.
Weitere Aufgaben
- Gerade oder ungerade. Für 7:
Ungerade. - Positiv, negativ oder null. Für −5:
Negativ. - Größer als 10. Für 15:
Größer als 10. - Sind sie gleich. Lies zwei Zahlen ein. Für 5 und 5:
Gleich. - Die größere von zwei. Lies zwei Zahlen ein und gib die größere aus. Mach es einmal mit
ifund einmal mit… if … else …. - Betrag. Ohne
abs: Wenn die Zahl negativ ist, kehr ihr Vorzeichen um. - Ja oder nein. Lies einen Text ein. Gib
Truefür „ja“ aus,Falsefür „nein“ undAntwort nicht verstandenfür alles andere. - Durch 5 und durch 7. Sag, ob die Zahl sowohl durch 5 als auch durch 7 teilbar ist. Für 35: ja, für 10: nein.
- Drei Zahlen aufsteigend. Lies drei Zahlen ein und gib sie von der kleinsten bis zur größten aus. Für 7, 2, 5:
2 5 7. - Die kleinste und die größte von fünf. Lies fünf Zahlen in fünf Variablen ein. Merk dir die erste als kleinste und als größte und vergleiche dann jede weitere damit.
- Wochentag. Lies eine Zahl von 1 bis 7 ein und gib den Tag aus:
1istMontag. Für eine andere Zahl:Diesen Tag gibt es nicht. Probier es mitmatch. - Altersgruppe. Bis 12 Jahre ist man ein Kind, bis 19 ein Teenager, sonst erwachsen.
- Jahreszeit nach Monat. Dezember, Januar und Februar sind Winter, März bis Mai ist Frühling und so weiter. Für 4:
Frühling. Mit match schreibst du mehrere Werte in ein case: case 12 | 1 | 2: - Ist es ein Dreieck. Drei Seiten bilden ein Dreieck, wenn die Summe von je zwei größer ist als die dritte. Für 3, 4, 5: ja, für 1, 2, 3: nein.
- Eine Note in Worten. Lies eine Note von 2 bis 6 ein und gib
Ungenügend,Ausreichend,Gut,Sehr gutoderAusgezeichnetaus. - Errate das Tier. Das Programm stellt Fragen, die man mit „ja“ oder „nein“ beantwortet, und errät, an welches Tier du denkst. Beginne mit einer Begrüßung und einer kurzen Erklärung des Spiels. Du kannst alle Fragen stellen und dann mit
elifentscheiden, oder du fragst mit verschachteltenifnur, was du brauchst. Die Fragen:
| Frage | Bei „ja“ | Bei „nein“ |
|---|---|---|
| Fliegt es? | ein Vogel oder ein Insekt | weiter |
| Hat es Federn? | ein Vogel | wenn es fliegt, ein Insekt |
| Schwimmt es? | wenn es nicht fliegt: ein Fisch oder ein kleines Wassersäugetier | weiter |
| Miaut es? | eine Katze | keine Katze |
| Hat es Fell? | ein Hund, eine Katze oder ein anderes Säugetier | eine Eidechse oder ein anderes Reptil |
| Ist es grün? | wenn es weder fliegt noch schwimmt: ein Frosch oder eine Eidechse | weiter |
| Brüllt es? | eine Kuh oder ein Löwe | weiter |
| Hat es einen Rüssel? | ein Elefant | weiter |
Ein Beispiel (die Eingabe ist die Antwort auf jede Frage, der Reihe nach):
neinneinneinjajaneinneinneinDenk dir ein Tier aus. Ich stelle dir 8 Fragen. Antworte mit ja oder nein.Fliegt es?Hat es Federn?Schwimmt es?Miaut es?Hat es Fell?Ist es grün?Brüllt es?Hat es einen Rüssel?Ich glaube, es ist eine Katze.Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Dein erstes Programm · Variablen und Typen · Eingabe und Ausgabe · Operatoren und Arithmetik
- Geht weiter in: Schleifen · Listen · Zweidimensionale Arrays · Strings: mit Text arbeiten
- Aufgaben zum Thema: Sprachgrundlagen