You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

014 Datentypen.ipynb 30KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {
  6. "collapsed": true,
  7. "pycharm": {
  8. "name": "#%% md\n"
  9. },
  10. "slideshow": {
  11. "slide_type": "slide"
  12. }
  13. },
  14. "source": [
  15. "# Software Entwicklung \n",
  16. "\n",
  17. "## Kapitel 1: Einführung \n",
  18. "\n",
  19. "### 1.4 Datentypen \n",
  20. "\n",
  21. "Wie bereits erwähnt setzt sich ein Wert in Python zusammen aus\n",
  22. "\n",
  23. "- dem Datentyp (z.B. <code>int</code> für eine ganze Zahl)\n",
  24. "- der Ausprägung (z.B. die Zahl 17)\n",
  25. "\n",
  26. "des Werts. Beide Informationen werden im Speicher abgelegt und sind\n",
  27. "abrufbar.\n"
  28. ]
  29. },
  30. {
  31. "cell_type": "markdown",
  32. "metadata": {
  33. "slideshow": {
  34. "slide_type": "slide"
  35. }
  36. },
  37. "source": [
  38. "#### 1.4.1 Operationen mit Datentypen\n",
  39. "\n",
  40. "Je nach Datentyp können mit einem Wert unterschiedliche Operationen ausgeführt werden. \n",
  41. "Für den Befehl zur Ausführung einer Operation gibt es unterschiedliche Notationen:\n",
  42. "\n",
  43. "- Infix-Notation zwischen zwei Werten, z.B. bei <code>3 + 4</code>, um eine Addition auszuführen\n",
  44. "- Funktionsaufruf mit dem Wert als Parameter, z.B. bei Built-In Funktionen wie <code>len(\"Hello World\")</code>\n",
  45. "- Dot-Notation, d.h. der Operationsaufruf wird mit einem Punkt getrennt direkt an den Wert angängt, z.B. bei \n",
  46. " <code>\"pYthon\".capitalize()</code>\n",
  47. " \n",
  48. "In jedem Fall wird etwas mit dem Wert \"gemacht\" und ein Ergebniswert zurückgegeben."
  49. ]
  50. },
  51. {
  52. "cell_type": "code",
  53. "execution_count": null,
  54. "metadata": {
  55. "pycharm": {
  56. "is_executing": false,
  57. "name": "#%%\n"
  58. },
  59. "slideshow": {
  60. "slide_type": "subslide"
  61. }
  62. },
  63. "outputs": [],
  64. "source": [
  65. "3 + 4"
  66. ]
  67. },
  68. {
  69. "cell_type": "code",
  70. "execution_count": null,
  71. "metadata": {
  72. "pycharm": {
  73. "is_executing": false,
  74. "name": "#%%\n"
  75. }
  76. },
  77. "outputs": [],
  78. "source": [
  79. "len(\"Test\")"
  80. ]
  81. },
  82. {
  83. "cell_type": "code",
  84. "execution_count": null,
  85. "metadata": {
  86. "pycharm": {
  87. "is_executing": false,
  88. "name": "#%%\n"
  89. }
  90. },
  91. "outputs": [],
  92. "source": [
  93. "\"pYthon\".capitalize()\n"
  94. ]
  95. },
  96. {
  97. "cell_type": "markdown",
  98. "metadata": {
  99. "slideshow": {
  100. "slide_type": "slide"
  101. }
  102. },
  103. "source": [
  104. "Im Folgenden werden die elementaren Datentypen von Python mit ihren Infix-Operationen betrachtet.\n",
  105. "\n",
  106. "#### 1.4.2 Ganze Zahlen\n",
  107. "\n",
  108. "Ganze Zahlen werden in Python als Integer-Werte <code>int</code> bezeichnet. Anders als in anderen Programmiersprachen \n",
  109. "gibt es keine genaue Vorgabe, wie viele Bytes für einen Integer-Wert verwendet werden. Python nimmt einfach so viele, \n",
  110. "wie für die Darstellung des Werts notwendig sind. In der Konsequenz ist der Wertebereich von Integers nur durch den\n",
  111. "Arbeitsspeicher begrenzt."
  112. ]
  113. },
  114. {
  115. "cell_type": "code",
  116. "execution_count": null,
  117. "metadata": {
  118. "pycharm": {
  119. "is_executing": false,
  120. "name": "#%%\n"
  121. }
  122. },
  123. "outputs": [],
  124. "source": [
  125. "big_number = 100 * 100 * 100 * 100 * 100 * 1000000\n",
  126. "print(big_number)\n",
  127. "print(type(big_number))"
  128. ]
  129. },
  130. {
  131. "cell_type": "markdown",
  132. "metadata": {
  133. "slideshow": {
  134. "slide_type": "slide"
  135. }
  136. },
  137. "source": [
  138. "Für den Datentyp <code>int</code> gibt es die üblichen Infix-Rechenoperationen\n",
  139. "\n",
  140. "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
  141. "|----------------|----------------------|----------------|\n",
  142. "| Addition | <code>1 + 2</code> | <code>3</code> |\n",
  143. "| Subtraktion | <code>3 - 2</code> | <code>1</code> |\n",
  144. "| Multiplikation | <code>2 * 3</code> | <code>6</code> |\n",
  145. "| Division | <code>7 // 3</code> | <code>2</code> |\n",
  146. "| Modulo | <code>7 % 3</code> | <code>1</code> |\n",
  147. "| Potenzierung | <code>2 ** 3</code> | <code>8</code> |\n",
  148. "| bitweises AND | <code>2 & 3</code> | <code>2</code> |\n",
  149. "| bitweises OR | <code>2 \\| 3</code> | <code>3</code> |\n",
  150. "| bitweises XOR | <code>2 ^ 3</code> | <code>1</code> |\n",
  151. "| bitweiser Shift links | <code>3 << 1</code> | <code>6</code> |\n",
  152. "| bitweiser Shift rechts | <code>8 >> 2</code> | <code>2</code> |\n",
  153. "\n",
  154. "\n",
  155. "Bei der Divison <code>//</code> handelt es sich um die ganzzahlige Division, bei der das\n",
  156. "Ergebnis auf den nächstgelegenen Integer-Wert abgerundet wird. \n"
  157. ]
  158. },
  159. {
  160. "cell_type": "code",
  161. "execution_count": null,
  162. "metadata": {
  163. "pycharm": {
  164. "is_executing": false,
  165. "name": "#%%\n"
  166. },
  167. "slideshow": {
  168. "slide_type": "subslide"
  169. }
  170. },
  171. "outputs": [],
  172. "source": [
  173. "1 + 2"
  174. ]
  175. },
  176. {
  177. "cell_type": "code",
  178. "execution_count": null,
  179. "metadata": {
  180. "pycharm": {
  181. "is_executing": false,
  182. "name": "#%%\n"
  183. }
  184. },
  185. "outputs": [],
  186. "source": [
  187. "3 - 2"
  188. ]
  189. },
  190. {
  191. "cell_type": "code",
  192. "execution_count": null,
  193. "metadata": {
  194. "pycharm": {
  195. "is_executing": false,
  196. "name": "#%%\n"
  197. }
  198. },
  199. "outputs": [],
  200. "source": [
  201. "2 * 3"
  202. ]
  203. },
  204. {
  205. "cell_type": "code",
  206. "execution_count": null,
  207. "metadata": {
  208. "pycharm": {
  209. "is_executing": false,
  210. "name": "#%%\n"
  211. }
  212. },
  213. "outputs": [],
  214. "source": [
  215. "7 // 3"
  216. ]
  217. },
  218. {
  219. "cell_type": "code",
  220. "execution_count": null,
  221. "metadata": {
  222. "pycharm": {
  223. "is_executing": false,
  224. "name": "#%%\n"
  225. }
  226. },
  227. "outputs": [],
  228. "source": [
  229. "7 % 3"
  230. ]
  231. },
  232. {
  233. "cell_type": "code",
  234. "execution_count": null,
  235. "metadata": {
  236. "pycharm": {
  237. "is_executing": false,
  238. "name": "#%%\n"
  239. },
  240. "slideshow": {
  241. "slide_type": "-"
  242. }
  243. },
  244. "outputs": [],
  245. "source": [
  246. "2 ** 3"
  247. ]
  248. },
  249. {
  250. "cell_type": "code",
  251. "execution_count": null,
  252. "metadata": {
  253. "pycharm": {
  254. "is_executing": false,
  255. "name": "#%%\n"
  256. },
  257. "slideshow": {
  258. "slide_type": "subslide"
  259. }
  260. },
  261. "outputs": [],
  262. "source": [
  263. "2 & 3"
  264. ]
  265. },
  266. {
  267. "cell_type": "code",
  268. "execution_count": null,
  269. "metadata": {
  270. "pycharm": {
  271. "is_executing": false,
  272. "name": "#%%\n"
  273. },
  274. "slideshow": {
  275. "slide_type": "-"
  276. }
  277. },
  278. "outputs": [],
  279. "source": [
  280. "2 | 3\n"
  281. ]
  282. },
  283. {
  284. "cell_type": "code",
  285. "execution_count": null,
  286. "metadata": {
  287. "pycharm": {
  288. "is_executing": false,
  289. "name": "#%%\n"
  290. }
  291. },
  292. "outputs": [],
  293. "source": [
  294. "2 ^ 3"
  295. ]
  296. },
  297. {
  298. "cell_type": "code",
  299. "execution_count": null,
  300. "metadata": {
  301. "pycharm": {
  302. "is_executing": false,
  303. "name": "#%%\n"
  304. },
  305. "slideshow": {
  306. "slide_type": "-"
  307. }
  308. },
  309. "outputs": [],
  310. "source": [
  311. "3 << 1\n"
  312. ]
  313. },
  314. {
  315. "cell_type": "code",
  316. "execution_count": null,
  317. "metadata": {
  318. "pycharm": {
  319. "is_executing": false,
  320. "name": "#%%\n"
  321. }
  322. },
  323. "outputs": [],
  324. "source": [
  325. "8 >> 2"
  326. ]
  327. },
  328. {
  329. "cell_type": "markdown",
  330. "metadata": {
  331. "slideshow": {
  332. "slide_type": "slide"
  333. }
  334. },
  335. "source": [
  336. "Neben der Dezimalschreibweise können ganze Zahlen auch binär mit dem Präfix <code>0b</code>,\n",
  337. "oktal mir dem Präfix <code>0o</code> und hexadezimal mit dem Präfix <code>0x</code> angegeben werden."
  338. ]
  339. },
  340. {
  341. "cell_type": "code",
  342. "execution_count": null,
  343. "metadata": {
  344. "pycharm": {
  345. "is_executing": false,
  346. "name": "#%%\n"
  347. }
  348. },
  349. "outputs": [],
  350. "source": [
  351. "0b111"
  352. ]
  353. },
  354. {
  355. "cell_type": "code",
  356. "execution_count": null,
  357. "metadata": {
  358. "pycharm": {
  359. "is_executing": false,
  360. "name": "#%%\n"
  361. }
  362. },
  363. "outputs": [],
  364. "source": [
  365. "0o15"
  366. ]
  367. },
  368. {
  369. "cell_type": "code",
  370. "execution_count": null,
  371. "metadata": {
  372. "pycharm": {
  373. "is_executing": false,
  374. "name": "#%%\n"
  375. }
  376. },
  377. "outputs": [],
  378. "source": [
  379. "0xAB"
  380. ]
  381. },
  382. {
  383. "cell_type": "markdown",
  384. "metadata": {
  385. "slideshow": {
  386. "slide_type": "slide"
  387. }
  388. },
  389. "source": [
  390. "#### 1.4.3 Gleitkommazahlen\n",
  391. "\n",
  392. "Gleitkommazahlen werden in Python <code>float</code> genannt. Im Gegensatz zu den ganzen Zahlen ist\n",
  393. "die Speicherrepräsentation auf 64 Bit begrenzt und durch IEEE 754 vorgegeben.\n",
  394. "\n",
  395. "![Speicherrepräsentation IEEE754](../img/IEEE754.png \"IEEE754\") \n",
  396. "\n",
  397. "Somit ergibt sich ein Wertebereich von ca. $-10^{308}$ bis $+10^{308}$. \n",
  398. "\n",
  399. "Gleitkommazahlen werden mit einem Dezimalpunkt geschrieben. Die bei den ganzen Zahlen aufgeführten \n",
  400. "Operationen auch bei Gleitkommazahlen möglich - auch in Kombination mit ganzen Zahlen. Der Rückgabewert ergibt sich \n",
  401. "aber immer als eine Gleitkommazahl, sobald einer der Operanden eine Gleitkommazahl ist."
  402. ]
  403. },
  404. {
  405. "cell_type": "code",
  406. "execution_count": null,
  407. "metadata": {
  408. "pycharm": {
  409. "is_executing": false,
  410. "name": "#%%\n"
  411. },
  412. "slideshow": {
  413. "slide_type": "subslide"
  414. }
  415. },
  416. "outputs": [],
  417. "source": [
  418. "1.0 + 2.0"
  419. ]
  420. },
  421. {
  422. "cell_type": "code",
  423. "execution_count": null,
  424. "metadata": {
  425. "pycharm": {
  426. "is_executing": false,
  427. "name": "#%%\n"
  428. }
  429. },
  430. "outputs": [],
  431. "source": [
  432. "3.0 - 2"
  433. ]
  434. },
  435. {
  436. "cell_type": "code",
  437. "execution_count": null,
  438. "metadata": {
  439. "pycharm": {
  440. "is_executing": false,
  441. "name": "#%%\n"
  442. }
  443. },
  444. "outputs": [],
  445. "source": [
  446. "2 * 3.2"
  447. ]
  448. },
  449. {
  450. "cell_type": "code",
  451. "execution_count": null,
  452. "metadata": {
  453. "pycharm": {
  454. "is_executing": false,
  455. "name": "#%%\n"
  456. }
  457. },
  458. "outputs": [],
  459. "source": [
  460. "7.0 / 3.0"
  461. ]
  462. },
  463. {
  464. "cell_type": "code",
  465. "execution_count": null,
  466. "metadata": {
  467. "pycharm": {
  468. "is_executing": false,
  469. "name": "#%%\n"
  470. },
  471. "slideshow": {
  472. "slide_type": "-"
  473. }
  474. },
  475. "outputs": [],
  476. "source": [
  477. "7.1 % 3"
  478. ]
  479. },
  480. {
  481. "cell_type": "code",
  482. "execution_count": null,
  483. "metadata": {
  484. "pycharm": {
  485. "is_executing": false,
  486. "name": "#%%\n"
  487. }
  488. },
  489. "outputs": [],
  490. "source": [
  491. "2.5 ** 3"
  492. ]
  493. },
  494. {
  495. "cell_type": "markdown",
  496. "metadata": {
  497. "pycharm": {
  498. "name": "#%% md\n"
  499. },
  500. "slideshow": {
  501. "slide_type": "slide"
  502. }
  503. },
  504. "source": [
  505. "Ist bei der Divison <code>//</code> einer der Operanden eine Gleitkommazahl, so wird das Ergebnis ebenfalls \n",
  506. "abgerundet, jedoch als Gleitkommazahl zurückgegeben.\n",
  507. "\n",
  508. "Die Divison ohne Rundung wird mit einem einfachen Schrägstrich <code>/</code> ausgedrückt. Sie liefert immer\n",
  509. "eine Gleitkommazahl. "
  510. ]
  511. },
  512. {
  513. "cell_type": "code",
  514. "execution_count": null,
  515. "metadata": {
  516. "pycharm": {
  517. "is_executing": false,
  518. "name": "#%%\n"
  519. }
  520. },
  521. "outputs": [],
  522. "source": [
  523. "6 / 3"
  524. ]
  525. },
  526. {
  527. "cell_type": "code",
  528. "execution_count": null,
  529. "metadata": {
  530. "pycharm": {
  531. "is_executing": false,
  532. "name": "#%%\n"
  533. }
  534. },
  535. "outputs": [],
  536. "source": [
  537. "7 / 3"
  538. ]
  539. },
  540. {
  541. "cell_type": "code",
  542. "execution_count": null,
  543. "metadata": {
  544. "pycharm": {
  545. "is_executing": false,
  546. "name": "#%%\n"
  547. }
  548. },
  549. "outputs": [],
  550. "source": [
  551. "7.0 / 3.0"
  552. ]
  553. },
  554. {
  555. "cell_type": "markdown",
  556. "metadata": {
  557. "slideshow": {
  558. "slide_type": "slide"
  559. }
  560. },
  561. "source": [
  562. "Wird der Wertebereich der Gleitkommazahlen verlassen, so ergibt sich entweder der Rückgabewert <code>inf</code> \n",
  563. "(Infinity) oder eine Fehlermeldung."
  564. ]
  565. },
  566. {
  567. "cell_type": "code",
  568. "execution_count": null,
  569. "metadata": {
  570. "pycharm": {
  571. "is_executing": false,
  572. "name": "#%%\n"
  573. }
  574. },
  575. "outputs": [],
  576. "source": [
  577. "1e308 * 1000\n"
  578. ]
  579. },
  580. {
  581. "cell_type": "code",
  582. "execution_count": null,
  583. "metadata": {
  584. "pycharm": {
  585. "is_executing": false,
  586. "name": "#%%\n"
  587. }
  588. },
  589. "outputs": [],
  590. "source": [
  591. "2 ** 1e308 "
  592. ]
  593. },
  594. {
  595. "cell_type": "markdown",
  596. "metadata": {
  597. "slideshow": {
  598. "slide_type": "slide"
  599. }
  600. },
  601. "source": [
  602. "#### 1.4.4 Zeichenketten\n",
  603. "\n",
  604. "Zeichenketten oder *Strings* (abgekürzt <code>str</code>) sind ein weiterer Datentyp in Python. String-Literale \n",
  605. "können mit einfachen oder doppelten Hochkommas begrenzt werden."
  606. ]
  607. },
  608. {
  609. "cell_type": "code",
  610. "execution_count": null,
  611. "metadata": {
  612. "pycharm": {
  613. "is_executing": false,
  614. "name": "#%%\n"
  615. }
  616. },
  617. "outputs": [],
  618. "source": [
  619. "name = 'Paulus'\n",
  620. "type(name)\n"
  621. ]
  622. },
  623. {
  624. "cell_type": "markdown",
  625. "metadata": {},
  626. "source": [
  627. "Python behandelt Strings als Sequenz von einzelnen Unicode-Zeichen, auf die mit einem Index zugegriffen werden kann."
  628. ]
  629. },
  630. {
  631. "cell_type": "code",
  632. "execution_count": null,
  633. "metadata": {
  634. "pycharm": {
  635. "is_executing": false,
  636. "name": "#%%\n"
  637. }
  638. },
  639. "outputs": [],
  640. "source": [
  641. "name[3]\n"
  642. ]
  643. },
  644. {
  645. "cell_type": "markdown",
  646. "metadata": {
  647. "slideshow": {
  648. "slide_type": "slide"
  649. }
  650. },
  651. "source": [
  652. "Auch String-Werte besitzen Infix-Operationen.\n",
  653. "\n",
  654. "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
  655. "|----------------|--------------------------|----------------|\n",
  656. "| Konkatenation | <code>'A' + 'B'</code> | <code>'AB'</code> |\n",
  657. "| Wiederholung | <code>3 * 'AB'</code> | <code>'ABABAB'</code> |"
  658. ]
  659. },
  660. {
  661. "cell_type": "code",
  662. "execution_count": null,
  663. "metadata": {
  664. "pycharm": {
  665. "is_executing": false,
  666. "name": "#%%\n"
  667. }
  668. },
  669. "outputs": [],
  670. "source": [
  671. "'A' + 'B'"
  672. ]
  673. },
  674. {
  675. "cell_type": "code",
  676. "execution_count": null,
  677. "metadata": {
  678. "pycharm": {
  679. "is_executing": false,
  680. "name": "#%%\n"
  681. }
  682. },
  683. "outputs": [],
  684. "source": [
  685. "'AB' * 3"
  686. ]
  687. },
  688. {
  689. "cell_type": "markdown",
  690. "metadata": {
  691. "pycharm": {
  692. "name": "#%% md\n"
  693. },
  694. "slideshow": {
  695. "slide_type": "-"
  696. }
  697. },
  698. "source": [
  699. "Für die Ermittlung der *Länge* eines Strings kann die Build-In Funktion <code>len</code> verwendet werden. "
  700. ]
  701. },
  702. {
  703. "cell_type": "code",
  704. "execution_count": null,
  705. "metadata": {
  706. "pycharm": {
  707. "is_executing": false,
  708. "name": "#%%\n"
  709. }
  710. },
  711. "outputs": [],
  712. "source": [
  713. "len('ABC')"
  714. ]
  715. },
  716. {
  717. "cell_type": "markdown",
  718. "metadata": {
  719. "slideshow": {
  720. "slide_type": "slide"
  721. }
  722. },
  723. "source": [
  724. "Sonderzeichen, die nicht über die Tastatur eingebbar sind, können trotzdem mit Hilfe von *Escape-Sequenzen* in \n",
  725. "einen String eingefügt werden. Sie haben ihren Ursprung aus der Zeit der zeilenorientierten Drucker mit einem\n",
  726. "Druckkopf, den es zu steuern gilt.\n",
  727. "\n",
  728. "| *Escape-Sequenz* | *Bedeutung* | \n",
  729. "|--------------------|-----------------------|\n",
  730. "| <code>\\n</code> | Neue Zeile |\n",
  731. "| <code>\\r</code> | Wagenrücklauf | \n",
  732. "| <code>\\t</code> | Tabulatorsprung | \n",
  733. "| <code>\\\\\\\\</code> | Das Zeichen \\ | \n",
  734. "| <code>\\\\\"</code> | Das Zeichen \" | \n",
  735. "| <code>\\\\'</code> | Das Zeichen ' | \n",
  736. "| <code>\\\\'</code> | Das Zeichen ' | \n",
  737. "| <code>\\uXXXX'</code> | Das Unicode-Zeichen XXXX | "
  738. ]
  739. },
  740. {
  741. "cell_type": "code",
  742. "execution_count": null,
  743. "metadata": {
  744. "pycharm": {
  745. "is_executing": false,
  746. "name": "#%%\n"
  747. },
  748. "slideshow": {
  749. "slide_type": "subslide"
  750. }
  751. },
  752. "outputs": [],
  753. "source": [
  754. "print(\"Zeile 1 \\n Zeile 2 \\r Text1 \\t Text2\")\n",
  755. "print('Los geht\\'s!')\n",
  756. "print('\\u263A')"
  757. ]
  758. },
  759. {
  760. "cell_type": "markdown",
  761. "metadata": {
  762. "slideshow": {
  763. "slide_type": "-"
  764. }
  765. },
  766. "source": [
  767. "Unicode-Zeichen können aus mehreren Bytes bestehen; die aus Programmiersprachen wie *C* bekannte Regel\n",
  768. "\n",
  769. "1 Zeichen im String = 1 Byte\n",
  770. "\n",
  771. "gilt damit **NICHT**."
  772. ]
  773. },
  774. {
  775. "cell_type": "markdown",
  776. "metadata": {
  777. "slideshow": {
  778. "slide_type": "slide"
  779. }
  780. },
  781. "source": [
  782. "#### 1.4.5 Bytes\n",
  783. "\n",
  784. "Für die Verwaltung einer Folge von Bytes existiert in Python ein eigner Datentyp <code>bytes</code>. Ein \n",
  785. "Bytes-Literal ähnelt einem String-Literal, besitzt aber ein Präfix <code>b</code>\n",
  786. "als Kennzeichen. Es sind dann aber nur\n",
  787. "ASCII-Zeichen als Inhalt erlaubt."
  788. ]
  789. },
  790. {
  791. "cell_type": "code",
  792. "execution_count": null,
  793. "metadata": {
  794. "pycharm": {
  795. "is_executing": false,
  796. "name": "#%%\n"
  797. }
  798. },
  799. "outputs": [],
  800. "source": [
  801. "raw_text = b'Hello World'\n",
  802. "type(raw_text)"
  803. ]
  804. },
  805. {
  806. "cell_type": "markdown",
  807. "metadata": {},
  808. "source": [
  809. "Die Infix-Operationen des Bytes-Datentyps entsprechen denen des String-Datentyps. "
  810. ]
  811. },
  812. {
  813. "cell_type": "markdown",
  814. "metadata": {
  815. "slideshow": {
  816. "slide_type": "slide"
  817. }
  818. },
  819. "source": [
  820. "#### 1.4.6 Boolean\n",
  821. "\n",
  822. "In Python gibt es einen weiteren Datentyp *Boolean* (<code>bool</code>), der nur die Werte <code>True</code> \n",
  823. "und <code>False</code> annehmen kann."
  824. ]
  825. },
  826. {
  827. "cell_type": "code",
  828. "execution_count": null,
  829. "metadata": {
  830. "pycharm": {
  831. "is_executing": false,
  832. "name": "#%%\n"
  833. }
  834. },
  835. "outputs": [],
  836. "source": [
  837. "ja = True\n",
  838. "nein = False\n",
  839. "type(ja)"
  840. ]
  841. },
  842. {
  843. "cell_type": "markdown",
  844. "metadata": {
  845. "slideshow": {
  846. "slide_type": "slide"
  847. }
  848. },
  849. "source": [
  850. "Die Infix-Operationen des Datentyps *Boolean* entsprechen den bekannten Operationen der booleanschen Algebra.\n",
  851. "\n",
  852. "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
  853. "|------------------------|--------------------------|----------------|\n",
  854. "| Konjunktion | <code>True and False</code> | <code>False</code> |\n",
  855. "| Disjunktion | <code>True or False</code> | <code>True</code> |\n",
  856. "| Negation (Präfix) | <code>not True </code> | <code>False</code> |"
  857. ]
  858. },
  859. {
  860. "cell_type": "code",
  861. "execution_count": null,
  862. "metadata": {
  863. "pycharm": {
  864. "is_executing": false,
  865. "name": "#%%\n"
  866. }
  867. },
  868. "outputs": [],
  869. "source": [
  870. "(1==1) and (3<2)"
  871. ]
  872. },
  873. {
  874. "cell_type": "code",
  875. "execution_count": null,
  876. "metadata": {
  877. "pycharm": {
  878. "is_executing": false,
  879. "name": "#%%\n"
  880. }
  881. },
  882. "outputs": [],
  883. "source": [
  884. "True or False"
  885. ]
  886. },
  887. {
  888. "cell_type": "code",
  889. "execution_count": null,
  890. "metadata": {
  891. "pycharm": {
  892. "is_executing": false,
  893. "name": "#%%\n"
  894. }
  895. },
  896. "outputs": [],
  897. "source": [
  898. "not True"
  899. ]
  900. },
  901. {
  902. "cell_type": "markdown",
  903. "metadata": {
  904. "slideshow": {
  905. "slide_type": "slide"
  906. }
  907. },
  908. "source": [
  909. "Boolean-Werte sind häufig das Ergebnis eines Vergleichs zweier Werte eines anderen Datentyps.\n",
  910. "\n",
  911. "| *Operation* | *Schreibweise* | *Ergebnis* |\n",
  912. "|------------------------|--------------------------|----------------|\n",
  913. "| Gleichheit | <code>1 == 2</code> | <code>False</code> |\n",
  914. "| Ungleichheit | <code>1 != 2</code> | <code>True</code> |\n",
  915. "| Ordnung | <code>1 > 2</code> | <code>False</code> |"
  916. ]
  917. },
  918. {
  919. "cell_type": "code",
  920. "execution_count": null,
  921. "metadata": {
  922. "pycharm": {
  923. "is_executing": false,
  924. "name": "#%%\n"
  925. }
  926. },
  927. "outputs": [],
  928. "source": [
  929. "1 == 2"
  930. ]
  931. },
  932. {
  933. "cell_type": "code",
  934. "execution_count": null,
  935. "metadata": {
  936. "pycharm": {
  937. "is_executing": false,
  938. "name": "#%%\n"
  939. }
  940. },
  941. "outputs": [],
  942. "source": [
  943. "1 != 2"
  944. ]
  945. },
  946. {
  947. "cell_type": "code",
  948. "execution_count": null,
  949. "metadata": {
  950. "pycharm": {
  951. "is_executing": false,
  952. "name": "#%%\n"
  953. }
  954. },
  955. "outputs": [],
  956. "source": [
  957. "1 > 2"
  958. ]
  959. },
  960. {
  961. "cell_type": "markdown",
  962. "metadata": {
  963. "slideshow": {
  964. "slide_type": "slide"
  965. }
  966. },
  967. "source": [
  968. "#### 1.4.7 None\n",
  969. "\n",
  970. "Python stellt die Konstante <code>None</code> bereit, mit der der Wert *Nichts* ausgedrückt werden kann. \n",
  971. "Die Konstante <code>None</code> besitzt einen eigenen Datentyp <code>NoneType</code>.\n",
  972. "\n",
  973. "Die Überprüfung auf <code>None</code> erfolgt mit dem Vergleichsoperator <code>is</code>."
  974. ]
  975. },
  976. {
  977. "cell_type": "code",
  978. "execution_count": null,
  979. "metadata": {
  980. "pycharm": {
  981. "is_executing": false,
  982. "name": "#%%\n"
  983. }
  984. },
  985. "outputs": [],
  986. "source": [
  987. "nichts = None\n",
  988. "type(nichts)"
  989. ]
  990. },
  991. {
  992. "cell_type": "code",
  993. "execution_count": null,
  994. "metadata": {
  995. "pycharm": {
  996. "is_executing": false,
  997. "name": "#%%\n"
  998. }
  999. },
  1000. "outputs": [],
  1001. "source": [
  1002. "nichts is None\n"
  1003. ]
  1004. },
  1005. {
  1006. "cell_type": "markdown",
  1007. "metadata": {
  1008. "slideshow": {
  1009. "slide_type": "slide"
  1010. }
  1011. },
  1012. "source": [
  1013. "#### 1.4.8 Operatorpriorität\n",
  1014. "\n",
  1015. "Enthält ein Python-Ausdruck mehrere Infix-Operationen, so muss geregelt sein, in welcher \n",
  1016. "Reihenfolge die Operationen ausgeführt werden (vergleichbar zur *Punkt-vor-Strich*-Regel).\n"
  1017. ]
  1018. },
  1019. {
  1020. "cell_type": "markdown",
  1021. "metadata": {
  1022. "slideshow": {
  1023. "slide_type": "slide"
  1024. }
  1025. },
  1026. "source": [
  1027. "Die Priorität der Operatoren ist wie folgt festgelegt:\n",
  1028. "\n",
  1029. "| *Priorität* | *Operator* | *Erläuterung* |\n",
  1030. "|----------------|--------------------------|-------------------|\n",
  1031. "| _Höchste_ | <code>( ) </code> | Durch Klammerung kann immer eine abweichende Priorität festgelegt werden |\n",
  1032. "| &nbsp; | <code> ** </code> | Exponent |\n",
  1033. "| &nbsp; | <code> *, /, //, % </code> | Multiplikation und Division |\n",
  1034. "| &nbsp; | <code> +, - </code> | Addition und Subtraktion |\n",
  1035. "| &nbsp; | <code> <<, >> </code> | Shift-Operatoren |\n",
  1036. "| &nbsp; | <code> & </code> | bitweises AND |\n",
  1037. "| &nbsp; | <code> ^ </code> | bitweises XOR |\n",
  1038. "| &nbsp; | <code> \\| </code> | bitweises OR |\n",
  1039. "| &nbsp; | <code> <, >, ==, !=, is </code> | Vergleiche |\n",
  1040. "| &nbsp; | <code> not </code> | logisches NOT |\n",
  1041. "| &nbsp; | <code> and </code> | logisches AND |\n",
  1042. "| _Niedrigste_ | <code> or </code> | logisches OR |"
  1043. ]
  1044. },
  1045. {
  1046. "cell_type": "code",
  1047. "execution_count": null,
  1048. "metadata": {
  1049. "pycharm": {
  1050. "is_executing": false,
  1051. "name": "#%%\n"
  1052. },
  1053. "slideshow": {
  1054. "slide_type": "subslide"
  1055. }
  1056. },
  1057. "outputs": [],
  1058. "source": [
  1059. "\"b\" > \"c\" or not 3 < 2 "
  1060. ]
  1061. },
  1062. {
  1063. "cell_type": "markdown",
  1064. "metadata": {},
  1065. "source": [
  1066. "Im Zweifelsfall aber am Besten lieber klammern, alleine schon für eine bessere Lesbarkeit."
  1067. ]
  1068. },
  1069. {
  1070. "cell_type": "markdown",
  1071. "metadata": {
  1072. "slideshow": {
  1073. "slide_type": "slide"
  1074. }
  1075. },
  1076. "source": [
  1077. "#### 1.4.9 Typumwandlung\n",
  1078. "\n",
  1079. "Operationen erwarten, dass die Operanden einen bestimmten Datentyp besitzen. So ist z.B. der Modulo-Operator \n",
  1080. "<code>%</code> nur sinnvoll, wenn die Operanden Zahlen sind. Manchmal besitzen Operatoren auch eine unterschiedliche\n",
  1081. "Semantik in Abhängigkeit vom Datentyp der Operanden."
  1082. ]
  1083. },
  1084. {
  1085. "cell_type": "code",
  1086. "execution_count": null,
  1087. "metadata": {
  1088. "pycharm": {
  1089. "is_executing": false,
  1090. "name": "#%%\n"
  1091. }
  1092. },
  1093. "outputs": [],
  1094. "source": [
  1095. "3 + 4"
  1096. ]
  1097. },
  1098. {
  1099. "cell_type": "code",
  1100. "execution_count": null,
  1101. "metadata": {
  1102. "pycharm": {
  1103. "is_executing": false,
  1104. "name": "#%%\n"
  1105. }
  1106. },
  1107. "outputs": [],
  1108. "source": [
  1109. "\"3\" + \"4\""
  1110. ]
  1111. },
  1112. {
  1113. "cell_type": "markdown",
  1114. "metadata": {
  1115. "slideshow": {
  1116. "slide_type": "slide"
  1117. }
  1118. },
  1119. "source": [
  1120. "Daher ist es gelegentlich notwendig, den Datentyp eines Wertes umzuwandeln. Python stellt hierfür eine ganze Reihe \n",
  1121. "von Built-In Functions bereit. Eine *implizite Typumwandlung*, bei der der Typ eines Wertes \"en passant\" passend gemacht \n",
  1122. "wird, findet in Python - anders als in anderen Sprachen - kaum statt (mit Ausnahme der Umwandlung von ganzen Zahlen in \n",
  1123. "Gleitkommawerte).\n",
  1124. " "
  1125. ]
  1126. },
  1127. {
  1128. "cell_type": "code",
  1129. "execution_count": null,
  1130. "metadata": {
  1131. "pycharm": {
  1132. "is_executing": false,
  1133. "name": "#%%\n"
  1134. }
  1135. },
  1136. "outputs": [],
  1137. "source": [
  1138. "int(\"5\")"
  1139. ]
  1140. },
  1141. {
  1142. "cell_type": "code",
  1143. "execution_count": null,
  1144. "metadata": {
  1145. "pycharm": {
  1146. "name": "#%%\n"
  1147. }
  1148. },
  1149. "outputs": [],
  1150. "source": [
  1151. "int(4.9)"
  1152. ]
  1153. },
  1154. {
  1155. "cell_type": "code",
  1156. "execution_count": null,
  1157. "metadata": {
  1158. "pycharm": {
  1159. "name": "#%%\n"
  1160. }
  1161. },
  1162. "outputs": [],
  1163. "source": [
  1164. "int(\"Hello\")"
  1165. ]
  1166. },
  1167. {
  1168. "cell_type": "code",
  1169. "execution_count": null,
  1170. "metadata": {
  1171. "pycharm": {
  1172. "is_executing": false,
  1173. "name": "#%%\n"
  1174. },
  1175. "slideshow": {
  1176. "slide_type": "subslide"
  1177. }
  1178. },
  1179. "outputs": [],
  1180. "source": [
  1181. "int(True)"
  1182. ]
  1183. },
  1184. {
  1185. "cell_type": "code",
  1186. "execution_count": null,
  1187. "metadata": {
  1188. "pycharm": {
  1189. "is_executing": false,
  1190. "name": "#%%\n"
  1191. }
  1192. },
  1193. "outputs": [],
  1194. "source": [
  1195. "float(\"5.1\")"
  1196. ]
  1197. },
  1198. {
  1199. "cell_type": "code",
  1200. "execution_count": null,
  1201. "metadata": {
  1202. "pycharm": {
  1203. "is_executing": false,
  1204. "name": "#%%\n"
  1205. }
  1206. },
  1207. "outputs": [],
  1208. "source": [
  1209. "float(4)"
  1210. ]
  1211. },
  1212. {
  1213. "cell_type": "code",
  1214. "execution_count": null,
  1215. "metadata": {
  1216. "pycharm": {
  1217. "name": "#%%\n"
  1218. }
  1219. },
  1220. "outputs": [],
  1221. "source": [
  1222. "float(10**310)"
  1223. ]
  1224. },
  1225. {
  1226. "cell_type": "code",
  1227. "execution_count": null,
  1228. "metadata": {
  1229. "pycharm": {
  1230. "name": "#%%\n"
  1231. },
  1232. "slideshow": {
  1233. "slide_type": "subslide"
  1234. }
  1235. },
  1236. "outputs": [],
  1237. "source": [
  1238. "str(10**310)"
  1239. ]
  1240. },
  1241. {
  1242. "cell_type": "code",
  1243. "execution_count": null,
  1244. "metadata": {
  1245. "pycharm": {
  1246. "name": "#%%\n"
  1247. },
  1248. "slideshow": {
  1249. "slide_type": "-"
  1250. }
  1251. },
  1252. "outputs": [],
  1253. "source": [
  1254. "str(3.1415)"
  1255. ]
  1256. },
  1257. {
  1258. "cell_type": "code",
  1259. "execution_count": null,
  1260. "metadata": {
  1261. "pycharm": {
  1262. "name": "#%%\n"
  1263. }
  1264. },
  1265. "outputs": [],
  1266. "source": [
  1267. "str(True)"
  1268. ]
  1269. },
  1270. {
  1271. "cell_type": "code",
  1272. "execution_count": null,
  1273. "metadata": {
  1274. "pycharm": {
  1275. "is_executing": false,
  1276. "name": "#%%\n"
  1277. }
  1278. },
  1279. "outputs": [],
  1280. "source": [
  1281. "ord('A')"
  1282. ]
  1283. },
  1284. {
  1285. "cell_type": "code",
  1286. "execution_count": null,
  1287. "metadata": {
  1288. "pycharm": {
  1289. "is_executing": false,
  1290. "name": "#%%\n"
  1291. }
  1292. },
  1293. "outputs": [],
  1294. "source": [
  1295. "chr(66)"
  1296. ]
  1297. },
  1298. {
  1299. "cell_type": "markdown",
  1300. "metadata": {
  1301. "pycharm": {
  1302. "name": "#%% md\n"
  1303. },
  1304. "slideshow": {
  1305. "slide_type": "slide"
  1306. }
  1307. },
  1308. "source": [
  1309. "Eine Sonderform der Typumwandlung ist die Formatierung beliebiger Werte als lesbarer String.\n",
  1310. "Eine einfache Möglichkeit ist die Angabe eines Formatstrings mit dem Präfix <code>f</code>\n",
  1311. "und Platzhaltern für die einzusetzenden Werte."
  1312. ]
  1313. },
  1314. {
  1315. "cell_type": "code",
  1316. "execution_count": null,
  1317. "metadata": {
  1318. "pycharm": {
  1319. "is_executing": false,
  1320. "name": "#%%\n"
  1321. }
  1322. },
  1323. "outputs": [],
  1324. "source": [
  1325. "article = \"Eis\"\n",
  1326. "price = 2.50\n",
  1327. "\n",
  1328. "f\"{article} kostet {price} Euro\""
  1329. ]
  1330. },
  1331. {
  1332. "cell_type": "markdown",
  1333. "metadata": {},
  1334. "source": [
  1335. "Bei den Platzhaltern kann zusätzlich eine Information zur Mindestbreite etc. hinterlegt werden."
  1336. ]
  1337. },
  1338. {
  1339. "cell_type": "code",
  1340. "execution_count": null,
  1341. "metadata": {
  1342. "pycharm": {
  1343. "is_executing": false,
  1344. "name": "#%%\n"
  1345. }
  1346. },
  1347. "outputs": [],
  1348. "source": [
  1349. "f\"{article:10} kostet {price:2.2f} Euro\""
  1350. ]
  1351. },
  1352. {
  1353. "cell_type": "markdown",
  1354. "metadata": {
  1355. "slideshow": {
  1356. "slide_type": "slide"
  1357. }
  1358. },
  1359. "source": [
  1360. "Es ist nicht notwendig, die Werte in benannten Variablen vorzuhalten, wenn\n",
  1361. "anstelle des Präfix <code>f</code> die Funktion <code>format</code> verwendet wird,\n",
  1362. "die bei jedem String mit Hilfe der Dot-Notation aufgerufen werden kann."
  1363. ]
  1364. },
  1365. {
  1366. "cell_type": "code",
  1367. "execution_count": null,
  1368. "metadata": {
  1369. "pycharm": {
  1370. "is_executing": false,
  1371. "name": "#%%\n"
  1372. }
  1373. },
  1374. "outputs": [],
  1375. "source": [
  1376. "\"{:10} kostet {:2.2f} Euro\".format(\"Eis\", 2.5)"
  1377. ]
  1378. },
  1379. {
  1380. "cell_type": "markdown",
  1381. "metadata": {},
  1382. "source": [
  1383. "In diesem Fall kann die Reihenfolge der Parameter und ihr Auftauchen im Ergebnis auch abweichen."
  1384. ]
  1385. },
  1386. {
  1387. "cell_type": "code",
  1388. "execution_count": null,
  1389. "metadata": {
  1390. "pycharm": {
  1391. "is_executing": false,
  1392. "name": "#%%\n"
  1393. }
  1394. },
  1395. "outputs": [],
  1396. "source": [
  1397. "\"{1:10} kostet {0:2.2f} Euro\".format(2.5, \"Eis\")"
  1398. ]
  1399. },
  1400. {
  1401. "cell_type": "markdown",
  1402. "metadata": {
  1403. "slideshow": {
  1404. "slide_type": "subslide"
  1405. }
  1406. },
  1407. "source": [
  1408. "Hinweis: man findet gelegentlich noch die inzwischen veraltete Form der String-Formatierung, die aber nicht \n",
  1409. "mehr verwendet werden sollte."
  1410. ]
  1411. },
  1412. {
  1413. "cell_type": "code",
  1414. "execution_count": null,
  1415. "metadata": {
  1416. "pycharm": {
  1417. "is_executing": false,
  1418. "name": "#%%\n"
  1419. }
  1420. },
  1421. "outputs": [],
  1422. "source": [
  1423. "\"%-10s kostet %2.2f Euro\" % (\"Eis\", 2.5)"
  1424. ]
  1425. }
  1426. ],
  1427. "metadata": {
  1428. "celltoolbar": "Slideshow",
  1429. "kernelspec": {
  1430. "display_name": "Python 3 (ipykernel)",
  1431. "language": "python",
  1432. "name": "python3"
  1433. },
  1434. "language_info": {
  1435. "codemirror_mode": {
  1436. "name": "ipython",
  1437. "version": 3
  1438. },
  1439. "file_extension": ".py",
  1440. "mimetype": "text/x-python",
  1441. "name": "python",
  1442. "nbconvert_exporter": "python",
  1443. "pygments_lexer": "ipython3",
  1444. "version": "3.9.9"
  1445. },
  1446. "pycharm": {
  1447. "stem_cell": {
  1448. "cell_type": "raw",
  1449. "metadata": {
  1450. "collapsed": false
  1451. },
  1452. "source": []
  1453. }
  1454. }
  1455. },
  1456. "nbformat": 4,
  1457. "nbformat_minor": 1
  1458. }