{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Kontrollstrukturen und Vergleichsoperatoren"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Verzweigung (Branching)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hmm, ob das so stimmt?\n"
     ]
    }
   ],
   "source": [
    "# if / else / elif\n",
    "\n",
    "alter = -1\n",
    "\n",
    "if alter >= 16:\n",
    "    print(\"Nicht vergessen: am 9.6.2024 ist Europa-Wahl!\")\n",
    "elif alter > 0:\n",
    "    print(\"Schön, dass du geboren bist!\")\n",
    "else:\n",
    "    print(\"Hmm, ob das so stimmt?\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nach Süden, nach Süden!\n"
     ]
    }
   ],
   "source": [
    "richtung = \"s\"\n",
    "\n",
    "if richtung == \"n\":\n",
    "    print(\"Auf in den hohen Norden!\")\n",
    "elif richtung == \"s\":\n",
    "    print(\"Nach Süden, nach Süden!\")\n",
    "elif richtung == \"w\":\n",
    "    print(\"Go west!\")\n",
    "elif richtung == \"o\":\n",
    "    print(\"Bin schon da.\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Auf in den hohen Norden!\n"
     ]
    }
   ],
   "source": [
    "# match\n",
    "\n",
    "# richtung = input(\"Wo soll's denn lang gehen? \")\n",
    "richtung = \"n\"\n",
    "\n",
    "match richtung:\n",
    "    case \"n\" | \"norden\":\n",
    "        print(\"Auf in den hohen Norden!\")\n",
    "    case \"s\" | \"süden\":\n",
    "        print(\"Nach Süden, nach Süden!\")\n",
    "    case \"w\" | \"westen\":\n",
    "        print(\"Go west!\")\n",
    "    case \"o\" | \"osten\":\n",
    "        print(\"Bin schon da.\")\n",
    "    case _:\n",
    "        print(\"Das Glück liegt manchmal abseits des direkten Wegs!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Schleifen"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Schleifendurchlauf Nr.  0\n",
      "Schleifendurchlauf Nr.  1\n",
      "Schleifendurchlauf Nr.  2\n",
      "Schleifendurchlauf Nr.  3\n",
      "Schleifendurchlauf Nr.  4\n"
     ]
    }
   ],
   "source": [
    "# for\n",
    "\n",
    "for i in range(5):\n",
    "    print(\"Schleifendurchlauf Nr. \", i)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Summe der Zahlen 1-10: 55\n"
     ]
    }
   ],
   "source": [
    "result = 0\n",
    "for i in range(1, 11):\n",
    "    result += i\n",
    "print(\"Summe der Zahlen 1-10:\", result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9 passt nicht in die Reihe\n"
     ]
    }
   ],
   "source": [
    "for i in (2, 4, 6, 8, 9, 10):\n",
    "    if i % 2:\n",
    "        print(i, \"passt nicht in die Reihe\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10 ... 9 ... 8 ... 7 ... 6 ... 5 ... 4 ... 3 ... 2 ... 1 ... Lift off!\n"
     ]
    }
   ],
   "source": [
    "# while\n",
    "\n",
    "i = 10\n",
    "while i > 0:  # or: while True:\n",
    "    print(i, \"... \", end=\"\")\n",
    "    i -= 1\n",
    "print(\"Lift off!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10\n",
      "11\n",
      "12\n",
      "14\n",
      "15\n",
      "16\n",
      "17\n",
      "18\n",
      "19\n"
     ]
    }
   ],
   "source": [
    "# continue\n",
    "\n",
    "for i in range(10, 20):\n",
    "    if i == 13:\n",
    "        continue\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration:  142\n"
     ]
    }
   ],
   "source": [
    "# break\n",
    "\n",
    "i = 0\n",
    "result = 0\n",
    "maximum = 10_000\n",
    "\n",
    "while True:\n",
    "    result += i\n",
    "\n",
    "    if result >= maximum:\n",
    "        print(\"Iteration: \", i+1)\n",
    "        break\n",
    "\n",
    "    i += 1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "q ist Buchstabe Nr. 17 des dt. Alphabets.\n"
     ]
    }
   ],
   "source": [
    "alphabet = \"abcdefghifklmnopqrstuvwxyz\"\n",
    "buchstabe = \"q\"\n",
    "i = 0\n",
    "for char in alphabet:\n",
    "    i += 1\n",
    "    if char == buchstabe:\n",
    "        print(buchstabe, \"ist Buchstabe Nr.\", i, \"des dt. Alphabets.\")\n",
    "        break\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "q ist Buchstabe Nr. 17 des dt. Alphabets.\n"
     ]
    }
   ],
   "source": [
    "# einfacher:\n",
    "\n",
    "for i, char in enumerate(alphabet):\n",
    "    if char == buchstabe:\n",
    "        print(buchstabe, \"ist Buchstabe Nr.\", i + 1, \"des dt. Alphabets.\")\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Funktionen"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "256 256 100\n"
     ]
    }
   ],
   "source": [
    "# Aufruf eingebauter Funktionen\n",
    "\n",
    "x = pow(2, 8)\n",
    "y = max(x, 100)\n",
    "z = min(max(0, x), 100)\n",
    "print(x, y, z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# optionale Parameter\n",
    "\n",
    "print()\n",
    "print(\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n"
     ]
    }
   ],
   "source": [
    "# eigene Funktionen\n",
    "\n",
    "def add(a, b):\n",
    "    return a + b\n",
    "\n",
    "print(add(2, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15\n",
      "24\n"
     ]
    }
   ],
   "source": [
    "# Keyword arguments\n",
    "\n",
    "print(add(a=5, b=10))\n",
    "print(add(4, b=20))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "positional argument follows keyword argument (1525390589.py, line 2)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  Cell \u001b[0;32mIn[32], line 2\u001b[0;36m\u001b[0m\n\u001b[0;31m    print(add(a=6, 10))\u001b[0m\n\u001b[0m                     ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m positional argument follows keyword argument\n"
     ]
    }
   ],
   "source": [
    "# Das geht nicht:\n",
    "print(add(a=6, 10))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Vergleichsausdrücke"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "False\n",
      "True\n",
      "False\n",
      "True\n",
      "True\n",
      "False\n",
      "True\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "a = 10\n",
    "b = 50\n",
    "c = 2\n",
    "d = 5 * a\n",
    "\n",
    "print(a == b)\n",
    "print(a != d)\n",
    "print(a > b)\n",
    "print(a > c)\n",
    "print(a >= c)\n",
    "print(c > a)\n",
    "print(c < b)\n",
    "print(c >= 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "True\n",
      "True\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "# Negation\n",
    "\n",
    "print(not c > a)\n",
    "print(not a == b)   # klarer: a != b\n",
    "print(not b != d)   # klarer: b == d\n",
    "print(not a > c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "True\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "# logische Kombination\n",
    "\n",
    "print(b > a and a > c)\n",
    "print(a > b or a > c)\n",
    "print(not a < c and b >= d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "True\n",
      "True\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "# Bool'scher (True/False) Wert von Integers, Floats und Strings  \n",
    "print(a > c)\n",
    "print(bool(a > c))  ## redundant, da Vergleichsausdrücke immer einen bool'schen Wert haben\n",
    "# Aber:\n",
    "print(bool(a))\n",
    "print(not a)  # auch ein bool'scher Ausdruck"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "False\n",
      "True\n",
      "True\n",
      "False\n",
      "True\n",
      "True\n",
      "True\n",
      "True\n",
      "False\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "print(bool(0))\n",
    "print(bool(1))\n",
    "print(bool(-1))\n",
    "print(bool(0.0))\n",
    "print(bool(0.1))\n",
    "print(bool(-0.1))\n",
    "print(bool(\"True\"))\n",
    "print(bool(\"False\"))  # !!!\n",
    "print(bool(\"\"))\n",
    "print(bool(\"\\0\"))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "softed",
   "language": "python",
   "name": "softed"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
