Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m323:learningunits:lu01:aufgaben:spaghetticode [2026/08/18 11:00] – Als Classroom-50-Aufgabe umgestellt, Repo verlinkt adminmodul:m323:learningunits:lu01:aufgaben:spaghetticode [2026/08/18 11:20] (aktuell) – Schriftlicher Teil wird neu im README.md abgegeben admin
Zeile 7: Zeile 7:
 ===== Ausgangslage ===== ===== Ausgangslage =====
  
-Die folgende Funktion berechnet den Umsatz aus einer Liste von Bestellungen. Sie ist korrekt, aber niemand liest sie gern: eine ''while''-Schleife mit Abbruchflagge, ein von Hand hochgezählter Index, ''continue''-Sprünge und drei Verschachtelungsebenen.+Die Funktion ''umsatz_alt'' in ''referenz.py'' berechnet den Umsatz aus einer Liste von Bestellungen. Sie ist korrekt, aber niemand liest sie gern: eine ''while''-Schleife mit Abbruchflagge, ein von Hand hochgezählter Index, ''continue''-Sprünge und drei Verschachtelungsebenen.
  
-Im Repository steht sie in ''referenz.py'' und ist der Massstab: Ihre Fassung muss für jede Eingabe exakt dasselbe liefern. **Diese Datei dürfen Sie nicht verändern.**+Diese Datei ist der Massstab: Ihre Fassung muss für jede Eingabe exakt dasselbe liefern. **Verändern dürfen Sie sie nicht.**
  
