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.

Geschachteltes If in Scratch

Das if, welches zu falls übersetzt wird, ist eine Klammer. Alles was innerhalb dieses ifs ist, wird nur ausgeführt, wenn die Bedingung des ifs 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 eines ifs ein zweites if 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 nach else muss mindestens ein eingerückter Befehl kommen. Also man kann im folgenden Beispiel keines der beiden writes 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:

  1. Schreiben Sie ein Programm, welches nach einer Zahl mit int(turtle.textinput(title="", prompt="")) fragt und diese ausgibt.
  2. Testen Sie das Programm ob es tut was es soll.
  3. Entfernen Sie die Ausgabe, und fügen Sie stattdessen ein if und else 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 also False. Um diese beiden Werte sinnvoll zu vergleichen, muss das Zeichen "2" zur Zahl 2 konvertiert werden: int("2") == 2 (mehr dazu).