3. Unterrichtsblock

Python If…Else & Bedingte Anweisungen

Python unterstützt die üblichen logischen Bedingungen aus der Mathematik:

  • Gleich: a == b
  • Ungleich: a != b
  • Kleiner als: a < b
  • Kleiner oder gleich: a <= b
  • Größer als: a > b
  • Größer oder gleich: a >= b

Diese Bedingungen können auf verschiedene Weise verwendet werden, am häufigsten in „if-Anweisungen“ und Schleifen. Eine „if-Anweisung“ wird mit dem if-Schlüsselwort geschrieben.

If-Anweisung:

a = 33
b = 200
if b > a:
  print("b ist größer als a")

In diesem Beispiel werden zwei Variablen als Teil der if -Anweisung (a und b) verglichen, um zu prüfen, ob b größer als a ist. Da a 33 und b 200 ist , wissen wir, dass 200 größer als 33 ist, und so geben wir auf dem Bildschirm aus, dass „b größer als a“ ist.

Einrückung

Python vererwendet Einrückungen (Leerzeichen am Anfang einer Zeile), um den Bereich im Code zu definieren. Andere Programmiersprachen verwenden zu diesem Zweck oft geschweifte Klammern.

If-Anweisung ohne Einrückung (wird einen Fehler auslösen):

a = 33
b = 200
if b > a:
print("b ist größer als a") # wird einen Fehler auslösen

Elif

Das Schlüsselwort elif ist Pythons Art zu sagen: „Wenn die vorherigen Bedingungen nicht wahr waren, dann versuche diese Bedingung“.

a = 33
b = 33
if b > a:
  print("b ist größer als a")
elif a == b:
  print("a und b sind gleich")

In diesem Beispiel ist a gleich b , also ist die erste Bedingung nicht wahr. Die elif Bedingung jedoch schon, also wird auf dem Bildschirm ausgegeben, dass „a und b gleich sind“.

Else

Das Schlüsselwort else fängt alles ab, was nicht auf die vorhergehenden Bedingungen zutrifft.

a = 200
b = 33
if b > a:
  print("b ist größer als a")
elif a == b:
  print("a und b sind gleich")
else:
  print("a ist größer als b")

# Eine "Shorthand" if else-Anweisung mit 3 Bedingungen:

a = 330
b = 330
print("A") if a > b else print("=") if a == b else print("B")

And

Das Schlüsselwort and ist ein logischer Operator und wird verwendet, um bedingte Anweisungen zu kombinieren:

Prüfung, ob a größer als b ist UND ob c größer als ist a:

a = 200
b = 33
c = 500
if a > b and c > a:
  print("Beide Bedingungen sind wahr")

Oder

Das or Schlüsselwort ist ein logischer Operator und wird verwendet, um bedingte Anweisungen zu kombinieren:

Prüfung, ob a größer ist als b, ODER ob a größer ist als c:

a = 200
b = 33
c = 500
if a > b or a > c:
  print("Eine der Bedingungen ist wahr")

Nicht

Das not Schlüsselwort ist ein logischer Operator und wird verwendet, um das Ergebnis der bedingten Anweisung umzukehren:

Prüfung, ob a NICHT größer ist als b:

a = 33
b = 200
if not a > b:
  print("a ist NICHT größer als b")

Verschachteltes wenn

Man kann if Anweisungen innerhalb von if Anweisungen haben, dies wird als verschachtelte if Anweisungen bezeichnet.

x = 41

if x > 10:
  print("Größer als 10")
  if x > 20:
    print("und auch größer als 20.")
  else:
    print(", aber nicht größer als 20.")

Die Pass-Anweisung

if Anweisungen dürfen nicht leer sein. Wenn jedoch aus irgendeinem Grund eine if Anweisung ohne Inhalt bleibt, fügt man die pass Anweisung ein, um eine Fehlermeldung zu vermeiden.

a = 33
b = 200

if b > a:
  pass

Aufgaben

Bearbeite die Aufgaben der Reihe nach. Sage bei jedem Beispiel zuerst voraus, was passiert, und prüfe deine Vermutung danach mit Python. Teste dein Programm nach jedem Schritt mit mehreren Werten. Eingaben liest du mit input() ein, aus dem eingegebenen Text machst du mit int() eine Zahl:

zahl = int(input("Gib eine Zahl ein: "))

Aufgabe 1 – Der Türsteher

Ein Türsteher entscheidet anhand des Alters, wer in den Club darf.

  1. Frage mit input() nach dem Alter und wandle die Eingabe mit int() um.
  2. Ab 18 Jahren gibt der Türsteher „Willkommen!“ aus, sonst „Leider zu jung.“.
  3. Ergänze eine dritte Regel: Ab 16 dürfen Jugendliche bis 22 Uhr hinein. Gib dafür eine passende Meldung aus (Tipp: elif).
  4. Teste dein Programm mit den Werten 12, 16, 17, 18 und 40.

Frage an dich: Was passiert bei genau 16 und genau 18? Warum ist die Reihenfolge der Bedingungen wichtig? Schreibe die Antwort als Kommentar in deinen Code.

Aufgabe 2 – Finde die Fehler

Das folgende Programm soll prüfen, ob ein Passwort stimmt. Es enthält drei Fehler und läuft so nicht. Kopiere den Code in deinen Editor, repariere ihn Schritt für Schritt und schreibe zu jedem Fehler einen Kommentar, was falsch war.

passwort = "python123"
eingabe = input("Passwort: ")
if eingabe = passwort
print("Zugang erlaubt")
else:
    print("Zugang verweigert")

Zusatz: Wie verhält sich dein Programm bei der Eingabe „Python123“? Erkläre es.

Aufgabe 3 – Der Notenrechner

Aus einer Punktzahl (0 bis 100) soll eine Note berechnet werden:

  • ab 90 Punkten: Note 1
  • ab 75 Punkten: Note 2
  • ab 60 Punkten: Note 3
  • ab 45 Punkten: Note 4
  • ab 20 Punkten: Note 5
  • darunter: Note 6
  1. Frage die Punktzahl mit input() ab.
  2. Gib die passende Note aus, zum Beispiel „Note: 2“.
  3. Gib bei den Noten 5 und 6 zusätzlich „Bitte nachlernen!“ aus.
  4. Was soll dein Programm bei einer Eingabe wie 150 oder -3 tun? Baue eine sinnvolle Meldung ein.

While Schleifen

Python hat zwei einfache Schleifenbefehle:

  • while -Schleifen
  • for – Schleifen

Schleifen können mit

Mit der While- Schleife können wir eine Reihe von Anweisungen ausführen, solange eine Bedingung wahr ist. Es können daher neben (==, !=, <, >) auch boolsche Werte (True & False) für Wahrheitsprüfung verwendet werden.

Folgende Schleife gibt i aus, solange i kleiner als 6 ist:

i = 1
while i < 6:
  print(i)
  i += 1

Hinweis: Man muss i erhöhen, sonst wird die Schleife für immer fortgesetzt.

Die while-Schleife erfordert, dass relevante Variablen bereit sind. In diesem Beispiel müssen wir eine Indizierungsvariable i definieren , die wir auf 1 setzen.

Folgende Schleife läuft, solange alle darin enthaltenen Bedingungen „wahr“ also True sind

# While-Schleife, die direkt mit 'while True:' beginnt
while True:
    print("Die Schleife läuft...")
    # Eine Bedingung, um die Schleife zu beenden
    # Zum Beispiel: Ein Benutzerinput oder eine bestimmte Logik
    antwort = input("Soll die Schleife weiterlaufen? (ja/nein): ")
    if antwort.lower() == 'nein':
        break  # Beendet die Schleife

print("Die Schleife wurde beendet.")

Die Break-Anweisung

Mit der break-Anweisung können wir die Schleife auch dann stoppen, wenn die while-Bedingung wahr ist:

Verlassen der Schleife, wenn i gleich 3 ist:

i = 1
while i < 6:
  print(i)
  if i == 3:
    break
  i += 1

Die Continue-Anweisung

Mit der continue-Anweisung können wir die aktuelle Iteration stoppen und mit der nächsten fortfahren:

Fahren Sie mit der nächsten Iteration fort, wenn i 3 ist:

i = 0
while i < 6:
  i += 1
  if i == 3:
    continue
  print(i)

