|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458 |
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": true,
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# Software Entwicklung \n",
- "\n",
- "## Kapitel 1: Einführung \n",
- "\n",
- "### 1.4 Datentypen \n",
- "\n",
- "Wie bereits erwähnt setzt sich ein Wert in Python zusammen aus\n",
- "\n",
- "- dem Datentyp (z.B. <code>int</code> für eine ganze Zahl)\n",
- "- der Ausprägung (z.B. die Zahl 17)\n",
- "\n",
- "des Werts. Beide Informationen werden im Speicher abgelegt und sind\n",
- "abrufbar.\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.1 Operationen mit Datentypen\n",
- "\n",
- "Je nach Datentyp können mit einem Wert unterschiedliche Operationen ausgeführt werden. \n",
- "Für den Befehl zur Ausführung einer Operation gibt es unterschiedliche Notationen:\n",
- "\n",
- "- Infix-Notation zwischen zwei Werten, z.B. bei <code>3 + 4</code>, um eine Addition auszuführen\n",
- "- Funktionsaufruf mit dem Wert als Parameter, z.B. bei Built-In Funktionen wie <code>len(\"Hello World\")</code>\n",
- "- Dot-Notation, d.h. der Operationsaufruf wird mit einem Punkt getrennt direkt an den Wert angängt, z.B. bei \n",
- " <code>\"pYthon\".capitalize()</code>\n",
- " \n",
- "In jedem Fall wird etwas mit dem Wert \"gemacht\" und ein Ergebniswert zurückgegeben."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "3 + 4"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "len(\"Test\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "\"pYthon\".capitalize()\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Im Folgenden werden die elementaren Datentypen von Python mit ihren Infix-Operationen betrachtet.\n",
- "\n",
- "#### 1.4.2 Ganze Zahlen\n",
- "\n",
- "Ganze Zahlen werden in Python als Integer-Werte <code>int</code> bezeichnet. Anders als in anderen Programmiersprachen \n",
- "gibt es keine genaue Vorgabe, wie viele Bytes für einen Integer-Wert verwendet werden. Python nimmt einfach so viele, \n",
- "wie für die Darstellung des Werts notwendig sind. In der Konsequenz ist der Wertebereich von Integers nur durch den\n",
- "Arbeitsspeicher begrenzt."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "big_number = 100 * 100 * 100 * 100 * 100 * 1000000\n",
- "print(big_number)\n",
- "print(type(big_number))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Für den Datentyp <code>int</code> gibt es die üblichen Infix-Rechenoperationen\n",
- "\n",
- "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
- "|----------------|----------------------|----------------|\n",
- "| Addition | <code>1 + 2</code> | <code>3</code> |\n",
- "| Subtraktion | <code>3 - 2</code> | <code>1</code> |\n",
- "| Multiplikation | <code>2 * 3</code> | <code>6</code> |\n",
- "| Division | <code>7 // 3</code> | <code>2</code> |\n",
- "| Modulo | <code>7 % 3</code> | <code>1</code> |\n",
- "| Potenzierung | <code>2 ** 3</code> | <code>8</code> |\n",
- "| bitweises AND | <code>2 & 3</code> | <code>2</code> |\n",
- "| bitweises OR | <code>2 \\| 3</code> | <code>3</code> |\n",
- "| bitweises XOR | <code>2 ^ 3</code> | <code>1</code> |\n",
- "| bitweiser Shift links | <code>3 << 1</code> | <code>6</code> |\n",
- "| bitweiser Shift rechts | <code>8 >> 2</code> | <code>2</code> |\n",
- "\n",
- "\n",
- "Bei der Divison <code>//</code> handelt es sich um die ganzzahlige Division, bei der das\n",
- "Ergebnis auf den nächstgelegenen Integer-Wert abgerundet wird. \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "1 + 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "3 - 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "2 * 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "7 // 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "7 % 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "-"
- }
- },
- "outputs": [],
- "source": [
- "2 ** 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "2 & 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "-"
- }
- },
- "outputs": [],
- "source": [
- "2 | 3\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "2 ^ 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "-"
- }
- },
- "outputs": [],
- "source": [
- "3 << 1\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "8 >> 2"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Neben der Dezimalschreibweise können ganze Zahlen auch binär mit dem Präfix <code>0b</code>,\n",
- "oktal mir dem Präfix <code>0o</code> und hexadezimal mit dem Präfix <code>0x</code> angegeben werden."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "0b111"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "0o15"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "0xAB"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.3 Gleitkommazahlen\n",
- "\n",
- "Gleitkommazahlen werden in Python <code>float</code> genannt. Im Gegensatz zu den ganzen Zahlen ist\n",
- "die Speicherrepräsentation auf 64 Bit begrenzt und durch IEEE 754 vorgegeben.\n",
- "\n",
- "![Speicherrepräsentation IEEE754](../img/IEEE754.png \"IEEE754\") \n",
- "\n",
- "Somit ergibt sich ein Wertebereich von ca. $-10^{308}$ bis $+10^{308}$. \n",
- "\n",
- "Gleitkommazahlen werden mit einem Dezimalpunkt geschrieben. Die bei den ganzen Zahlen aufgeführten \n",
- "Operationen auch bei Gleitkommazahlen möglich - auch in Kombination mit ganzen Zahlen. Der Rückgabewert ergibt sich \n",
- "aber immer als eine Gleitkommazahl, sobald einer der Operanden eine Gleitkommazahl ist."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "1.0 + 2.0"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "3.0 - 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "2 * 3.2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "7.0 / 3.0"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "-"
- }
- },
- "outputs": [],
- "source": [
- "7.1 % 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "2.5 ** 3"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Ist bei der Divison <code>//</code> einer der Operanden eine Gleitkommazahl, so wird das Ergebnis ebenfalls \n",
- "abgerundet, jedoch als Gleitkommazahl zurückgegeben.\n",
- "\n",
- "Die Divison ohne Rundung wird mit einem einfachen Schrägstrich <code>/</code> ausgedrückt. Sie liefert immer\n",
- "eine Gleitkommazahl. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "6 / 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "7 / 3"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "7.0 / 3.0"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Wird der Wertebereich der Gleitkommazahlen verlassen, so ergibt sich entweder der Rückgabewert <code>inf</code> \n",
- "(Infinity) oder eine Fehlermeldung."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "1e308 * 1000\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "2 ** 1e308 "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.4 Zeichenketten\n",
- "\n",
- "Zeichenketten oder *Strings* (abgekürzt <code>str</code>) sind ein weiterer Datentyp in Python. String-Literale \n",
- "können mit einfachen oder doppelten Hochkommas begrenzt werden."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "name = 'Paulus'\n",
- "type(name)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Python behandelt Strings als Sequenz von einzelnen Unicode-Zeichen, auf die mit einem Index zugegriffen werden kann."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "name[3]\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Auch String-Werte besitzen Infix-Operationen.\n",
- "\n",
- "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
- "|----------------|--------------------------|----------------|\n",
- "| Konkatenation | <code>'A' + 'B'</code> | <code>'AB'</code> |\n",
- "| Wiederholung | <code>3 * 'AB'</code> | <code>'ABABAB'</code> |"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "'A' + 'B'"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "'AB' * 3"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "-"
- }
- },
- "source": [
- "Für die Ermittlung der *Länge* eines Strings kann die Build-In Funktion <code>len</code> verwendet werden. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "len('ABC')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Sonderzeichen, die nicht über die Tastatur eingebbar sind, können trotzdem mit Hilfe von *Escape-Sequenzen* in \n",
- "einen String eingefügt werden. Sie haben ihren Ursprung aus der Zeit der zeilenorientierten Drucker mit einem\n",
- "Druckkopf, den es zu steuern gilt.\n",
- "\n",
- "| *Escape-Sequenz* | *Bedeutung* | \n",
- "|--------------------|-----------------------|\n",
- "| <code>\\n</code> | Neue Zeile |\n",
- "| <code>\\r</code> | Wagenrücklauf | \n",
- "| <code>\\t</code> | Tabulatorsprung | \n",
- "| <code>\\\\\\\\</code> | Das Zeichen \\ | \n",
- "| <code>\\\\\"</code> | Das Zeichen \" | \n",
- "| <code>\\\\'</code> | Das Zeichen ' | \n",
- "| <code>\\\\'</code> | Das Zeichen ' | \n",
- "| <code>\\uXXXX'</code> | Das Unicode-Zeichen XXXX | "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "print(\"Zeile 1 \\n Zeile 2 \\r Text1 \\t Text2\")\n",
- "print('Los geht\\'s!')\n",
- "print('\\u263A')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "-"
- }
- },
- "source": [
- "Unicode-Zeichen können aus mehreren Bytes bestehen; die aus Programmiersprachen wie *C* bekannte Regel\n",
- "\n",
- "1 Zeichen im String = 1 Byte\n",
- "\n",
- "gilt damit **NICHT**."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.5 Bytes\n",
- "\n",
- "Für die Verwaltung einer Folge von Bytes existiert in Python ein eigner Datentyp <code>bytes</code>. Ein \n",
- "Bytes-Literal ähnelt einem String-Literal, besitzt aber ein Präfix <code>b</code>\n",
- "als Kennzeichen. Es sind dann aber nur\n",
- "ASCII-Zeichen als Inhalt erlaubt."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "raw_text = b'Hello World'\n",
- "type(raw_text)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Die Infix-Operationen des Bytes-Datentyps entsprechen denen des String-Datentyps. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.6 Boolean\n",
- "\n",
- "In Python gibt es einen weiteren Datentyp *Boolean* (<code>bool</code>), der nur die Werte <code>True</code> \n",
- "und <code>False</code> annehmen kann."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "ja = True\n",
- "nein = False\n",
- "type(ja)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Die Infix-Operationen des Datentyps *Boolean* entsprechen den bekannten Operationen der booleanschen Algebra.\n",
- "\n",
- "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
- "|------------------------|--------------------------|----------------|\n",
- "| Konjunktion | <code>True and False</code> | <code>False</code> |\n",
- "| Disjunktion | <code>True or False</code> | <code>True</code> |\n",
- "| Negation (Präfix) | <code>not True </code> | <code>False</code> |"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "(1==1) and (3<2)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "True or False"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "not True"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Boolean-Werte sind häufig das Ergebnis eines Vergleichs zweier Werte eines anderen Datentyps.\n",
- "\n",
- "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
- "|------------------------|--------------------------|----------------|\n",
- "| Gleichheit | <code>1 == 2</code> | <code>False</code> |\n",
- "| Ungleichheit | <code>1 != 2</code> | <code>True</code> |\n",
- "| Ordnung | <code>1 > 2</code> | <code>False</code> |"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "1 == 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "1 != 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "1 > 2"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.7 None\n",
- "\n",
- "Python stellt die Konstante <code>None</code> bereit, mit der der Wert *Nichts* ausgedrückt werden kann. \n",
- "Die Konstante <code>None</code> besitzt einen eigenen Datentyp <code>NoneType</code>.\n",
- "\n",
- "Die Überprüfung auf <code>None</code> erfolgt mit dem Vergleichsoperator <code>is</code>."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "nichts = None\n",
- "type(nichts)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "nichts is None\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.8 Operatorpriorität\n",
- "\n",
- "Enthält ein Python-Ausdruck mehrere Infix-Operationen, so muss geregelt sein, in welcher \n",
- "Reihenfolge die Operationen ausgeführt werden (vergleichbar zur *Punkt-vor-Strich*-Regel).\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Die Priorität der Operatoren ist wie folgt festgelegt:\n",
- "\n",
- "| *Priorität* | *Operator* | *Erläuterung* |\n",
- "|----------------|--------------------------|-------------------|\n",
- "| _Höchste_ | <code>( ) </code> | Durch Klammerung kann immer eine abweichende Priorität festgelegt werden |\n",
- "| | <code> ** </code> | Exponent |\n",
- "| | <code> *, /, //, % </code> | Multiplikation und Division |\n",
- "| | <code> +, - </code> | Addition und Subtraktion |\n",
- "| | <code> <<, >> </code> | Shift-Operatoren |\n",
- "| | <code> & </code> | bitweises AND |\n",
- "| | <code> ^ </code> | bitweises XOR |\n",
- "| | <code> \\| </code> | bitweises OR |\n",
- "| | <code> <, >, ==, !=, is </code> | Vergleiche |\n",
- "| | <code> not </code> | logisches NOT |\n",
- "| | <code> and </code> | logisches AND |\n",
- "| _Niedrigste_ | <code> or </code> | logisches OR |"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "\"b\" > \"c\" or not 3 < 2 "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Im Zweifelsfall aber am Besten lieber klammern, alleine schon für eine bessere Lesbarkeit."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### 1.4.9 Typumwandlung\n",
- "\n",
- "Operationen erwarten, dass die Operanden einen bestimmten Datentyp besitzen. So ist z.B. der Modulo-Operator \n",
- "<code>%</code> nur sinnvoll, wenn die Operanden Zahlen sind. Manchmal besitzen Operatoren auch eine unterschiedliche\n",
- "Semantik in Abhängigkeit vom Datentyp der Operanden."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "3 + 4"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "\"3\" + \"4\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Daher ist es gelegentlich notwendig, den Datentyp eines Wertes umzuwandeln. Python stellt hierfür eine ganze Reihe \n",
- "von Built-In Functions bereit. Eine *implizite Typumwandlung*, bei der der Typ eines Wertes \"en passant\" passend gemacht \n",
- "wird, findet in Python - anders als in anderen Sprachen - kaum statt (mit Ausnahme der Umwandlung von ganzen Zahlen in \n",
- "Gleitkommawerte).\n",
- " "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "int(\"5\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "int(4.9)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "int(\"Hello\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "int(True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "float(\"5.1\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "float(4)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "float(10**310)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "str(10**310)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- },
- "slideshow": {
- "slide_type": "-"
- }
- },
- "outputs": [],
- "source": [
- "str(3.1415)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "str(True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "ord('A')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "chr(66)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Eine Sonderform der Typumwandlung ist die Formatierung beliebiger Werte als lesbarer String.\n",
- "Eine einfache Möglichkeit ist die Angabe eines Formatstrings mit dem Präfix <code>f</code>\n",
- "und Platzhaltern für die einzusetzenden Werte."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "article = \"Eis\"\n",
- "price = 2.50\n",
- "\n",
- "f\"{article} kostet {price} Euro\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Bei den Platzhaltern kann zusätzlich eine Information zur Mindestbreite etc. hinterlegt werden."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "f\"{article:10} kostet {price:2.2f} Euro\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Es ist nicht notwendig, die Werte in benannten Variablen vorzuhalten, wenn\n",
- "anstelle des Präfix <code>f</code> die Funktion <code>format</code> verwendet wird,\n",
- "die bei jedem String mit Hilfe der Dot-Notation aufgerufen werden kann."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "\"{:10} kostet {:2.2f} Euro\".format(\"Eis\", 2.5)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In diesem Fall kann die Reihenfolge der Parameter und ihr Auftauchen im Ergebnis auch abweichen."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "\"{1:10} kostet {0:2.2f} Euro\".format(2.5, \"Eis\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Hinweis: man findet gelegentlich noch die inzwischen veraltete Form der String-Formatierung, die aber nicht \n",
- "mehr verwendet werden sollte."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "is_executing": false,
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "\"%-10s kostet %2.2f Euro\" % (\"Eis\", 2.5)"
- ]
- }
- ],
- "metadata": {
- "celltoolbar": "Slideshow",
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "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.9.9"
- },
- "pycharm": {
- "stem_cell": {
- "cell_type": "raw",
- "metadata": {
- "collapsed": false
- },
- "source": []
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
- }
|