Aufgeraeumt: 33 PNG-Zweitfassungen, Bau-Ueberbleibsel, Ausgabepfade
Drei Aufraeumarbeiten - und zwei Funde, die dabei auffielen.
1. DIE PNG-ZWEITFASSUNGEN SIND WEG. Jedes Diagramm lag doppelt vor, als SVG
und als PNG, und kein einziges src=/href= in der Website zeigte je auf ein
PNG. Der Build kopierte sie trotzdem mit: 3,3 MB im Repository plus 3,3 MB,
die bei jeder Veroeffentlichung auf den Webserver gingen. Die 15 Generatoren
schreiben jetzt nur noch SVG, die Docstrings sind mitgezogen. Vor dem
Loeschen geprueft: Jedes PNG hatte sein gleichnamiges SVG, alle 33 waren
versioniert.
FUND 1: erzeuge_kap06_gantt.py folgte als einziger Generator nicht der
Konvention - weder svg.hashsalt noch metadata={"Date": None}. Sein SVG trug
einen echten Zeitstempel und bei jedem Lauf andere clip-path-IDs, war also
nie byteidentisch reproduzierbar, obwohl CLAUDE.md genau das fuer alle
Generatoren festhaelt. Aufgefallen nur, weil nach der PNG-Umstellung 32 von
33 SVGs bitgleich blieben und eines nicht. Jetzt byteidentisch ueber zwei
Laeufe.
FUND 2: spiegle_bilder() legte leere Verzeichnisse auf dem Webserver an. Der
Dateifilter arbeitete korrekt, aber os.walk durchlief auch __pycache__/, und
os.makedirs() erzeugte es am Ziel. Die Verzeichnisliste wird jetzt vorher
gefiltert. Gegengetestet.
2. BAU-UEBERBLEIBSEL entfernt (alle ignoriert und neu erzeugbar):
svg-inkscape/, build_v04.log, .pytest_cache/, Programme/output/, vier
__pycache__/ und die Excel-Mappen. Arbeitsbaum 36 -> 33 MB, danach null
ignorierte Ueberbleibsel.
3. Excel_Bruecke.py SCHREIBT NEBEN DAS SKRIPT statt ins
Arbeitsverzeichnis. Es benutzte blanke relative Namen; wer es aus der
Repository-Wurzel startete, verstreute dort produktionsmix.xlsx und
produktionsmix_ergebnis.xlsx. Jetzt wie die vier anderen schreibenden
Programme ueber os.path.dirname(os.path.abspath(__file__)). Nachgemessen:
Lauf aus der Wurzel legt dort null Dateien ab.
Ausserdem git gc: 653 lose Objekte gepackt, .git von 71 MB auf 28 MB -
reines Repacken, kein Inhalt beruehrt.
Geprueft: alle 33 im Buch referenzierten SVGs vorhanden, in Quelle und
Website; 16 Generatoren fehlerfrei; keine fehlenden Bilder im LaTeX-Lauf;
33 pytest-Tests; PDF unveraendert 760 Seiten.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
3e5c6fc627
commit
360912dbfa
97 changed files with 322 additions and 248 deletions
|
|
@ -4198,66 +4198,71 @@ Vorteil der Optimierung: 300.00 EUR pro Tag (15.0 %)
|
|||
<span id="cb13-34"><a href="#cb13-34" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> or_kern <span class="im">import</span> (lade_produktionsproblem, loese_mit_glop, pruefe_loesung,</span>
|
||||
<span id="cb13-35"><a href="#cb13-35" aria-hidden="true" tabindex="-1"></a> schreibe_ergebnis)</span>
|
||||
<span id="cb13-36"><a href="#cb13-36" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-37"><a href="#cb13-37" aria-hidden="true" tabindex="-1"></a>EINGABE <span class="op">=</span> <span class="st">"produktionsmix.xlsx"</span></span>
|
||||
<span id="cb13-38"><a href="#cb13-38" aria-hidden="true" tabindex="-1"></a>AUSGABE <span class="op">=</span> <span class="st">"produktionsmix_ergebnis.xlsx"</span></span>
|
||||
<span id="cb13-39"><a href="#cb13-39" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-40"><a href="#cb13-40" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-41"><a href="#cb13-41" aria-hidden="true" tabindex="-1"></a><span class="kw">def</span> lege_beispieldatei_an(pfad: <span class="bu">str</span>) <span class="op">-></span> <span class="va">None</span>:</span>
|
||||
<span id="cb13-42"><a href="#cb13-42" aria-hidden="true" tabindex="-1"></a> <span class="co">"""Schreibt die Eingabemappe, wie sie auch aus dem Controlling kaeme."""</span></span>
|
||||
<span id="cb13-43"><a href="#cb13-43" aria-hidden="true" tabindex="-1"></a> produkte <span class="op">=</span> pd.DataFrame({</span>
|
||||
<span id="cb13-44"><a href="#cb13-44" aria-hidden="true" tabindex="-1"></a> <span class="st">"Produkt"</span>: [<span class="st">"Tisch"</span>, <span class="st">"Stuhl"</span>, <span class="st">"Regal"</span>],</span>
|
||||
<span id="cb13-45"><a href="#cb13-45" aria-hidden="true" tabindex="-1"></a> <span class="st">"Deckungsbeitrag"</span>: [<span class="fl">240.0</span>, <span class="fl">60.0</span>, <span class="fl">130.0</span>],</span>
|
||||
<span id="cb13-46"><a href="#cb13-46" aria-hidden="true" tabindex="-1"></a> <span class="st">"Montagestunden"</span>: [<span class="fl">3.0</span>, <span class="fl">1.0</span>, <span class="fl">2.0</span>],</span>
|
||||
<span id="cb13-47"><a href="#cb13-47" aria-hidden="true" tabindex="-1"></a> <span class="st">"Plattenmaterial"</span>: [<span class="fl">6.0</span>, <span class="fl">1.0</span>, <span class="fl">4.0</span>],</span>
|
||||
<span id="cb13-48"><a href="#cb13-48" aria-hidden="true" tabindex="-1"></a> })</span>
|
||||
<span id="cb13-49"><a href="#cb13-49" aria-hidden="true" tabindex="-1"></a> kapazitaeten <span class="op">=</span> pd.DataFrame({</span>
|
||||
<span id="cb13-50"><a href="#cb13-50" aria-hidden="true" tabindex="-1"></a> <span class="st">"Ressource"</span>: [<span class="st">"Montagestunden"</span>, <span class="st">"Plattenmaterial"</span>],</span>
|
||||
<span id="cb13-51"><a href="#cb13-51" aria-hidden="true" tabindex="-1"></a> <span class="st">"Verfuegbar"</span>: [<span class="fl">150.0</span>, <span class="fl">240.0</span>],</span>
|
||||
<span id="cb13-52"><a href="#cb13-52" aria-hidden="true" tabindex="-1"></a> })</span>
|
||||
<span id="cb13-53"><a href="#cb13-53" aria-hidden="true" tabindex="-1"></a> <span class="cf">with</span> pd.ExcelWriter(pfad, engine<span class="op">=</span><span class="st">"openpyxl"</span>) <span class="im">as</span> mappe:</span>
|
||||
<span id="cb13-54"><a href="#cb13-54" aria-hidden="true" tabindex="-1"></a> produkte.to_excel(mappe, sheet_name<span class="op">=</span><span class="st">"Produkte"</span>, index<span class="op">=</span><span class="va">False</span>)</span>
|
||||
<span id="cb13-55"><a href="#cb13-55" aria-hidden="true" tabindex="-1"></a> kapazitaeten.to_excel(mappe, sheet_name<span class="op">=</span><span class="st">"Kapazitaeten"</span>, index<span class="op">=</span><span class="va">False</span>)</span>
|
||||
<span id="cb13-56"><a href="#cb13-56" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-57"><a href="#cb13-57" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-58"><a href="#cb13-58" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="va">__name__</span> <span class="op">==</span> <span class="st">"__main__"</span>:</span>
|
||||
<span id="cb13-59"><a href="#cb13-59" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="kw">not</span> os.path.exists(EINGABE):</span>
|
||||
<span id="cb13-60"><a href="#cb13-60" aria-hidden="true" tabindex="-1"></a> lege_beispieldatei_an(EINGABE)</span>
|
||||
<span id="cb13-61"><a href="#cb13-61" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f"Beispiel-Eingabedatei angelegt: </span><span class="sc">{</span>EINGABE<span class="sc">}</span><span class="ss">"</span>)</span>
|
||||
<span id="cb13-37"><a href="#cb13-37" aria-hidden="true" tabindex="-1"></a><span class="co"># Die Mappen liegen NEBEN diesem Programm, nicht im aktuellen</span></span>
|
||||
<span id="cb13-38"><a href="#cb13-38" aria-hidden="true" tabindex="-1"></a><span class="co"># Arbeitsverzeichnis. Sonst haengt es davon ab, aus welchem Ordner man das</span></span>
|
||||
<span id="cb13-39"><a href="#cb13-39" aria-hidden="true" tabindex="-1"></a><span class="co"># Skript startet, wo die Dateien landen - und wer es aus der</span></span>
|
||||
<span id="cb13-40"><a href="#cb13-40" aria-hidden="true" tabindex="-1"></a><span class="co"># Repository-Wurzel aufruft, verstreut sie dort.</span></span>
|
||||
<span id="cb13-41"><a href="#cb13-41" aria-hidden="true" tabindex="-1"></a>HIER <span class="op">=</span> os.path.dirname(os.path.abspath(<span class="va">__file__</span>))</span>
|
||||
<span id="cb13-42"><a href="#cb13-42" aria-hidden="true" tabindex="-1"></a>EINGABE <span class="op">=</span> os.path.join(HIER, <span class="st">"produktionsmix.xlsx"</span>)</span>
|
||||
<span id="cb13-43"><a href="#cb13-43" aria-hidden="true" tabindex="-1"></a>AUSGABE <span class="op">=</span> os.path.join(HIER, <span class="st">"produktionsmix_ergebnis.xlsx"</span>)</span>
|
||||
<span id="cb13-44"><a href="#cb13-44" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-45"><a href="#cb13-45" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-46"><a href="#cb13-46" aria-hidden="true" tabindex="-1"></a><span class="kw">def</span> lege_beispieldatei_an(pfad: <span class="bu">str</span>) <span class="op">-></span> <span class="va">None</span>:</span>
|
||||
<span id="cb13-47"><a href="#cb13-47" aria-hidden="true" tabindex="-1"></a> <span class="co">"""Schreibt die Eingabemappe, wie sie auch aus dem Controlling kaeme."""</span></span>
|
||||
<span id="cb13-48"><a href="#cb13-48" aria-hidden="true" tabindex="-1"></a> produkte <span class="op">=</span> pd.DataFrame({</span>
|
||||
<span id="cb13-49"><a href="#cb13-49" aria-hidden="true" tabindex="-1"></a> <span class="st">"Produkt"</span>: [<span class="st">"Tisch"</span>, <span class="st">"Stuhl"</span>, <span class="st">"Regal"</span>],</span>
|
||||
<span id="cb13-50"><a href="#cb13-50" aria-hidden="true" tabindex="-1"></a> <span class="st">"Deckungsbeitrag"</span>: [<span class="fl">240.0</span>, <span class="fl">60.0</span>, <span class="fl">130.0</span>],</span>
|
||||
<span id="cb13-51"><a href="#cb13-51" aria-hidden="true" tabindex="-1"></a> <span class="st">"Montagestunden"</span>: [<span class="fl">3.0</span>, <span class="fl">1.0</span>, <span class="fl">2.0</span>],</span>
|
||||
<span id="cb13-52"><a href="#cb13-52" aria-hidden="true" tabindex="-1"></a> <span class="st">"Plattenmaterial"</span>: [<span class="fl">6.0</span>, <span class="fl">1.0</span>, <span class="fl">4.0</span>],</span>
|
||||
<span id="cb13-53"><a href="#cb13-53" aria-hidden="true" tabindex="-1"></a> })</span>
|
||||
<span id="cb13-54"><a href="#cb13-54" aria-hidden="true" tabindex="-1"></a> kapazitaeten <span class="op">=</span> pd.DataFrame({</span>
|
||||
<span id="cb13-55"><a href="#cb13-55" aria-hidden="true" tabindex="-1"></a> <span class="st">"Ressource"</span>: [<span class="st">"Montagestunden"</span>, <span class="st">"Plattenmaterial"</span>],</span>
|
||||
<span id="cb13-56"><a href="#cb13-56" aria-hidden="true" tabindex="-1"></a> <span class="st">"Verfuegbar"</span>: [<span class="fl">150.0</span>, <span class="fl">240.0</span>],</span>
|
||||
<span id="cb13-57"><a href="#cb13-57" aria-hidden="true" tabindex="-1"></a> })</span>
|
||||
<span id="cb13-58"><a href="#cb13-58" aria-hidden="true" tabindex="-1"></a> <span class="cf">with</span> pd.ExcelWriter(pfad, engine<span class="op">=</span><span class="st">"openpyxl"</span>) <span class="im">as</span> mappe:</span>
|
||||
<span id="cb13-59"><a href="#cb13-59" aria-hidden="true" tabindex="-1"></a> produkte.to_excel(mappe, sheet_name<span class="op">=</span><span class="st">"Produkte"</span>, index<span class="op">=</span><span class="va">False</span>)</span>
|
||||
<span id="cb13-60"><a href="#cb13-60" aria-hidden="true" tabindex="-1"></a> kapazitaeten.to_excel(mappe, sheet_name<span class="op">=</span><span class="st">"Kapazitaeten"</span>, index<span class="op">=</span><span class="va">False</span>)</span>
|
||||
<span id="cb13-61"><a href="#cb13-61" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-62"><a href="#cb13-62" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-63"><a href="#cb13-63" aria-hidden="true" tabindex="-1"></a> <span class="co"># 1. Lesen und pruefen. Faellt hier etwas auf, ist der Fehler noch</span></span>
|
||||
<span id="cb13-64"><a href="#cb13-64" aria-hidden="true" tabindex="-1"></a> <span class="co"># zuzuordnen - spaeter waere er nur noch eine merkwuerdige Zahl.</span></span>
|
||||
<span id="cb13-65"><a href="#cb13-65" aria-hidden="true" tabindex="-1"></a> problem <span class="op">=</span> lade_produktionsproblem(EINGABE)</span>
|
||||
<span id="cb13-66"><a href="#cb13-66" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-67"><a href="#cb13-67" aria-hidden="true" tabindex="-1"></a> <span class="co"># 2. Loesen. Einzige solverabhaengige Zeile des ganzen Programms -</span></span>
|
||||
<span id="cb13-68"><a href="#cb13-68" aria-hidden="true" tabindex="-1"></a> <span class="co"># 'loese_mit_scipy' waere ein Einzeiler-Wechsel.</span></span>
|
||||
<span id="cb13-69"><a href="#cb13-69" aria-hidden="true" tabindex="-1"></a> loesung <span class="op">=</span> loese_mit_glop(problem)</span>
|
||||
<span id="cb13-70"><a href="#cb13-70" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-71"><a href="#cb13-71" aria-hidden="true" tabindex="-1"></a> <span class="co"># 3. Abnahmepruefung gegen die Anforderungen, ohne den Solver zu fragen.</span></span>
|
||||
<span id="cb13-72"><a href="#cb13-72" aria-hidden="true" tabindex="-1"></a> beanstandungen <span class="op">=</span> pruefe_loesung(problem, loesung)</span>
|
||||
<span id="cb13-73"><a href="#cb13-73" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> beanstandungen:</span>
|
||||
<span id="cb13-74"><a href="#cb13-74" aria-hidden="true" tabindex="-1"></a> <span class="cf">raise</span> <span class="pp">SystemExit</span>(<span class="st">"Abnahmepruefung fehlgeschlagen:</span><span class="ch">\n</span><span class="st"> - "</span></span>
|
||||
<span id="cb13-75"><a href="#cb13-75" aria-hidden="true" tabindex="-1"></a> <span class="op">+</span> <span class="st">"</span><span class="ch">\n</span><span class="st"> - "</span>.join(beanstandungen))</span>
|
||||
<span id="cb13-76"><a href="#cb13-76" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-77"><a href="#cb13-77" aria-hidden="true" tabindex="-1"></a> <span class="co"># 4. Zurueckschreiben - im Format, das die Fachabteilung ohnehin benutzt.</span></span>
|
||||
<span id="cb13-78"><a href="#cb13-78" aria-hidden="true" tabindex="-1"></a> schreibe_ergebnis(AUSGABE, problem, loesung)</span>
|
||||
<span id="cb13-79"><a href="#cb13-79" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-80"><a href="#cb13-80" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"="</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-81"><a href="#cb13-81" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">" PRODUKTIONSPLAN AUS DER EXCEL-MAPPE"</span>)</span>
|
||||
<span id="cb13-82"><a href="#cb13-82" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"="</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-83"><a href="#cb13-83" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> produkt <span class="kw">in</span> problem.produkte:</span>
|
||||
<span id="cb13-84"><a href="#cb13-84" aria-hidden="true" tabindex="-1"></a> menge <span class="op">=</span> loesung.werte[produkt.name]</span>
|
||||
<span id="cb13-85"><a href="#cb13-85" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f"</span><span class="sc">{</span>produkt<span class="sc">.</span>name<span class="sc">:<18}</span><span class="ss"> </span><span class="sc">{</span>menge<span class="sc">:8.1f}</span><span class="ss"> Stueck "</span></span>
|
||||
<span id="cb13-86"><a href="#cb13-86" aria-hidden="true" tabindex="-1"></a> <span class="ss">f"</span><span class="sc">{</span>menge <span class="op">*</span> produkt<span class="sc">.</span>deckungsbeitrag<span class="sc">:12,.2f}</span><span class="ss"> EUR"</span>)</span>
|
||||
<span id="cb13-87"><a href="#cb13-87" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"-"</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-88"><a href="#cb13-88" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(loesung.als_bericht())</span>
|
||||
<span id="cb13-89"><a href="#cb13-89" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"Abnahmepruefung: bestanden</span><span class="ch">\n</span><span class="st">"</span>)</span>
|
||||
<span id="cb13-90"><a href="#cb13-90" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-91"><a href="#cb13-91" aria-hidden="true" tabindex="-1"></a> <span class="co"># Die Schattenpreise beantworten die Frage, die der Plan nicht stellt:</span></span>
|
||||
<span id="cb13-92"><a href="#cb13-92" aria-hidden="true" tabindex="-1"></a> <span class="co"># Was waere eine zusaetzliche Einheit dieser Ressource wert?</span></span>
|
||||
<span id="cb13-93"><a href="#cb13-93" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> ressource, preis <span class="kw">in</span> loesung.schattenpreise.items():</span>
|
||||
<span id="cb13-94"><a href="#cb13-94" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f" eine Einheit </span><span class="sc">{</span>ressource<span class="sc">:<18}</span><span class="ss"> mehr waere wert: </span><span class="sc">{</span>preis<span class="sc">:7.2f}</span><span class="ss"> EUR"</span>)</span>
|
||||
<span id="cb13-95"><a href="#cb13-95" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"="</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-96"><a href="#cb13-96" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f"Ergebnis geschrieben nach: </span><span class="sc">{</span>AUSGABE<span class="sc">}</span><span class="ss">"</span>)</span></code></pre></div>
|
||||
<span id="cb13-63"><a href="#cb13-63" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="va">__name__</span> <span class="op">==</span> <span class="st">"__main__"</span>:</span>
|
||||
<span id="cb13-64"><a href="#cb13-64" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="kw">not</span> os.path.exists(EINGABE):</span>
|
||||
<span id="cb13-65"><a href="#cb13-65" aria-hidden="true" tabindex="-1"></a> lege_beispieldatei_an(EINGABE)</span>
|
||||
<span id="cb13-66"><a href="#cb13-66" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f"Beispiel-Eingabedatei angelegt: </span><span class="sc">{</span>EINGABE<span class="sc">}</span><span class="ss">"</span>)</span>
|
||||
<span id="cb13-67"><a href="#cb13-67" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-68"><a href="#cb13-68" aria-hidden="true" tabindex="-1"></a> <span class="co"># 1. Lesen und pruefen. Faellt hier etwas auf, ist der Fehler noch</span></span>
|
||||
<span id="cb13-69"><a href="#cb13-69" aria-hidden="true" tabindex="-1"></a> <span class="co"># zuzuordnen - spaeter waere er nur noch eine merkwuerdige Zahl.</span></span>
|
||||
<span id="cb13-70"><a href="#cb13-70" aria-hidden="true" tabindex="-1"></a> problem <span class="op">=</span> lade_produktionsproblem(EINGABE)</span>
|
||||
<span id="cb13-71"><a href="#cb13-71" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-72"><a href="#cb13-72" aria-hidden="true" tabindex="-1"></a> <span class="co"># 2. Loesen. Einzige solverabhaengige Zeile des ganzen Programms -</span></span>
|
||||
<span id="cb13-73"><a href="#cb13-73" aria-hidden="true" tabindex="-1"></a> <span class="co"># 'loese_mit_scipy' waere ein Einzeiler-Wechsel.</span></span>
|
||||
<span id="cb13-74"><a href="#cb13-74" aria-hidden="true" tabindex="-1"></a> loesung <span class="op">=</span> loese_mit_glop(problem)</span>
|
||||
<span id="cb13-75"><a href="#cb13-75" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-76"><a href="#cb13-76" aria-hidden="true" tabindex="-1"></a> <span class="co"># 3. Abnahmepruefung gegen die Anforderungen, ohne den Solver zu fragen.</span></span>
|
||||
<span id="cb13-77"><a href="#cb13-77" aria-hidden="true" tabindex="-1"></a> beanstandungen <span class="op">=</span> pruefe_loesung(problem, loesung)</span>
|
||||
<span id="cb13-78"><a href="#cb13-78" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> beanstandungen:</span>
|
||||
<span id="cb13-79"><a href="#cb13-79" aria-hidden="true" tabindex="-1"></a> <span class="cf">raise</span> <span class="pp">SystemExit</span>(<span class="st">"Abnahmepruefung fehlgeschlagen:</span><span class="ch">\n</span><span class="st"> - "</span></span>
|
||||
<span id="cb13-80"><a href="#cb13-80" aria-hidden="true" tabindex="-1"></a> <span class="op">+</span> <span class="st">"</span><span class="ch">\n</span><span class="st"> - "</span>.join(beanstandungen))</span>
|
||||
<span id="cb13-81"><a href="#cb13-81" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-82"><a href="#cb13-82" aria-hidden="true" tabindex="-1"></a> <span class="co"># 4. Zurueckschreiben - im Format, das die Fachabteilung ohnehin benutzt.</span></span>
|
||||
<span id="cb13-83"><a href="#cb13-83" aria-hidden="true" tabindex="-1"></a> schreibe_ergebnis(AUSGABE, problem, loesung)</span>
|
||||
<span id="cb13-84"><a href="#cb13-84" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-85"><a href="#cb13-85" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"="</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-86"><a href="#cb13-86" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">" PRODUKTIONSPLAN AUS DER EXCEL-MAPPE"</span>)</span>
|
||||
<span id="cb13-87"><a href="#cb13-87" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"="</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-88"><a href="#cb13-88" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> produkt <span class="kw">in</span> problem.produkte:</span>
|
||||
<span id="cb13-89"><a href="#cb13-89" aria-hidden="true" tabindex="-1"></a> menge <span class="op">=</span> loesung.werte[produkt.name]</span>
|
||||
<span id="cb13-90"><a href="#cb13-90" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f"</span><span class="sc">{</span>produkt<span class="sc">.</span>name<span class="sc">:<18}</span><span class="ss"> </span><span class="sc">{</span>menge<span class="sc">:8.1f}</span><span class="ss"> Stueck "</span></span>
|
||||
<span id="cb13-91"><a href="#cb13-91" aria-hidden="true" tabindex="-1"></a> <span class="ss">f"</span><span class="sc">{</span>menge <span class="op">*</span> produkt<span class="sc">.</span>deckungsbeitrag<span class="sc">:12,.2f}</span><span class="ss"> EUR"</span>)</span>
|
||||
<span id="cb13-92"><a href="#cb13-92" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"-"</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-93"><a href="#cb13-93" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(loesung.als_bericht())</span>
|
||||
<span id="cb13-94"><a href="#cb13-94" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"Abnahmepruefung: bestanden</span><span class="ch">\n</span><span class="st">"</span>)</span>
|
||||
<span id="cb13-95"><a href="#cb13-95" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb13-96"><a href="#cb13-96" aria-hidden="true" tabindex="-1"></a> <span class="co"># Die Schattenpreise beantworten die Frage, die der Plan nicht stellt:</span></span>
|
||||
<span id="cb13-97"><a href="#cb13-97" aria-hidden="true" tabindex="-1"></a> <span class="co"># Was waere eine zusaetzliche Einheit dieser Ressource wert?</span></span>
|
||||
<span id="cb13-98"><a href="#cb13-98" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> ressource, preis <span class="kw">in</span> loesung.schattenpreise.items():</span>
|
||||
<span id="cb13-99"><a href="#cb13-99" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f" eine Einheit </span><span class="sc">{</span>ressource<span class="sc">:<18}</span><span class="ss"> mehr waere wert: </span><span class="sc">{</span>preis<span class="sc">:7.2f}</span><span class="ss"> EUR"</span>)</span>
|
||||
<span id="cb13-100"><a href="#cb13-100" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"="</span> <span class="op">*</span> <span class="dv">66</span>)</span>
|
||||
<span id="cb13-101"><a href="#cb13-101" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="ss">f"Ergebnis geschrieben nach: </span><span class="sc">{</span>AUSGABE<span class="sc">}</span><span class="ss">"</span>)</span></code></pre></div>
|
||||
<p><strong>Erwartete Ausgabe:</strong></p>
|
||||
<pre><code>Beispiel-Eingabedatei angelegt: produktionsmix.xlsx
|
||||
==================================================================
|
||||
|
|
|
|||
Loading…
Reference in a new issue