📚 LernsiteFach wählenKOLEFINAQUBAETFÜDIMAINFEINKMAEL ↗

🔁 Kontrollstrukturen — if · while · for · List Comprehension

INF — Informatik (Python & Datenbanken) · Prof. Dr. Mehler · ~10 Aufgaben · Python + relationale Datenmodelle

Kontrollstrukturen — if · while · for · List Comprehension

Status: GEPRÜFT, alle Ausgaben mit Python 3.12 verifiziert.

Einrückung = 4 Leerzeichen bzw. Tabulator. Handschriftlich jede Einrückung mit senkrechtem Strich markieren.

Bedingung: if / elif / else

if bedingung:
# Code, falls bedingung True ist
elif anderebedingung:
# Code, falls die True ist
else:
# sonst
# hier ohne Einrückung weiter

So bestimmt man das Vorzeichen einer Zahl:

zahl = int(input("Ganze Zahl: "))
if zahl < 0:
print("Vorzeichen -")
elif zahl == 0:
print("kein Vorzeichen")
else:
print("Vorzeichen +")

Bedingter Ausdruck (eine Zeile): resultat = wertA if bedingung else wertB, zum Beispiel d = d - 50 if d != None else 0.

pass = Platzhalter, falls ein Block noch leer ist. Blockkommentar mit """…""", Zeilenkommentar mit #.

while-Schleife

Drei Bestandteile: 1) Variable initialisieren, 2) Bedingung, 3) Variable verändern (sonst Endlosschleife!).

i = 1
while i < 4:
print(i)      # 1 2 3
│   i = i + 1     # kurz: i += 1
Anweisung Wirkung
break Schleife sofort komplett verlassen (dann kein else)
continue nur diesen Durchlauf abbrechen, weiter mit nächstem
else: läuft, wenn die Schleife regulär endet
i = 0
while i < 5:
│   i = i + 1
if i == 3:
│   │   continue
print(i)
else:
print("Schleife beendet")
# Ausgabe: 1 2 4 5 Schleife beendet

for-Schleife & range

for element in iterierbares_objekt:
print(element)

for zahl in [2, 4, 6, 8]:
print(f"Element ist {zahl}")

for zeichen in "Python":   # P y t h o n
print(zeichen)
Aufruf Werte
range(stop) 0 … stop-1
range(start, stop) start … stop-1
range(start, stop, step) mit Schrittweite
range(3)       # 0 1 2
range(1, 3)    # 1 2
range(1, 6, 2) # 1 3 5
⚠️ Die häufigste range-Falle

range hört eins vorher auf. Wenn 39 noch dabei sein soll, muss der Stop-Wert 40 heißen → range(12, 40, 3).

Und: range(1, len(liste)) überspringt das erste Element (Index 0). Willst du alle: range(len(liste)) oder gleich for element in liste:.

List Comprehension

liste = [Ausdruck for Element in Iterable if Bedingung]
[2*x for x in range(1,5)]           # [2, 4, 6, 8]
[n for n in range(1,9) if n%2==0]   # [2, 4, 6, 8]
[n/2 for n in range(5)]             # [0.0, 0.5, 1.0, 1.5, 2.0]

namen = ("Jane","John","Jonas")
[e for e in namen if e.startswith("J")]   # ['Jane', 'John', 'Jonas']

Dictionary-Comprehension: {x: x**2 for x in range(1,4)}{1: 1, 2: 4, 3: 9}.

Standard-Muster: Zahlenreihe in 3 Varianten

Zuerst die Reihe aus der Beispielausgabe analysieren: erste Zahl? letzte Zahl? Schrittweite (oder Bedingung wie % 3 == 0)? Für „zwischen 10 und 40, durch 3 teilbar“ → erste 12, letzte 39, Schritt 3.

# (a) while
start = 12
while start <= 39:
print(start)
│   start = start + 3

# (b) for
for i in range(12, 40, 3):
print(i)

# (c) List Comprehension
werte = [n for n in range(12, 40) if n % 3 == 0]
print(werte)

Denkfehler-Falle: „die ersten 7 Zweierpotenzen“ heißt 2⁰ bis 2⁶, also range(0, 7) und nicht range(0, 8). Zähle im Zweifel die Beispielausgabe ab: 1 2 4 8 16 32 64 = 7 Stück.