2. Prüfungsvorbereitung

Kursinhalte

  • Zeitansatz Teil 1 – 20 Minuten
  • Zeitansatz Teil 2 – 15 Minuten
  • Zeitansatz Teil 3 – 45 Minuten

Teil 1 – Fragen

Mögliche Gesamtpunktzahl: 40

Bewertung: Jede richtige Antwort ergibt einen Punkt.

Verfügbare Zeit: 20 Minuten

Erlaubte Hilfsmittel: Keine Hilfsmittel erlaubt

Kreise die richtige Antwort ein. Es ist jeweils genau eine Antwort richtig.

  1. Was ist das Ergebnis des folgenden Codes?

    print(2 + 3 * 4)
    1. 20
    2. 24
    3. 14
    4. 18
  2. Welcher Code verwendet die Einrückung korrekt?

    1. if x > 0:
          print("positiv")
    2. if x > 0:
      print("positiv")
    3. if x > 0 {
          print("positiv")
      }
    4. if x > 0 then
          print("positiv")
  3. Was passiert, wenn die Variable name zuvor nicht definiert wurde?

    print(name)
    1. Es wird eine leere Zeile ausgegeben.
    2. Es entsteht ein NameError.
    3. Es entsteht immer ein Syntaxfehler.
    4. Die Variable wird automatisch erstellt.
  4. Welche Anweisung speichert den Wert 12 als String?

    1. wert = 12
    2. wert = float(12)
    3. wert = "12"
    4. wert = bool(12)
  5. Welchen Datentyp besitzt der folgende Wert?

    [1, 2, 3]
    1. Liste
    2. Tuple
    3. String
    4. Dictionary
  6. Was wird durch den folgenden Code ausgegeben?

    wert = int("15")
    print(wert)
    1. „15“
    2. 15.0
    3. Es entsteht ein Fehler.
    4. 15
  7. Wann ergibt der Operator or den Wahrheitswert True?

    1. Nur wenn beide Ausdrücke wahr sind.
    2. Wenn mindestens ein Ausdruck wahr ist.
    3. Nur wenn beide Ausdrücke falsch sind.
    4. Nur wenn beide Ausdrücke identisch sind.
  8. Welche String-Methode entfernt Leerzeichen am Anfang und Ende eines Strings?

    1. strip()
    2. remove()
    3. clear()
    4. trimtext()
  9. Was gibt len(["a", "b", "c"]) zurück?

    1. 2
    2. 4
    3. 3
    4. 6
  10. Was ist das Ergebnis des folgenden Ausdrucks?

    "Python"[-1]
    1. P
    2. o
    3. Python
    4. n
  11. Wie greift man auf das erste Element einer Liste zu?

    1. liste[0]
    2. liste[1]
    3. liste.first()
    4. liste(0)
  12. Welche Methode fügt mehrere Elemente aus einer anderen Liste hinzu?

    1. appendall()
    2. insert()
    3. extend()
    4. push()
  13. Was wird ausgegeben?

    zahlen = [10, 20, 30]
    print(zahlen[1])
    1. 10
    2. 20
    3. 30
    4. 1
  14. Wie wird das erste Element der Liste zahlen auf den Wert 99 gesetzt?

    1. zahlen[1] = 99
    2. zahlen.first = 99
    3. zahlen(0) = 99
    4. zahlen[0] = 99
  15. Welche Anweisung entfernt das erste Element mit dem Wert 5 aus einer Liste?

    1. liste.remove(5)
    2. liste.pop(5)
    3. liste.delete(5)
    4. liste.clear(5)
  16. Wie wird eine Liste zahlen absteigend sortiert?

    1. zahlen.sort(descending=True)
    2. zahlen.sort(reverse=True)
    3. zahlen.reverse(sort=True)
    4. sort(zahlen, down=True)
  17. Welche Methode entfernt alle Elemente aus einer Liste?

    1. delete()
    2. empty()
    3. clear()
    4. removeall()
  18. Welche Methode liefert den Index des ersten Vorkommens eines Wertes?

    1. find()
    2. position()
    3. count()
    4. index()
  19. Welche Werte enthält list(range(1, 6, 2))?

    1. [1, 2, 3, 4, 5]
    2. [1, 3, 5]
    3. [2, 4, 6]
    4. [1, 3, 5, 7]
  20. Welche Aussage über eine while-Schleife ist korrekt?

    1. Sie wird ausgeführt, solange ihre Bedingung wahr ist.
    2. Sie wird immer mindestens einmal ausgeführt.
    3. Sie benötigt immer eine Liste.
    4. Sie kann nicht mit break beendet werden.
  21. Welche Anweisung beendet eine Schleife sofort?

    1. continue
    2. return
    3. break
    4. pass
  22. Welche Wirkung hat continue?

    1. Das gesamte Programm wird beendet.
    2. Die Schleife wird dauerhaft angehalten.
    3. Die Schleife wird von vorne neu gestartet.
    4. Der restliche Code der aktuellen Iteration wird übersprungen.
  23. Welche Funktion besitzt einen gültigen Standardwert für den Parameter name?

    1. def gruss("Gast"):
    2. def gruss(name="Gast"):
    3. def gruss(name:"Gast"):
    4. function gruss(name="Gast"):
  24. Wie wird der Rückgabewert der Funktion addiere gespeichert?

    1. ergebnis = addiere(2, 3)
    2. addiere = ergebnis(2, 3)
    3. return ergebnis = addiere(2, 3)
    4. ergebnis == addiere[2, 3]
  25. Was bewirkt die Anweisung return ergebnis in einer Funktion?

    1. Sie gibt den Wert nur auf dem Bildschirm aus.
    2. Sie löscht die Variable ergebnis.
    3. Sie beendet die Funktion und gibt den Wert zurück.
    4. Sie startet die Funktion erneut.
  26. Mit welchem Befehl wird das Paket requests installiert?

    1. requests install
    2. python create requests
    3. install.pip requests
    4. pip install requests
  27. Welchen Datentyp liefert input() grundsätzlich zurück?

    1. String
    2. Integer
    3. Float
    4. Boolean
  28. Welche Anweisung liest einen Preis ein und wandelt ihn in eine Kommazahl um?

    1. preis = int(input("Preis: "))
    2. preis = float(input("Preis: "))
    3. preis = input(float("Preis: "))
    4. preis = str(input("Preis: "))
  29. Welche Anweisung definiert eine Klasse mit dem Namen Person?

    1. def Person:
    2. object Person:
    3. class Person:
    4. new Person:
  30. Welche spezielle Methode wird normalerweise beim Erstellen eines Objekts automatisch aufgerufen?

    1. __init__()
    2. __start__()
    3. __create__()
    4. __class__()
  31. Wie greift man auf das Attribut name des Objekts person zu?

    1. person->name
    2. person.name
    3. person[name]
    4. name.person
  32. Welche Schreibweise definiert Azubi als Unterklasse von Mitarbeiter?

    1. class Azubi extends Mitarbeiter:
    2. class Azubi -> Mitarbeiter:
    3. class Azubi inherits Mitarbeiter:
    4. class Azubi(Mitarbeiter):
  33. Welche Funktion wandelt einen JSON-String in Python-Daten um?

    1. json.loads()
    2. json.dumps()
    3. json.write()
    4. json.encode()
  34. Welche Funktion erzeugt aus Python-Daten einen JSON-String?

    1. json.loads()
    2. json.read()
    3. json.dumps()
    4. json.convert()
  35. Welche Funktion liest JSON-Daten aus einer bereits geöffneten Datei?

    1. json.loads(datei)
    2. json.load(datei)
    3. json.read(datei)
    4. json.open(datei)
  36. Mit welchem Modus wird eine Datei zum Lesen geöffnet?

    1. open("daten.txt", "w")
    2. open("daten.txt", "a")
    3. open("daten.txt", "x")
    4. open("daten.txt", "r")
  37. Welche Verzweigung ist syntaktisch korrekt?

    1. if punkte >= 50:
          print("Bestanden")
      elif punkte >= 40:
          print("Nachprüfung")
    2. if punkte >= 50
          print("Bestanden")
      else if punkte >= 40
    3. if punkte >= 50 then:
          print("Bestanden")
    4. if (punkte >= 50) {
          print("Bestanden")
      }
  38. Welche Anweisung erzeugt ein Objekt der Klasse Person?

    1. p = class Person()
    2. p = new Person()
    3. p = Person()
    4. Person = p()
  39. Wie wird die Methode anzeigen() des Objekts p aufgerufen?

    1. anzeigen(p)
    2. p.anzeigen()
    3. p->anzeigen()
    4. anzeigen.p()
  40. Welcher Python-Datentyp entsteht typischerweise aus einem JSON-Objekt mit Schlüssel-Wert-Paaren?

    1. Liste
    2. Dictionary
    3. Tuple
    4. Set

