Python Crash Course

Kapitel 4

Mit Listen arbeiten

For-Schleifen, range() und Listen-Comprehensions

Listen - Wiederholung

  • Sammlung von Elementen in einer bestimmten Reihenfolge
  • Können verschiedene Datentypen enthalten
  • Sind veränderbar (mutable)
  • Werden mit eckigen Klammern [] definiert
pizzas = ['pepperoni', 'margherita', 'hawaiian']
tiere = ['hund', 'katze', 'papagei']
zahlen = [1, 2, 3, 4, 5]

For-Schleifen

Wiederhole eine Aktion für jedes Element in einer Liste

pizzas = ['pepperoni', 'margherita', 'hawaiian']

for pizza in pizzas:
    print(pizza)

# Ausgabe:
# pepperoni
# margherita
# hawaiian

Syntax: for element in liste:

For-Schleifen mit Sätzen

pizzas = ['pepperoni', 'margherita', 'hawaiian']

for pizza in pizzas:
    print(f"I like {pizza} pizza.")

print("I really love pizza!")

Ausgabe:

I like pepperoni pizza.
I like margherita pizza.
I like hawaiian pizza.
I really love pizza!

🛠️ Übung 1: Pizzas und Tiere

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 4-1 und 4-2:

  • Pizzas: Liste, for-Schleife, Sätze
  • Tiere: Gemeinsames Merkmal, Aussagen

→ kapitel_4_aufgaben_4-1_4-2.ipynb

↓ Lösungen

💡 Lösung 4-1

pizzas = ['pepperoni', 'margherita', 'hawaiian']

for pizza in pizzas:
    print(pizza)

for pizza in pizzas:
    print(f"I like {pizza} pizza.")

print("I really love pizza!")

📄 Ausgabe 4-1

pepperoni
margherita
hawaiian
I like pepperoni pizza.
I like margherita pizza.
I like hawaiian pizza.
I really love pizza!

💡 Lösung 4-2

tiere = ['hund', 'katze', 'papagei']

for tier in tiere:
    print(tier)

for tier in tiere:
    print(f"A {tier} would make a great pet.")

print("Any of these animals would make a great pet!")

📄 Ausgabe 4-2

hund
katze
papagei
A hund would make a great pet.
A katze would make a great pet.
A papagei would make a great pet.
Any of these animals would make a great pet!

Die range()-Funktion

Erstellt eine Sequenz von Zahlen

# Zahlen von 1 bis 5
for wert in range(1, 6):
    print(wert)

# Ausgabe: 1, 2, 3, 4, 5

# Zahlen von 0 bis 4
for wert in range(5):
    print(wert)

# Ausgabe: 0, 1, 2, 3, 4

Range mit Schritten

# Gerade Zahlen von 2 bis 10
gerade_zahlen = list(range(2, 11, 2))
print(gerade_zahlen)  # [2, 4, 6, 8, 10]

# Ungerade Zahlen von 1 bis 10
ungerade_zahlen = list(range(1, 11, 2))
print(ungerade_zahlen)  # [1, 3, 5, 7, 9]

# Vielfache von 3
vielfache = list(range(3, 31, 3))
print(vielfache)  # [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

Listen mit range() erstellen

# Liste der Zahlen 1 bis 10
zahlen = list(range(1, 11))
print(zahlen)

# Kubikzahlen
kubikzahlen = []
for wert in range(1, 11):
    kubik = wert ** 3
    kubikzahlen.append(kubik)

print(kubikzahlen)
# [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

🛠️ Übung 2: Range und Zahlen

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 4-3 bis 4-9:

  • 4-3: Bis 20 zählen
  • 4-4: Eine Million
  • 4-5: Summe, min(), max()
  • 4-6: Ungerade Zahlen
  • 4-7: Vielfache von 3
  • 4-8/9: Kubikzahlen

→ kapitel_4_aufgaben_4-3_4-9.ipynb

↓ Lösungen

💡 Lösung 4-3

# 4-3: Bis 20 zählen
for wert in range(1, 21):
    print(wert)

📄 Ausgabe 4-3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

💡 Lösung 4-4

# 4-4: Eine Million
zahlen = list(range(1, 1000001))
for zahl in zahlen:
    print(zahl)  # Strg+C zum Abbrechen

📄 Ausgabe 4-4

1
2
3
... (würde bis 1000000 zählen)

💡 Lösung 4-5

# 4-5: Statistiken
zahlen = list(range(1, 1000001))
print(f"Min: {min(zahlen)}")
print(f"Max: {max(zahlen)}")
print(f"Sum: {sum(zahlen)}")

📄 Ausgabe 4-5

Min: 1
Max: 1000000
Sum: 500000500000

💡 Lösung 4-6

