Python-Kontrollstrukturen

PythonBeginner
Jetzt üben

Einführung

In diesem Lab werden Sie die grundlegenden Kontrollstrukturen von Python erkunden: bedingte Anweisungen und Schleifen. Aufbauend auf Ihrem Wissen aus den vorangegangenen Lektionen lernen Sie, wie Sie den Ablauf Ihrer Programme mit if-else-Anweisungen, for-Schleifen und while-Schleifen steuern. Diese praktische Erfahrung wird Ihr Verständnis der Kernkonzepte von Python vertiefen und Sie darauf vorbereiten, komplexere und dynamischere Programme zu schreiben.

Bedingte Anweisungen verstehen

In diesem Schritt lernen Sie bedingte Anweisungen in Python kennen, insbesondere die if-else-Struktur.

Öffnen Sie den Python-Interpreter, indem Sie den folgenden Befehl in Ihrem Terminal eingeben:

python

Sie sollten den Python-Prompt (>>>) sehen, der anzeigt, dass Sie sich nun in der interaktiven Python-Shell befinden.

Python Interpreter

Beginnen wir mit einer einfachen if-Anweisung. Geben Sie im Python-Interpreter Folgendes ein:

age = 20
if age >= 18:
    print("You are an adult.")

Ausgabe:

You are an adult.

Tipps: Achten Sie genau auf die Einrückung (Indentation), da diese in Python von entscheidender Bedeutung ist. Es wird empfohlen, vier Leerzeichen für die Einrückung zu verwenden.

Die if-Anweisung prüft, ob die Bedingung age >= 18 wahr ist. Wenn dies der Fall ist, wird der eingerückte Codeblock ausgeführt.

Fügen wir nun eine else-Klausel hinzu:

age = 15
if age >= 18:
    print("You are an adult.")
else:
    print("You are a minor.")

Ausgabe:

You are a minor.

Die else-Klausel bietet eine alternative Aktion an, falls die Bedingung falsch ist.

Für komplexere Bedingungen können wir elif-Klauseln (kurz für "else if") verwenden:

age = 65
if age < 13:
    print("You are a child.")
elif age < 20:
    print("You are a teenager.")
elif age < 65:
    print("You are an adult.")
else:
    print("You are a senior citizen.")

Ausgabe:

You are a senior citizen.

Die elif-Klauseln ermöglichen es Ihnen, mehrere Bedingungen nacheinander zu prüfen.

Denken Sie daran: Die Einrückung ist in Python essenziell. Sie definiert, welche Codeblöcke zu welcher Bedingung gehören.

Die "for"-Schleife erkunden

In diesem Schritt lernen Sie for-Schleifen kennen. Diese werden verwendet, um über Sequenzen (wie Listen, Strings oder Zahlenbereiche) in Python zu iterieren.

Beginnen wir mit einer einfachen for-Schleife, die einen Zahlenbereich nutzt. Geben Sie im Python-Interpreter ein:

for i in range(5):
    print(i)

Ausgabe:

0
1
2
3
4

Die Funktion range(5) erzeugt eine Sequenz von Zahlen von 0 bis 4, und die Schleife durchläuft jede dieser Zahlen.

range() kann mehrere Argumente entgegennehmen, um Startwert, Endwert und Schrittweite festzulegen. Probieren wir einen anderen Bereich aus:

for i in range(1, 10, 2):
    print(i)

Ausgabe:

1
3
5
7
9
  • Die Funktion range(1, 10, 2) erzeugt eine Zahlenfolge, die bei 1 beginnt, bis (aber nicht einschließlich) 10 geht und dabei eine Schrittweite von 2 verwendet.

Lassen Sie uns nun über eine Liste iterieren:

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(f"I like {fruit}")

Ausgabe:

I like apple
I like banana
I like cherry

Hier durchläuft die Schleife jedes Element in der Liste fruits.

Sie können for-Schleifen auch mit Strings verwenden:

for char in "Python":
    print(char.upper())

Ausgabe:

P
Y
T
H
O
N

Diese Schleife durchläuft jeden Buchstaben im Wort "Python".

Kombinieren wir nun eine for-Schleife mit bedingten Anweisungen:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        print(f"{num} is even")
    else:
        print(f"{num} is odd")

Ausgabe:

1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even

Diese Schleife prüft jede Zahl in der Liste und gibt aus, ob sie gerade (even) oder ungerade (odd) ist.

