Python Crash Course

Kapitel 7

Benutzereingaben und while-Schleifen

Interaktive Programme und Wiederholungen

Die input()-Funktion

  • Fordert Benutzer zur Eingabe auf
  • Gibt immer einen String zurück
  • Programm pausiert bis zur Eingabe
message = input("Tell me something, and I will repeat it back to you: ")
print(message)

# Mit Prompt-Variable für bessere Lesbarkeit
prompt = "If you tell us who you are, we can personalize the messages."
prompt += "\nWhat is your first name? "

name = input(prompt)
print(f"\nHello, {name}!")

Numerische Eingaben

# input() gibt immer String zurück
age = input("How old are you? ")
print(type(age))  # 

# Umwandlung in Integer
age = int(input("How old are you? "))
print(type(age))  # 

# Modulo-Operator für gerade/ungerade
number = int(input("Enter a number: "))
if number % 2 == 0:
    print(f"\nThe number {number} is even.")
else:
    print(f"\nThe number {number} is odd.")

🛠️ Übung 1: Benutzereingaben

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 7-1 bis 7-3:

  • 7-1: Leihwagen - Autoart abfragen
  • 7-2: Restaurantplätze - Personenzahl prüfen
  • 7-3: Vielfache von 10 erkennen

→ kapitel_7_aufgaben_7-1_7-3.ipynb

↓ Lösungen

💡 Lösungen Übung 1

# 7-1: Leihwagen
car = input("Welches Auto möchtest du leihen? ")
print(f"Ich schaue, ob ich dir ein {car} finden kann.")

# 7-2: Restaurantplätze
party_size = int(input("Wie viele Personen sind in eurer Gruppe? "))

if party_size > 8:
    print("Sie müssen auf einen Tisch warten.")
else:
    print("Ihr Tisch ist bereit.")

# 7-3: Vielfache von 10
number = int(input("Gib eine Zahl ein: "))

if number % 10 == 0:
    print(f"{number} ist ein Vielfaches von 10.")
else:
    print(f"{number} ist kein Vielfaches von 10.")

Ausgabe:

Welches Auto möchtest du leihen? SUV
Ich schaue, ob ich dir ein SUV finden kann.
Wie viele Personen sind in eurer Gruppe? 6
Ihr Tisch ist bereit.
Gib eine Zahl ein: 20
20 ist ein Vielfaches von 10.

while-Schleifen

Wiederholen Code solange eine Bedingung True ist

current_number = 1
while current_number <= 5:
    print(current_number)
    current_number += 1

# Benutzer-gesteuerte Schleife
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "

message = ""
while message != 'quit':
    message = input(prompt)
    if message != 'quit':
        print(message)

Flaggen-Variable

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "

active = True
while active:
    message = input(prompt)
    
    if message == 'quit':
        active = False
    else:
        print(message)

# break-Anweisung
while True:
    message = input(prompt)
    
    if message == 'quit':
        break
    else:
        print(message)

continue-Anweisung

current_number = 0
while current_number < 10:
    current_number += 1
    if current_number % 2 == 0:
        continue
    
    print(current_number)

# Ausgabe: 1, 3, 5, 7, 9

# Endlosschleifen vermeiden
x = 1
while x <= 5:
    print(x)
    x += 1  # Wichtig: Zähler erhöhen!

🛠️ Übung 2: while-Schleifen

Aufgaben 7-4 bis 7-7:

  • 7-4: Pizzabeläge eingeben
  • 7-5: Eintrittskarten - Altersabhängig
  • 7-6: Drei Arten der Beendigung
  • 7-7: Endlosschleife (Strg+C)

→ kapitel_7_aufgaben_7-4_7-7.ipynb

↓ Lösungen

💡 Lösung 7-4

# 7-4: Pizzabeläge
prompt = "\nWelchen Belag möchtest du auf deiner Pizza?"
prompt += "\nGib 'fertig' ein, wenn du fertig bist: "

while True:
    topping = input(prompt)

    if topping == 'fertig':
        break
    else:
        print(f"Ich füge {topping} zu deiner Pizza hinzu.")

