Skip to content

Lösungen: Teil 10 - Kombination aller Konzepte

Lösung 10.1: Temperaturumrechner

python
def celsius_zu_fahrenheit(celsius):
    """Rechnet Celsius in Fahrenheit um."""
    return celsius * 9/5 + 32

Erklärung:

  • Formel: F = C × 9/5 + 32
  • Beispiele:
    • 0°C → 32°F (Gefrierpunkt)
    • 100°C → 212°F (Siedepunkt)
    • 37°C → 98.6°F (Körpertemperatur)

Lösung 10.2: Notenbewertung

python
def note_pruefen(note):
    """Prüft, ob eine Note ausreichend ist."""
    if note >= 4.0:
        return "bestanden"
    else:
        return "nicht bestanden"

Erklärung: In der Schweiz ist eine Note von 4.0 oder höher eine bestandene Note. Wir verwenden >= um auch 4.0 einzuschließen.


Lösung 10.3: Einkaufspreis berechnen

python
def einkaufspreis(anzahl_hefte, anzahl_stifte):
    """Berechnet den Gesamtpreis eines Einkaufs."""
    preis_heft = 2.50
    preis_stift = 1.20
    return anzahl_hefte * preis_heft + anzahl_stifte * preis_stift

Alternative (ohne Variablen):

python
def einkaufspreis(anzahl_hefte, anzahl_stifte):
    """Berechnet den Gesamtpreis eines Einkaufs."""
    return anzahl_hefte * 2.50 + anzahl_stifte * 1.20

Erklärung:

  • 2 Hefte: 2 × 2.50 = 5.00 CHF
  • 3 Stifte: 3 × 1.20 = 3.60 CHF
  • Total: 5.00 + 3.60 = 8.60 CHF

Lösung 10.4: Zahlen filtern

python
def nur_positive(zahlen):
    """Filtert positive Zahlen aus einer Liste."""
    ergebnis = []
    for zahl in zahlen:
        if zahl > 0:
            ergebnis.append(zahl)
    return ergebnis

Alternative (List Comprehension):

python
def nur_positive(zahlen):
    """Filtert positive Zahlen aus einer Liste."""
    return [zahl for zahl in zahlen if zahl > 0]

Erklärung: Wir iterieren über alle Zahlen und behalten nur die, die größer als 0 sind.


Lösung 10.5: Multiplikationstabelle

python
def multiplikationstabelle(zahl):
    """Erstellt Multiplikationstabelle von 1 bis 10."""
    ergebnis = []
    for i in range(1, 11):
        ergebnis.append(zahl * i)
    return ergebnis

Alternative (List Comprehension):

python
def multiplikationstabelle(zahl):
    """Erstellt Multiplikationstabelle von 1 bis 10."""
    return [zahl * i for i in range(1, 11)]

Erklärung:

  • Für zahl=5: [5×1, 5×2, 5×3, ..., 5×10] = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

Lösung 10.6: Code Reading

Antworten:

  1. Was macht die Funktion bewerte_pruefung()?

    Sie berechnet die Prozentzahl aus erreichten Punkten und Maximalpunkten und ordnet dann basierend auf der Prozentzahl eine Schweizer Note zwischen 3.5 und 6.0 zu.

  2. Wie viele Schüler werden bewertet?

    3 Schüler (Anna, Ben, Clara)

  3. Tabelle für die Schleife:

Iterationischueler[i]punkte_liste[i]prozentnote
10"Anna"4590.06.0
21"Ben"3876.05.0
32"Clara"4284.05.5

Berechnung:

  • Anna: 45/50 = 0.9 = 90% → Note 6.0
  • Ben: 38/50 = 0.76 = 76% → Note 5.0
  • Clara: 42/50 = 0.84 = 84% → Note 5.5
  1. Welche Konzepte werden kombiniert?
    • Funktionen (Definition und Aufruf)
    • Parameter (punkte, max_punkte)
    • If-elif-else Bedingungen (Notenvergabe)
    • Listen (schueler, punkte_liste)
    • Schleifen (for-Schleife mit range)
    • Arithmetik (Prozentberechnung)
    • F-Strings (Formatierte Ausgabe)

Lösung 10.7: Debugging

Fehler: In Zeile 6 steht if note > 4.0: statt if note >= 4.0:. Die Note 4.0 sollte als bestanden zählen, aber der Operator > schließt 4.0 aus.

Problem:

python
if note > 4.0:  # 4.0 > 4.0 ist False!
    bestanden = bestanden + 1

Korrekte Lösung:

