<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.bzz.ch/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.bzz.ch/feed.php">
        <title>BZZ - Modulwiki - modul:m323:learningunits:lu07:loesungen</title>
        <description></description>
        <link>https://wiki.bzz.ch/</link>
        <image rdf:resource="https://wiki.bzz.ch/_media/wiki/logo.png" />
       <dc:date>2026-09-09T13:24:39+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/langefunktion?rev=1788953954&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/profiling?rev=1788945566&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/review?rev=1788945520&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/datenstruktur?rev=1788945471&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/performance?rev=1788945410&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/characterization?rev=1788945356&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/purerefactoring?rev=1788945317&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/pipeline?rev=1788945281&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/einordnen?rev=1788945208&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/steckbrief?rev=1788945175&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/smelldetektiv?rev=1788945140&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.bzz.ch/_media/wiki/logo.png">
        <title>BZZ - Modulwiki</title>
        <link>https://wiki.bzz.ch/</link>
        <url>https://wiki.bzz.ch/_media/wiki/logo.png</url>
    </image>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/langefunktion?rev=1788953954&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T11:39:14+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L04 - Lange Funktion zerlegen - L04 korrigiert: sum() braucht Startwert 0.0, sonst Total 0 statt 0.0 bei leerer Liste</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/langefunktion?rev=1788953954&amp;do=diff</link>
        <description>LU07.L04 - Lange Funktion zerlegen

Schritt 0: Sicherheitsnetz


# main_test.py
import main

ERWARTET = (
    &quot;Bestellungen (4)\n&quot;
    &quot;----------------\n&quot;
    &quot;Meier: Maus = 75.0 CHF\n&quot;
    &quot;Keller: Laptop = 1140.0 CHF\n&quot;
    &quot;Meier: Tastatur = 152.0 CHF\n&quot;
    &quot;Keller: Monitor = 199.5 CHF\n&quot;
    &quot;----------------\n&quot;
    &quot;Total: 1566.5 CHF&quot;
)

def test_bericht_unveraendert():
    assert main.bericht(main.BESTELLUNGEN) == ERWARTET