Ausgabe:

Welchen Belag möchtest du auf deiner Pizza?
Gib 'fertig' ein, wenn du fertig bist: Pilze
Ich füge Pilze zu deiner Pizza hinzu.

Welchen Belag möchtest du auf deiner Pizza?
Gib 'fertig' ein, wenn du fertig bist: Pepperoni
Ich füge Pepperoni zu deiner Pizza hinzu.

Welchen Belag möchtest du auf deiner Pizza?
Gib 'fertig' ein, wenn du fertig bist: fertig

💡 Lösung 7-5

# 7-5: Eintrittskarten
prompt = "\nWie alt bist du?"
prompt += "\nGib 'fertig' ein, wenn du fertig bist: "

while True:
    age = input(prompt)

    if age == 'fertig':
        break

    age = int(age)

    if age < 3:
        print("Dein Ticket ist kostenlos.")
    elif age < 12:
        print("Dein Ticket kostet 10 €.")
    else:
        print("Dein Ticket kostet 15 €.")

Ausgabe:

Wie alt bist du?
Gib 'fertig' ein, wenn du fertig bist: 25
Dein Ticket kostet 15 €.

Wie alt bist du?
Gib 'fertig' ein, wenn du fertig bist: 8
Dein Ticket kostet 10 €.

Wie alt bist du?
Gib 'fertig' ein, wenn du fertig bist: fertig

💡 Lösung 7-6 (Teil 1)

# 7-6: Drei Arten der Beendigung

# 1. Bedingung in while-Anweisung
topping = ""
while topping != 'quit':
    topping = input("Enter a topping (or 'quit'): ")
    if topping != 'quit':
        print(f"Adding {topping}")

# 2. Flagvariable
active = True
while active:
    topping = input("Enter a topping (or 'quit'): ")
    if topping == 'quit':
        active = False
    else:
        print(f"Adding {topping}")

💡 Lösung 7-6 (Teil 2)

# 3. break-Anweisung
while True:
    topping = input("Belag eingeben (oder 'fertig'): ")
    if topping == 'fertig':
        break
    print(f"Hinzufügen: {topping}")

Ausgabe:

Belag eingeben (oder 'fertig'): Käse
Hinzufügen: Käse
Belag eingeben (oder 'fertig'): fertig
Belag eingeben (oder 'fertig'): Oliven
Hinzufügen: Oliven
Belag eingeben (oder 'fertig'): fertig
Belag eingeben (oder 'fertig'): Tomaten
Hinzufügen: Tomaten
Belag eingeben (oder 'fertig'): fertig

💡 Lösung 7-7

# 7-7: Endlosschleife
while True:
    print("Das läuft ewig! Drücke Strg+C zum Stoppen.")

Ausgabe:

Das läuft ewig! Drücke Strg+C zum Stoppen.
Das läuft ewig! Drücke Strg+C zum Stoppen.
Das läuft ewig! Drücke Strg+C zum Stoppen.
... (läuft weiter bis gestoppt)

while-Schleifen mit Listen

# Elemente zwischen Listen verschieben
unconfirmed_users = ['alice', 'brian', 'candace']
confirmed_users = []

while unconfirmed_users:
    current_user = unconfirmed_users.pop()
    
    print(f"Verifying user: {current_user.title()}")
    confirmed_users.append(current_user)

print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
    print(confirmed_user.title())

Alle Vorkommen eines Wertes entfernen

pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)

while 'cat' in pets:
    pets.remove('cat')

print(pets)

# Dictionary mit Benutzereingaben füllen
responses = {}

polling_active = True

while polling_active:
    name = input("\nWhat is your name? ")
    response = input("Which mountain would you like to climb someday? ")
    
    responses[name] = response
    
    repeat = input("Would you like to let another person respond? (yes/ no) ")
    if repeat == 'no':
        polling_active = False

print("\n--- Poll Results ---")
for name, response in responses.items():
    print(f"{name} would like to climb {response}.")

🛠️ Übung 3: Listen und while

