148 lines
6.5 KiB
Python
148 lines
6.5 KiB
Python
"""
|
||
Kapitel G10: Comprehensions, Datum & Algorithmen – Aufgabenblatt
|
||
================================================================
|
||
Schulabgleich: Thema 13.0 & 15.1
|
||
|
||
In diesem Kapitel meisterst du drei fortgeschrittene Kernkompetenzen:
|
||
1. List & Dict Comprehensions (kompakter, eleganter Python-Code)
|
||
2. Datum & Uhrzeit mit dem 'datetime'-Modul (Rechnen mit Tagen & Zeitspannen)
|
||
3. Grundlegende Algorithmen (Filtern, Suchen und Min/Max-Ermittlung)
|
||
|
||
Bearbeite die Aufgaben von TODO 1 bis TODO 5.
|
||
Überprüfe deine Lösung im Terminal mit:
|
||
python3 test_aufgabe.py
|
||
"""
|
||
|
||
from datetime import datetime, date, timedelta
|
||
from typing import List, Dict, Union
|
||
|
||
|
||
# ==============================================================================
|
||
# TODO 1: Quadratzahlen gerader Zahlen (List Comprehension)
|
||
# ------------------------------------------------------------------------------
|
||
# Schreibe eine Funktion 'quadratzahlen_gerade(zahlen: list[int]) -> list[int]'.
|
||
#
|
||
# Anforderungen:
|
||
# 1. Verwende eine elegante List Comprehension: [ausdruck for x in ... if ...]
|
||
# 2. Filtere alle geraden Zahlen (x % 2 == 0) heraus.
|
||
# 3. Berechne für jede gefilterte Zahl das Quadrat (x ** 2).
|
||
# 4. Gib die neue Liste zurück.
|
||
#
|
||
# Beispiel:
|
||
# eingabe = [1, 2, 3, 4, 5, 6]
|
||
# Ergebnis: [4, 16, 36] (denn 2²=4, 4²=16, 6²=36)
|
||
# ==============================================================================
|
||
|
||
def quadratzahlen_gerade(zahlen: List[int]) -> List[int]:
|
||
"""Gibt die Quadrate aller geraden Zahlen als List Comprehension zurück."""
|
||
# Schreibe hier deinen Code für TODO 1:
|
||
pass
|
||
|
||
|
||
# ==============================================================================
|
||
# TODO 2: Wörter nach Mindestlänge filtern
|
||
# ------------------------------------------------------------------------------
|
||
# Schreibe eine Funktion 'filtriere_lange_woerter(woerter: list[str], min_laenge: int) -> list[str]'.
|
||
#
|
||
# Anforderungen:
|
||
# 1. Verwende vorzugsweise eine List Comprehension.
|
||
# 2. Behalte nur Wörter, deren Zeichenlänge größer oder gleich 'min_laenge' ist (len(w) >= min_laenge).
|
||
# 3. Gib die gefilterte Liste zurück.
|
||
#
|
||
# Beispiel:
|
||
# liste = ["Python", "ist", "eine", "tolle", "Sprache"]
|
||
# filtriere_lange_woerter(liste, 5) -> ["Python", "tolle", "Sprache"]
|
||
# ==============================================================================
|
||
|
||
def filtriere_lange_woerter(woerter: List[str], min_laenge: int) -> List[str]:
|
||
"""Filtert alle Wörter heraus, die mindestens 'min_laenge' Zeichen lang sind."""
|
||
# Schreibe hier deinen Code für TODO 2:
|
||
pass
|
||
|
||
|
||
# ==============================================================================
|
||
# TODO 3: Tage bis Zieldatum berechnen (datetime & timedelta)
|
||
# ------------------------------------------------------------------------------
|
||
# Schreibe eine Funktion 'tage_bis_datum(ziel_datum_str: str) -> int'.
|
||
#
|
||
# Anforderungen:
|
||
# 1. Der Parameter 'ziel_datum_str' ist ein Datum im Format "YYYY-MM-DD" (z.B. "2026-12-24").
|
||
# 2. Lies den Text mit 'datetime.strptime(ziel_datum_str, "%Y-%m-%d").date()' ein.
|
||
# 3. Ermittle das heutige Datum mit 'date.today()'.
|
||
# 4. Berechne die Differenz: (ziel_datum - heute).days.
|
||
# 5. Gib die Anzahl der verbleibenden Tage als Ganzzahl (int) zurück.
|
||
# (Positiv = in der Zukunft, Negativ = in der Vergangenheit, 0 = heute).
|
||
# ==============================================================================
|
||
|
||
def tage_bis_datum(ziel_datum_str: str) -> int:
|
||
"""Berechnet die Anzahl der Tage von heute bis zum angegebenen Zieldatum (YYYY-MM-DD)."""
|
||
# Schreibe hier deinen Code für TODO 3:
|
||
pass
|
||
|
||
|
||
# ==============================================================================
|
||
# TODO 4: Datum im deutschen Format darstellen (.strftime)
|
||
# ------------------------------------------------------------------------------
|
||
# Schreibe eine Funktion 'formatiere_deutsches_datum(datum_obj: Union[date, datetime]) -> str'.
|
||
#
|
||
# Anforderungen:
|
||
# 1. Die Funktion erhält ein 'date'- oder 'datetime'-Objekt.
|
||
# 2. Formatiere das Datum mit '.strftime()' im deutschen Standard-Format "DD.MM.YYYY" (z.B. "24.12.2026").
|
||
# Tipp: %d = Tag (zweistellig), %m = Monat (zweistellig), %Y = Jahr (vierstellig).
|
||
# 3. Gib den formatierten String zurück.
|
||
# ==============================================================================
|
||
|
||
def formatiere_deutsches_datum(datum_obj: Union[date, datetime]) -> str:
|
||
"""Formatiert ein date- oder datetime-Objekt in das deutsche Format DD.MM.YYYY."""
|
||
# Schreibe hier deinen Code für TODO 4:
|
||
pass
|
||
|
||
|
||
# ==============================================================================
|
||
# TODO 5: Älteste Person finden (Algorithmus: Maximum / Key-Suche)
|
||
# ------------------------------------------------------------------------------
|
||
# Schreibe eine Funktion 'finde_aelteste_person(personen: list[dict]) -> str'.
|
||
#
|
||
# Anforderungen:
|
||
# 1. 'personen' ist eine Liste von Dictionaries, z.B.:
|
||
# [{"name": "Anna", "alter": 25}, {"name": "Ben", "alter": 32}, {"name": "Clara", "alter": 19}]
|
||
# 2. Wenn die Liste leer ist, gib einen leeren String "" zurück.
|
||
# 3. Finde die Person mit dem höchsten 'alter' (z.B. mit Schleife oder max(..., key=...)).
|
||
# 4. Gib den 'name' dieser ältesten Person zurück (im Beispiel: "Ben").
|
||
# ==============================================================================
|
||
|
||
def finde_aelteste_person(personen: List[Dict[str, Union[str, int]]]) -> str:
|
||
"""Findet in einer Liste von Personen-Dicts die älteste Person und gibt deren Namen zurück."""
|
||
# Schreibe hier deinen Code für TODO 5:
|
||
pass
|
||
|
||
|
||
# ==============================================================================
|
||
# Hauptprogramm zum Ausprobieren:
|
||
# (Du kannst diese Datei direkt mit 'python3 aufgabe.py' ausführen)
|
||
# ==============================================================================
|
||
if __name__ == "__main__":
|
||
print("--- 🚀 Testlauf: Comprehensions, Datum & Algorithmen ---")
|
||
|
||
# Test TODO 1
|
||
zahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||
print("Quadrate gerader Zahlen:", quadratzahlen_gerade(zahlen))
|
||
|
||
# Test TODO 2
|
||
woerter = ["Code", "Python", "KI", "Entwicklung", "Funktion", "Loop"]
|
||
print("Wörter >= 6 Zeichen:", filtriere_lange_woerter(woerter, 6))
|
||
|
||
# Test TODO 3 & 4
|
||
heute = date.today()
|
||
print("Heutiges deutsches Datum:", formatiere_deutsches_datum(heute))
|
||
|
||
silvester = f"{heute.year}-12-31"
|
||
print(f"Tage bis zum Jahresende ({silvester}):", tage_bis_datum(silvester))
|
||
|
||
# Test TODO 5
|
||
gruppe = [
|
||
{"name": "Lisa", "alter": 21},
|
||
{"name": "Markus", "alter": 29},
|
||
{"name": "Sarah", "alter": 24}
|
||
]
|
||
print("Älteste Person in der Gruppe:", finde_aelteste_person(gruppe))
|