def test_rabatt_erst_ab_100():
    knapp_darunter = [{&quot;kunde&quot;: &quot;…</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/profiling?rev=1788945566&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:19:26+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L11 - Den echten Hotspot finden - LU07.L11 - Den echten Hotspot finden (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/profiling?rev=1788945566&amp;do=diff</link>
        <description>LU07.L11 - Den echten Hotspot finden

Das Profil


         12004 function calls in 0.104 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.002    0.002    0.104    0.104 pruefen
     3000    0.099    0.000    0.099    0.000 ist_gesperrt
     3000    0.002    0.000    0.003    0.000 normalisieren
     3000    0.001    0.000    0.001    0.000 {method &#039;strip&#039; of &#039;str&#039; objects}</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/review?rev=1788945520&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:18:40+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L10 - Refactoring-Review - LU07.L10 - Refactoring-Review (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/review?rev=1788945520&amp;do=diff</link>
        <description>LU07.L10 - Refactoring-Review
 Paar  Urteil  Was passiert  1  Verhaltensänderung  namen.sort() gibt None zurück und sortiert die übergebene Liste an Ort und Stelle. Der Aufrufer bekommt None statt einer Liste - und seine Originalliste ist verändert</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/datenstruktur?rev=1788945471&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:17:51+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L09 - Datenstruktur begründet auswählen - LU07.L09 - Datenstruktur begründet auswählen (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/datenstruktur?rev=1788945471&amp;do=diff</link>
        <description>LU07.L09 - Datenstruktur begründet auswählen

Die drei Fassungen


def mit_liste(ausleihen, gesperrte):
    out = []
    for k in ausleihen:
        for konto, grund in gesperrte:
            if konto == k:
                out.append((k, grund))
                break
    return out


def mit_set(ausleihen, gesperrte):
    konten = {k for k, _ in gesperrte}
    gruende = dict(gesperrte)
    return [(k, gruende[k]) for k in ausleihen if k in konten]


def mit_dict(ausleihen, gesperrte):
    index …</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/performance?rev=1788945410&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:16:50+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L08 - Vorgegebene Massnahmen umsetzen - LU07.L08 - Vorgegebene Massnahmen umsetzen (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/performance?rev=1788945410&amp;do=diff</link>
        <description>LU07.L08 - Vorgegebene Massnahmen umsetzen

Ergebnisse

Gemessen mit min(timeit.repeat(..., number=1, repeat=5)) auf einem Notebook, Python 3.12. Ihre absoluten Zahlen werden abweichen - die Grössenordnung der Faktoren nicht.
 Massnahme  vorher  nachher</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/characterization?rev=1788945356&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:15:56+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L07 - Sicherheitsnetz zuerst - LU07.L07 - Sicherheitsnetz zuerst (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/characterization?rev=1788945356&amp;do=diff</link>
        <description>LU07.L07 - Sicherheitsnetz zuerst

Schritt 1: Verhalten erkunden


notenschnitt([18, 20, 16], 20)  -&gt;  5.5
notenschnitt([0, 0], 20)        -&gt;  1.0
notenschnitt([20, 20], 20)      -&gt;  6.0
notenschnitt([25], 20)          -&gt;  6.0     (Deckelung greift)
notenschnitt([10], 0)           -&gt;  1       (int, nicht float)
notenschnitt([13, 14], 20)      -&gt;  4.5
notenschnitt([], 20)            -&gt;  ZeroDivisionError</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/purerefactoring?rev=1788945317&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:15:17+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L06 - Unpure wird pure - LU07.L06 - Unpure wird pure (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/purerefactoring?rev=1788945317&amp;do=diff</link>
        <description>LU07.L06 - Unpure wird pure

Funktionaler Kern


def mit_einlagerung(bestand, artikel, menge):
    &quot;&quot;&quot;Neuer Bestand mit zusätzlicher Menge. Mutiert nichts.&quot;&quot;&quot;
    return {**bestand, artikel: bestand.get(artikel, 0) + menge}


def mit_entnahme(bestand, artikel, menge):
    &quot;&quot;&quot;(neuer Bestand, erfolgreich?) - bei zu wenig Bestand bleibt alles gleich.&quot;&quot;&quot;
    if bestand.get(artikel, 0) &lt; menge:
        return bestand, False
    return {**bestand, artikel: bestand[artikel] - menge}, True</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/pipeline?rev=1788945281&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:14:41+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L05 - Schleife zur Pipeline - LU07.L05 - Schleife zur Pipeline (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/pipeline?rev=1788945281&amp;do=diff</link>
        <description>LU07.L05 - Schleife zur Pipeline


# 1 umformen
namen = [e[&quot;name&quot;].capitalize() for e in eintraege]
# [&#039;Meier&#039;, &#039;Keller&#039;, &#039;Suter&#039;, &#039;Wyss&#039;]

# 2 filtern und umformen
gute = [e[&quot;name&quot;] for e in eintraege if e[&quot;aktiv&quot;] and e[&quot;punkte&quot;] &gt;= 50]
# [&#039;suter&#039;, &#039;wyss&#039;]

# 3 zusammenfassen
total = sum(e[&quot;punkte&quot;] for e in eintraege if e[&quot;aktiv&quot;])
# 185

# 4 dict aufbauen
punkte_nach_name = {e[&quot;name&quot;]: e[&quot;punkte&quot;] for e in eintraege}
# {&#039;meier&#039;: 42, &#039;keller&#039;: 17, &#039;suter&#039;: 88, &#039;wyss&#039;: 55}</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/einordnen?rev=1788945208&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:13:28+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L03 - Refactoring oder nicht? - LU07.L03 - Refactoring oder nicht? (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/einordnen?rev=1788945208&amp;do=diff</link>
        <description>LU07.L03 - Refactoring oder nicht?
 Nr.  Einordnung  Begründung  1  Refactoring  Verhalten identisch, nur der Name ändert. Mit dem Rename-Werkzeug der IDE risikoarm  2  Bugfix  Das Verhalten ändert sich absichtlich: Bestellungen über genau 100 bekommen neu Rabatt</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/steckbrief?rev=1788945175&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:12:55+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L02 - Technik-Steckbrief - LU07.L02 - Technik-Steckbrief (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/steckbrief?rev=1788945175&amp;do=diff</link>
        <description>LU07.L02 - Technik-Steckbrief

Es gibt keine einzig richtige Auswahl. Die beiden folgenden Steckbriefe zeigen den erwarteten Detaillierungsgrad.

Beispiel 1: Extract Function

	*  Auslöser: Lange Funktion mit Abschnittskommentaren
	*  Zweck: Der herausgelöste Teil bekommt einen Namen und wird einzeln testbar; die aufrufende Funktion liest sich wie eine Zusammenfassung</description>
    </item>
    <item rdf:about="https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/smelldetektiv?rev=1788945140&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-09-09T09:12:20+00:00</dc:date>
        <dc:creator>admin (admin@undisclosed.example.com)</dc:creator>
        <title>LU07.L01 - Smell-Detektiv - LU07.L01 - Smell-Detektiv (neu)</title>
        <link>https://wiki.bzz.ch/modul/m323/learningunits/lu07/loesungen/smelldetektiv?rev=1788945140&amp;do=diff</link>
        <description>LU07.L01 - Smell-Detektiv
 Nr.  Smell  Problem  Technik  1  Kryptische Namen, Kommentar-Bedarf; zusätzlich if ...: return True / return False  b[„a“] und b[„s“] sagen nichts, die Bedingung muss entschlüsselt werden  Rename, Extract Variable; die Bedingung direkt zurückgeben</description>
    </item>
</rdf:RDF>
