Bedingtes ausführen
Nachdem die Eingabe jetzt gemacht werden kann muss das Programm auch darauf reagieren. Das Ratespiel soll ja, wenn man eine zu große Zahl geschätzt hat, "zu groß" sagen. Hat man aber zu klein geschätzt, soll es "zu klein" sagen. Das heißt man benötigt ein "wenn … dann …"
Alle Programmiersprachen bieten die Möglichkeit, einen Befehl nur dann auszuführen, wenn eine bestimmte Bedingung eintritt.
Einfaches Beispiel: Nur wenn der Benutzer in ein turtle.textinput()
Fenster 5
eingibt soll "Einen lieben Gruß" geschrieben werden:
import turtle
t = turtle.Pen()
t.shape("turtle")
antwort = int(turtle.textinput("Frage", "Sagen Sie hallo:"))
if antwort == 5:
#(Das True bewirkt dass die Turtle beim Schreiben läuft.)
t.write("Einen lieben Gruß", True)
Ergebnis nach der Eingabe von 5
, wurde was anderes eingegeben, so kommt der Text nicht.
Das if
in diesem Beispiel ist das Kommando, welches den bedingten Aufruf einleitet. Das antwort == 5
ist die Bedingung, es gibt noch viele weitere Möglichkeiten Bedingungen zu schreiben im Anhang. Es vergleicht das, was in der Variablen antwort
steht mit der Zahl 5
ist beides das gleiche wird die folgende Zeile ausgeführt, ansonsten wird die folgende Zeile übersprungen.
Nach der Bedingung folgt immer ein Doppelpunkt. Die nächste Zeile wird ein Stück weiter eingerückt als das if
.
Ein etwas komplizierteres Beispiel, das nach einem Tag, sowie einer Benotung für diesen fragt:
import turtle
t = turtle.Pen()
tag = turtle.textinput("Frage", "Sagen Sie einen Tag:")
note = turtle.textinput("Frage", "Geben Sie eine Note für diesen Tag:")
if tag == "Montag":
if note == "6":
t.write("Falsch Montage sind die Besten! ", True)
note = "1"
t.write(tag + " mit Note " + note + " stimme ich zu! Viel Spass!")
Anmerkung
In einer ganz anderen, grafischen Programmiersprache
scratch
wird ein if als "Klammer" dargestellt. Dieses Bild ist nur, falls Sie sich das dann besser vorstellen können. Falls nicht ignorieren Sie es.
Das
if
, welches zu falls übersetzt wird, ist eine Klammer. Alles was innerhalb diesesif
s ist, wird nur ausgeführt, wenn die Bedingung desif
s zutrifft. Dieses "innerhalb" wird in Python durch "stärker eingerückt", also mehr Leerzeichen am Anfang der Zeile deutlich gemacht. Natürlich kann auch innerhalb einesif
s ein zweitesif
stehen.
Wenn → Dann → "Ansonsten"
Oft wird es benötigt, dass "ansonsten" ein anderer Befehl ausgeführt wird. Der Befehl hierzu ist else
. Auch auf else
folgt ein Doppelpunkt und weitere eingerückte Befehle.
Notiz: Sowohl nach
if
als auch nachelse
muss mindestens ein eingerückter Befehl kommen. Also man kann im folgenden Beispiel keines der beidenwrite
s weglassen (man kann sie aber durch beliebige andere Befehle ersetzen).
import turtle
t=turtle.Pen()
gru = turtle.textinput("Frage", "Geben Sie ein Grußwort ein:")
if gru == "Guten Tag":
t.write("Ich antworte mit Hallo")
else:
t.write("Bah! - zu unfreundlich!")
Logischerweise ist else
nur nach einem fertigen if
sinnvoll.
Man sieht hier, dass dem Computer die Bedeutung der Worte völlig gleichgültig ist, er folgt nur der Logik der Befehle. Sie können das freundlichste Grußwort eingeben, wenn es aber nicht "Guten Tag" ist, wird der Computer das unfreundlich finden.
Ein Grußprogramm mit drei Möglichkeiten
Ein Programm, das auf hallo
und tschüss
unterschiedlich reagiert:
import turtle
t=turtle.Pen()
gru = turtle.textinput("Frage", "Geben Sie ein Grußwort ein:")
if gru == "hallo":
t.write("Guten Tag")
elif gru == "tschüss":
t.write("Auf Wiedersehen")
else:
t.write("Ich habe Sie leider nicht verstanden")
In diesem Beispiel wird eine weitere Option der if
-Ausdrücke verwendet: elif
. Dieses steht für else if
und bedeutet: Falls nicht die erste Bedingung dann vielleicht diese Bedingung also am ehesten zu übersetzen mit "oder wenn". Zwischen einem if
und einem else
können beliebig viele elif
stehen, aber vorher muss immer ein if
stehen.
Übung Grußprogramm
Schreiben und testen Sie ein Programm, welches nach einem Gruß fragt und je nach Gruß unterschiedlich reagiert. Denken Sie sich eigene Antwortmöglichkeiten aus.
Speichern Sie dieses Programm unter dem Namen
gru.py
.
Beispiel: ein "Passwortprogramm"
Die nun gestellte Aufgabe ist es ein Passwort zu erraten, welches im Programm festgelegt wird. Zunächst speichern wir das zu erratende Passwort in einer Variablen.
geheim = "Döner"
Es werden drei Versuche gegeben das Passwort zu erraten:
geheim = "Döner"
import turtle
t=turtle.Pen()
if geheim == turtle.textinput("Frage", "Versuch Nummer 1:"):
t.write("geschafft")
else:
if geheim == turtle.textinput("Frage", "Versuch Nummer 2:"):
t.write("geschafft")
else:
if geheim == turtle.textinput("Frage", "Versuch Nummer 3:"):
t.write("geschafft")
else:
t.write("nicht geschafft")
Dieses Programm ist natürlich nicht so, wie der Computer ein Passwort abfragen würde, da das Passwort für jeden lesbar im Programm steht. Normalerweise wird das Passwort nur verschlüsselt also nicht lesbar abgespeichert.
Übung Zahlenratespiel
Schreiben Sie ein Programm, welches 3 Versuche gewährt eine Zahl zu erraten. Dieses Programm kann sehr ähnlich zu dem Passwortprogramm geschrieben werden. Speichern Sie dieses Programm unter
ratemal.py
.Gehen Sie schrittweise vor:
- Schreiben Sie ein Programm, welches nach einer Zahl mit
int(turtle.textinput(title="", prompt=""))
fragt und diese ausgibt.- Testen Sie das Programm ob es tut was es soll.
- Entfernen Sie die Ausgabe, und fügen Sie stattdessen ein
if
undelse
ein, welches auf die Eingabe reagiert.
Achtung
Vorsicht beim Vergleichen: Das Zeichen einer Zahl ist nicht gleich der Zahl. Zum Beispiel ist
"2" == 2
unwahr alsoFalse
. Um diese beiden Werte sinnvoll zu vergleichen, muss das Zeichen"2"
zur Zahl2
konvertiert werden:int("2") == 2
(mehr dazu).