{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Grundlegende Datentypen und Operationen"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Numerische Typen"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "42\n",
      "23\n",
      "65\n",
      "19\n"
     ]
    }
   ],
   "source": [
    "# Ganzzahlen (Integers)\n",
    "\n",
    "a = 42\n",
    "b = 23\n",
    "c = 0x20\n",
    "d = 0b1110101\n",
    "#e = calculate()\n",
    "f = 1_000_000\n",
    "print(a)\n",
    "print(b)\n",
    "print(a + b)\n",
    "print(a - b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.14159\n",
      "<class 'float'>\n",
      "2.71828\n",
      "8.539721265199999\n",
      "<class 'float'>\n"
     ]
    }
   ],
   "source": [
    "# Fließkommazahlen (Floats)\n",
    "\n",
    "pi = 3.14159\n",
    "e = 2.71828\n",
    "print(pi)\n",
    "print(type(pi))\n",
    "print(e)\n",
    "x = pi * e\n",
    "print(x)\n",
    "print(type(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3 1.5 4.5\n",
      "<class 'float'>\n",
      "<class 'float'>\n",
      "0.16666666666666666\n"
     ]
    }
   ],
   "source": [
    "# Implizite Umwandlung von numerischen Typen\n",
    "\n",
    "i = 3\n",
    "f = 1.5\n",
    "summe = i + f\n",
    "print(i, f, summe)\n",
    "print(type(summe))\n",
    "print(type(e))\n",
    "z = 1\n",
    "n = 6\n",
    "print(z / n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "999\n",
      "144\n",
      "8.0\n",
      "3.8\n",
      "1.0\n",
      "23.799999999999997\n",
      "0.3333333333333333\n"
     ]
    }
   ],
   "source": [
    "# Grundrechenarten\n",
    "\n",
    "# Integer\n",
    "print(1 + 1)\n",
    "print(1_000 - 1)\n",
    "print(12 * 12)  # Vorsicht: Asterisk (\"Sternchen\"), nicht x)\n",
    "print(64 / 8)\n",
    "\n",
    "# Floats\n",
    "print(0.5 + 3.3)\n",
    "print(1.99 - 0.99)\n",
    "print(20.0 * 1.19)\n",
    "print(1.0 / 3.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "64\n",
      "512\n",
      "512\n",
      "285.0043245227213\n",
      "285.0043245227213\n"
     ]
    }
   ],
   "source": [
    "# X hoch Y\n",
    "\n",
    "x = 8\n",
    "x2 = x ** 2\n",
    "print(x2)\n",
    "print(x ** 3)\n",
    "print(pow(x, 3))\n",
    "\n",
    "print(x ** e)\n",
    "print(pow(x, e))   # pow akzeptiert integer und floats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "<class 'int'>\n",
      "1.2345 1\n",
      "0.23449999999999993\n",
      "-2\n",
      "2.35\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "# Modulo\n",
    "\n",
    "x = 10\n",
    "y = 3\n",
    "rest = x % 3\n",
    "print(rest)\n",
    "print(type(rest))\n",
    "f = 1.2345\n",
    "i = int(f)\n",
    "print(f, i)\n",
    "print(f % 1)\n",
    "print(int(-2.3456))\n",
    "print(round(2.3455, 2))\n",
    "import math\n",
    "print(math.floor(2.345))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Strings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dies ist ein String!\n",
      "Man kann einfache oder doppelte Anführungszeichen verwenden.\n",
      "Innerhalb der Anführungszeichen kann man den jeweils \"anderen Typ\" verwenden\n",
      "Oder 'andersherum'.\n",
      "Alternativ kann man eine Backslash 'als' \"Escape\"-Zeichen verwenden\n",
      "String-Literale, die direkt hintereinander, durch Leerzeichen getrennt, stehenwerden zusammengefügt.\n",
      "Mit Klammerung klappt das auch über mehrere Zeilen hinweg\n",
      "['joe', 'bob', 'alice', 'jenny']\n",
      "['joe', 'bob', 'alice', 'jenny']\n",
      "['joe', 'bob', 'alice', 'jenny']\n",
      "['joe', 'bob', 'alice', 'jenny']\n"
     ]
    }
   ],
   "source": [
    "s = \"Dies ist ein String!\"\n",
    "print(s)\n",
    "s2 = 'Man kann einfache oder doppelte Anführungszeichen verwenden.'\n",
    "print(s2)\n",
    "s3a = 'Innerhalb der Anführungszeichen kann man den jeweils \"anderen Typ\" verwenden'\n",
    "print(s3a)\n",
    "s3b = \"Oder 'andersherum'.\"\n",
    "print(s3b)\n",
    "s4 = \"Alternativ kann man eine Backslash \\'als\\' \\\"Escape\\\"-Zeichen verwenden\"\n",
    "print(s4)\n",
    "s5 = \"String-Literale\" \", die direkt hintereinander\" \", durch Leerzeichen getrennt, stehen\" \"werden zusammengefügt.\"\n",
    "print(s5)\n",
    "s6 = (\"Mit Klammerung klappt das auch \"\n",
    "      \"über mehrere Zeilen \"\n",
    "      \"hinweg\")\n",
    "print(s6)\n",
    "l = [\n",
    "    \"joe\",\n",
    "    \"bob\",\n",
    "    \"alice\",\n",
    "    \"jenny\"\n",
    "]\n",
    "print(l)\n",
    "print(l)\n",
    "print(l)\n",
    "print(l)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dies ist ein langer String (\"triple quoted string\").\n",
      "Er kann Zeilenumbrüche enthalten.\n",
      "\n",
      "Und Leerzeilen.\n",
      "\n",
      "Und auch 'einfache' oder \"doppelte\" Anführungszeichen.\n",
      "\n",
      "Er endet mit drei weiteren Anführungszeichen des gleichen Typs.\n",
      "\n",
      "'Dies ist ein langer String (\"triple quoted string\").\\nEr kann Zeilenumbrüche enthalten.\\n\\nUnd Leerzeilen.\\n\\nUnd auch \\'einfache\\' oder \"doppelte\" Anführungszeichen.\\n\\nEr endet mit drei weiteren Anführungszeichen des gleichen Typs.\\n'\n"
     ]
    }
   ],
   "source": [
    "# Längere Strings\n",
    "\n",
    "long_string = '''Dies ist ein langer String (\"triple quoted string\").\n",
    "Er kann Zeilenumbrüche enthalten.\n",
    "\n",
    "Und Leerzeilen.\n",
    "\n",
    "Und auch 'einfache' oder \"doppelte\" Anführungszeichen.\n",
    "\n",
    "Er endet mit drei weiteren Anführungszeichen des gleichen Typs.\n",
    "'''\n",
    "print(long_string)\n",
    "print(repr(long_string))\n",
    "s = 'Dies ist ein langer String (\"triple quoted string\").\\nEr kann Zeilenumbrüche enthalten.\\n\\nUnd Leerzeilen.\\n\\nUnd auch \\'einfache\\' oder \"doppelte\" Anführungszeichen.\\n\\nEr endet mit drei weiteren Anführungszeichen des gleichen Typs.\\n'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Erste Zeile\n",
      "Zweite Zeile\n",
      "Eine Zeile\n",
      "Noch eine Zeile\n",
      "Eins\tZwei\tDrei\n",
      "1\t2\t3\n",
      "'Dieser String enthält ein\\x00Null-Zeichen'\n",
      "Hexadezimal-Codes können wir druckbare (e.g. '@') und nicht druckbare Zeichen (e.g. ) verwendet werden.\n",
      "❤\n"
     ]
    }
   ],
   "source": [
    "# Escape Sequenzen\n",
    "\n",
    "# Zeilenumbrüche und Tabs\n",
    "print(\"Erste Zeile\\r\\nZweite Zeile\")  # Zeilenumbruch nach Windows-Art  \n",
    "print(\"Eine Zeile\\nNoch eine Zeile\")  # Rest der Welt ;-)\n",
    "print(\"Eins\\tZwei\\tDrei\")\n",
    "print(\"1\\t2\\t3\")\n",
    "\n",
    "# Null und Hexadezimal- und Unicode-Sequenzen\n",
    "print(repr(\"Dieser String enthält ein\\0Null-Zeichen\"))\n",
    "print(\"Hexadezimal-Codes können wir druckbare (e.g. '\\x40') und nicht druckbare Zeichen (e.g. \\x7F) verwendet werden.\")\n",
    "print('\\u2764')  # Unicode"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dies ist der erste String.Und dies der zweite.\n",
      "Ich habe es dir schon dreimal gesagt! Ich habe es dir schon dreimal gesagt! Ich habe es dir schon dreimal gesagt! \n"
     ]
    }
   ],
   "source": [
    "# String-Operationen\n",
    "\n",
    "s1 = \"Dies ist der erste String.\"\n",
    "s2 = \"Und dies der zweite.\"\n",
    "s3 = s1 + s2\n",
    "print(s3)\n",
    "s4 = \"Ich habe es dir schon dreimal gesagt! \"\n",
    "print(s4 * 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SCHREI NICHT SO LAUT!\n",
      "True\n",
      "True\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "klein = \"schrei nicht so laut!\"\n",
    "print(klein.upper())\n",
    "print(\"hallo\" == \"HALLO\".lower())\n",
    "print(\"hallo\" == \"Hallo\".lower())\n",
    "print(\"straße\".upper() == \"STRASSE\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hallo\n",
      "a\n",
      "Hello\n",
      "hellohellohello\n"
     ]
    }
   ],
   "source": [
    "hallo = \"Hallo\"\n",
    "print(hallo)\n",
    "print(hallo[1])\n",
    "hello = hallo[0] + 'e' + hallo[2:]\n",
    "print(hello)\n",
    "print(\"hello\" * 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "'str' object does not support item assignment",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m/home/chris/work/python-kurs-softed/notebooks/basictypes.ipynb Cell 16\u001b[0m line \u001b[0;36m3\n\u001b[1;32m      <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/basictypes.ipynb#X21sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m \u001b[39m# Aber das geht nicht!:\u001b[39;00m\n\u001b[0;32m----> <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/basictypes.ipynb#X21sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m hallo[\u001b[39m1\u001b[39;49m] \u001b[39m=\u001b[39m \u001b[39m'\u001b[39m\u001b[39me\u001b[39m\u001b[39m'\u001b[39m\n\u001b[1;32m      <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/basictypes.ipynb#X21sZmlsZQ%3D%3D?line=4'>5</a>\u001b[0m \u001b[39m# Strings sind immutable!\u001b[39;00m\n",
      "\u001b[0;31mTypeError\u001b[0m: 'str' object does not support item assignment"
     ]
    }
   ],
   "source": [
    "# Aber das geht nicht!:\n",
    "\n",
    "hallo[1] = 'e'\n",
    "\n",
    "# Strings sind immutable!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "i = 3.141\n",
    "i: int = 42"
   ]
  }
 ],
 "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
}
