Feldbreite und Nachkommastellen in f-Strings:
pi = 3.14159265
print(f"{pi:.2f}") # 3.14 (2 Nachkommastellen)
print(f"{pi:.5f}") # 3.14159
# Feldbreite: Mindestanzahl Zeichen (rechts- bzw. linksbündig)
print(f"{pi:10.2f}") # 3.14 (10 Zeichen breit)
print(f"{'Hallo':>10}") # Hallo (rechtsbündig)
print(f"{'Hallo':<10}") # Hallo (linksbündig)
print(f"{'Wind (km/h)':>12} {'Beaufort':>8}")
print(f"{15.0:>12.1f} {3:>8}")
# Wind (km/h) Beaufort
# 15.0 3
Gleicher Code für mehrere Messwerte → Code wiederholt sich. Lösung: einmal schreiben, beliebig oft aufrufen.
def celsius_zu_fahrenheit(c):
f = c * 9/5 + 32
return f
t1 = celsius_zu_fahrenheit(0)
t2 = celsius_zu_fahrenheit(20)
t3 = celsius_zu_fahrenheit(37)
# Definition:
def funktionsname(parameter):
# Anweisungen
return ergebnis
# Aufruf:
ergebnis = funktionsname(wert)
def celsius_in_fahrenheit(c):
return c * 9/5 + 32
print(celsius_in_fahrenheit(0)) # 32.0
print(celsius_in_fahrenheit(100)) # 212.0
# Mehrere Parameter:
def rechteck_flaeche(breite, hoehe):
return breite * hoehe
print(rechteck_flaeche(3, 4)) # 12
Die Beaufort-Skala klassifiziert Windstärken in 13 Stufen (0–12):
| Bf | Windgeschwindigkeit | Beschreibung |
|---|---|---|
| 0 | < 1 km/h | Windstille |
| 1 | 1–5 km/h | Leichter Zug |
| 2 | 6–11 km/h | Leichte Brise |
| 3 | 12–19 km/h | Schwache Brise |
| 4 | 20–28 km/h | Mäßige Brise |
| … | … | … |
| 12 | ≥ 118 km/h | Orkan |
Vollständige Tabelle: Wikipedia – Beaufort-Skala
Schreiben Sie eine Funktion beaufort_zahl(v_kmh), die die Beaufort-Zahl (0–12) zurückgibt.
print(beaufort_zahl(0)) # 0
print(beaufort_zahl(10)) # 2
print(beaufort_zahl(120)) # 12
Schreiben Sie eine Funktion beaufort_beschreibung(b), die die textuelle Beschreibung zurückgibt.
print(beaufort_beschreibung(0)) # Windstille
print(beaufort_beschreibung(9)) # Sturm
Teil 3: Tabelle ausgeben
Gegeben sind folgende Windmessungen in km/h:
messungen = [0, 5, 15, 30, 55, 80, 95, 120]
Geben Sie mithilfe Ihrer Funktionen eine formatierte Tabelle aus:
Wind (km/h) Beaufort Beschreibung
0.0 0 Windstille
5.0 1 Leichter Zug
15.0 3 Schwache Brise
30.0 5 Frische Brise
55.0 8 Stürmischer Wind
80.0 9 Sturm
95.0 10 Schwerer Sturm
120.0 12 Orkan
Zusatz 1: Interaktiv
Fragen Sie den Benutzer nach einer Windgeschwindigkeit und geben Sie Beaufort-Zahl und Beschreibung aus. Wiederholen Sie dies, bis der Benutzer eine leere Eingabe macht.
Zusatz 2: Windchill
Der Windchill beschreibt die gefühlte Temperatur bei Wind. Die Formel (gültig für km/h und °C):
Schreiben Sie eine Funktion windchill(T_celsius, v_kmh) und drucken Sie eine Tabelle für und km/h.
while-Schleife# Solange Bedingung True: Block ausführen
n = 1
while n <= 5:
print(n)
n += 1 # Kurzform für n = n + 1
# Ausgabe: 1 2 3 4 5
# break: Schleife vorzeitig beenden
while True:
eingabe = input("Zahl (> 0): ")
zahl = int(eingabe)
if zahl > 0:
break # Schleife beenden
print("Ungültige Eingabe!")
Achtung: Vergisst man die Aktualisierung (n += 1), läuft die Schleife endlos → mit Strg+C abbrechen!
for-Schleife und range()# range(stop): 0, 1, …, stop-1
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# range(start, stop)
for i in range(1, 6):
print(i) # 1, 2, 3, 4, 5
# range(start, stop, step)
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
# Über eine Liste iterieren:
namen = ["Alice", "Bob", "Charlie"]
for name in namen:
print(f"Hallo {name}!")
zahlen = [3, 1, 4, 1, 5, 9]
leer = []
leer.append(42) # [42]
print(zahlen[0]) # 3 (erstes Element)
print(zahlen[-1]) # 9 (letztes Element)
print(len(zahlen)) # 6
Liste mit Schleife aufbauen:
quadrate = []
for i in range(1, 6):
quadrate.append(i**2)
# [1, 4, 9, 16, 25]
Schreiben Sie eine Funktion ist_prim, die überprüft, ob eine Zahl eine Primzahl ist. Die Funktion soll True zurückgeben, wenn die Zahl eine Primzahl ist, und False, wenn nicht.
Hinweise:
% verwendet werdenTrue für 2, 3, 5, 7 und False für 1, 4, 6, 8, 9 zurückgibt).Schreiben Sie eine Funktion, die alle Primzahlen bis zu einer gegebenen Zahl n findet und in einer Liste zurückgibt.
Hinweise:
n eine Primzahl ist.Summe der Primzahlen: Summe aller Primzahlen bis n. Beispiel: n = 10 → 17.
Primzahldifferenzen: Liste der Abstände zwischen aufeinanderfolgenden Primzahlen.
Beispiel: 2, 3, 5, 7 → [1, 2, 2].
Primzahlzwillinge: Alle Paare , z.B. (3,5), (5,7), (11,13).
# Standardwerte für Parameter:
def potenz(basis, exponent=2):
return basis ** exponent
print(potenz(3)) # 9 (exponent=2 als Standard)
print(potenz(3, 3)) # 27
# Mehrere Rückgabewerte (werden als Tupel zurückgegeben):
def min_max(liste):
return min(liste), max(liste)
kleinster, groesster = min_max([3, 1, 4, 1, 5, 9])
print(kleinster, groesster) # 1 9
import math
import random
print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0
print(math.floor(3.7)) # 3
# Zufallszahlen:
print(random.randint(1, 6)) # Ganzzahl 1–6 (Würfel)
print(random.random()) # Kommazahl 0.0–1.0
# Nur bestimmte Namen importieren:
from math import sqrt, pi
print(sqrt(25)) # 5.0 (ohne "math.")
try / excepttry:
eingabe = input("Ganze Zahl: ")
zahl = int(eingabe)
print(f"Das Doppelte ist {zahl * 2}")
except ValueError:
print("Fehler: Das war keine ganze Zahl!")
# Mehrere Fehlertypen:
try:
x = int(input("Zähler: "))
y = int(input("Nenner: "))
print(x / y)
except ValueError:
print("Keine gültige Zahl!")
except ZeroDivisionError:
print("Division durch Null!")
In dieser Aufgabe programmieren Sie einen Simulator für ein Würfelspiel und analysieren verschiedene Strategien.
Das Spiel „Pig" oder „Böse Eins":
Ihre Aufgabe: Testen Sie verschiedene Strategien durch Simulation!
Teil 1: Grundfunktionen
Schreiben Sie folgende Funktionen:
a) wuerfle():
randomb) spiele_runde(anzahl_wuerfe):
anzahl_wuerfe mal und speichert alle Würfe in einer ListeTesten Sie beide Funktionen mit random.seed für reproduzierbare Ergebnisse.
Teil 2: Strategien implementieren
Eine Strategie legt fest, wie oft man maximal würfelt, bevor man aufhört.
Schreiben Sie eine Funktion spiele_strategie(max_wuerfe, ziel_punkte):
max_wuerfe: Anzahl Würfe pro Runde (die "Strategie")ziel_punkte: Punkte, die zum Gewinnen nötig sind (z.B. 100)gesamt, zählt Runden in rundenspiele_runde(max_wuerfe) aufgesamtTesten Sie mit max_wuerfe=3 und ziel_punkte=100.
Erstellen Sie ein Struktogramm für die Funktion spiele_strategie.
Teil 3: Mehrfache Simulation
Schreiben Sie eine Funktion simuliere_strategie(max_wuerfe, ziel_punkte, anzahl_spiele):
anzahl_spiele malrandom.seed(i) vor jedem Spiel (mit i als Schleifenvariable)Führen Sie durch:
Teil 4: Statistische Auswertung
Schreiben Sie eine Funktion analysiere_strategie(runden_liste, strategie_name):
math.sqrt() für die WurzelDie Funktion analysiere_strategie gibt die Ergebnisse formatiert aus:
Strategie: [strategie_name]
Durchschnitt: X.X Runden
Min: X Runden, Max: X Runden
Standardabweichung: X.X
Analysieren Sie alle vier Strategien. Welche ist am effizientesten?
Zusatz 1: Optimale Strategie finden
Schreiben Sie eine Schleife, die alle Strategien von 1 bis 10 Würfen testet (jeweils 1000 Spiele) und die durchschnittliche Rundenanzahl in einer Liste speichert. Finden Sie die optimale Strategie (kleinste durchschnittliche Rundenanzahl).
Zusatz 2: Risiko-Analyse
Berechnen Sie für jede Strategie: Wie oft (in Prozent) wird in einer Runde eine 1 gewürfelt und damit die Runde verloren? Verwenden Sie dafür die Wahrscheinlichkeitsrechnung:
Zusatz 3: Detaillierte Ausgabe
Erweitern Sie spiele_runde() so, dass bei gesetztem optionalen Parameter debug=True jeder einzelne Wurf ausgegeben wird, z.B.: "Wurf 1: 4, Wurf 2: 6, Wurf 3: 1 → Runde verloren!"
# Schleife innerhalb einer Schleife:
for i in range(3):
for j in range(4):
print(f"({i},{j})", end=" ")
print() # Zeilenumbruch nach jeder Zeile
# Ausgabe:
# (0,0) (0,1) (0,2) (0,3)
# (1,0) (1,1) (1,2) (1,3)
# (2,0) (2,1) (2,2) (2,3)
# Typisch: alle Kombinationen zweier Listen vergleichen
a_werte = [1, 2, 3]
b_werte = [10, 20]
for a in a_werte:
for b in b_werte:
print(f"{a} + {b} = {a+b}")
zahlen = [3, 7, 2, 8, 5, 7]
# Suchen:
print(7 in zahlen) # True (ist enthalten?)
print(zahlen.index(8)) # 3 (Position von 8)
print(zahlen.count(7)) # 2 (wie oft kommt 7 vor?)
# Filtern (manuell mit Schleife):
grosse = []
for z in zahlen:
if z > 4:
grosse.append(z) # [7, 8, 5, 7]
# Sortieren:
zahlen.sort() # In-Place: [2, 3, 5, 7, 7, 8]
sortiert = sorted(zahlen) # Neue Liste, Original unverändert
Kurzschreibweise zum Erstellen von Listen:
# Allgemeines Muster:
# [Ausdruck for Variable in Sequenz (if Bedingung)]
# Quadratzahlen:
quadrate = [i**2 for i in range(1, 6)]
# [1, 4, 9, 16, 25]
# Mit Bedingung (nur gerade Zahlen):
gerade = [i for i in range(10) if i % 2 == 0]
# [0, 2, 4, 6, 8]
# Auf jedes Element einer Liste anwenden:
temps_c = [0, 20, 37, 100]
temps_f = [c * 9/5 + 32 for c in temps_c]
# [32.0, 68.0, 98.6, 212.0]
Gegeben sind Wochenmessungen (in °C) von drei Wetterstationen:
muenchen = [12.5, 14.1, 9.8, 11.2, 16.3, 18.9, 15.4]
innsbruck = [ 8.3, 10.2, 6.1, 7.9, 12.4, 14.8, 11.1]
venedig = [15.8, 17.3, 13.2, 14.7, 19.1, 22.4, 18.6]
Teil 1: Grundfunktionen schreiben
Implementieren Sie (ohne min()/max() zu verwenden!):
def mittelwert(werte): ... # Durchschnitt berechnen
def minimum(werte): ... # Kleinstes Element finden
def maximum(werte): ... # Größtes Element finden
def ueber_schwelle(werte, s): # Liste der Werte > s
...
Testen Sie jede Funktion mit Beispielwerten.
Teil 2: Auswertungstabelle
Wenden Sie Ihre Funktionen auf alle drei Stationen an und geben Sie eine formatierte Tabelle aus:
Station Mittelwert Minimum Maximum
München 14.0°C 9.8°C 18.9°C
Innsbruck 10.1°C 6.1°C 14.8°C
Venedig 17.3°C 13.2°C 22.4°C
Achten Sie auf Feldbreite und Nachkommastellen!
Teil 3: Tage über Schwelle
An welchen Tagen (Index 0–6) lag die Temperatur an mindestens zwei Stationen über 15°C? Verwenden Sie eine Schleife über die Tage und zählen Sie, wie viele Stationen den Schwellwert überschreiten.
Teil 4: Verschachtelte Schleifen
Finden Sie alle Tagespaare mit , an denen die Temperaturdifferenz zwischen München und Venedig mehr als 5°C beträgt:
for i in range(len(muenchen)):
for j in range(len(venedig)):
if i != j and ...:
print(f"Tag {i} vs. Tag {j}: ...")
Teil 5: Programm strukturieren
Lagern Sie den gesamten Ablauf in eine Funktion main() aus und rufen Sie diese am Ende auf:
def main():
# Daten definieren
# Auswertungstabelle ausgeben
# Tage über Schwelle finden
# Tagespaare ausgeben
main()
Zusatz 1: List Comprehensions
Schreiben Sie ueber_schwelle als einzeilige List Comprehension um. Schreiben Sie außerdem eine Funktion zur Umrechnung aller Werte in Fahrenheit – ebenfalls als List Comprehension.
Zusatz 2: Visualisierung
Stellen Sie die Temperaturen der drei Stationen mit matplotlib.pyplot als Linienplot dar (x: Tage 1–7, y: Temperatur in °C, mit Legende und Grid).
| Termin | Konzepte |
|---|---|
| T1 | Variablen, Datentypen, input/print, f-Strings, if/elif/else |
| T2 | Formatierte Ausgabe, Funktionen (def/return) |
| T3 | while/for, range(), Listen, append |
| T4 | Funktionen vertieft, Module (import), try/except |
| T5 | Verschachtelte Schleifen, Listen durchsuchen, List Comprehensions |
Heute: Klausurvorbereitung – typische Aufgabentypen üben.
Tipp: Versuchen Sie, jede Aufgabe zuerst ohne Hilfe zu lösen. Erst wenn Sie nicht weiterkommen: Mitschriften, Dokumentation, Kommilitonen.
Schreiben Sie ein Ratespiel:
random.randint)"Zu groß!" / "Zu klein!"while-SchleifeZusatz: Begrenzen Sie die Anzahl der Versuche auf 7. Schafft der Benutzer es nicht, geben Sie die gesuchte Zahl aus.
Die Collatz-Folge startet bei einer positiven ganzen Zahl :
Die Folge endet, wenn erreicht wird. Beispiel:
Aufgabe:
collatz_folge(n), die alle Werte als Liste zurückgibtEin Jahr ist ein Schaltjahr, wenn gilt:
Beispiele: 1900 → kein Schaltjahr, 2000 → Schaltjahr, 2024 → Schaltjahr
Aufgabe:
ist_schaltjahr(jahr) → True/Falsetext = "Raketen muessen eine bestimmte Geschwindigkeit erreichen um die Erde zu verlassen"
Schreiben Sie Funktionen für folgende Analysen:
wort_anzahl(text): Anzahl der Wörtertext.split() gibt eine Liste der Wörter zurücklaengstes_wort(text): das längste Wort (bei Gleichstand: das erste)vokal_anzahl(text): Anzahl der Vokale (a, e, i, o, u – Groß-/Kleinschreibung egal)text.lower() wandelt in Kleinbuchstaben umErwartete Ausgabe:
Wörter: 11
Längstes Wort: Geschwindigkeit
Vokale: 30