{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "55850e69",
   "metadata": {},
   "source": [
    "<div style=\"float: right;\"><img src=\"https://datascience.hs-bochum.de/images/hs-bo_logo.svg\" style=\"height:40px;\"></div>\n",
    "<div style=\"clear: both;\"></div>\n",
    "<div style='text-align: center; margin-top: 40px; margin-bottom:40px;'>\n",
    "<h1>Lernwerkstatt Wirtschaftsinformatik</h1>\n",
    "<h2>Übung 4</h2>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1329a795",
   "metadata": {},
   "source": [
    "In diesem Notebook arbeiten Sie mit **Listen**, **Tupeln** und der **`for`-Schleife**: Daten\n",
    "sammeln, nacheinander durchlaufen und dabei summieren, zählen, filtern und den besten Wert\n",
    "finden — das Grundgerüst jeder Datenauswertung.\n",
    "\n",
    "Wie gewohnt: Zellen **von oben nach unten** mit **`Shift`+`Enter`** ausführen. Los geht es mit\n",
    "einer kurzen Wiederholung."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "82d63814",
   "metadata": {},
   "source": [
    "## Wiederholung — Notebook bedienen\n",
    "\n",
    "Führen Sie zum Warmwerden die Zelle aus. Sie erinnert an Funktionen und `if`/`else` aus den\n",
    "letzten Übungen:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a66770fd",
   "metadata": {},
   "outputs": [],
   "source": [
    "def versandkosten(bestellwert, grenze=50):\n",
    "    if bestellwert >= grenze:\n",
    "        return 0.0\n",
    "    else:\n",
    "        return 4.95\n",
    "\n",
    "print(versandkosten(42))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f4f4660",
   "metadata": {},
   "source": [
    "## Teil 1 — Eine Liste mit `for` durchlaufen\n",
    "\n",
    "Die Tagesabsätze (in Paletten) einer Woche stehen in einer **Liste**. Die `for`-Schleife nimmt\n",
    "*jeden* Wert nacheinander — und wir zählen mit. Achten Sie auf die drei Schritte: Startwert\n",
    "**vor** der Schleife, Aktualisieren **in** der Schleife, Ausgabe **nach** der Schleife."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2a1e69ab",
   "metadata": {},
   "outputs": [],
   "source": [
    "absatz = [12, 8, 15, 9, 11]\n",
    "\n",
    "summe = 0\n",
    "for menge in absatz:\n",
    "    summe = summe + menge\n",
    "\n",
    "print(summe)\n",
    "print(summe / len(absatz))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87b83401",
   "metadata": {},
   "source": [
    "**Zum Ausprobieren:**\n",
    "\n",
    "**(a)** Zählen Sie, an wie vielen Tagen *mehr als 10* Paletten verkauft wurden.<br>\n",
    "**(b)** Hängen Sie mit `append` einen Samstag mit 17 Paletten an. Wie lautet der neue\n",
    "Durchschnitt?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b4e5f201",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Ihr Code:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "debbe967",
   "metadata": {},
   "source": [
    "## Aufgabe 1 — Rechnung aus Positionen\n",
    "\n",
    "Eine Rechnung besteht aus **Positionen**. Jede Position ist ein **Tupel**\n",
    "`(bezeichnung, menge, einzelpreis)` — alle Positionen stehen in einer Liste. Im Schleifenkopf\n",
    "wird jedes Tupel direkt in drei Variablen **ausgepackt**.\n",
    "\n",
    "Ergänzen Sie den Schleifenrumpf: Jede Position soll mit ihrem Betrag ausgegeben werden, am Ende\n",
    "der Rechnungsbetrag."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b256cb23",
   "metadata": {},
   "outputs": [],
   "source": [
    "positionen = [(\"Palette rot\",   3, 80),\n",
    "              (\"Palette weiss\", 2, 85),\n",
    "              (\"Fracht\",        1, 49)]\n",
    "\n",
    "summe = 0\n",
    "for (bezeichnung, menge, einzelpreis) in positionen:\n",
    "    # Ergaenzen Sie: Positionsbetrag berechnen, mit\n",
    "    # bezeichnung ausgeben und zur summe addieren\n",
    "\n",
    "\n",
    "print(\"Rechnungsbetrag:\", summe)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aaf55df2",
   "metadata": {},
   "source": [
    "## Aufgabe 2 — Monatsumsätze auswerten\n",
    "\n",
    "Das Monatsziel liegt bei **45000 €**. Werten Sie das erste Halbjahr mit **einer** Schleife aus:\n",
    "\n",
    "**a)** Gesamtumsatz und durchschnittlicher Monatsumsatz<br>\n",
    "**b)** In wie vielen Monaten wurde das Ziel **erreicht** (mindestens 45000 €)?<br>\n",
    "**c)** Welcher Monat war der **beste**? Ausgabe: Monat und Umsatz\n",
    "\n",
    "**Tipp zu c):** Merken Sie sich den bisher besten Monat in einer Variablen — und starten Sie mit\n",
    "dem ersten Monat `umsaetze[0]`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "202f363d",
   "metadata": {},
   "outputs": [],
   "source": [
    "umsaetze = [(\"Jan\", 42000), (\"Feb\", 38500), (\"Mrz\", 51000),\n",
    "            (\"Apr\", 47500), (\"Mai\", 36000), (\"Jun\", 55000)]\n",
    "\n",
    "gesamt = 0\n",
    "anzahl_ziel = 0\n",
    "bester = umsaetze[0]\n",
    "\n",
    "for (monat, umsatz) in umsaetze:\n",
    "    # a) gesamt erhoehen\n",
    "    # b) zaehlen, wenn das Ziel erreicht ist\n",
    "    # c) bester ersetzen, wenn umsatz groesser ist als bester[1]\n",
    "\n",
    "\n",
    "# Ergebnisse ausgeben:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c6ff2237",
   "metadata": {},
   "source": [
    "## Aufgabe 3 — Vorsicht: Tupel kann man nicht ändern\n",
    "\n",
    "Die Preise sollen um **5 %** steigen. Jemand versucht, die Preise direkt in den Tupeln zu\n",
    "ändern. Führen Sie die Zelle aus — sie schlägt **mit Absicht** fehl. Lesen Sie die\n",
    "**letzte Zeile** der Fehlermeldung."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "65d569d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "preisliste = [(\"rot\", 80), (\"weiss\", 85), (\"schwarz\", 85)]\n",
    "\n",
    "for eintrag in preisliste:\n",
    "    eintrag[1] = eintrag[1] + eintrag[1] * 0.05\n",
    "\n",
    "print(preisliste)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5089681a",
   "metadata": {},
   "source": [
    "Oben steht ein `TypeError`: *'tuple' object does not support item assignment*. Übersetzt:\n",
    "Ein Tupel ist **nur lesbar** — man kann `eintrag[1]` lesen, aber nicht ersetzen.\n",
    "\n",
    "**Ihre Aufgabe:** Bauen Sie stattdessen eine **neue** Liste `neue_preise` mit `append` auf, die\n",
    "die erhöhten Preise als **neue Tupel** `(farbe, neuer_preis)` enthält."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e9df4681",
   "metadata": {},
   "outputs": [],
   "source": [
    "preisliste = [(\"rot\", 80), (\"weiss\", 85), (\"schwarz\", 85)]\n",
    "\n",
    "neue_preise = []\n",
    "# for ... in preisliste:\n",
    "#     neue_preise.append( ... )\n",
    "\n",
    "print(neue_preise)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7609ec2",
   "metadata": {},
   "source": [
    "## Aufgabe 4 — Nachbestellen *(selbst schreiben)*\n",
    "\n",
    "Schreiben Sie eine Funktion `nachbestellen(lager, mindestbestand)`, die eine **Liste** aller\n",
    "Artikel zurückgibt, deren Bestand *unter* dem Mindestbestand liegt. Testen Sie mit\n",
    "Mindestbestand **20**. (Kein Gerüst mehr — schreiben Sie selbst.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e2be0c70",
   "metadata": {},
   "outputs": [],
   "source": [
    "lager = [(\"Granulat\", 120), (\"Farbe rot\", 15), (\"Kartons\", 40), (\"Etiketten\", 8)]\n",
    "\n",
    "# Aufgabe 4:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c39477d",
   "metadata": {},
   "source": [
    "## Aufgabe 5 — Kunden einstufen *(selbst schreiben)*\n",
    "\n",
    "Schreiben Sie eine Funktion `abc_analyse(umsaetze)`: Kunden ab **10000 €** sind A-Kunden,\n",
    "ab **2000 €** B-Kunden, sonst C-Kunden. Die Funktion gibt die **Anzahl** je Klasse als\n",
    "**Tupel** `(a, b, c)` zurück."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "10d3feff",
   "metadata": {},
   "outputs": [],
   "source": [
    "kunden = [18500, 3200, 950, 12000, 4700, 1500, 2000, 700]\n",
    "\n",
    "# Aufgabe 5:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04d603ac",
   "metadata": {},
   "source": [
    "## Aufgabe 6 — Für Wirtschaftsingenieur:innen: Qualitätsprüfung\n",
    "\n",
    "Eine Welle soll **50,0 mm** Durchmesser haben, erlaubt sind **±0,2 mm**. Teile außerhalb der\n",
    "Toleranz sind Ausschuss und kosten je **12 €**.\n",
    "\n",
    "Schreiben Sie `pruefung(messungen, soll=50.0, toleranz=0.2)`, die das Tupel\n",
    "`(anzahl_ausschuss, quote_in_prozent)` zurückgibt. Was kostet der Ausschuss insgesamt?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b285b5eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "messungen = [50.1, 49.7, 50.0, 50.3, 49.9, 50.2, 49.8, 50.05]\n",
    "\n",
    "# Aufgabe 6:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f71db76e",
   "metadata": {},
   "source": [
    "## Geschafft! 🎉\n",
    "\n",
    "Sie haben Daten in **Listen** und **Tupeln** gespeichert, mit `for` durchlaufen und dabei\n",
    "**summiert**, **gezählt**, **gefiltert** und den **besten Wert** gefunden — und erlebt, dass\n",
    "Tupel nur lesbar sind. Diese Muster brauchen Sie bei jeder Datenauswertung wieder."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