Den Modulo-Operator (%) verstehen: Das Symbol % wird als Modulo-Operator bezeichnet. Er gibt den Restwert einer Division zurück. Zum Beispiel:

  • 5 % 2 ergibt 1 (da 5 geteilt durch 2 gleich 2 mit einem Rest von 1 ist)
  • 4 % 2 ergibt 0 (da 4 geteilt durch 2 gleich 2 ohne Rest ist)
  • 10 % 3 ergibt 1 (da 10 geteilt durch 3 gleich 3 mit einem Rest von 1 ist)

Wenn wir num % 2 == 0 prüfen, fragen wir eigentlich: "Bleibt bei der Division dieser Zahl durch 2 ein Rest von 0?" Wenn ja, ist die Zahl gerade. Wenn der Rest 1 ist, ist die Zahl ungerade. Das == ist der Vergleichsoperator für Gleichheit, der True zurückgibt, wenn beide Werte gleich sind, und ansonsten False.

Die "while"-Schleife verstehen

In diesem Schritt lernen Sie while-Schleifen kennen. Diese werden verwendet, um einen Codeblock so lange zu wiederholen, wie eine bestimmte Bedingung wahr ist.

Beginnen wir mit einer einfachen while-Schleife. Geben Sie im Python-Interpreter ein:

count = 0
while count < 5:
    print(count)
    count += 1

Ausgabe:

0
1
2
3
4

Diese Schleife wird so lange ausgeführt, wie count kleiner als 5 ist.

while-Schleifen werden oft verwendet, wenn man im Voraus nicht genau weiß, wie oft eine Iteration nötig ist. Hier ist ein Beispiel:

import random
number = random.randint(1, 10)
guess = 0
while guess != number:
    guess = int(input("Guess a number between 1 and 10: "))
    if guess < number:
        print("Too low!")
    elif guess > number:
        print("Too high!")
    else:
        print(f"Congratulations! You guessed the number {number}!")

Dies erstellt ein einfaches Ratespiel, bei dem der Benutzer so lange raten muss, bis er die richtige Zahl trifft. Wenn die Eingabe mit der Zufallszahl übereinstimmt, wird die else-Klausel ausgeführt und die Glückwunschmeldung angezeigt.

Seien Sie vorsichtig mit while-Schleifen – wenn die Bedingung niemals falsch wird, erzeugen Sie eine Endlosschleife. Hier ein Beispiel (bitte nicht wirklich ausführen):

while True:
    print("This will print forever!")

Falls Sie versehentlich eine Endlosschleife starten, können Sie diese mit der Tastenkombination Strg+C abbrechen.

Sie können die break-Anweisung verwenden, um eine Schleife vorzeitig zu beenden:

count = 0
while True:
    print(count)
    count += 1
    if count >= 5:
        break

Ausgabe:

0
1
2
3
4

Normalerweise würde diese Schleife ewig laufen, aber die break-Anweisung beendet sie, sobald count den Wert 5 erreicht.

Verschachtelte Schleifen und Schleifensteuerung

In diesem Schritt lernen Sie verschachtelte Schleifen und zusätzliche Anweisungen zur Schleifensteuerung kennen.

Verschachtelte Schleifen sind Schleifen innerhalb anderer Schleifen. Hier ist ein Beispiel für verschachtelte for-Schleifen:

for i in range(3):
    for j in range(2):
        print(f"i: {i}, j: {j}")

Ausgabe:

i: 0, j: 0
i: 0, j: 1
i: 1, j: 0
i: 1, j: 1
i: 2, j: 0
i: 2, j: 1

Die innere Schleife durchläuft alle ihre Iterationen für jede einzelne Iteration der äußeren Schleife.

Zusätzlich zu break bietet Python die continue-Anweisung an. Diese überspringt den Rest der aktuellen Iteration und springt direkt zum nächsten Durchlauf der Schleife:

for num in range(10):
    if num % 2 == 0:
        continue
    print(num)

Ausgabe:

1
3
5
7
9

Diese Schleife gibt nur ungerade Zahlen aus, da die geraden Zahlen übersprungen werden.

Den Modulo-Operator in diesem Kontext verstehen: Hier prüft num % 2 == 0, ob die Zahl gerade ist. Wenn diese Bedingung True ist, sorgt die continue-Anweisung dafür, dass die Zeile print(num) ignoriert wird und das Programm sofort mit der nächsten Zahl fortfährt. Nur ungerade Zahlen (bei denen der Rest 1 ist) erreichen den print-Befehl.

Sie können else-Klauseln auch direkt mit Schleifen verwenden. Der else-Block wird ausgeführt, wenn die Schleife regulär beendet wurde (also nicht durch ein break unterbrochen wurde):