Lösungen Teil 1

  1. C – 14
  2. A – Korrekte Einrückung nach der if-Anweisung
  3. B – NameError
  4. C – wert = „12“
  5. A – Liste
  6. D – 15
  7. B – Mindestens ein Ausdruck muss wahr sein
  8. A – strip()
  9. C – 3
  10. D – n
  11. A – liste[0]
  12. C – extend()
  13. B – 20
  14. D – zahlen[0] = 99
  15. A – liste.remove(5)
  16. B – zahlen.sort(reverse=True)
  17. C – clear()
  18. D – index()
  19. B – [1, 3, 5]
  20. A – Sie wird ausgeführt, solange ihre Bedingung wahr ist
  21. C – break
  22. D – Der restliche Code der aktuellen Iteration wird übersprungen
  23. B – def gruss(name=“Gast“):
  24. A – ergebnis = addiere(2, 3)
  25. C – Beendet die Funktion und gibt den Wert zurück
  26. D – pip install requests
  27. A – String
  28. B – preis = float(input(„Preis: „))
  29. C – class Person:
  30. A – init()
  31. B – person.name
  32. D – class Azubi(Mitarbeiter):
  33. A – json.loads()
  34. C – json.dumps()
  35. B – json.load(datei)
  36. D – open(„daten.txt“, „r“)
  37. A – Korrekte if- und elif-Syntax
  38. C – p = Person()
  39. B – p.anzeigen()
  40. B – Dictionary