Aufgaben 7-8 bis 7-10:

  • 7-8: Sandwiches - Listen verschieben
  • 7-9: Kein Pastrami - Elemente entfernen
  • 7-10: Traumurlaub - Dictionary füllen

→ kapitel_7_aufgaben_7-8_7-10.ipynb

↓ Lösungen

💡 Lösungen Übung 3 (Teil 1)

# 7-8: Sandwiches
sandwich_orders = ['tuna', 'ham', 'turkey', 'veggie', 'club']
finished_sandwiches = []

while sandwich_orders:
    current_sandwich = sandwich_orders.pop()
    print(f"Ich habe dein {current_sandwich}-Sandwich gemacht.")
    finished_sandwiches.append(current_sandwich)

print("\nAlle Sandwiches fertig:")
for sandwich in finished_sandwiches:
    print(f"- {sandwich.title()}")

# 7-9: Kein Pastrami
sandwich_orders = ['pastrami', 'tuna', 'pastrami', 'ham', 'pastrami', 'turkey']
finished_sandwiches = []

print("Das Deli hat kein Pastrami mehr.")

while 'pastrami' in sandwich_orders:
    sandwich_orders.remove('pastrami')

while sandwich_orders:
    current_sandwich = sandwich_orders.pop()
    print(f"Ich habe dein {current_sandwich}-Sandwich gemacht.")
    finished_sandwiches.append(current_sandwich)

Ausgabe:

Ich habe dein club-Sandwich gemacht.
Ich habe dein veggie-Sandwich gemacht.
Ich habe dein turkey-Sandwich gemacht.
Ich habe dein ham-Sandwich gemacht.
Ich habe dein tuna-Sandwich gemacht.

Alle Sandwiches fertig:
- Club
- Veggie
- Turkey
- Ham
- Tuna
Das Deli hat kein Pastrami mehr.
Ich habe dein turkey-Sandwich gemacht.
Ich habe dein ham-Sandwich gemacht.
Ich habe dein tuna-Sandwich gemacht.

💡 Lösungen Übung 3 (Teil 2)

# 7-10: Traumurlaub
responses = {}

while True:
    name = input("\nWie heißt du? ")
    place = input("Wenn du einen Ort auf der Welt besuchen könntest, wohin würdest du gehen? ")

    responses[name] = place

    repeat = input("Möchte eine weitere Person antworten? (ja/nein) ")
    if repeat == 'nein':
        break

print("\n--- Traumurlaub-Umfrage Ergebnisse ---")
for name, place in responses.items():
    print(f"{name.title()} möchte {place.title()} besuchen.")

Ausgabe:

Wie heißt du? Alice
Wenn du einen Ort auf der Welt besuchen könntest, wohin würdest du gehen? Japan
Möchte eine weitere Person antworten? (ja/nein) ja

Wie heißt du? Bob
Wenn du einen Ort auf der Welt besuchen könntest, wohin würdest du gehen? Italien
Möchte eine weitere Person antworten? (ja/nein) nein

--- Traumurlaub-Umfrage Ergebnisse ---
Alice möchte Japan besuchen.
Bob möchte Italien besuchen.

Zusammenfassung Kapitel 7

  • input(): Benutzereingaben erfassen
  • int(): String zu Integer konvertieren
  • while: Bedingte Wiederholung
  • Flags: Boolean-Variablen zur Steuerung
  • break/continue: Schleifenkontrolle
  • Listen: Elemente verschieben und entfernen

Praktische Tipps

  • Eingabe-Validierung: Immer auf korrekte Datentypen prüfen
  • Endlosschleifen: Immer Ausstiegsmöglichkeit vorsehen
  • Flags: Bei komplexen Bedingungen verwenden
  • Benutzerfreundlichkeit: Klare Anweisungen geben
# Gut - mit Validierung
try:
    age = int(input("Enter your age: "))
except ValueError:
    print("Please enter a valid number.")

# Gut - klarer Prompt
prompt = "Enter 'quit' to exit or any other text to continue: "
message = input(prompt)