for num in range(2, 10):
    for i in range(2, num):
        if num % i == 0:
            print(f"{num} is not prime")
            break
    else:
        print(f"{num} is prime")

Ausgabe:

2 is prime
3 is prime
4 is not prime
5 is prime
6 is not prime
7 is prime
8 is not prime
9 is not prime

Diese verschachtelte Schleife prüft auf Primzahlen. Die else-Klausel wird immer dann ausgeführt, wenn eine Zahl als Primzahl identifiziert wurde (weil kein Teiler gefunden wurde, der das break ausgelöst hätte).

Alles zusammenführen

In diesem letzten Schritt erstellen Sie ein kleines Programm, das alle Kontrollstrukturen nutzt, die Sie in diesem Lab gelernt haben.

Verlassen Sie den Python-Interpreter, indem Sie exit() eingeben oder Strg+D drücken.

Öffnen Sie die WebIDE in der LabEx VM-Umgebung.

WebIDE LabEx VM interface

Erstellen Sie eine neue Datei namens number_analyzer.py im Verzeichnis ~/project mit dem folgenden Befehl:

touch ~/project/number_analyzer.py

Öffnen Sie die neu erstellte Datei im WebIDE-Editor.

Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein:

def analyze_numbers():
    numbers = []
    while True:
        user_input = input("Enter a number (or 'done' to finish): ")
        if user_input.lower() == 'done':
            break
        try:
            number = float(user_input)
            numbers.append(number)
        except ValueError:
            print("Invalid input. Please enter a number or 'done'.")

    if not numbers:
        print("No numbers entered.")
        return

    total = sum(numbers)
    average = total / len(numbers)
    maximum = max(numbers)
    minimum = min(numbers)

    print(f"\nAnalysis of {len(numbers)} numbers:")
    print(f"Total: {total}")
    print(f"Average: {average:.2f}")
    print(f"Maximum: {maximum}")
    print(f"Minimum: {minimum}")

    print("\nNumber distribution:")
    for num in numbers:
        if num < average:
            print(f"{num} is below average")
        elif num > average:
            print(f"{num} is above average")
        else:
            print(f"{num} is equal to average")

if __name__ == "__main__":
    analyze_numbers()

Dieses Programm demonstriert den Einsatz von while-Schleifen, for-Schleifen, bedingten Anweisungen und der Ausnahmebehandlung (Exception Handling).

Speichern Sie die Datei (Auto-Save ist normalerweise aktiviert) und führen Sie sie mit dem folgenden Befehl im Terminal aus:

python ~/project/number_analyzer.py

Geben Sie nach Aufforderung einige Zahlen ein und tippen Sie dann done, um die Analyse zu sehen. Die Ausgabe sollte etwa so aussehen:

Enter a number (or 'done' to finish): 10
Enter a number (or 'done' to finish): 20
Enter a number (or 'done' to finish): 30
Enter a number (or 'done' to finish): 40
Enter a number (or 'done' to finish): done

Analysis of 4 numbers:
Total: 100.0
Average: 25.00
Maximum: 40.0
Minimum: 10.0

Number distribution:
10.0 is below average
20.0 is below average
30.0 is above average
40.0 is above average

Falls Sie sich bei der Dateneingabe vertun, können Sie das Programm einfach erneut starten. Dies ist eine gute Gelegenheit, das Ausführen von Python-Skripten mit verschiedenen Eingaben zu üben.

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Kontrollstrukturen von Python erkundet: bedingte Anweisungen (if-else), for-Schleifen und while-Schleifen. Sie haben gelernt, wie Sie den Programmablauf steuern, Entscheidungen basierend auf Bedingungen treffen und über Datensequenzen iterieren. Zudem haben Sie den Einsatz von verschachtelten Schleifen und Steuerungsbefehlen wie break und continue geübt.

Diese Kontrollstrukturen bilden das Rückgrat der Python-Programmierung und ermöglichen es Ihnen, komplexe und dynamische Anwendungen zu entwickeln. Sie haben gesehen, wie diese Konzepte kombiniert werden können, um ein nützliches Programm zur Analyse von Benutzereingaben zu erstellen.

Auf Ihrem weiteren Weg mit Python werden diese Strukturen unerlässlich sein, um verschiedenste Programmierprobleme zu lösen. Denken Sie daran, diese Konzepte regelmäßig zu üben und mit verschiedenen Kombinationen zu experimentieren, um Ihr Verständnis zu festigen.