-<code python> +~~NOCACHE~~ 
-def umsatz_alt(bestellungen): +=== referenz.py === 
-    i +{{gh>https://github.com/templates-python/m323-lu01-a11-umsatz-refactoring/blob/main/referenz.py}}
-    fertig False +
-    total +
-    while not fertig: +
-        if i >len(bestellungen): +
-            fertig True +
-        else: +
-            b bestellungen[i] +
-            if b['status'] == 'storniert': +
-                i = i + 1 +
-                continue +
-            else: +
-                if b['menge'] <= 0: +
-                    i = i + 1 +
-                    continue +
-                else: +
-                    total = total + b['menge'] * b['preis'+
-                    i = i + 1 +
-    return total +
-</code>+
  
-==== Testdaten ====+===== Code-Vorlage =====
  
-<code python> +Die Namen und Signaturen in ''main.py'' sind fix – die Tests rufen genau diese auf
-BESTELLUNGEN = [ + 
-    {'artikel': 'Maus',     'status': 'offen',     'menge': 3,  'preis': 24.90}, +=== main.py === 
-    {'artikel': 'Tastatur', 'status': 'storniert', 'menge': 2,  'preis': 79.50}, +{{gh>https://github.com/templates-python/m323-lu01-a11-umsatz-refactoring/blob/main/main.py}}
-    {'artikel': 'Monitor',  'status': 'offen',     'menge': 0,  'preis': 249.00}, +
-    {'artikel': 'Kabel',    'status': 'geliefert', 'menge': 10, 'preis': 9.90}, +
-    {'artikel''Dock',     'status': 'offen',     'menge': 1,  'preis': 189.00}+
-+
-</code>+
  
 ===== Anforderungen ===== ===== Anforderungen =====
  
-  - **Analysieren:** Markieren Sie im Code von ''referenz.py'', wo Sequenz, Selektion und Iteration vorkommen. Welche Stellen entsprechen keiner der drei Grundstrukturen, sondern imitieren einen Sprung? +Implementieren Sie in ''main.py'' die beiden vorgegebenen Funktionen. Vorgaben:
-  - **Umbauen:** Implementieren Sie in ''main.py'' die beiden vorgegebenen Funktionen. Vorgaben: +
-    * Die Schleife läuft direkt über die Elemente (''for bestellung in bestellungen''), ohne Index und ohne Abbruchflagge. +
-    * Kein ''continue'', kein ''break'', kein ''while''+
-    * Höchstens **eine** Verschachtelungsebene innerhalb der Schleife. +
-    * Die Bedingung, ob eine Bestellung überhaupt zählt, steckt in ''ist_verrechenbar'' und gibt ''True'' oder ''False'' zurück. +
-  - **Begründen:** Halten Sie in zwei bis drei Sätzen fest, welche Fehlerquellen im Ausgangscode durch den Umbau verschwunden sind.+
  
-==== Vorgegebene Funktionen ====+  * Die Schleife läuft direkt über die Elemente (''for bestellung in bestellungen''), ohne Index und ohne Abbruchflagge. 
 +  * Kein ''continue'', kein ''break'', kein ''while''
 +  * Höchstens **eine** Verschachtelungsebene innerhalb der Schleife. 
 +  * Die Bedingung, ob eine Bestellung überhaupt zählt, steckt in ''ist_verrechenbar'' und gibt ''True'' oder ''False'' zurück.
  
 ^ Funktion ^ Rückgabe ^ ^ Funktion ^ Rückgabe ^
Zeile 68: Zeile 41:
 </code> </code>
  
-===== Zusatzfragen =====+===== Schriftlicher Teil =====
  
-  - Der Ausgangscode zählt ''i'' an drei verschiedenen Stellen hoch. Was passiert, wenn man eine dieser Stellen vergisst? Probieren Sie es in einer Kopie aus. +Diese fünf Punkte beantworten Sie **direkt im ''README.md''** Ihres Repositories, unterhalb der jeweiligen Frage. Zwei bis vier Sätze pro Punkt genügen. 
-  - Das Theorem von Böhm und Jacopini besagt, dass jeder Algorithmus mit den drei Grundstrukturen auskommt. Wie stützt Ihr Umbau diese Aussage? + 
-  - **Für Schnelle:** Formulieren Sie die Anforderung an ''umsatz'' deklarativ – als Satz über das Ergebnis, ohne Schleife und Zwischensumme.+  **Grundstrukturen:** Wo kommen in ''umsatz_alt'' Sequenz, Selektion und Iteration vor? Welche Stellen entsprechen keiner der drei Grundstrukturen, sondern imitieren einen Sprung? 
 +  - **Was der Umbau beseitigt:** Welche Fehlerquellen im Ausgangscode sind durch Ihren Umbau verschwunden? 
 +  - **Vergessenes Hochzählen:** Der Ausgangscode zählt ''i'' an drei verschiedenen Stellen hoch. Was passiert, wenn man eine davon vergisst? Probieren Sie es in einer Kopie aus. 
 +  - **Böhm und Jacopini:** Das Theorem besagt, dass jeder Algorithmus mit den drei Grundstrukturen auskommt. Wie stützt Ihr Umbau diese Aussage? 
 +  - **Deklarativ formuliert (für Schnelle):** Formulieren Sie die Anforderung an ''umsatz'' als Satz über das Ergebnis, ohne Schleife und Zwischensumme.
  
 <WRAP center round important 80%> <WRAP center round important 80%>
Zeile 79: Zeile 56:
 Das Verhalten der Funktion darf sich nicht ändern – auch nicht in Randfällen. Geprüft werden: leere Liste, alle Bestellungen storniert, Menge 0, Menge negativ. Zwei weitere Tests lesen ''main.py'' als Syntaxbaum ein und prüfen, dass eine ''for''-Schleife vorhanden ist und weder ''while'' noch ''continue'' oder ''break'' vorkommen. Das Verhalten der Funktion darf sich nicht ändern – auch nicht in Randfällen. Geprüft werden: leere Liste, alle Bestellungen storniert, Menge 0, Menge negativ. Zwei weitere Tests lesen ''main.py'' als Syntaxbaum ein und prüfen, dass eine ''for''-Schleife vorhanden ist und weder ''while'' noch ''continue'' oder ''break'' vorkommen.
 </WRAP> </WRAP>
 +
 +===== Vorgehen =====
 +
 +  - Akzeptiere das Classroom-Assignment
 +  - Klone dein persönliches Repository in die Entwicklungsumgebung
 +  - Analysiere ''referenz.py''
 +  - Implementiere ''ist_verrechenbar'' und ''umsatz'' in ''main.py''
 +  - Beantworte die fünf Punkte im ''README.md''
 +  - Lokal prüfen mit ''pytest'' und ''python _run_pylint.py''
 +  - Pushen – Code und Antworten liegen damit im selben Commit
  
 ===== Bewertung ===== ===== Bewertung =====
Zeile 85: Zeile 72:
 | Unittests | 11 | | Unittests | 11 |
 | Linting | 5 | | Linting | 5 |
-| **Total** | **16** |+| Schriftlicher Teil (von Hand bewertet) | 6 | 
 +| **Total** | **22** |
  
 ===== Abgabe ===== ===== Abgabe =====
  
-Der Code wird über das Classroom-Repository abgegeben und automatisch bewertetDie **Analyse**, die **Begründung** und die **Zusatzfragen** geben Sie zusätzlich in Moodle ab.+Alles zusammen als Push in das persönliche GitHub-Repository: der Code in ''main.py'' und die Antworten im ''README.md''. Es gibt keine separate Moodle-Abgabe.
  
 ---- ----
-<nodisp>Github Repohttps://github.com/templates-python/m323-lu01-a11-umsatz-refactoring</nodisp>+<details> 
 +<summary>//=> GitHub Repo für externe Besucher//</summary> 
 +GitHub Repository https://github.com/templates-python/m323-lu01-a11-umsatz-refactoring 
 + 
 +//Lernende am BZZ müssen den Link zum Classroom-Assignment verwenden// 
 + 
 +</details>
 [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi
  
  • modul/m323/learningunits/lu01/aufgaben/spaghetticode.1787043621.txt.gz
  • Zuletzt geändert: 2026/08/18 11:00
  • von admin