Teil 2 – Fehlersuche

Mögliche Gesamtpunktzahl: 25 Punkte

Jede vollständig richtige Antwort ergibt: 5 Punkte

Verfügbare Zeit: 15 Minuten

Erlaubte Hilfsmittel

Recherche auf den Seiten www.w3schools.com und www.pythonentwicklerkurs.de

Aufgabenstellung

Benenne bei jeder Codedarstellung die fehlerhafte Zeile und beschreibe den enthaltenen Fehler. Pro Codedarstellung existiert genau ein Fehler.

Hinweise

Die Aufgaben gehen von der Annahme aus, dass für jede Variable und für jedes Argument ein Wert vorhanden ist. Benötigte Dateien, Datenbanken und Datenbanktabellen sind ebenfalls vorhanden. Ein Fehler kann sowohl die Syntax als auch die Programmlogik betreffen.


Aufgabe 1

1  preis = input("Preis des Artikels: ")
2  rabatt = 5
3  endpreis = float(preis - rabatt)
4  print(f"Endpreis: {endpreis:.2f} Euro")

Zeile: ________________________________________________

Fehlerbeschreibung: ____________________________________________________________________

____________________________________________________________________


Aufgabe 2

1  text = "Python ist vielseitig"
2  neuer_text = text.replace["Python", "Programmieren"]
3  print(neuer_text)

Zeile: ________________________________________________

Fehlerbeschreibung: ____________________________________________________________________

____________________________________________________________________


Aufgabe 3

1  woerter = ["Python", "macht", "Spaß"]
2  satz = woerter.join(" ")
3  print(satz)

Zeile: ________________________________________________

Fehlerbeschreibung: ____________________________________________________________________

____________________________________________________________________


Aufgabe 4

1  import json
2
3  daten = '{"name": "Lina", "aktiv": true}'
4  benutzer = json.load(daten)
5  print(benutzer["name"])

Zeile: ________________________________________________

Fehlerbeschreibung: ____________________________________________________________________

____________________________________________________________________


Aufgabe 5

1  import sqlite3
2
3  verbindung = sqlite3.connect("kunden.db")
4  cursor = verbindung.cursor()
5  stadt = "Rosenheim"
6
7  cursor.execute("SELECT name FROM kunden WHERE stadt = ?", stadt)
8  ergebnisse = cursor.fetchall()
9
10 for kunde in ergebnisse:
11     print(kunde[0])
12
13 verbindung.close()

