Was ist das?

Bedingte Anweisung
Mit dem Schlüsselwort if können Bedingungen für das Ausführen einer bestimmten Sequenz angegeben werden:

if bedingung:
  action1
  action2

Alle eingerückten Anweisungen werden nur ausgeführt, falls das Programm gerade an dieser Stelle abgearbeitet wird und die Bedingung den Wert True hat.

Aufgabe 1
Führe Folgendes aus:

if True:
  print("Das wird jetzt natürlich ausgeführt, weil die Bedingung 'True' ist.")
if False:
  print("Das hier wird nicht ausgeführt, weil die Bedingung 'False' ist.")

Bedingungen

MERKE
Eine Bedingung ist ein Ausdruck (in der Regel ein Vergleich), der entweder den Wert True oder False ergibt. Vergleichsoperatoren sind == (=), != (≠), <, >, <= (≤) und >= (≥).

Aufgabe 2 Gib das Ergebnis folgender Vergleiche mit print() aus:

1 < 2
2 == 'a'
1 != 0
4 <= 4

Das funktioniert natürlich auch mit Variablen:

a = 0
b = 10
print(a < b)

MERKE
Wenn ein Variable keinen Inhalt hat, so ist sie gleich dem “leeren Container”, der mit None bezeichnet wird.

Prüfen kann man das mit

my_var is None

bzw.

my_var is not None

Aufgabe 3
Versuch vorher zu sagen, was der folgende Codeschnippsel ausgibt.

spam = None
print(spam is None)
print(spam is not None)

MERKE
Der Operator a is b prüft, ob es sich um dasselbe Objekt handelt. a == b prüft, ob die Variablen die gleichen Werte haben!


False True Keines (Fehler) False True Keines (Fehler)

Erste Bedingte Anweisung

Jetzt können wir eine erste vernünftige bedingte Anweisung schreiben:

ice_cream = "schoko"

if ice_cream == "schoko":
  print("Yeah!")

Aufgabe 4
Probier den oben stehenden Code einmal aus und versuche ihn evtl. auch etwas zu modifizieren und zu erweitern.

MERKE
Zwei Strings sind nur gleich, wenn die Zeichen an jeder Stelle übereinstimmen – auch Leerzeichen zählen hier!

Aufgabe 5
Lösche jetzt den Code von gerade eben und schreibe für unseren Chatbot einen Programmbaustein, der, falls der Nutzer jünger als 18 ist, Werd' mal erwachsen! ausgibt.

(Das Alter muss dabei (noch) nicht vom Nutzer eingegeben werden. Verwende einfach einen festen Wert.)

Beginne mit

age = …

Wenn du fertig bist, teste, ob dein Programm funktioniert, indem du es mehrmals mit verschiedenen Werten für age ausführst.


Chatbot: Altersgrenze

Zugegeben, das war jetzt nicht so wahnsinnig sinnvoll. Schließlich haben wir das Alter auf einen festen Wert gesetzt, die Bedingung ist also immer erfüllt (oder eben nicht). Ändern wir das.

Aufgabe 6 Ändere das Programm so ab, dass das Alter wieder vom Nutzer eingegeben werden kann.

(Hier arbeitest du wieder mit dem Code weiter, den du im vorherigen Schritt geschrieben hast.)

REMINDER
input() liest Strings ein, int konvertiert sie zu Ganzzahlen.


Und sonst?

MERKE
Wenn man else einer bedingten Anweisung hinzufügt, kann man auch noch Sequenzen angeben, die dann und nur dann ausgeführt werden, wenn die Bedingung nicht erfüllt ist.

if bedingung:
  mach_das_hier
else:
  falls_bedingung_falsch_mach_das_hier

das_hier_ist_nicht_eingerückt_und_wird_immer_ausgeführt

Aufgabe 7
Schreibe ein Programm, das nach dem Wetter fragt und anschließend eine Antwort einliest. Falls die Eingabe Schnee lautet, gib Der Winter naht! aus. Andernfalls reagiere mit Noch einmal Glück gehabt.. In jedem Fall soll danach Was für ein Wetter… ausgegeben werden.


Mehrseitig bedingte Anweisung

Manchmal reicht es nicht, nur zu unterscheiden ob eine Bedingung zutrifft oder nicht.

MERKE
Mit elif kann man einer bedingten Anweisung weitere Bedingungen hinzufügen:

if bedingung1:
  mach_das_eine
elif bedingung2:
  mach_das_andere
else:
  mach_ganz_was_anderes

Es können beliebig viele elif zwischen ìf und else eingefügt werden.

if a > b and b >= c: else a == b: elif:

Aufgabe 8
Ergänze dein “Wetter-Programm” von vorhin so, dass bei Eingabe von Sonne der Text Na endlich! ausgegeben wird. Bei Nebel soll die Reaktion Typisch Passau... lauten.

(Du arbeitest hier mit deinem Code von der vorherigen Aufgabe weiter.)


Logische Operatoren

Was aber, wenn man zum Beispiel auf die Eingabe Regen genau so wie auf Nebel mit Typisch Passau... reagieren, also die beiden Fälle zusammenfassen möchte?

Dazu müssen zwei Bedingungen kombiniert werden.

MERKE
Mit logischen Operatoren können Bedingungen verbunden bzw. modifiziert werden. Diese Operatoren sind

False True Keines (Fehler) False True Keines (Fehler) False True Keines (Fehler)

Aufgabe 9
Gib mal Folgendes mit print() aus:

True or False
True and False
not False
1 < 0 or True
0 < 5 and 4 > 3
not "Katze" == "Miau"