# 4-6: Ungerade Zahlen
for wert in range(1, 21, 2):
    print(wert)

📄 Ausgabe 4-6

1
3
5
7
9
11
13
15
17
19

💡 Lösung 4-7

# 4-7: Vielfache von 3
for wert in range(3, 31, 3):
    print(wert)

📄 Ausgabe 4-7

3
6
9
12
15
18
21
24
27
30

💡 Lösung 4-8

# 4-8: Kubikzahlen
for wert in range(1, 11):
    print(wert**3)

📄 Ausgabe 4-8

1
8
27
64
125
216
343
512
729
1000

💡 Lösung 4-9

# 4-9: List Comprehension
kubik = [wert**3 for wert in range(1, 11)]
print(kubik)

📄 Ausgabe 4-9

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

Einfache Statistiken mit Listen

zahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(f"Minimum: {min(zahlen)}")     # 1
print(f"Maximum: {max(zahlen)}")     # 10
print(f"Summe: {sum(zahlen)}")       # 55

# Mit einer Million Zahlen
million = list(range(1, 1000001))
print(f"Min: {min(million)}")        # 1
print(f"Max: {max(million)}")        # 1000000
print(f"Summe: {sum(million)}")      # 500000500000

List Comprehensions

Kompakte Syntax zum Erstellen von Listen

# Traditionelle Methode
quadrate = []
for wert in range(1, 11):
    quadrate.append(wert**2)

# List Comprehension
quadrate = [wert**2 for wert in range(1, 11)]
print(quadrate)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# Kubikzahlen
kubikzahlen = [wert**3 for wert in range(1, 11)]

Listen-Slices

Teile einer Liste extrahieren

spieler = ['charles', 'martina', 'michael', 'florence', 'eli']

print(spieler[0:3])    # ['charles', 'martina', 'michael']
print(spieler[1:4])    # ['martina', 'michael', 'florence']
print(spieler[:4])     # ['charles', 'martina', 'michael', 'florence']
print(spieler[2:])     # ['michael', 'florence', 'eli']
print(spieler[-3:])    # ['michael', 'florence', 'eli']

Slices in For-Schleifen

spieler = ['charles', 'martina', 'michael', 'florence', 'eli']

print("Die ersten drei Spieler sind:")
for spieler in spieler[:3]:
    print(spieler.title())

print("\nDie letzten drei Spieler sind:")
for spieler in spieler[-3:]:
    print(spieler.title())

Listen kopieren

# Falsch - Verweis auf dieselbe Liste
meine_speisen = ['pizza', 'falafel', 'kuchen']
freund_speisen = meine_speisen  # Nur Verweis!

# Richtig - Echte Kopie
meine_speisen = ['pizza', 'falafel', 'kuchen']
freund_speisen = meine_speisen[:]  # Kopie durch Slice

meine_speisen.append('cannoli')
freund_speisen.append('eis')

print("Meine Speisen:", meine_speisen)
print("Freund Speisen:", freund_speisen)

🛠️ Übung 3: Slices und Kopien

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 4-10 bis 4-12:

  • 4-10: Slices - erste, mittlere, letzte drei
  • 4-11: Pizza-Listen kopieren
  • 4-12: For-Schleifen für beide Listen

→ kapitel_4_aufgaben_4-10_4-12.ipynb

↓ Lösungen

💡 Lösung 4-10

spieler = ['charles', 'martina', 'michael', 'florence', 'eli']

print("The first three items in the list are:")
print(spieler[:3])

print("Three items from the middle of the list are:")
print(spieler[1:4])

print("The last three items in the list are:")
print(spieler[-3:])

📄 Ausgabe 4-10

The first three items in the list are:
['charles', 'martina', 'michael']
Three items from the middle of the list are:
['martina', 'michael', 'florence']
The last three items in the list are:
['michael', 'florence', 'eli']

💡 Lösung 4-11

# 4-11: Meine Pizza, deine Pizza
pizzas = ['pepperoni', 'margherita', 'hawaiian']
friend_pizzas = pizzas[:]  # Kopie erstellen

pizzas.append('meat lovers')
friend_pizzas.append('vegetarian')

📄 Ausgabe 4-11

pizzas: ['pepperoni', 'margherita', 'hawaiian', 'meat lovers']
friend_pizzas: ['pepperoni', 'margherita', 'hawaiian', 'vegetarian']

💡 Lösung 4-12

# 4-12: For-Schleifen
print("My favorite pizzas are:")
for pizza in pizzas:
    print(pizza)

print("My friend's favorite pizzas are:")
for pizza in friend_pizzas:
    print(pizza)

📄 Ausgabe 4-12

My favorite pizzas are:
pepperoni
margherita
hawaiian
meat lovers
My friend's favorite pizzas are:
pepperoni
margherita
hawaiian
vegetarian