Zeile: ________________________________________________

Fehlerbeschreibung: ____________________________________________________________________

____________________________________________________________________

Lösungen Teil 2

Lösungsblatt

Aufgabe 1

Fehlerhafte Zeile: 3

Fehlerbeschreibung:
Die Funktion input() gibt den eingegebenen Preis als String zurück. In Zeile 3
wird versucht, von diesem String die Ganzzahl 5 abzuziehen. Die Subtraktion
findet bereits vor der Umwandlung durch float() statt. Ein String kann jedoch
nicht direkt von einer Ganzzahl subtrahiert werden.

Korrektur:
endpreis = float(preis) – rabatt

Aufgabe 2

Fehlerhafte Zeile: 2

Fehlerbeschreibung:
replace() ist eine String-Methode und muss mit runden Klammern aufgerufen
werden. Eckige Klammern werden für Zugriffe auf Elemente beziehungsweise
Indizes verwendet.

Korrektur:
neuer_text = text.replace(„Python“, „Programmieren“)

Aufgabe 3

Fehlerhafte Zeile: 2

Fehlerbeschreibung:
join() ist eine Methode eines Strings und keine Methode einer Liste. Der
String, der zwischen den Listenelementen eingefügt werden soll, muss vor der
Methode stehen. Die Liste wird als Argument übergeben.

Korrektur:
satz = “ „.join(woerter)

Aufgabe 4

Fehlerhafte Zeile: 4

Fehlerbeschreibung:
json.load() erwartet eine geöffnete Datei beziehungsweise ein Dateiobjekt.
Die Variable daten enthält jedoch bereits einen JSON-String. Zum Umwandeln
eines JSON-Strings in ein Python-Objekt muss json.loads() verwendet werden.

Korrektur:
benutzer = json.loads(daten)

Aufgabe 5

Fehlerhafte Zeile: 7

Fehlerbeschreibung:
Die Werte für die Platzhalter einer SQL-Anweisung müssen als Sequenz
übergeben werden. Bei nur einem Wert muss deshalb ein Tupel mit einem Element
verwendet werden. Das Komma nach stadt ist erforderlich, damit Python den
Ausdruck als Tupel erkennt.

Korrektur:
cursor.execute(„SELECT name FROM kunden WHERE stadt = ?“, (stadt,))

Teil 3 – Prüfungsaufgabe: Reklamationsverwaltung

Ausgangslage:

Die Fahrradwerkstatt RadFix verwaltet Reklamationen ihrer Kunden digital. Dafür gibt es eine bestehende Codebasis, die bereits Kundendaten einliest und einfache Objekte für Reklamationen verwendet. Die Daten werden in einer JSON-Datei gespeichert. Die bisherige Anwendung erlaubt jedoch nur das Speichern, nicht aber das gezielte Auswerten der Reklamationen.

Datei: reklamation.json

[
    {
        "kundennummer": "K1001",
        "produkt": "E-Bike Akku",
        "beschreibung": "Akku lädt nicht mehr",
        "datum": "2025-05-28",
        "status": "offen"
    },
    {
        "kundennummer": "K1002",
        "produkt": "Kettenschaltung",
        "beschreibung": "Springt beim Schalten",
        "datum": "2025-05-25",
        "status": "bearbeitet"
    }
]

Bereits vorhandene Python-Datei: reklamation.py

import json

class Reklamation:
    def __init__(self, kundennummer, produkt, beschreibung, datum, status):
        self.kundennummer = kundennummer
        self.produkt = produkt
        self.beschreibung = beschreibung
        self.datum = datum
        self.status = status

def lade_reklamationen(dateipfad):
    with open(dateipfad, 'r') as datei:
        daten = json.load(datei)
        reklamationen = []
        for eintrag in daten:
            r = Reklamation(**eintrag)
            reklamationen.append(r)
        return reklamationen

Ihre Aufgabe:

Erweitern Sie das Projekt um folgende Funktionalitäten:

  1. Erweiterung der Klasse Reklamation:
    • Fügen Sie der Klasse eine Methode ist_offen() hinzu, die True zurückgibt, wenn der Status "offen" ist.
      Erstellen SIe zusätzlich eine Methode als_dict(), die das Objekt als Dictionary zurückgibt (für die JSON-Speicherung).
  2. Neue Funktion: Offene Reklamationen anzeigen
    • Erstellen Sie eine Funktion zeige_offene_reklamationen(reklamationen), die alle offenen Reklamationen auf der Konsole ausgibt – dabei soll jede Reklamation in einer Zeile im Format erscheinen:
      Kundennummer: K1001 | Produkt: E-Bike Akku | Datum: 2025-05-28
  3. Neue Reklamation hinzufügen:
    • Schreiben Sie eine Funktion neue_reklamation_hinzufuegen(dateipfad), die den Benutzer nach den folgenden Eingaben fragt: Kundennummer, Produkt, Beschreibung
    • Das Datum wird automatisch auf das aktuelle Datum gesetzt (datetime verwenden), der Status auf "offen".
    • Speichern Sie die neue Reklamation in die vorhandene JSON-Datei.

Hinweise zur Bewertung:

  • Saubere Modultrennung
  • Fehlerfreies Einlesen und Schreiben von JSON-Daten
  • Korrekte Verwendung von Klassen und Objekten
  • Funktionierende Interaktion mit der Benutzereingabe

Musterlösung:

Zur Anzeige der Musterlösung bitte auf die Lehrkraft zugehen.
Hinweis: Die Musterlösung ist als solche zu betrachten. Nicht alle Details aus der Musterlösung müssen für eine volle Punktzahl erfüllt sein. Wichtig ist, dass die Kernfunktionen gegeben sind. Wie diese erreicht werden, wird nicht benotet.

Datei: reklamation.py

import json
from datetime import datetime

class Reklamation:
    def __init__(self, kundennummer, produkt, beschreibung, datum, status):
        self.kundennummer = kundennummer
        self.produkt = produkt
        self.beschreibung = beschreibung
        self.datum = datum
        self.status = status

    def ist_offen(self):
        return self.status.lower() == "offen"

    def als_dict(self):
        return {
            "kundennummer": self.kundennummer,
            "produkt": self.produkt,
            "beschreibung": self.beschreibung,
            "datum": self.datum,
            "status": self.status
        }

def lade_reklamationen(dateipfad):
    try:
        with open(dateipfad, 'r', encoding='utf-8') as datei:
            daten = json.load(datei)
            return [Reklamation(**eintrag) for eintrag in daten]
    except FileNotFoundError:
        print("Datei nicht gefunden. Es wird eine neue Liste erstellt.")
        return []
    except json.JSONDecodeError:
        print("Datei konnte nicht gelesen werden. Leere Liste wird verwendet.")
        return []

def speichere_reklamationen(dateipfad, reklamationen):
    daten = [r.als_dict() for r in reklamationen]
    with open(dateipfad, 'w', encoding='utf-8') as f:
        json.dump(daten, f, ensure_ascii=False, indent=2)

Datei: main.py

from reklamation import Reklamation, lade_reklamationen, speichere_reklamationen
from datetime import datetime

DATEIPFAD = "reklamation.json"

def zeige_offene_reklamationen(reklamationen):
    print("\n--- Offene Reklamationen ---")
    for r in reklamationen:
        if r.ist_offen():
            print(f"Kundennummer: {r.kundennummer} | Produkt: {r.produkt} | Datum: {r.datum}")

def neue_reklamation_hinzufuegen(dateipfad):
    print("\n--- Neue Reklamation hinzufügen ---")
    kundennummer = input("Kundennummer: ")
    produkt = input("Produkt: ")
    beschreibung = input("Beschreibung: ")

    datum = datetime.now().strftime("%Y-%m-%d")
    status = "offen"

    neue_reklamation = Reklamation(kundennummer, produkt, beschreibung, datum, status)

    reklamationen = lade_reklamationen(dateipfad)
    reklamationen.append(neue_reklamation)
    speichere_reklamationen(dateipfad, reklamationen)
    print("Reklamation wurde gespeichert.")

def main():
    reklamationen = lade_reklamationen(DATEIPFAD)
    zeige_offene_reklamationen(reklamationen)
    neue_reklamation_hinzufuegen(DATEIPFAD)

if __name__ == "__main__":
    main()