MERKE
Es können beliebig viele Bedingungen durch logische Operatoren verknüpft werden. Man kann dabei mit Klammern (a and b) or c die Reihenfolge der Auswertung beeinflussen.

Aufgabe 10
Experimentiere mit

True or False and True
True or (False and True)
not "Katze" == "Miau" and "Katze" == "Aww"
not ("Katze" == "Miau" and "Katze" == "Aww")

MERKE
Achtung, beliebter Fehler! Rechts und links von einem and oder or müssen immer zwei eigenständige Bedingungen stehen. Anders gesagt: Die beiden Bedingungen “wissen nichts voneinander”.

"Katze" == "Miau" and "Aww" funktioniert also nicht! …genau so wenig wie 1 < 10 and 5.


Chatbot: Altersgrenze 2

Zurück zu unserem Chatbot:

Aufgabe 11
Ergänze (mit den “Werkzeugen” der mehrfach bedingten Anweisung und der logischen Operatoren, die du gerade kennen gelernt hast) deinen Chatbot so, dass

(Hier arbeitest du wieder mit dem Code weiter, den du ein paar Schritte zuvor geschrieben hast.)


Verschachtelte bedingte Anweisungen

Man kann auch mehrere bedingte Anweisungen ineinander schachteln. Lass dich aber davon nicht verwirren, an der Funktionsweise jeder einzelnen davon ändert sich nichts.

MERKE
So eine Schachtelung sollte man nach Möglichkeit vermeiden. Vor allem sollten es nicht mehr als drei bedingte Anweisungen ineinander sein. Das ist sonst sehr schlechter Code-Stil!

Warum? Weil es unübersichtlich wird. Siehst du ja selbst…


Was ist das?

Mit Hilfe sogenannter Schleifen können Code-Blocks mehrmals hintereinander aufgerufen, also wiederholt werden:

MERKE
Eine while-Schleife wiederholt den eingerückten(!) Code solange die Bedingung True ist:

while bedingung:
  wiederhole_das
  und_das

das_nicht

Bedingungen sind dabei genau wie bei bedingten Anweisungen logische Ausdrücke.

Beispielcode
Hier ein kleines Ablaufdiagramm
Alt text

MERKE
Um eine Endlosschleife zu bauen (also eine ewige Wiederholung derselben Anweisungen), kann man

while True

verwenden. …diese Bedingung ist natürlich immer True :)


Übung: Nervensäge

Aufgabe 12

Vervollständige die vorgegebene Code-Struktur so, dass mit Hilfe einer while-Schleife 10-mal Nerv ich dich? ausgegeben wird. Der Trick dabei ist, die Anzahl der bisherigen Fragen in einer Variable zu speichern, diese regelmäßig zu aktualisieren und basierend darauf die Bedingung der while Schleife zu formulieren.

Ablaufdiagramm
Alt text


Übung: Nervensäge+

Ändere das Programm so, dass es solange Nerv ich dich? fragt, bis JA! eingegeben wird. Lass das Programm im Anschluss daran Schade... :/ ausgeben.

(Du arbeitest hier wieder mal mit deinem Code von der vorherigen Teilaufgabe weiter.)

Hinweis: Den Zähler für die gestellten Fragen brauchst du jetzt nicht mehr. Stattdessen musst du dem Nutzer mit eingabe = input() die Möglichkeit geben, auf deine Frage zu antworten. Die Abbruchbedingung der whileSchleife basiert dann auf der Antwort des Nutzers nach jeder Wiederholung.

Ablaufdiagram
Alt text


Was ist das?

Eine weitere Möglichkeit zur Wiederholung von Programmabschnitten ist die for-Schleife:

MERKE
Eine For-Schleife hat die Form:

for i in menge:
  mach_das
  und_das

das_nicht

und weist in jedem Schritt einer sogenannte Laufvariable, hier i, das nächste Element aus menge zu und führt den eingerückten Code aus. Es werden also so viele Schritte gemacht, wie Elemente in menge sind.

MERKE
Oft verwendet man

range(anzahl)

oder

range(start_zahl, end_zahl)

für menge, was die Menge der Zahlen von 0 bis anzahl - 1 bzw. von start_zahl bis end_zahl - 1 erzeugt.

Beispiel
Alternative zu 6 mal print():

for i in range(0, 6):
  print("Hallo Welt")

Zählermaschine

Aufgabe 13
Zähle von 1 bis 100 ...aber bitte nicht so:

print(1)
print(2)
print(3)
print(4)
print(5)
...

Zusatzaufgabe: Job Interview lite

Job Interview lite Die folgende Aufgabe (in erweiterter Form siehe Zusatzaufgaben) dreht sich um ein (vor allem in den USA gern genutztes) Verfahren, um mit Kindern Teilbarkeitsregeln zu üben. …vielleicht beschäftigen wir uns hier aber auch damit, weil dieser Test sehr gerne in Bewerbungsverfahren genutzt wird. ;)

Aufgabe 14
Schreibe Code, der zu einer festen Zahl x alle Zahlen von 1 bis x ausgibt, wobei jede Zahl durch Fizz ersetzt wird, falls sie durch 3 teilbar ist, durch Buzz, falls sie durch 5 teilbar ist und durch FizzBuzz, falls sie durch 3 und 5 teilbar ist. Der Wert von x soll dabei mit Input eingelesen werden.




Feedback

Du hast Feedback zu diesem Kapitel oder du hast einen Fehler gefunden? Dann schreib mir gerne, damit ich den Fehler schnell beheben kann :)