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 Operatora is b
prüft, ob es sich um dasselbe Objekt handelt.a == b
prüft, ob die Variablen die gleichen Werte haben!
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 manelse
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
Mitelif
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
undelse
eingefügt werden.
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
- and Wahr, genau dann, wenn die Bedingung rechts und die links davon beide erfüllt sind.
- or Wahr, genau dann, wenn mindestens eine der Bedingungen rechts und links davon erfüllt ist.
- not Wahr, genau dann, wenn die Bedingung danach False also nicht erfüllt ist. Die Aussage bzw. Bedingung wird also “verneint”.
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 wie1 < 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
- bei einem Alter unter 18 alles ist wie bisher
- für Personen zwischen 18 und 30 Komm du erst mal in mein Alter! ausgegeben wird
- für alle Anderen Ach doch schon... ausgegeben wird.
(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
MERKE
Um eine Endlosschleife zu bauen (also eine ewige Wiederholung derselben Anweisungen), kann manwhile 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
Ü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
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 inmenge
sind.
MERKE
Oft verwendet manrange(anzahl)
oder
range(start_zahl, end_zahl)
für
menge
, was die Menge der Zahlen von 0 bisanzahl - 1
bzw. vonstart_zahl
bisend_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.