Die else-Anweisung

Mit der else-Anweisung können wir einen Codeblock einmal ausführen, wenn die Bedingung nicht mehr erfüllt ist. Die folgende Anweisung gibt eine Nachricht aus, sobald die Bedingung falsch ist:

i = 1
while i < 6:
  print(i)
  i += 1
else:
  print("i ist nicht länger kleiner als 6")

Aufgabe

Baue die Beispiele oben nach und verändere sie: Was passiert, wenn du i += 1 weglässt? (Programm im Terminal mit Strg + C abbrechen.)

Aufgabe 4 – Zahlenraten

Der Computer denkt sich eine Zahl zwischen 1 und 20 aus, du musst sie erraten. Diesen Anfang bekommst du vorgegeben:

import random

geheimzahl = random.randint(1, 20)
tipp = 0
  1. Wiederhole in einer while-Schleife so lange die Frage nach einem Tipp, bis der Tipp die Geheimzahl ist. Tipp: Deshalb steht oben tipp = 0, damit die Schleife beim ersten Mal startet.
  2. Sage nach jedem falschen Tipp, ob die Geheimzahl höher oder niedriger ist.
  3. Gib nach der Schleife „Richtig!“ aus.

Zusatzaufgaben: Zähle die Versuche und gib sie am Ende aus. Beende das Spiel mit break, wenn jemand „0“ eingibt. Begrenze das Spiel auf 6 Versuche. Zum Testen kannst du dir die Geheimzahl zunächst mit print() ausgeben lassen.

For-Schleifen

Eine for-Schleife wird zum Iterieren über eine Menge (das ist entweder eine Liste, ein Tupel, ein Dictionary, ein Set oder einen String) verwendet.

Dies ähnelt weniger dem Schlüsselwort for in anderen Programmiersprachen und funktioniert eher wie eine Iteratormethode, wie sie in anderen objektorientierten Programmiersprachen zu finden ist.

Mit der for-Schleife können wir eine Reihe von Anweisungen ausführen, einmal für jedes Element in einer Liste, einem Tupel, einer Menge usw. Folgendes Programm gibt Früchte in einer Liste aus:

obst = ["Apfel", "Banane", "Birne"]
for x in obst:
  print(x)

Die for-Schleife erfordert keine vorab zu setzende Indizierungsvariable.

Schleife durch einen String laufen lassen

Auch Strings sind iterierbare Objekte. Sie enthalten eine Folge von Zeichen. Durchläuft die Buchstaben des Wortes „Banane“ mit einer Schleife:

for x in "Banane":
  print(x)

Die Break-Anweisung

Mit der break-Anweisung können wir die Schleife stoppen, bevor sie alle Elemente durchlaufen hat. Folgende Anweisung beendet die Schleife, wenn x „Banane“ ist:

obst = ["Apfel", "Banane", "Birne"]
for x in obst:
  print(x)
  if x == "Banane":
    break

Folgende Anweisung verlässt die Schleife, wenn x „Banane“ ist. Dieses Mal jedoch vor der print-Anweisung:

obst = ["Apfel", "Banane", "Birne"]
for x in obst:
  if x == "Banane":
    break
  print(x)

Die Continue-Anweisung

Mit der continue-Anweisung können wir die aktuelle Iteration der Schleife stoppen und mit der nächsten fortfahren. Banane nicht ausgeben:

obst = ["Apfel", "Banane", "Birne"]
for x in obst:
  if x == "Banane":
    continue
  print(x)

Die range()-Funktion

Um eine Reihe von Codes eine bestimmte Anzahl von Malen zu durchlaufen, können wir die Funktion range() verwenden. Die Funktion range() gibt eine Folge von Zahlen zurück, die standardmäßig bei 0 beginnt und (standardmäßig) um 1 erhöht wird und bei einer bestimmten Zahl endet.

Verwendung der Funktion range():

for x in range(6):
  print(x)

Zu beachten ist, dass range(6) nicht die Werte von 0 bis 6 sind, sondern die Werte von 0 bis 5.

Die Funktion range() hat standardmäßig 0 als Startwert. Es ist jedoch möglich, den Startwert durch Hinzufügen eines Parameters anzugeben: range(2, 6) , was Werte von 2 bis 6 (aber nicht einschließlich 6) bedeutet:

Verwendung des Startparameters:

for x in range(2, 6):
  print(x)

Die Funktion range() erhöht die Sequenz standardmäßig um 1, es ist jedoch möglich, den Inkrementwert durch Hinzufügen eines dritten Parameters anzugeben: range(2, 30, 3 ) :

Erhöhen Sie die Sequenz mit 3 (Standard ist 1):

for x in range(2, 30, 3):
  print(x)

Else in der For-Schleife

Das else Schlüsselwort in einer for Schleife gibt einen Codeblock an, der ausgeführt werden soll, wenn die Schleife beendet ist. Folgendes Beispiel gibt die Zahlen von 0 bis 5 aus und gibt eine Nachricht aus, wenn die Schleife beendet ist:

for x in range(6):
  print(x)
else:
  print("Beendet!")

Hinweis: Der else Block wird NICHT ausgeführt, wenn die Schleife durch eine break Anweisung gestoppt wird.

Unterbrechen der Schleife, wenn x 3 ist. Beobachte, was mit dem else Block passiert:

for x in range(6):
  if x == 3:
    break
  print(x)
else:
  print("Beendet!")

Verschachtelte Schleifen

Eine verschachtelte Schleife ist eine Schleife innerhalb einer Schleife.

Die „innere Schleife“ wird einmal für jede Iteration der „äußeren Schleife“ ausgeführt:

Drucken Sie jedes Adjektiv für jede Frucht:

adjektiv = ["rot", "groß", "gut"]
obst = ["Apfel", "Banane", "Kirsche"]

for x in adjektiv:
  for y in obst:
    print(x, y)

Die Pass-Anweisung

for Schleifen können nicht leer sein, aber wenn man aus irgendeinem Grund eine for Schleife ohne Inhalt hat, fügen man die pass Anweisung ein, um einen Fehler zu vermeiden.

for x in [0, 1, 2]:
  pass

Aufgabe

Baue die Beispiele oben nach. Sage vorher voraus: Welche Zahlen gibt range(2, 8) aus? Und range(5)?

Aufgabe 5 – Die Raketen-Startsequenz

  1. Gib mit einer for-Schleife und range() einen Countdown von 10 bis 1 aus. Danach folgt „Start!“.
  2. Gib mit range() alle Zahlen von 0 bis 100 in Zehnerschritten aus.
  3. Frage nach einer Zahl und gib mit einer for-Schleife ihr kleines Einmaleins bis zum 10-Fachen aus, zum Beispiel „3 x 4 = 12“.
  4. Berechne die Summe aller Zahlen von 1 bis 100 und gib sie aus. Wenn du Lust hast: Prüfe das Ergebnis mit der Formel von Gauß.

Aufgabe 6 – Schleife trifft Bedingung

Schleifen und if arbeiten zusammen. Löse mindestens zwei der drei Teile:

  1. Durch 3 teilbar: Gib alle Zahlen von 1 bis 30 aus, die durch 3 teilbar sind (Tipp: %). Zähle mit, wie viele es sind.
  2. Vokale zählen: Frage einen Text ab und gehe ihn mit for buchstabe in text durch. Zähle, wie viele Vokale (a, e, i, o, u) darin vorkommen.
  3. FizzBuzz: Gehe die Zahlen von 1 bis 30 durch. Bei Vielfachen von 3 gibst du „Fizz“ aus, bei Vielfachen von 5 „Buzz“, bei Vielfachen von 3 und 5 „FizzBuzz“. Sonst die Zahl.

Bonusaufgabe – Muster mit verschachtelten Schleifen

Eine Schleife in einer Schleife wiederholt die innere Schleife bei jedem Durchlauf der äußeren Schleife.

  1. Gib ein 5×5-Feld aus Sternen aus. Tipp: print("*", end="") bleibt in derselben Zeile, ein leeres print() beginnt eine neue Zeile.
  2. Gib ein Dreieck aus, das in jeder Zeile einen Stern mehr hat (*, **, ***, …).
  3. Gib das kleine Einmaleins als Tabelle aus (10 Zeilen, 10 Spalten).