python
def analysiere_noten(noten):
    """Analysiert Noten einer Klasse."""
    summe = 0
    bestanden = 0

    for note in noten:
        summe = summe + note
        if note >= 4.0:  # >= statt >
            bestanden = bestanden + 1

    durchschnitt = summe / len(noten)

    return durchschnitt, bestanden

# Test
klassen_noten = [5.5, 4.0, 3.5, 5.0, 4.5]
durchschnitt, anzahl_bestanden = analysiere_noten(klassen_noten)

print(f"Durchschnitt: {durchschnitt}")  # 4.5
print(f"Bestanden: {anzahl_bestanden} von {len(klassen_noten)}")  # 4 von 5

Erklärung:

  • > bedeutet "größer als" (4.0 zählt NICHT)
  • >= bedeutet "größer oder gleich" (4.0 zählt MIT)
  • Bei den Noten [5.5, 4.0, 3.5, 5.0, 4.5]:
    • Bestanden (>= 4.0): 5.5, 4.0, 5.0, 4.5 = 4 Schüler
    • Nicht bestanden (< 4.0): 3.5 = 1 Schüler

Bonus-Übungen

Lösung Bonus 11: FizzBuzz

python
def fizzbuzz(n):
    """FizzBuzz-Funktion."""
    if n % 3 == 0 and n % 5 == 0:
        return "FizzBuzz"
    elif n % 3 == 0:
        return "Fizz"
    elif n % 5 == 0:
        return "Buzz"
    else:
        return str(n)

Wichtig: Die Reihenfolge der Bedingungen ist entscheidend! Die Prüfung auf "durch 3 UND 5 teilbar" muss ZUERST kommen.

Erklärung:

  • Durch 3 und 5 teilbar (z.B. 15) → "FizzBuzz"
  • Nur durch 3 teilbar (z.B. 3, 6, 9) → "Fizz"
  • Nur durch 5 teilbar (z.B. 5, 10) → "Buzz"
  • Sonst (z.B. 7) → Zahl als String

Lösung Bonus 18: Caesar-Verschlüsselung

python
def caesar_verschluesseln(text, verschiebung):
    """Caesar-Verschlüsselung für Kleinbuchstaben."""
    ergebnis = ""

    for zeichen in text:
        # Konvertiere Buchstaben zu Nummer (a=0, b=1, ..., z=25)
        alt_position = ord(zeichen) - ord('a')
        # Verschiebe und wrap around mit Modulo
        neu_position = (alt_position + verschiebung) % 26
        # Konvertiere zurück zu Buchstaben
        neu_zeichen = chr(neu_position + ord('a'))
        ergebnis += neu_zeichen

    return ergebnis

Erklärung:

  • ord() gibt den ASCII-Wert eines Zeichens zurück
  • chr() konvertiert einen ASCII-Wert zu einem Zeichen
  • % 26 sorgt für Wrap-Around (z → a bei Verschiebung)
  • Beispiel: "abc" mit Verschiebung 1 → "bcd"
  • Beispiel: "xyz" mit Verschiebung 3 → "abc" (Wrap-around)

Lösung Bonus 19: Stern-Pyramide

python
def stern_pyramide(hoehe):
    """Erstellt eine Stern-Pyramide."""
    ergebnis = ""

    for i in range(1, hoehe + 1):
        ergebnis += "*" * i
        if i < hoehe:  # Kein Newline nach der letzten Zeile
            ergebnis += "\n"

    return ergebnis

Alternative (mit join):

python
def stern_pyramide(hoehe):
    """Erstellt eine Stern-Pyramide."""
    zeilen = []
    for i in range(1, hoehe + 1):
        zeilen.append("*" * i)
    return "\n".join(zeilen)

Erklärung:

  • Für hoehe=3:
    • Iteration 1: "*"
    • Iteration 2: "**"
    • Iteration 3: "***"
  • Ergebnis: "\n**\n**"

Lösung Bonus 20: Taschenrechner

python
def rechne(zahl1, zahl2, operation):
    """Einfacher Taschenrechner."""
    if operation == "+":
        return zahl1 + zahl2
    elif operation == "-":
        return zahl1 - zahl2
    elif operation == "*":
        return zahl1 * zahl2
    elif operation == "/":
        if zahl2 == 0:
            return "Fehler"
        return zahl1 / zahl2
    else:
        return "Fehler"

Erklärung:

  • Wir prüfen die Operation mit if-elif-else
  • Bei Division durch 0 geben wir "Fehler" zurück
  • Bei ungültiger Operation (z.B. "%") geben wir "Fehler" zurück
  • Beispiele:
    • rechne(10, 5, "+") → 15
    • rechne(10, 5, "/") → 2
    • rechne(10, 0, "/") → "Fehler"

Informatik & ICT Unterricht Neufeld