From 3ca88a8db18215f4b70aa17570dfde0d8c6fb1c6 Mon Sep 17 00:00:00 2001 From: Alexander Hess Date: Mon, 16 Mar 2020 20:51:51 +0100 Subject: [PATCH] Streamline presentation --- 01_elements_00_lecture.ipynb | 26 +- 04_iteration_00_lecture.ipynb | 2 +- 05_numbers_00_lecture.ipynb | 2627 ++++++++++++++++++--------------- 3 files changed, 1463 insertions(+), 1192 deletions(-) diff --git a/01_elements_00_lecture.ipynb b/01_elements_00_lecture.ipynb index f7583ba..89beede 100644 --- a/01_elements_00_lecture.ipynb +++ b/01_elements_00_lecture.ipynb @@ -1308,7 +1308,7 @@ } }, "source": [ - "The `c` object is a so-called **string** type (i.e., `str`), which is Python's way of representing \"text.\" Strings also come with peculiar behaviors, for example, to convert a text to lower, upper, or title case." + "The `c` object is a so-called **string** type (i.e., `str`), which is Python's way of representing \"text.\" Strings also come with peculiar behaviors, for example, to make a text lower or upper case." ] }, { @@ -1383,30 +1383,6 @@ "c.upper()" ] }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Python Rocks'" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "c.title()" - ] - }, { "cell_type": "markdown", "metadata": { diff --git a/04_iteration_00_lecture.ipynb b/04_iteration_00_lecture.ipynb index fb89130..61858c5 100644 --- a/04_iteration_00_lecture.ipynb +++ b/04_iteration_00_lecture.ipynb @@ -52,7 +52,7 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "slide" } }, "source": [ diff --git a/05_numbers_00_lecture.ipynb b/05_numbers_00_lecture.ipynb index e4bed12..771a0ad 100644 --- a/05_numbers_00_lecture.ipynb +++ b/05_numbers_00_lecture.ipynb @@ -29,7 +29,7 @@ "\n", "- [Chapter 1](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/01_elements_00_lecture.ipynb#%28Data%29-Type-%2F-%22Behavior%22) reveals that numbers may come in *different* data types (i.e., `int` vs. `float` so far),\n", "- [Chapter 3](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/03_conditionals_00_lecture.ipynb#Boolean-Expressions) raises questions regarding the **limited precision** of `float` numbers (e.g., `42 == 42.000000000000001` evaluates to `True`), and\n", - "- [Chapter 4](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/04_iteration_00_lecture.ipynb#Infinite-Recursion) shows that sometimes a `float` \"walks\" and \"quacks\" like an `int`, whereas the reverse is true in other cases.\n", + "- [Chapter 4](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/04_iteration_00_lecture.ipynb#Infinite-Recursion) shows that sometimes a `float` \"walks\" and \"quacks\" like an `int`, whereas the reverse is true.\n", "\n", "This chapter introduces all the [built-in numeric types](https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex): `int`, `float`, and `complex`. To mitigate the limited precision of floating-point numbers, we also look at two replacements for the `float` type in the [standard library](https://docs.python.org/3/library/index.html), namely the `Decimal` type in the [decimals](https://docs.python.org/3/library/decimal.html#decimal.Decimal) and the `Fraction` type in the [fractions](https://docs.python.org/3/library/fractions.html#fractions.Fraction) module." ] @@ -53,7 +53,9 @@ } }, "source": [ - "The simplest numeric type is the `int` type: It behaves like an [integer in ordinary math](https://en.wikipedia.org/wiki/Integer) (i.e., the set $\\mathbb{Z}$) and supports operators in the way we saw in the section on arithmetic operators in [Chapter 1](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/01_elements_00_lecture.ipynb#%28Arithmetic%29-Operators)." + "The simplest numeric type is the `int` type: It behaves like an [integer in ordinary math](https://en.wikipedia.org/wiki/Integer) (i.e., the set $\\mathbb{Z}$) and supports operators in the way we saw in the section on arithmetic operators in [Chapter 1](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/01_elements_00_lecture.ipynb#%28Arithmetic%29-Operators).\n", + "\n", + "One way to create `int` objects is by simply writing its value as a literal with the digits `0` to `9`." ] }, { @@ -92,7 +94,7 @@ { "data": { "text/plain": [ - "94315929536576" + "94784085682240" ] }, "execution_count": 2, @@ -160,7 +162,7 @@ } }, "source": [ - "A nice feature in newer Python versions is using underscores `_` as (thousands) separators in numeric literals. For example, `1_000_000` evaluates to `1000000` in memory; the `_` is simply ignored by the interpreter." + "A nice feature in newer Python versions is using underscores `_` as (thousands) separators in numeric literals. For example, `1_000_000` evaluates to `1000000` in memory; the `_` is ignored by the interpreter." ] }, { @@ -195,7 +197,7 @@ } }, "source": [ - "The `int` type follows all rules we know from math, apart from one exception: Whereas mathematicians argue what the term $0^0$ means (cf., this [article](https://en.wikipedia.org/wiki/Zero_to_the_power_of_zero)), programmers are pragmatic about this and define $0^0 = 1$." + "We may place the `_`s anywhere we want." ] }, { @@ -210,7 +212,7 @@ { "data": { "text/plain": [ - "1" + "123456789" ] }, "execution_count": 6, @@ -218,6 +220,252 @@ "output_type": "execute_result" } ], + "source": [ + "1_2_3_4_5_6_7_8_9" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "It is syntactically invalid to write out leading `0` in numeric literals. The reason for that will become apparent in the next section." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid token (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 042\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid token\n" + ] + } + ], + "source": [ + "042" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "Another way to create `int` objects is with the [int()](https://docs.python.org/3/library/functions.html#int) built-in that casts `float` or properly formatted `str` objects as integers. So, decimals are truncated (i.e., \"cut off\")." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "int(42.11)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "int(42.87)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "Whereas the floor division operator `//` effectively rounds towards negative infinity (cf., the \"*(Arithmetic) Operators*\" section in [Chapter 1](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/01_elements_00_lecture.ipynb#%28Arithmetic%29-Operators)), the [int()](https://docs.python.org/3/library/functions.html#int) built-in effectively rounds towards `0`." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-42" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "int(-42.87)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "When casting `str` objects as `int`, the [int()](https://docs.python.org/3/library/functions.html#int) built-in is less forgiving. We must not include any decimals as shows by the `ValueError`. Yet, leading and trailing whitespace is gracefully ignored." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "int(\"42\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "invalid literal for int() with base 10: '42.0'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"42.0\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: '42.0'" + ] + } + ], + "source": [ + "int(\"42.0\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "int(\" 42 \")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "The `int` type follows all rules we know from math, apart from one exception: Whereas mathematicians to this day argue what the term $0^0$ means (cf., this [article](https://en.wikipedia.org/wiki/Zero_to_the_power_of_zero)), programmers are pragmatic about this and simply define $0^0 = 1$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "0 ** 0" ] @@ -277,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 15, "metadata": { "slideshow": { "slide_type": "slide" @@ -290,7 +538,7 @@ "'0b11'" ] }, - "execution_count": 7, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -312,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 16, "metadata": { "slideshow": { "slide_type": "fragment" @@ -325,7 +573,7 @@ "3" ] }, - "execution_count": 8, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -347,7 +595,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 17, "metadata": { "slideshow": { "slide_type": "fragment" @@ -360,7 +608,7 @@ "3" ] }, - "execution_count": 9, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -382,7 +630,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 18, "metadata": { "slideshow": { "slide_type": "fragment" @@ -395,7 +643,7 @@ "3" ] }, - "execution_count": 10, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -417,7 +665,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 19, "metadata": { "slideshow": { "slide_type": "skip" @@ -430,7 +678,7 @@ "'0b1111011'" ] }, - "execution_count": 11, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -452,7 +700,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 20, "metadata": { "slideshow": { "slide_type": "skip" @@ -465,7 +713,7 @@ "123" ] }, - "execution_count": 12, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -487,7 +735,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 21, "metadata": { "slideshow": { "slide_type": "slide" @@ -500,7 +748,7 @@ "'0b0'" ] }, - "execution_count": 13, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -511,7 +759,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 22, "metadata": { "slideshow": { "slide_type": "skip" @@ -524,7 +772,7 @@ "'0b1'" ] }, - "execution_count": 14, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -535,7 +783,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 23, "metadata": { "slideshow": { "slide_type": "skip" @@ -548,7 +796,7 @@ "'0b10'" ] }, - "execution_count": 15, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -559,7 +807,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 24, "metadata": { "slideshow": { "slide_type": "fragment" @@ -572,7 +820,7 @@ "'0b11111111'" ] }, - "execution_count": 16, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -596,7 +844,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 25, "metadata": { "slideshow": { "slide_type": "fragment" @@ -609,7 +857,7 @@ "'0b1100010101'" ] }, - "execution_count": 17, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -660,7 +908,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 26, "metadata": { "slideshow": { "slide_type": "slide" @@ -673,7 +921,7 @@ "3" ] }, - "execution_count": 18, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -684,7 +932,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 27, "metadata": { "slideshow": { "slide_type": "fragment" @@ -697,7 +945,7 @@ "'0b1 + 0b10 = 0b11'" ] }, - "execution_count": 19, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -719,7 +967,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 28, "metadata": { "slideshow": { "slide_type": "fragment" @@ -732,7 +980,7 @@ "4" ] }, - "execution_count": 20, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -743,7 +991,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 29, "metadata": { "slideshow": { "slide_type": "fragment" @@ -756,7 +1004,7 @@ "'0b1 + 0b11 = 0b100'" ] }, - "execution_count": 21, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -778,7 +1026,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 30, "metadata": { "slideshow": { "slide_type": "slide" @@ -791,7 +1039,7 @@ "12" ] }, - "execution_count": 22, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -802,7 +1050,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 31, "metadata": { "slideshow": { "slide_type": "fragment" @@ -815,7 +1063,7 @@ "'0b100 * 0b11 = 0b1100'" ] }, - "execution_count": 23, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -826,7 +1074,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 32, "metadata": { "slideshow": { "slide_type": "fragment" @@ -839,7 +1087,7 @@ "'0b100 * 0b1 = 0b100'" ] }, - "execution_count": 24, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -850,7 +1098,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 33, "metadata": { "slideshow": { "slide_type": "fragment" @@ -863,7 +1111,7 @@ "'0b100 * 0b10 = 0b1000'" ] }, - "execution_count": 25, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -958,7 +1206,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 34, "metadata": { "slideshow": { "slide_type": "slide" @@ -971,7 +1219,7 @@ "'0x0'" ] }, - "execution_count": 26, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -982,7 +1230,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 35, "metadata": { "slideshow": { "slide_type": "fragment" @@ -995,7 +1243,7 @@ "'0x1'" ] }, - "execution_count": 27, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1017,7 +1265,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 36, "metadata": { "slideshow": { "slide_type": "skip" @@ -1030,7 +1278,7 @@ "'0x3'" ] }, - "execution_count": 28, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1052,7 +1300,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 37, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1065,7 +1313,7 @@ "'0xa'" ] }, - "execution_count": 29, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1076,7 +1324,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 38, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1089,7 +1337,7 @@ "'0xf'" ] }, - "execution_count": 30, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1111,7 +1359,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 39, "metadata": { "slideshow": { "slide_type": "slide" @@ -1124,7 +1372,7 @@ "'0b1111011'" ] }, - "execution_count": 31, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1135,7 +1383,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 40, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1148,7 +1396,7 @@ "'0x7b'" ] }, - "execution_count": 32, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1170,7 +1418,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 41, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1183,7 +1431,7 @@ "123" ] }, - "execution_count": 33, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1205,7 +1453,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 42, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1218,7 +1466,7 @@ "123" ] }, - "execution_count": 34, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1240,7 +1488,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 43, "metadata": { "slideshow": { "slide_type": "skip" @@ -1253,7 +1501,7 @@ "'0x0'" ] }, - "execution_count": 35, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1264,7 +1512,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 44, "metadata": { "slideshow": { "slide_type": "skip" @@ -1277,7 +1525,7 @@ "'0xff'" ] }, - "execution_count": 36, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1299,7 +1547,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 45, "metadata": { "slideshow": { "slide_type": "skip" @@ -1312,7 +1560,7 @@ "'0x315'" ] }, - "execution_count": 37, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1358,7 +1606,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 46, "metadata": { "slideshow": { "slide_type": "skip" @@ -1371,7 +1619,7 @@ "'-0b11'" ] }, - "execution_count": 38, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1382,7 +1630,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 47, "metadata": { "slideshow": { "slide_type": "skip" @@ -1395,7 +1643,7 @@ "'-0x3'" ] }, - "execution_count": 39, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1406,7 +1654,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 48, "metadata": { "slideshow": { "slide_type": "skip" @@ -1419,7 +1667,7 @@ "'-0b11111111'" ] }, - "execution_count": 40, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1430,7 +1678,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 49, "metadata": { "slideshow": { "slide_type": "skip" @@ -1443,7 +1691,7 @@ "'-0xff'" ] }, - "execution_count": 41, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1476,7 +1724,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 50, "metadata": { "slideshow": { "slide_type": "slide" @@ -1489,7 +1737,7 @@ "1" ] }, - "execution_count": 42, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1500,7 +1748,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 51, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1513,7 +1761,7 @@ "42" ] }, - "execution_count": 43, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -1524,7 +1772,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 52, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1537,7 +1785,7 @@ "0.0" ] }, - "execution_count": 44, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1559,7 +1807,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 53, "metadata": { "slideshow": { "slide_type": "slide" @@ -1572,7 +1820,7 @@ "1" ] }, - "execution_count": 45, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -1583,7 +1831,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 54, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1596,7 +1844,7 @@ "0" ] }, - "execution_count": 46, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -1618,7 +1866,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 55, "metadata": { "slideshow": { "slide_type": "slide" @@ -1631,7 +1879,7 @@ "'0b1'" ] }, - "execution_count": 47, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -1642,7 +1890,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 56, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1655,7 +1903,7 @@ "'0b0'" ] }, - "execution_count": 48, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -1677,7 +1925,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 57, "metadata": { "slideshow": { "slide_type": "skip" @@ -1690,7 +1938,7 @@ "'0x1'" ] }, - "execution_count": 49, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -1701,7 +1949,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 58, "metadata": { "slideshow": { "slide_type": "skip" @@ -1714,7 +1962,7 @@ "'0x0'" ] }, - "execution_count": 50, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -1736,7 +1984,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 59, "metadata": { "slideshow": { "slide_type": "slide" @@ -1750,7 +1998,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: int() argument must be a string, a bytes-like object or a number, not 'NoneType'" ] } @@ -1787,7 +2035,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 60, "metadata": { "slideshow": { "slide_type": "slide" @@ -1800,7 +2048,7 @@ "9" ] }, - "execution_count": 52, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } @@ -1811,7 +2059,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 61, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1824,7 +2072,7 @@ "'0b1011 & 0b1101'" ] }, - "execution_count": 53, + "execution_count": 61, "metadata": {}, "output_type": "execute_result" } @@ -1835,7 +2083,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 62, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1848,7 +2096,7 @@ "'0b1001'" ] }, - "execution_count": 54, + "execution_count": 62, "metadata": {}, "output_type": "execute_result" } @@ -1870,7 +2118,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 63, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1883,7 +2131,7 @@ "9" ] }, - "execution_count": 55, + "execution_count": 63, "metadata": {}, "output_type": "execute_result" } @@ -1905,7 +2153,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 64, "metadata": { "slideshow": { "slide_type": "slide" @@ -1918,7 +2166,7 @@ "13" ] }, - "execution_count": 56, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } @@ -1929,7 +2177,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 65, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1942,7 +2190,7 @@ "'0b1001 | 0b1101'" ] }, - "execution_count": 57, + "execution_count": 65, "metadata": {}, "output_type": "execute_result" } @@ -1953,7 +2201,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 66, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1966,7 +2214,7 @@ "'0b1101'" ] }, - "execution_count": 58, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" } @@ -1988,7 +2236,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 67, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2001,7 +2249,7 @@ "13" ] }, - "execution_count": 59, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } @@ -2023,7 +2271,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 68, "metadata": { "slideshow": { "slide_type": "slide" @@ -2036,7 +2284,7 @@ "4" ] }, - "execution_count": 60, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } @@ -2047,7 +2295,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 69, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2060,7 +2308,7 @@ "'0b1001 ^ 0b1101'" ] }, - "execution_count": 61, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -2071,7 +2319,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 70, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2084,7 +2332,7 @@ "'0b100'" ] }, - "execution_count": 62, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } @@ -2106,7 +2354,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 71, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2119,7 +2367,7 @@ "4" ] }, - "execution_count": 63, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -2143,7 +2391,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 72, "metadata": { "slideshow": { "slide_type": "slide" @@ -2156,7 +2404,7 @@ "-8" ] }, - "execution_count": 64, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -2167,7 +2415,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 73, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2180,7 +2428,7 @@ "True" ] }, - "execution_count": 65, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } @@ -2191,7 +2439,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 74, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2204,7 +2452,7 @@ "'-0b1000'" ] }, - "execution_count": 66, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } @@ -2215,7 +2463,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 75, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2228,7 +2476,7 @@ "'-0b1000'" ] }, - "execution_count": 67, + "execution_count": 75, "metadata": {}, "output_type": "execute_result" } @@ -2250,7 +2498,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 76, "metadata": { "slideshow": { "slide_type": "skip" @@ -2263,7 +2511,7 @@ "-1" ] }, - "execution_count": 68, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -2287,7 +2535,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 77, "metadata": { "slideshow": { "slide_type": "slide" @@ -2300,7 +2548,7 @@ "28" ] }, - "execution_count": 69, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } @@ -2311,7 +2559,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 78, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2324,7 +2572,7 @@ "'0b111'" ] }, - "execution_count": 70, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -2335,7 +2583,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 79, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2348,7 +2596,7 @@ "'0b11100'" ] }, - "execution_count": 71, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } @@ -2359,7 +2607,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 80, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2372,7 +2620,7 @@ "28" ] }, - "execution_count": 72, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } @@ -2394,7 +2642,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 81, "metadata": { "slideshow": { "slide_type": "slide" @@ -2407,7 +2655,7 @@ "3" ] }, - "execution_count": 73, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } @@ -2418,7 +2666,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 82, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2431,7 +2679,7 @@ "'0b111'" ] }, - "execution_count": 74, + "execution_count": 82, "metadata": {}, "output_type": "execute_result" } @@ -2442,7 +2690,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 83, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2455,7 +2703,7 @@ "'0b11'" ] }, - "execution_count": 75, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" } @@ -2466,7 +2714,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 84, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2479,7 +2727,7 @@ "3" ] }, - "execution_count": 76, + "execution_count": 84, "metadata": {}, "output_type": "execute_result" } @@ -2518,7 +2766,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 85, "metadata": { "slideshow": { "slide_type": "slide" @@ -2531,7 +2779,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 86, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2541,10 +2789,10 @@ { "data": { "text/plain": [ - "139674754277776" + "139663468493296" ] }, - "execution_count": 78, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } @@ -2555,7 +2803,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 87, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2568,272 +2816,13 @@ "float" ] }, - "execution_count": 79, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(b)" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42.0" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "b" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "As with integer literals above, we may use underscores `_` to make longer `float` objects easier to read." - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.123456789" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "0.123_456_789" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "In cases where the dot `.` is unnecessary from a mathematical point of view, we either need to end the number with it nevertheless or use the [float()](https://docs.python.org/3/library/functions.html#float) built-in to cast the number explicitly. [float()](https://docs.python.org/3/library/functions.html#float) can process any numeric object or a properly formatted `str` object." - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42.0" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "42." - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42.0" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42.0" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"42\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "Leading and trailing whitespace is ignored ..." - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42.87" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\" 42.87 \")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "... but not whitespace in between." - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [ - { - "ename": "ValueError", - "evalue": "could not convert string to float: '42. 87'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"42. 87\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mValueError\u001b[0m: could not convert string to float: '42. 87'" - ] - } - ], - "source": [ - "float(\"42. 87\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "`float` objects are implicitly created as the result of dividing an `int` object by another with the division operator `/`." - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.3333333333333333" - ] - }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "1 / 3" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "In general, if we combine `float` and `int` objects in arithmetic operations, we always end up with a `float` type: Python uses the \"broader\" representation." + "type(b)" ] }, { @@ -2857,12 +2846,82 @@ } ], "source": [ - "40.0 + 2" + "b" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "As with integer literals above, we may use underscores `_` to make longer `float` objects easier to read." ] }, { "cell_type": "code", "execution_count": 89, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.123456789" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "0.123_456_789" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "In cases where the dot `.` is unnecessary from a mathematical point of view, we either need to end the number with it nevertheless or use the [float()](https://docs.python.org/3/library/functions.html#float) built-in to cast the number explicitly. [float()](https://docs.python.org/3/library/functions.html#float) can process any numeric object or a properly formatted `str` object." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42.0" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "42." + ] + }, + { + "cell_type": "code", + "execution_count": 91, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2875,7 +2934,196 @@ "42.0" ] }, - "execution_count": 89, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(42)" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42.0" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\"42\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "Leading and trailing whitespace is ignored ..." + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42.87" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\" 42.87 \")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "... but not whitespace in between." + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "could not convert string to float: '42. 87'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"42. 87\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mValueError\u001b[0m: could not convert string to float: '42. 87'" + ] + } + ], + "source": [ + "float(\"42. 87\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "`float` objects are implicitly created as the result of dividing an `int` object by another with the division operator `/`." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.3333333333333333" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 / 3" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "In general, if we combine `float` and `int` objects in arithmetic operations, we always end up with a `float` type: Python uses the \"broader\" representation." + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42.0" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "40.0 + 2" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42.0" + ] + }, + "execution_count": 97, "metadata": {}, "output_type": "execute_result" } @@ -2908,7 +3156,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 98, "metadata": { "slideshow": { "slide_type": "slide" @@ -2921,7 +3169,7 @@ "1.23" ] }, - "execution_count": 90, + "execution_count": 98, "metadata": {}, "output_type": "execute_result" } @@ -2943,7 +3191,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 99, "metadata": { "slideshow": { "slide_type": "skip" @@ -2952,10 +3200,10 @@ "outputs": [ { "ename": "SyntaxError", - "evalue": "invalid syntax (, line 1)", + "evalue": "invalid syntax (, line 1)", "output_type": "error", "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 1.23 e0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 1.23 e0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], @@ -2965,7 +3213,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 100, "metadata": { "slideshow": { "slide_type": "skip" @@ -2974,10 +3222,10 @@ "outputs": [ { "ename": "SyntaxError", - "evalue": "invalid syntax (, line 1)", + "evalue": "invalid syntax (, line 1)", "output_type": "error", "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 1.23e 0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 1.23e 0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], @@ -2987,7 +3235,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 101, "metadata": { "slideshow": { "slide_type": "skip" @@ -2996,10 +3244,10 @@ "outputs": [ { "ename": "SyntaxError", - "evalue": "invalid syntax (, line 1)", + "evalue": "invalid syntax (, line 1)", "output_type": "error", "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 1.23e0.0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 1.23e0.0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], @@ -3020,7 +3268,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 102, "metadata": { "slideshow": { "slide_type": "skip" @@ -3034,7 +3282,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0me0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0me0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'e0' is not defined" ] } @@ -3056,7 +3304,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 103, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3069,7 +3317,7 @@ "1.0" ] }, - "execution_count": 95, + "execution_count": 103, "metadata": {}, "output_type": "execute_result" } @@ -3091,7 +3339,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 104, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3104,7 +3352,7 @@ "1000.0" ] }, - "execution_count": 96, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" } @@ -3126,7 +3374,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 105, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3139,7 +3387,7 @@ "0.001" ] }, - "execution_count": 97, + "execution_count": 105, "metadata": {}, "output_type": "execute_result" } @@ -3170,255 +3418,19 @@ "There are also three special values representing \"**not a number,**\" called `nan`, and positive or negative **infinity**, called `inf` or `-inf`, that are created by passing in the corresponding abbreviation as a `str` object to the [float()](https://docs.python.org/3/library/functions.html#float) built-in. These values could be used, for example, as the result of a mathematically undefined operation like division by zero or to model the value of a mathematical function as it goes to infinity." ] }, - { - "cell_type": "code", - "execution_count": 98, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "nan" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"nan\") # also float(\"NaN\")" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "inf" - ] - }, - "execution_count": 99, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"+inf\") # also float(\"+infinity\") or float(\"infinity\")" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "inf" - ] - }, - "execution_count": 100, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"inf\") # same as float(\"+inf\")" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-inf" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"-inf\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "`nan` objects *never* compare equal to *anything*, not even to themselves. This happens in accordance with the [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) standard." - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"nan\") == float(\"nan\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "Another caveat is that any arithmetic involving a `nan` object results in `nan`. In other words, the addition below **fails silently** as no error is raised. As this also happens in accordance with the [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) standard, we *need* to be aware of that and check any data we work with for any `nan` occurrences *before* doing any calculations." - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "nan" - ] - }, - "execution_count": 103, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "42 + float(\"nan\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "On the contrary, as two values go to infinity, there is no such concept as difference and *everything* compares equal." - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"inf\") == float(\"inf\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "Adding `42` to `inf` makes no difference." - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "inf" - ] - }, - "execution_count": 105, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"inf\") + 42" - ] - }, { "cell_type": "code", "execution_count": 106, "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ - "True" + "nan" ] }, "execution_count": 106, @@ -3427,18 +3439,7 @@ } ], "source": [ - "float(\"inf\") + 42 == float(\"inf\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "We observe the same for multiplication ..." + "float(\"nan\") # also float(\"NaN\")" ] }, { @@ -3462,12 +3463,259 @@ } ], "source": [ - "42 * float(\"inf\")" + "float(\"+inf\") # also float(\"+infinity\") or float(\"infinity\")" ] }, { "cell_type": "code", "execution_count": 108, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "inf" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\"inf\") # same as float(\"+inf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-inf" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\"-inf\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "`nan` objects *never* compare equal to *anything*, not even to themselves. This happens in accordance with the [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) standard." + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\"nan\") == float(\"nan\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "Another caveat is that any arithmetic involving a `nan` object results in `nan`. In other words, the addition below **fails silently** as no error is raised. As this also happens in accordance with the [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) standard, we *need* to be aware of that and check any data we work with for any `nan` occurrences *before* doing any calculations." + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "nan" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "42 + float(\"nan\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "On the contrary, as two values go to infinity, there is no such concept as difference and *everything* compares equal." + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\"inf\") == float(\"inf\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "Adding `42` to `inf` makes no difference." + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "inf" + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\"inf\") + 42" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(\"inf\") + 42 == float(\"inf\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "We observe the same for multiplication ..." + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "inf" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "42 * float(\"inf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 116, "metadata": { "slideshow": { "slide_type": "skip" @@ -3480,7 +3728,7 @@ "True" ] }, - "execution_count": 108, + "execution_count": 116, "metadata": {}, "output_type": "execute_result" } @@ -3502,7 +3750,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 117, "metadata": { "slideshow": { "slide_type": "skip" @@ -3515,7 +3763,7 @@ "inf" ] }, - "execution_count": 109, + "execution_count": 117, "metadata": {}, "output_type": "execute_result" } @@ -3526,7 +3774,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 118, "metadata": { "slideshow": { "slide_type": "skip" @@ -3539,7 +3787,7 @@ "True" ] }, - "execution_count": 110, + "execution_count": 118, "metadata": {}, "output_type": "execute_result" } @@ -3561,7 +3809,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 119, "metadata": { "slideshow": { "slide_type": "skip" @@ -3574,7 +3822,7 @@ "inf" ] }, - "execution_count": 111, + "execution_count": 119, "metadata": {}, "output_type": "execute_result" } @@ -3585,7 +3833,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 120, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3598,7 +3846,7 @@ "True" ] }, - "execution_count": 112, + "execution_count": 120, "metadata": {}, "output_type": "execute_result" } @@ -3620,7 +3868,7 @@ }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 121, "metadata": { "slideshow": { "slide_type": "slide" @@ -3633,7 +3881,7 @@ "nan" ] }, - "execution_count": 113, + "execution_count": 121, "metadata": {}, "output_type": "execute_result" } @@ -3644,7 +3892,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 122, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3657,7 +3905,7 @@ "nan" ] }, - "execution_count": 114, + "execution_count": 122, "metadata": {}, "output_type": "execute_result" } @@ -3692,7 +3940,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 123, "metadata": { "slideshow": { "slide_type": "slide" @@ -3705,7 +3953,7 @@ "1000000000000001.0" ] }, - "execution_count": 115, + "execution_count": 123, "metadata": {}, "output_type": "execute_result" } @@ -3716,7 +3964,7 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 124, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3729,7 +3977,7 @@ "1e+16" ] }, - "execution_count": 116, + "execution_count": 124, "metadata": {}, "output_type": "execute_result" } @@ -3751,7 +3999,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 125, "metadata": { "slideshow": { "slide_type": "slide" @@ -3764,7 +4012,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 126, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3777,7 +4025,7 @@ "2.0000000000000004" ] }, - "execution_count": 118, + "execution_count": 126, "metadata": {}, "output_type": "execute_result" } @@ -3788,7 +4036,7 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 127, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3801,7 +4049,7 @@ "0.30000000000000004" ] }, - "execution_count": 119, + "execution_count": 127, "metadata": {}, "output_type": "execute_result" } @@ -3823,7 +4071,7 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 128, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3836,7 +4084,7 @@ "False" ] }, - "execution_count": 120, + "execution_count": 128, "metadata": {}, "output_type": "execute_result" } @@ -3847,7 +4095,7 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 129, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3860,7 +4108,7 @@ "False" ] }, - "execution_count": 121, + "execution_count": 129, "metadata": {}, "output_type": "execute_result" } @@ -3882,7 +4130,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 130, "metadata": { "slideshow": { "slide_type": "slide" @@ -3895,7 +4143,7 @@ }, { "cell_type": "code", - "execution_count": 123, + "execution_count": 131, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3908,7 +4156,7 @@ "True" ] }, - "execution_count": 123, + "execution_count": 131, "metadata": {}, "output_type": "execute_result" } @@ -3919,7 +4167,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 132, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3932,7 +4180,7 @@ "True" ] }, - "execution_count": 124, + "execution_count": 132, "metadata": {}, "output_type": "execute_result" } @@ -3949,14 +4197,14 @@ } }, "source": [ - "The built-in [format()](https://docs.python.org/3/library/functions.html#format) function allows us to show the **significant digits** of a `float` number as they exist in memory to arbitrary precision. To exemplify it, let's view a couple of `float` objects with `50` digits. This analysis reveals that almost no `float` number is precise! After $14$ or $15$ digits \"weird\" things happen. As we see further below, the \"random\" digits ending the `float` numbers do *not* \"physically\" exist in memory.\n", + "The built-in [format()](https://docs.python.org/3/library/functions.html#format) function allows us to show the **significant digits** of a `float` number as they exist in memory to arbitrary precision. To exemplify it, let's view a couple of `float` objects with `50` digits. This analysis reveals that almost no `float` number is precise! After 14 or 15 digits \"weird\" things happen. As we see further below, the \"random\" digits ending the `float` numbers do *not* \"physically\" exist in memory! Rather, they are \"calculated\" by the [format()](https://docs.python.org/3/library/functions.html#format) function that is forced to show `50` digits.\n", "\n", - "The [format()](https://docs.python.org/3/library/functions.html#format) function is different from the [format()](https://docs.python.org/3/library/stdtypes.html#str.format) method on `str` objects introduced in the next chapter and both work with the so-called [format specification mini-language](https://docs.python.org/3/library/string.html#format-specification-mini-language): `\".50f\"` is the instruction to show `50` digits of a `float` number. But let's not worry too much about these details for now." + "The [format()](https://docs.python.org/3/library/functions.html#format) function is different from the [format()](https://docs.python.org/3/library/stdtypes.html#str.format) method on `str` objects introduced in the next chapter (cf., [Chapter 6](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/master/06_text_00_lecture.ipynb#format%28%29-Method)): Yet, both work with the so-called [format specification mini-language](https://docs.python.org/3/library/string.html#format-specification-mini-language): `\".50f\"` is the instruction to show `50` digits of a `float` number." ] }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 133, "metadata": { "slideshow": { "slide_type": "slide" @@ -3969,7 +4217,7 @@ "'0.10000000000000000555111512312578270211815834045410'" ] }, - "execution_count": 125, + "execution_count": 133, "metadata": {}, "output_type": "execute_result" } @@ -3980,7 +4228,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 134, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3993,7 +4241,7 @@ "'0.20000000000000001110223024625156540423631668090820'" ] }, - "execution_count": 126, + "execution_count": 134, "metadata": {}, "output_type": "execute_result" } @@ -4004,7 +4252,7 @@ }, { "cell_type": "code", - "execution_count": 127, + "execution_count": 135, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4017,7 +4265,7 @@ "'0.29999999999999998889776975374843459576368331909180'" ] }, - "execution_count": 127, + "execution_count": 135, "metadata": {}, "output_type": "execute_result" } @@ -4028,7 +4276,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 136, "metadata": { "slideshow": { "slide_type": "slide" @@ -4041,7 +4289,7 @@ "'0.33333333333333331482961625624739099293947219848633'" ] }, - "execution_count": 128, + "execution_count": 136, "metadata": {}, "output_type": "execute_result" } @@ -4067,7 +4315,7 @@ }, { "cell_type": "code", - "execution_count": 129, + "execution_count": 137, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4080,7 +4328,7 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": 138, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4093,7 +4341,7 @@ "0.33333" ] }, - "execution_count": 130, + "execution_count": 138, "metadata": {}, "output_type": "execute_result" } @@ -4104,7 +4352,7 @@ }, { "cell_type": "code", - "execution_count": 131, + "execution_count": 139, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4117,7 +4365,7 @@ "'0.33333000000000001517008740847813896834850311279297'" ] }, - "execution_count": 131, + "execution_count": 139, "metadata": {}, "output_type": "execute_result" } @@ -4139,7 +4387,7 @@ }, { "cell_type": "code", - "execution_count": 132, + "execution_count": 140, "metadata": { "slideshow": { "slide_type": "slide" @@ -4152,7 +4400,7 @@ "'0.12500000000000000000000000000000000000000000000000'" ] }, - "execution_count": 132, + "execution_count": 140, "metadata": {}, "output_type": "execute_result" } @@ -4163,7 +4411,7 @@ }, { "cell_type": "code", - "execution_count": 133, + "execution_count": 141, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4176,7 +4424,7 @@ "'0.25000000000000000000000000000000000000000000000000'" ] }, - "execution_count": 133, + "execution_count": 141, "metadata": {}, "output_type": "execute_result" } @@ -4187,7 +4435,7 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": 142, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4200,7 +4448,7 @@ "True" ] }, - "execution_count": 134, + "execution_count": 142, "metadata": {}, "output_type": "execute_result" } @@ -4287,7 +4535,7 @@ }, { "cell_type": "code", - "execution_count": 135, + "execution_count": 143, "metadata": { "slideshow": { "slide_type": "slide" @@ -4300,7 +4548,7 @@ }, { "cell_type": "code", - "execution_count": 136, + "execution_count": 144, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4313,7 +4561,7 @@ "'0x1.0000000000000p-3'" ] }, - "execution_count": 136, + "execution_count": 144, "metadata": {}, "output_type": "execute_result" } @@ -4335,7 +4583,7 @@ }, { "cell_type": "code", - "execution_count": 137, + "execution_count": 145, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4348,7 +4596,7 @@ "(1, 8)" ] }, - "execution_count": 137, + "execution_count": 145, "metadata": {}, "output_type": "execute_result" } @@ -4359,7 +4607,7 @@ }, { "cell_type": "code", - "execution_count": 138, + "execution_count": 146, "metadata": { "slideshow": { "slide_type": "slide" @@ -4372,7 +4620,7 @@ "'0x1.555475a31a4bep-2'" ] }, - "execution_count": 138, + "execution_count": 146, "metadata": {}, "output_type": "execute_result" } @@ -4383,7 +4631,7 @@ }, { "cell_type": "code", - "execution_count": 139, + "execution_count": 147, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4396,7 +4644,7 @@ "(3002369727582815, 9007199254740992)" ] }, - "execution_count": 139, + "execution_count": 147, "metadata": {}, "output_type": "execute_result" } @@ -4418,7 +4666,7 @@ }, { "cell_type": "code", - "execution_count": 140, + "execution_count": 148, "metadata": { "slideshow": { "slide_type": "skip" @@ -4431,7 +4679,7 @@ }, { "cell_type": "code", - "execution_count": 141, + "execution_count": 149, "metadata": { "slideshow": { "slide_type": "skip" @@ -4444,7 +4692,7 @@ "'0x0.0p+0'" ] }, - "execution_count": 141, + "execution_count": 149, "metadata": {}, "output_type": "execute_result" } @@ -4455,7 +4703,7 @@ }, { "cell_type": "code", - "execution_count": 142, + "execution_count": 150, "metadata": { "slideshow": { "slide_type": "skip" @@ -4468,7 +4716,7 @@ "(0, 1)" ] }, - "execution_count": 142, + "execution_count": 150, "metadata": {}, "output_type": "execute_result" } @@ -4490,7 +4738,7 @@ }, { "cell_type": "code", - "execution_count": 143, + "execution_count": 151, "metadata": { "slideshow": { "slide_type": "skip" @@ -4503,7 +4751,7 @@ "False" ] }, - "execution_count": 143, + "execution_count": 151, "metadata": {}, "output_type": "execute_result" } @@ -4514,7 +4762,7 @@ }, { "cell_type": "code", - "execution_count": 144, + "execution_count": 152, "metadata": { "slideshow": { "slide_type": "skip" @@ -4527,7 +4775,7 @@ "True" ] }, - "execution_count": 144, + "execution_count": 152, "metadata": {}, "output_type": "execute_result" } @@ -4551,7 +4799,7 @@ }, { "cell_type": "code", - "execution_count": 145, + "execution_count": 153, "metadata": { "slideshow": { "slide_type": "skip" @@ -4564,7 +4812,7 @@ }, { "cell_type": "code", - "execution_count": 146, + "execution_count": 154, "metadata": { "slideshow": { "slide_type": "skip" @@ -4577,7 +4825,7 @@ "sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)" ] }, - "execution_count": 146, + "execution_count": 154, "metadata": {}, "output_type": "execute_result" } @@ -4612,7 +4860,7 @@ }, { "cell_type": "code", - "execution_count": 147, + "execution_count": 155, "metadata": { "slideshow": { "slide_type": "slide" @@ -4636,7 +4884,7 @@ }, { "cell_type": "code", - "execution_count": 148, + "execution_count": 156, "metadata": { "slideshow": { "slide_type": "fragment" @@ -4649,7 +4897,7 @@ "Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])" ] }, - "execution_count": 148, + "execution_count": 156, "metadata": {}, "output_type": "execute_result" } @@ -4669,242 +4917,6 @@ "The two simplest ways to create a `Decimal` object is to either **instantiate** it with an `int` or a `str` object consisting of all the significant digits. In the latter case, the scientific notation is also possible." ] }, - { - "cell_type": "code", - "execution_count": 149, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('42')" - ] - }, - "execution_count": 149, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('0.1')" - ] - }, - "execution_count": 150, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(\"0.1\")" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('0.001')" - ] - }, - "execution_count": 151, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(\"1e-3\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "It is *not* a good idea to create a `Decimal` from a `float` object. If we did so, we would create a `Decimal` object that internally used extra bits to store the \"random\" digits that are not stored in the `float` object in the first place." - ] - }, - { - "cell_type": "code", - "execution_count": 152, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('0.1000000000000000055511151231257827021181583404541015625')" - ] - }, - "execution_count": 152, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(0.1) # do not do this" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "With the `Decimal` type, the imprecisions in the arithmetic and equality comparisons from above go away." - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('0.3')" - ] - }, - "execution_count": 153, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(\"0.1\") + Decimal(\"0.2\")" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 154, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(\"0.1\") + Decimal(\"0.2\") == Decimal(\"0.3\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "`Decimal` numbers *preserve* the **significant digits**, even in cases where this is not needed." - ] - }, - { - "cell_type": "code", - "execution_count": 155, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('0.30000')" - ] - }, - "execution_count": 155, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(\"0.10000\") + Decimal(\"0.20000\")" - ] - }, - { - "cell_type": "code", - "execution_count": 156, - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 156, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Decimal(\"0.10000\") + Decimal(\"0.20000\") == Decimal(\"0.3\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "Arithmetic operations between `Decimal` and `int` objects work as the latter are inherently precise: The results are *new* `Decimal` objects." - ] - }, { "cell_type": "code", "execution_count": 157, @@ -4926,7 +4938,7 @@ } ], "source": [ - "21 + Decimal(21)" + "Decimal(42)" ] }, { @@ -4941,7 +4953,7 @@ { "data": { "text/plain": [ - "Decimal('42.0')" + "Decimal('0.1')" ] }, "execution_count": 158, @@ -4949,13 +4961,249 @@ "output_type": "execute_result" } ], + "source": [ + "Decimal(\"0.1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Decimal('0.001')" + ] + }, + "execution_count": 159, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Decimal(\"1e-3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "It is *not* a good idea to create a `Decimal` from a `float` object. If we did so, we would create a `Decimal` object that internally used extra bits to store the \"random\" digits that are not stored in the `float` object in the first place." + ] + }, + { + "cell_type": "code", + "execution_count": 160, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Decimal('0.1000000000000000055511151231257827021181583404541015625')" + ] + }, + "execution_count": 160, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Decimal(0.1) # do not do this" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "With the `Decimal` type, the imprecisions in the arithmetic and equality comparisons from above go away." + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Decimal('0.3')" + ] + }, + "execution_count": 161, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Decimal(\"0.1\") + Decimal(\"0.2\")" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 162, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Decimal(\"0.1\") + Decimal(\"0.2\") == Decimal(\"0.3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "`Decimal` numbers *preserve* the **significant digits**, even in cases where this is not needed." + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Decimal('0.30000')" + ] + }, + "execution_count": 163, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Decimal(\"0.10000\") + Decimal(\"0.20000\")" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 164, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Decimal(\"0.10000\") + Decimal(\"0.20000\") == Decimal(\"0.3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "Arithmetic operations between `Decimal` and `int` objects work as the latter are inherently precise: The results are *new* `Decimal` objects." + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Decimal('42')" + ] + }, + "execution_count": 165, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "21 + Decimal(21)" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Decimal('42.0')" + ] + }, + "execution_count": 166, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "10 * Decimal(\"4.2\")" ] }, { "cell_type": "code", - "execution_count": 159, + "execution_count": 167, "metadata": { "slideshow": { "slide_type": "slide" @@ -4968,7 +5216,7 @@ "Decimal('0.1')" ] }, - "execution_count": 159, + "execution_count": 167, "metadata": {}, "output_type": "execute_result" } @@ -4990,7 +5238,7 @@ }, { "cell_type": "code", - "execution_count": 160, + "execution_count": 168, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5003,7 +5251,7 @@ "'0.10000000000000000000000000000000000000000000000000'" ] }, - "execution_count": 160, + "execution_count": 168, "metadata": {}, "output_type": "execute_result" } @@ -5014,7 +5262,7 @@ }, { "cell_type": "code", - "execution_count": 161, + "execution_count": 169, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5027,7 +5275,7 @@ "'0.10000000000000000555111512312578270211815834045410'" ] }, - "execution_count": 161, + "execution_count": 169, "metadata": {}, "output_type": "execute_result" } @@ -5049,7 +5297,7 @@ }, { "cell_type": "code", - "execution_count": 162, + "execution_count": 170, "metadata": { "slideshow": { "slide_type": "slide" @@ -5063,7 +5311,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;36m1.0\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m42\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;36m1.0\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m42\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for *: 'float' and 'decimal.Decimal'" ] } @@ -5085,7 +5333,7 @@ }, { "cell_type": "code", - "execution_count": 163, + "execution_count": 171, "metadata": { "slideshow": { "slide_type": "skip" @@ -5098,7 +5346,7 @@ "Decimal('2')" ] }, - "execution_count": 163, + "execution_count": 171, "metadata": {}, "output_type": "execute_result" } @@ -5109,7 +5357,7 @@ }, { "cell_type": "code", - "execution_count": 164, + "execution_count": 172, "metadata": { "slideshow": { "slide_type": "slide" @@ -5122,7 +5370,7 @@ "Decimal('1.414213562373095048801688724')" ] }, - "execution_count": 164, + "execution_count": 172, "metadata": {}, "output_type": "execute_result" } @@ -5146,7 +5394,7 @@ }, { "cell_type": "code", - "execution_count": 165, + "execution_count": 173, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5159,7 +5407,7 @@ "Decimal('1.999999999999999999999999999')" ] }, - "execution_count": 165, + "execution_count": 173, "metadata": {}, "output_type": "execute_result" } @@ -5185,7 +5433,7 @@ }, { "cell_type": "code", - "execution_count": 166, + "execution_count": 174, "metadata": { "slideshow": { "slide_type": "slide" @@ -5198,7 +5446,7 @@ "Decimal('2.0000')" ] }, - "execution_count": 166, + "execution_count": 174, "metadata": {}, "output_type": "execute_result" } @@ -5220,7 +5468,7 @@ }, { "cell_type": "code", - "execution_count": 167, + "execution_count": 175, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5234,7 +5482,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mInvalidOperation\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtwo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquantize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"1e-28\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtwo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquantize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"1e-28\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mInvalidOperation\u001b[0m: []" ] } @@ -5256,7 +5504,7 @@ }, { "cell_type": "code", - "execution_count": 168, + "execution_count": 176, "metadata": { "slideshow": { "slide_type": "skip" @@ -5269,7 +5517,7 @@ "True" ] }, - "execution_count": 168, + "execution_count": 176, "metadata": {}, "output_type": "execute_result" } @@ -5291,7 +5539,7 @@ }, { "cell_type": "code", - "execution_count": 169, + "execution_count": 177, "metadata": { "slideshow": { "slide_type": "skip" @@ -5304,7 +5552,7 @@ "True" ] }, - "execution_count": 169, + "execution_count": 177, "metadata": {}, "output_type": "execute_result" } @@ -5326,7 +5574,7 @@ }, { "cell_type": "code", - "execution_count": 170, + "execution_count": 178, "metadata": { "slideshow": { "slide_type": "skip" @@ -5339,7 +5587,7 @@ "Decimal('NaN')" ] }, - "execution_count": 170, + "execution_count": 178, "metadata": {}, "output_type": "execute_result" } @@ -5361,7 +5609,7 @@ }, { "cell_type": "code", - "execution_count": 171, + "execution_count": 179, "metadata": { "slideshow": { "slide_type": "skip" @@ -5374,7 +5622,7 @@ "False" ] }, - "execution_count": 171, + "execution_count": 179, "metadata": {}, "output_type": "execute_result" } @@ -5396,7 +5644,7 @@ }, { "cell_type": "code", - "execution_count": 172, + "execution_count": 180, "metadata": { "slideshow": { "slide_type": "skip" @@ -5409,7 +5657,7 @@ "Decimal('Infinity')" ] }, - "execution_count": 172, + "execution_count": 180, "metadata": {}, "output_type": "execute_result" } @@ -5420,7 +5668,7 @@ }, { "cell_type": "code", - "execution_count": 173, + "execution_count": 181, "metadata": { "slideshow": { "slide_type": "skip" @@ -5433,7 +5681,7 @@ "Decimal('-Infinity')" ] }, - "execution_count": 173, + "execution_count": 181, "metadata": {}, "output_type": "execute_result" } @@ -5444,7 +5692,7 @@ }, { "cell_type": "code", - "execution_count": 174, + "execution_count": 182, "metadata": { "slideshow": { "slide_type": "skip" @@ -5457,7 +5705,7 @@ "Decimal('Infinity')" ] }, - "execution_count": 174, + "execution_count": 182, "metadata": {}, "output_type": "execute_result" } @@ -5468,7 +5716,7 @@ }, { "cell_type": "code", - "execution_count": 175, + "execution_count": 183, "metadata": { "slideshow": { "slide_type": "skip" @@ -5481,7 +5729,7 @@ "True" ] }, - "execution_count": 175, + "execution_count": 183, "metadata": {}, "output_type": "execute_result" } @@ -5503,7 +5751,7 @@ }, { "cell_type": "code", - "execution_count": 176, + "execution_count": 184, "metadata": { "slideshow": { "slide_type": "skip" @@ -5517,7 +5765,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mInvalidOperation\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"inf\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"-inf\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"inf\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"-inf\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mInvalidOperation\u001b[0m: []" ] } @@ -5528,7 +5776,7 @@ }, { "cell_type": "code", - "execution_count": 177, + "execution_count": 185, "metadata": { "slideshow": { "slide_type": "skip" @@ -5542,7 +5790,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mInvalidOperation\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"inf\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"inf\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"inf\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"inf\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mInvalidOperation\u001b[0m: []" ] } @@ -5588,7 +5836,7 @@ }, { "cell_type": "code", - "execution_count": 178, + "execution_count": 186, "metadata": { "slideshow": { "slide_type": "slide" @@ -5612,7 +5860,7 @@ }, { "cell_type": "code", - "execution_count": 179, + "execution_count": 187, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5625,7 +5873,7 @@ "Fraction(1, 3)" ] }, - "execution_count": 179, + "execution_count": 187, "metadata": {}, "output_type": "execute_result" } @@ -5636,7 +5884,7 @@ }, { "cell_type": "code", - "execution_count": 180, + "execution_count": 188, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5649,7 +5897,7 @@ "Fraction(1, 3)" ] }, - "execution_count": 180, + "execution_count": 188, "metadata": {}, "output_type": "execute_result" } @@ -5660,7 +5908,7 @@ }, { "cell_type": "code", - "execution_count": 181, + "execution_count": 189, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5673,7 +5921,7 @@ "Fraction(3333333333, 10000000000)" ] }, - "execution_count": 181, + "execution_count": 189, "metadata": {}, "output_type": "execute_result" } @@ -5684,7 +5932,7 @@ }, { "cell_type": "code", - "execution_count": 182, + "execution_count": 190, "metadata": { "slideshow": { "slide_type": "skip" @@ -5697,7 +5945,7 @@ "Fraction(3333333333, 10000000000)" ] }, - "execution_count": 182, + "execution_count": 190, "metadata": {}, "output_type": "execute_result" } @@ -5719,7 +5967,7 @@ }, { "cell_type": "code", - "execution_count": 183, + "execution_count": 191, "metadata": { "slideshow": { "slide_type": "slide" @@ -5732,7 +5980,7 @@ "Fraction(3, 2)" ] }, - "execution_count": 183, + "execution_count": 191, "metadata": {}, "output_type": "execute_result" } @@ -5743,7 +5991,7 @@ }, { "cell_type": "code", - "execution_count": 184, + "execution_count": 192, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5756,7 +6004,7 @@ "Fraction(3, 2)" ] }, - "execution_count": 184, + "execution_count": 192, "metadata": {}, "output_type": "execute_result" } @@ -5778,7 +6026,7 @@ }, { "cell_type": "code", - "execution_count": 185, + "execution_count": 193, "metadata": { "slideshow": { "slide_type": "slide" @@ -5791,7 +6039,7 @@ "Fraction(1, 10)" ] }, - "execution_count": 185, + "execution_count": 193, "metadata": {}, "output_type": "execute_result" } @@ -5813,7 +6061,7 @@ }, { "cell_type": "code", - "execution_count": 186, + "execution_count": 194, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5826,7 +6074,7 @@ "Fraction(3602879701896397, 36028797018963968)" ] }, - "execution_count": 186, + "execution_count": 194, "metadata": {}, "output_type": "execute_result" } @@ -5848,7 +6096,7 @@ }, { "cell_type": "code", - "execution_count": 187, + "execution_count": 195, "metadata": { "slideshow": { "slide_type": "slide" @@ -5861,7 +6109,7 @@ "Fraction(7, 4)" ] }, - "execution_count": 187, + "execution_count": 195, "metadata": {}, "output_type": "execute_result" } @@ -5872,7 +6120,7 @@ }, { "cell_type": "code", - "execution_count": 188, + "execution_count": 196, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5885,7 +6133,7 @@ "Fraction(1, 2)" ] }, - "execution_count": 188, + "execution_count": 196, "metadata": {}, "output_type": "execute_result" } @@ -5896,7 +6144,7 @@ }, { "cell_type": "code", - "execution_count": 189, + "execution_count": 197, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5909,7 +6157,7 @@ "Fraction(1, 1)" ] }, - "execution_count": 189, + "execution_count": 197, "metadata": {}, "output_type": "execute_result" } @@ -5920,7 +6168,7 @@ }, { "cell_type": "code", - "execution_count": 190, + "execution_count": 198, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5933,7 +6181,7 @@ "Fraction(1, 1)" ] }, - "execution_count": 190, + "execution_count": 198, "metadata": {}, "output_type": "execute_result" } @@ -5955,7 +6203,7 @@ }, { "cell_type": "code", - "execution_count": 191, + "execution_count": 199, "metadata": { "slideshow": { "slide_type": "slide" @@ -5968,7 +6216,7 @@ "0.1" ] }, - "execution_count": 191, + "execution_count": 199, "metadata": {}, "output_type": "execute_result" } @@ -5979,7 +6227,7 @@ }, { "cell_type": "code", - "execution_count": 192, + "execution_count": 200, "metadata": { "slideshow": { "slide_type": "fragment" @@ -5992,7 +6240,7 @@ "'0.10000000000000000555111512312578270211815834045410'" ] }, - "execution_count": 192, + "execution_count": 200, "metadata": {}, "output_type": "execute_result" } @@ -6031,7 +6279,7 @@ } }, "source": [ - "#### What is the solution to $x^2 = -1$ ?" + "**What is the solution to $x^2 = -1$ ?**" ] }, { @@ -6077,7 +6325,7 @@ }, { "cell_type": "code", - "execution_count": 193, + "execution_count": 201, "metadata": { "slideshow": { "slide_type": "slide" @@ -6090,7 +6338,7 @@ }, { "cell_type": "code", - "execution_count": 194, + "execution_count": 202, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6100,10 +6348,10 @@ { "data": { "text/plain": [ - "139674754426928" + "139663415663408" ] }, - "execution_count": 194, + "execution_count": 202, "metadata": {}, "output_type": "execute_result" } @@ -6114,7 +6362,7 @@ }, { "cell_type": "code", - "execution_count": 195, + "execution_count": 203, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6127,7 +6375,7 @@ "complex" ] }, - "execution_count": 195, + "execution_count": 203, "metadata": {}, "output_type": "execute_result" } @@ -6138,7 +6386,7 @@ }, { "cell_type": "code", - "execution_count": 196, + "execution_count": 204, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6151,7 +6399,7 @@ "1j" ] }, - "execution_count": 196, + "execution_count": 204, "metadata": {}, "output_type": "execute_result" } @@ -6173,7 +6421,7 @@ }, { "cell_type": "code", - "execution_count": 197, + "execution_count": 205, "metadata": { "slideshow": { "slide_type": "slide" @@ -6186,7 +6434,7 @@ "True" ] }, - "execution_count": 197, + "execution_count": 205, "metadata": {}, "output_type": "execute_result" } @@ -6208,7 +6456,7 @@ }, { "cell_type": "code", - "execution_count": 198, + "execution_count": 206, "metadata": { "slideshow": { "slide_type": "slide" @@ -6221,7 +6469,7 @@ "(2+0.5j)" ] }, - "execution_count": 198, + "execution_count": 206, "metadata": {}, "output_type": "execute_result" } @@ -6243,7 +6491,7 @@ }, { "cell_type": "code", - "execution_count": 199, + "execution_count": 207, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6256,7 +6504,7 @@ "(2+0.5j)" ] }, - "execution_count": 199, + "execution_count": 207, "metadata": {}, "output_type": "execute_result" } @@ -6278,7 +6526,7 @@ }, { "cell_type": "code", - "execution_count": 200, + "execution_count": 208, "metadata": { "slideshow": { "slide_type": "skip" @@ -6291,7 +6539,7 @@ "(2+0j)" ] }, - "execution_count": 200, + "execution_count": 208, "metadata": {}, "output_type": "execute_result" } @@ -6313,7 +6561,7 @@ }, { "cell_type": "code", - "execution_count": 201, + "execution_count": 209, "metadata": { "slideshow": { "slide_type": "skip" @@ -6326,7 +6574,7 @@ "(2+0.5j)" ] }, - "execution_count": 201, + "execution_count": 209, "metadata": {}, "output_type": "execute_result" } @@ -6337,7 +6585,7 @@ }, { "cell_type": "code", - "execution_count": 202, + "execution_count": 210, "metadata": { "slideshow": { "slide_type": "skip" @@ -6350,7 +6598,7 @@ "(2+0.5j)" ] }, - "execution_count": 202, + "execution_count": 210, "metadata": {}, "output_type": "execute_result" } @@ -6372,7 +6620,7 @@ }, { "cell_type": "code", - "execution_count": 203, + "execution_count": 211, "metadata": { "slideshow": { "slide_type": "slide" @@ -6386,7 +6634,7 @@ }, { "cell_type": "code", - "execution_count": 204, + "execution_count": 212, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6399,7 +6647,7 @@ "(4+6j)" ] }, - "execution_count": 204, + "execution_count": 212, "metadata": {}, "output_type": "execute_result" } @@ -6410,7 +6658,7 @@ }, { "cell_type": "code", - "execution_count": 205, + "execution_count": 213, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6423,7 +6671,7 @@ "(-2-2j)" ] }, - "execution_count": 205, + "execution_count": 213, "metadata": {}, "output_type": "execute_result" } @@ -6434,7 +6682,7 @@ }, { "cell_type": "code", - "execution_count": 206, + "execution_count": 214, "metadata": { "slideshow": { "slide_type": "skip" @@ -6447,7 +6695,7 @@ "(2+2j)" ] }, - "execution_count": 206, + "execution_count": 214, "metadata": {}, "output_type": "execute_result" } @@ -6458,7 +6706,7 @@ }, { "cell_type": "code", - "execution_count": 207, + "execution_count": 215, "metadata": { "slideshow": { "slide_type": "skip" @@ -6471,7 +6719,7 @@ "(0.5-4j)" ] }, - "execution_count": 207, + "execution_count": 215, "metadata": {}, "output_type": "execute_result" } @@ -6482,7 +6730,7 @@ }, { "cell_type": "code", - "execution_count": 208, + "execution_count": 216, "metadata": { "slideshow": { "slide_type": "skip" @@ -6495,7 +6743,7 @@ "(5+10j)" ] }, - "execution_count": 208, + "execution_count": 216, "metadata": {}, "output_type": "execute_result" } @@ -6506,7 +6754,7 @@ }, { "cell_type": "code", - "execution_count": 209, + "execution_count": 217, "metadata": { "slideshow": { "slide_type": "skip" @@ -6519,7 +6767,7 @@ "(0.5+0.6666666666666666j)" ] }, - "execution_count": 209, + "execution_count": 217, "metadata": {}, "output_type": "execute_result" } @@ -6530,7 +6778,7 @@ }, { "cell_type": "code", - "execution_count": 210, + "execution_count": 218, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6543,7 +6791,7 @@ "(-5+10j)" ] }, - "execution_count": 210, + "execution_count": 218, "metadata": {}, "output_type": "execute_result" } @@ -6554,7 +6802,7 @@ }, { "cell_type": "code", - "execution_count": 211, + "execution_count": 219, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6567,7 +6815,7 @@ "(0.44+0.08j)" ] }, - "execution_count": 211, + "execution_count": 219, "metadata": {}, "output_type": "execute_result" } @@ -6589,7 +6837,7 @@ }, { "cell_type": "code", - "execution_count": 212, + "execution_count": 220, "metadata": { "slideshow": { "slide_type": "slide" @@ -6602,7 +6850,7 @@ "5.0" ] }, - "execution_count": 212, + "execution_count": 220, "metadata": {}, "output_type": "execute_result" } @@ -6624,7 +6872,7 @@ }, { "cell_type": "code", - "execution_count": 213, + "execution_count": 221, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6637,7 +6885,7 @@ "1.0" ] }, - "execution_count": 213, + "execution_count": 221, "metadata": {}, "output_type": "execute_result" } @@ -6648,7 +6896,7 @@ }, { "cell_type": "code", - "execution_count": 214, + "execution_count": 222, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6661,7 +6909,7 @@ "2.0" ] }, - "execution_count": 214, + "execution_count": 222, "metadata": {}, "output_type": "execute_result" } @@ -6683,7 +6931,7 @@ }, { "cell_type": "code", - "execution_count": 215, + "execution_count": 223, "metadata": { "slideshow": { "slide_type": "fragment" @@ -6696,7 +6944,7 @@ "(1-2j)" ] }, - "execution_count": 215, + "execution_count": 223, "metadata": {}, "output_type": "execute_result" } @@ -6784,7 +7032,7 @@ }, { "cell_type": "code", - "execution_count": 216, + "execution_count": 224, "metadata": { "slideshow": { "slide_type": "slide" @@ -6797,7 +7045,7 @@ }, { "cell_type": "code", - "execution_count": 217, + "execution_count": 225, "metadata": { "slideshow": { "slide_type": "slide" @@ -6825,7 +7073,7 @@ " 'abstractmethod']" ] }, - "execution_count": 217, + "execution_count": 225, "metadata": {}, "output_type": "execute_result" } @@ -6851,7 +7099,7 @@ }, { "cell_type": "code", - "execution_count": 218, + "execution_count": 226, "metadata": { "scrolled": true, "slideshow": { @@ -6962,7 +7210,7 @@ }, { "cell_type": "code", - "execution_count": 219, + "execution_count": 227, "metadata": { "slideshow": { "slide_type": "skip" @@ -7142,7 +7390,7 @@ }, { "cell_type": "code", - "execution_count": 220, + "execution_count": 228, "metadata": { "slideshow": { "slide_type": "slide" @@ -7155,7 +7403,7 @@ "1" ] }, - "execution_count": 220, + "execution_count": 228, "metadata": {}, "output_type": "execute_result" } @@ -7166,7 +7414,7 @@ }, { "cell_type": "code", - "execution_count": 221, + "execution_count": 229, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7179,7 +7427,7 @@ "42.87" ] }, - "execution_count": 221, + "execution_count": 229, "metadata": {}, "output_type": "execute_result" } @@ -7190,7 +7438,7 @@ }, { "cell_type": "code", - "execution_count": 222, + "execution_count": 230, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7203,7 +7451,7 @@ "5.0" ] }, - "execution_count": 222, + "execution_count": 230, "metadata": {}, "output_type": "execute_result" } @@ -7225,7 +7473,7 @@ }, { "cell_type": "code", - "execution_count": 223, + "execution_count": 231, "metadata": { "slideshow": { "slide_type": "slide" @@ -7238,7 +7486,7 @@ "100" ] }, - "execution_count": 223, + "execution_count": 231, "metadata": {}, "output_type": "execute_result" } @@ -7249,7 +7497,7 @@ }, { "cell_type": "code", - "execution_count": 224, + "execution_count": 232, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7262,7 +7510,7 @@ "42" ] }, - "execution_count": 224, + "execution_count": 232, "metadata": {}, "output_type": "execute_result" } @@ -7284,7 +7532,7 @@ }, { "cell_type": "code", - "execution_count": 225, + "execution_count": 233, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7298,7 +7546,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mround\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m2j\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mround\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m2j\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: type complex doesn't define __round__ method" ] } @@ -7333,7 +7581,7 @@ }, { "cell_type": "code", - "execution_count": 226, + "execution_count": 234, "metadata": { "slideshow": { "slide_type": "slide" @@ -7346,7 +7594,7 @@ "True" ] }, - "execution_count": 226, + "execution_count": 234, "metadata": {}, "output_type": "execute_result" } @@ -7368,7 +7616,7 @@ }, { "cell_type": "code", - "execution_count": 227, + "execution_count": 235, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7381,7 +7629,7 @@ "True" ] }, - "execution_count": 227, + "execution_count": 235, "metadata": {}, "output_type": "execute_result" } @@ -7392,7 +7640,7 @@ }, { "cell_type": "code", - "execution_count": 228, + "execution_count": 236, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7405,7 +7653,7 @@ "True" ] }, - "execution_count": 228, + "execution_count": 236, "metadata": {}, "output_type": "execute_result" } @@ -7416,7 +7664,7 @@ }, { "cell_type": "code", - "execution_count": 229, + "execution_count": 237, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7429,7 +7677,7 @@ "True" ] }, - "execution_count": 229, + "execution_count": 237, "metadata": {}, "output_type": "execute_result" } @@ -7451,7 +7699,7 @@ }, { "cell_type": "code", - "execution_count": 230, + "execution_count": 238, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7464,7 +7712,7 @@ "False" ] }, - "execution_count": 230, + "execution_count": 238, "metadata": {}, "output_type": "execute_result" } @@ -7486,7 +7734,7 @@ }, { "cell_type": "code", - "execution_count": 231, + "execution_count": 239, "metadata": { "slideshow": { "slide_type": "skip" @@ -7499,7 +7747,7 @@ "True" ] }, - "execution_count": 231, + "execution_count": 239, "metadata": {}, "output_type": "execute_result" } @@ -7534,7 +7782,7 @@ }, { "cell_type": "code", - "execution_count": 232, + "execution_count": 240, "metadata": { "slideshow": { "slide_type": "slide" @@ -7585,7 +7833,7 @@ }, { "cell_type": "code", - "execution_count": 233, + "execution_count": 241, "metadata": { "slideshow": { "slide_type": "slide" @@ -7598,7 +7846,7 @@ "1" ] }, - "execution_count": 233, + "execution_count": 241, "metadata": {}, "output_type": "execute_result" } @@ -7609,7 +7857,7 @@ }, { "cell_type": "code", - "execution_count": 234, + "execution_count": 242, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7622,7 +7870,7 @@ "6" ] }, - "execution_count": 234, + "execution_count": 242, "metadata": {}, "output_type": "execute_result" } @@ -7633,7 +7881,7 @@ }, { "cell_type": "code", - "execution_count": 235, + "execution_count": 243, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7646,7 +7894,7 @@ "6" ] }, - "execution_count": 235, + "execution_count": 243, "metadata": {}, "output_type": "execute_result" } @@ -7668,7 +7916,7 @@ }, { "cell_type": "code", - "execution_count": 236, + "execution_count": 244, "metadata": { "slideshow": { "slide_type": "slide" @@ -7682,8 +7930,8 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfactorial\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3.1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mfactorial\u001b[0;34m(n, strict)\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnumbers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mReal\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mstrict\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"n is not integer-like; it has decimals\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 20\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfactorial\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3.1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mfactorial\u001b[0;34m(n, strict)\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnumbers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mReal\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mstrict\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"n is not integer-like; it has decimals\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 20\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: n is not integer-like; it has decimals" ] } @@ -7705,7 +7953,7 @@ }, { "cell_type": "code", - "execution_count": 237, + "execution_count": 245, "metadata": { "slideshow": { "slide_type": "fragment" @@ -7718,7 +7966,7 @@ "6" ] }, - "execution_count": 237, + "execution_count": 245, "metadata": {}, "output_type": "execute_result" } @@ -7740,7 +7988,7 @@ }, { "cell_type": "code", - "execution_count": 238, + "execution_count": 246, "metadata": { "slideshow": { "slide_type": "slide" @@ -7754,8 +8002,8 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfactorial\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m2j\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mfactorial\u001b[0;34m(n, strict)\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Factorial is only defined for integers\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfactorial\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m2j\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mfactorial\u001b[0;34m(n, strict)\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Factorial is only defined for integers\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: Factorial is only defined for integers" ] } @@ -7824,7 +8072,7 @@ }, { "cell_type": "code", - "execution_count": 239, + "execution_count": 247, "metadata": { "slideshow": { "slide_type": "skip" @@ -7846,10 +8094,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 239, + "execution_count": 247, "metadata": {}, "output_type": "execute_result" } @@ -7861,7 +8109,7 @@ }, { "cell_type": "code", - "execution_count": 240, + "execution_count": 248, "metadata": { "slideshow": { "slide_type": "skip" @@ -7883,10 +8131,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 240, + "execution_count": 248, "metadata": {}, "output_type": "execute_result" } @@ -7908,7 +8156,7 @@ }, { "cell_type": "code", - "execution_count": 241, + "execution_count": 249, "metadata": { "slideshow": { "slide_type": "skip" @@ -7930,10 +8178,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 241, + "execution_count": 249, "metadata": {}, "output_type": "execute_result" } @@ -7942,6 +8190,53 @@ "YouTubeVideo(\"4qH4unVtJkE\", width=\"60%\")" ] }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "This video by the YouTube channel [Computerphile](https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA) explains floating point numbers in an intuitive way with some numeric examples." + ] + }, + { + "cell_type": "code", + "execution_count": 250, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 250, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "YouTubeVideo(\"PZRI1IfStY0\", width=\"60%\")" + ] + }, { "cell_type": "markdown", "metadata": { @@ -7955,7 +8250,7 @@ }, { "cell_type": "code", - "execution_count": 242, + "execution_count": 251, "metadata": { "slideshow": { "slide_type": "skip" @@ -7977,10 +8272,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 242, + "execution_count": 251, "metadata": {}, "output_type": "execute_result" }