Tupel

Unveränderliche Listen

# Tupel definieren
dimensionen = (200, 50)
print(dimensionen[0])  # 200
print(dimensionen[1])  # 50

# Fehler - Tupel sind unveränderlich
# dimensionen[0] = 250  # TypeError!

# Tupel durchlaufen
for dimension in dimensionen:
    print(dimension)

Tupel überschreiben

# Ursprüngliches Tupel
dimensionen = (200, 50)
print("Ursprüngliche Dimensionen:")
for dimension in dimensionen:
    print(dimension)

# Tupel komplett überschreiben
dimensionen = (400, 100)
print("\nGeänderte Dimensionen:")
for dimension in dimensionen:
    print(dimension)

🛠️ Übung 4: Tupel

Aufgabe 4-13 - Büffet:

  • Fünf Gerichte in Tupel
  • For-Schleife ausgeben
  • Element ändern (Fehler!)
  • Tupel überschreiben

→ kapitel_4_aufgaben_4-13.ipynb

↓ Lösungen

💡 Lösung 4-13

# Ursprüngliches Büffet
buffet = ('pizza', 'salat', 'suppe', 'pasta', 'brot')

for gericht in buffet:
    print(gericht)

# Versuch zu ändern (Fehler!)
# buffet[0] = 'hamburger'  # TypeError!

# Neues Büffet
buffet = ('hamburger', 'salat', 'curry', 'pasta', 'reis')

print("Neues Büffet:")
for gericht in buffet:
    print(gericht)

📄 Ausgabe 4-13

pizza
salat
suppe
pasta
brot
Neues Büffet:
hamburger
salat
curry
pasta
reis

PEP 8 - Python Style Guide

  • PEP 8: Official Style Guide für Python Code
  • Einrückung: 4 Leerzeichen (keine Tabs)
  • Zeilenlänge: Maximal 79-80 Zeichen
  • Leerzeilen: Nicht zu viele verwenden
  • Variablennamen: lowercase_with_underscores
# Gut
for pizza in pizzas:
    print(f"I like {pizza} pizza.")

# Schlecht (zu viele Leerzeilen)
for pizza in pizzas:


    print(f"I like {pizza} pizza.")


PEP 8 - Praktische Beispiele

# Guter Stil
meine_liste = [1, 2, 3, 4, 5]
for nummer in meine_liste:
    if nummer % 2 == 0:
        print(f"{nummer} ist gerade")

# Schlechter Stil
meineListeMitEinemSehrLangenNamen=[1,2,3,4,5]
for x in meineListeMitEinemSehrLangenNamen:
 if x%2==0:
print(f"{x} ist gerade")

URL: https://python.org/dev/peps/pep-0008/

🛠️ Übung 5: PEP 8

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 4-14 und 4-15:

  • 4-14: PEP 8 durchlesen
  • 4-15: Code überarbeiten mit:
  • 4 Leerzeichen Einrückung
  • < 80 Zeichen/Zeile
  • Weniger Leerzeilen

→ kapitel_4_aufgaben_4-14_4-15.ipynb

↓ Lösungen

💡 Lösung 4-14

# 4-14: PEP 8 durchlesen
# https://python.org/dev/peps/pep-0008/
print("PEP 8 gelesen und verstanden!")

📄 Ausgabe 4-14

PEP 8 gelesen und verstanden!

💡 Lösung 4-15

# Vorher (schlecht)
pizzas=['pepperoni','margherita','hawaiian']
for x in pizzas:
 print(f"I like {x} pizza.")


print("I really love pizza!")

# Nachher (gut - PEP 8)
pizzas = ['pepperoni', 'margherita', 'hawaiian']
for pizza in pizzas:
    print(f"I like {pizza} pizza.")

print("I really love pizza!")

📄 Ausgabe 4-15

I like pepperoni pizza.
I like margherita pizza.
I like hawaiian pizza.
I really love pizza!
I like pepperoni pizza.
I like margherita pizza.
I like hawaiian pizza.
I really love pizza!

Zusammenfassung Kapitel 4

  • For-Schleifen: Iteration über Listen
  • range(): Zahlensequenzen erstellen
  • List Comprehensions: Kompakte Listen-Erstellung
  • Slices: Teile von Listen extrahieren
  • Listen kopieren: neue_liste = alte_liste[:]
  • Tupel: Unveränderliche Listen
  • PEP 8: Python Style Guide

Praktische Tipps

  • Variablennamen: Beschreibend und eindeutig
  • For-Schleifen: for item in items
  • Einrückung: Konsistent 4 Leerzeichen
  • Listen vs Tupel: Veränderbar vs Unveränderlich
# Gute Praxis
for pizza in pizzas:
    print(f"I love {pizza}!")

zahlen = [x**2 for x in range(10)]