From b1193dc02fc55a87a3c3f8d3d40015d8875026e9 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 20:21:09 +0200 Subject: [PATCH 01/10] Cleaned up systematic markdown issues and code literals. --- .ipynb_checkpoints/00-checkpoint.ipynb | 32 ++--- 00.ipynb | 30 ++-- 01.ipynb | 189 ++++++++----------------- 02.ipynb | 10 +- 03.ipynb | 74 +++++----- 04.ipynb | 62 ++++---- 05.ipynb | 20 +-- 06.ipynb | 42 +++--- 07.ipynb | 14 +- 9 files changed, 203 insertions(+), 270 deletions(-) diff --git a/.ipynb_checkpoints/00-checkpoint.ipynb b/.ipynb_checkpoints/00-checkpoint.ipynb index 4c95d8d..eaeb7fb 100644 --- a/.ipynb_checkpoints/00-checkpoint.ipynb +++ b/.ipynb_checkpoints/00-checkpoint.ipynb @@ -4,21 +4,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" + "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#Python-Lectures" + "# Python-Lectures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Introduction" + "## Introduction" ] }, { @@ -32,7 +32,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Installation" + "## Installation" ] }, { @@ -52,7 +52,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Installation from unofficial distributions" + "### Installation from unofficial distributions" ] }, { @@ -66,7 +66,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "####Anaconda" + "#### Anaconda" ] }, { @@ -82,7 +82,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "####Canopy" + "#### Canopy" ] }, { @@ -98,7 +98,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Launching IPython Notebook" + "## Launching IPython Notebook" ] }, { @@ -116,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##How to learn from this resource?" + "## How to learn from this resource?" ] }, { @@ -136,7 +136,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##License" + "## License" ] }, { @@ -149,23 +149,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/00.ipynb b/00.ipynb index 7298166..eaeb7fb 100644 --- a/00.ipynb +++ b/00.ipynb @@ -11,14 +11,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Python-Lectures" + "# Python-Lectures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Introduction" + "## Introduction" ] }, { @@ -32,7 +32,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Installation" + "## Installation" ] }, { @@ -52,7 +52,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Installation from unofficial distributions" + "### Installation from unofficial distributions" ] }, { @@ -66,7 +66,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "####Anaconda" + "#### Anaconda" ] }, { @@ -82,7 +82,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "####Canopy" + "#### Canopy" ] }, { @@ -98,7 +98,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Launching IPython Notebook" + "## Launching IPython Notebook" ] }, { @@ -116,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##How to learn from this resource?" + "## How to learn from this resource?" ] }, { @@ -136,7 +136,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##License" + "## License" ] }, { @@ -149,23 +149,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/01.ipynb b/01.ipynb index 42e738e..19d1ec0 100644 --- a/01.ipynb +++ b/01.ipynb @@ -11,15 +11,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#The Zen Of Python" + "# The Zen Of Python" ] }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -83,9 +81,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -120,9 +116,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -147,7 +141,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Arithmetic Operators" + "## Arithmetic Operators" ] }, { @@ -168,9 +162,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -190,9 +182,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -212,9 +202,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -234,9 +222,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -263,9 +249,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -285,9 +269,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -314,9 +296,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -337,7 +317,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Relational Operators" + "## Relational Operators" ] }, { @@ -368,9 +348,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -390,9 +368,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -413,7 +389,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Bitwise Operators" + "## Bitwise Operators" ] }, { @@ -445,9 +421,7 @@ { "cell_type": "code", "execution_count": 17, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -466,9 +440,7 @@ { "cell_type": "code", "execution_count": 18, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -499,9 +471,7 @@ { "cell_type": "code", "execution_count": 19, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -533,7 +503,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Built-in Functions" + "# Built-in Functions" ] }, { @@ -547,22 +517,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Conversion from one system to another" + "## Conversion from one system to another" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Conversion from hexadecimal to decimal is done by adding prefix **0x** to the hexadecimal value or vice versa by using built in **hex( )**, Octal to decimal by adding prefix **0** to the octal value or vice versa by using built in function **oct( )**." + "Conversion from hexadecimal to decimal is done by adding prefix `0x` to the hexadecimal value or vice versa by using built in `hex( )`, Octal to decimal by adding prefix `0` to the octal value or vice versa by using built in function `oct( )`." ] }, { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -582,9 +550,7 @@ { "cell_type": "code", "execution_count": 21, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -604,9 +570,7 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -626,9 +590,7 @@ { "cell_type": "code", "execution_count": 23, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -649,15 +611,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**int( )** accepts two values when used for conversion, one is the value in a different number system and the other is its base. Note that input number in the different number system should be of string type." + "`int( )` accepts two values when used for conversion, one is the value in a different number system and the other is its base. Note that input number in the different number system should be of string type." ] }, { "cell_type": "code", "execution_count": 24, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -679,15 +639,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**int( )** can also be used to get only the integer value of a float number or can be used to convert a number which is of type string to integer format. Similarly, the function **str( )** can be used to convert the integer back to string format" + "`int( )` can also be used to get only the integer value of a float number or can be used to convert a number which is of type string to integer format. Similarly, the function `str( )` can be used to convert the integer back to string format" ] }, { "cell_type": "code", "execution_count": 25, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -707,15 +665,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Also note that function **bin( )** is used for binary and **float( )** for decimal/float values. **chr( )** is used for converting ASCII to its alphabet equivalent, **ord( )** is used for the other way round." + "Also note that function `bin( )` is used for binary and `float( )` for decimal/float values. `chr( )` is used for converting ASCII to its alphabet equivalent, `ord( )` is used for the other way round." ] }, { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -735,9 +691,7 @@ { "cell_type": "code", "execution_count": 27, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -758,21 +712,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Simplifying Arithmetic Operations" + "## Simplifying Arithmetic Operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**round( )** function rounds the input value to a specified number of places or to the nearest integer. " + "`round( )` function rounds the input value to a specified number of places or to the nearest integer. " ] }, { "cell_type": "code", "execution_count": 28, "metadata": { - "collapsed": false, "scrolled": false }, "outputs": [ @@ -794,15 +747,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**complex( )** is used to define a complex number and **abs( )** outputs the absolute value of the same." + "`complex( )` is used to define a complex number and `abs( )` outputs the absolute value of the same." ] }, { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -821,15 +772,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**divmod(x,y)** outputs the quotient and the remainder in a tuple(you will be learning about it in the further chapters) in the format (quotient, remainder). " + "`divmod(x,y)` outputs the quotient and the remainder in a tuple(you will be learning about it in the further chapters) in the format (quotient, remainder). " ] }, { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -850,15 +799,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**isinstance( )** returns True, if the first argument is an instance of that class. Multiple classes can also be checked at once." + "`isinstance( )` returns True, if the first argument is an instance of that class. Multiple classes can also be checked at once." ] }, { "cell_type": "code", "execution_count": 31, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -880,7 +827,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**cmp(x,y)**\n", + "`cmp(x,y)`\n", "\n", "|x ? y|Output|\n", "|---|---|\n", @@ -892,9 +839,7 @@ { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -916,15 +861,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pow(x,y,z)** can be used to find the power $x^y$ also the mod of the resulting value with the third specified number can be found i.e. : ($x^y$ % z)." + "`pow(x,y,z)` can be used to find the power $x^y$ also the mod of the resulting value with the third specified number can be found i.e. : ($x^y$ % z)." ] }, { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -944,15 +887,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**range( )** function outputs the integers of the specified range. It can also be used to generate a series by specifying the difference between the two numbers within a particular range. The elements are returned in a list (will be discussing in detail later.)" + "`range( )` function outputs the integers of the specified range. It can also be used to generate a series by specifying the difference between the two numbers within a particular range. The elements are returned in a list (will be discussing in detail later.)" ] }, { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -974,22 +915,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Accepting User Inputs" + "## Accepting User Inputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**raw_input( )** accepts input and stores it as a string. Hence, if the user inputs a integer, the code should convert the string to an integer and then proceed." + "`raw_input( )` accepts input and stores it as a string. Hence, if the user inputs a integer, the code should convert the string to an integer and then proceed." ] }, { "cell_type": "code", "execution_count": 35, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1006,9 +945,7 @@ { "cell_type": "code", "execution_count": 36, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -1029,15 +966,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**input( )**, this is used only for accepting only integer inputs." + "`input( )`, this is used only for accepting only integer inputs." ] }, { "cell_type": "code", "execution_count": 37, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1054,9 +989,7 @@ { "cell_type": "code", "execution_count": 38, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -1077,29 +1010,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that **type( )** returns the format or the type of a variable or a number" + "Note that `type( )` returns the format or the type of a variable or a number" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/02.ipynb b/02.ipynb index c4cb722..7b5a610 100644 --- a/02.ipynb +++ b/02.ipynb @@ -11,14 +11,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Print Statement" + "# Print Statement" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The **print** statement can be used in the following different ways :\n", + "The `print` statement can be used in the following different ways :\n", "\n", " - print \"Hello World\"\n", " - print \"Hello\", \n", @@ -158,7 +158,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**%s** is used to refer to a variable which contains a string." + "`%s` is used to refer to a variable which contains a string." ] }, { @@ -253,7 +253,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Other Examples" + "## Other Examples" ] }, { @@ -378,7 +378,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#PrecisionWidth and FieldWidth" + "# PrecisionWidth and FieldWidth" ] }, { diff --git a/03.ipynb b/03.ipynb index 7a9de7f..0082443 100644 --- a/03.ipynb +++ b/03.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Data Structures" + "# Data Structures" ] }, { @@ -25,7 +25,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Lists" + "## Lists" ] }, { @@ -371,14 +371,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Built in List Functions" + "### Built in List Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To find the length of the list or the number of elements in a list, **len( )** is used." + "To find the length of the list or the number of elements in a list, `len( )` is used." ] }, { @@ -407,7 +407,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If the list consists of all integer elements then **min( )** and **max( )** gives the minimum and maximum value in the list." + "If the list consists of all integer elements then `min( )` and `max( )` gives the minimum and maximum value in the list." ] }, { @@ -556,7 +556,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In a list with elements as string, **max( )** and **min( )** is applicable. **max( )** would return a string element whose ASCII value is the highest and the lowest when **min( )** is used. Note that only the first index of each element is considered each time and if they value is the same then second index considered so on and so forth." + "In a list with elements as string, `max( )` and `min( )` is applicable. `max( )` would return a string element whose ASCII value is the highest and the lowest when `min( )` is used. Note that only the first index of each element is considered each time and if they value is the same then second index considered so on and so forth." ] }, { @@ -641,7 +641,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "But if you want to find the **max( )** string element based on the length of the string then another parameter 'key=len' is declared inside the **max( )** and **min( )** function." + "But if you want to find the `max( )` string element based on the length of the string then another parameter 'key=len' is declared inside the `max( )` and `min( )` function." ] }, { @@ -669,11 +669,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "But even 'Water' has length 5. **max()** or **min()** function returns the first element when there are two or more elements with the same length.\n", + "But even 'Water' has length 5. `max()` or `min()` function returns the first element when there are two or more elements with the same length.\n", "\n", "Any other built in function can be used or lambda function (will be discussed later) in place of len.\n", "\n", - "A string can be converted into a list by using the **list()** function." + "A string can be converted into a list by using the `list()` function." ] }, { @@ -702,7 +702,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**append( )** is used to add a element at the end of the list." + "`append( )` is used to add a element at the end of the list." ] }, { @@ -740,7 +740,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**count( )** is used to count the number of a particular element that is present in the list. " + "`count( )` is used to count the number of a particular element that is present in the list. " ] }, { @@ -769,7 +769,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**append( )** function can also be used to add a entire list at the end. Observe that the resultant list becomes a nested list." + "`append( )` function can also be used to add a entire list at the end. Observe that the resultant list becomes a nested list." ] }, { @@ -809,7 +809,7 @@ "collapsed": false }, "source": [ - "But if nested list is not what is desired then **extend( )** function can be used." + "But if nested list is not what is desired then `extend( )` function can be used." ] }, { @@ -836,7 +836,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**index( )** is used to find the index value of a particular element. Note that if there are multiple elements of the same value then the first index value of that element is returned." + "`index( )` is used to find the index value of a particular element. Note that if there are multiple elements of the same value then the first index value of that element is returned." ] }, { @@ -865,7 +865,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**insert(x,y)** is used to insert a element y at a specified index value x. **append( )** function made it only possible to insert at the end. " + "`insert(x,y)` is used to insert a element y at a specified index value x. `append( )` function made it only possible to insert at the end. " ] }, { @@ -892,7 +892,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**insert(x,y)** inserts but does not replace element. If you want to replace the element with another element you simply assign the value to that particular index." + "`insert(x,y)` inserts but does not replace element. If you want to replace the element with another element you simply assign the value to that particular index." ] }, { @@ -919,7 +919,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** function return the last element in the list. This is similar to the operation of a stack. Hence it wouldn't be wrong to tell that lists can be used as a stack." + "`pop( )` function return the last element in the list. This is similar to the operation of a stack. Hence it wouldn't be wrong to tell that lists can be used as a stack." ] }, { @@ -977,7 +977,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** is used to remove element based on it's index value which can be assigned to a variable. One can also remove element by specifying the element itself using the **remove( )** function." + "`pop( )` is used to remove element based on it's index value which can be assigned to a variable. One can also remove element by specifying the element itself using the `remove( )` function." ] }, { @@ -1004,7 +1004,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Alternative to **remove** function but with using index value is **del**" + "Alternative to `remove` function but with using index value is `del`" ] }, { @@ -1033,7 +1033,7 @@ "collapsed": false }, "source": [ - "The entire elements present in the list can be reversed by using the **reverse()** function." + "The entire elements present in the list can be reversed by using the `reverse()` function." ] }, { @@ -1062,7 +1062,7 @@ "source": [ "Note that the nested list [5,4,2,8] is treated as a single element of the parent list lst. Thus the elements inside the nested list is not reversed.\n", "\n", - "Python offers built in operation **sort( )** to arrange the elements in ascending order." + "Python offers built in operation `sort( )` to arrange the elements in ascending order." ] }, { @@ -1116,7 +1116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Similarly for lists containing string elements, **sort( )** would sort the elements based on it's ASCII value in ascending and by specifying reverse=True in descending." + "Similarly for lists containing string elements, `sort( )` would sort the elements based on it's ASCII value in ascending and by specifying reverse=True in descending." ] }, { @@ -1352,14 +1352,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Tuples" + "## Tuples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Tuples are similar to lists but only big difference is the elements inside a list can be changed but in tuple it cannot be changed. Think of tuples as something which has to be True for a particular something and cannot be True for no other values. For better understanding, Recall **divmod()** function." + "Tuples are similar to lists but only big difference is the elements inside a list can be changed but in tuple it cannot be changed. Think of tuples as something which has to be True for a particular something and cannot be True for no other values. For better understanding, Recall `divmod()` function." ] }, { @@ -1596,7 +1596,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**count()** function counts the number of specified element that is present in the tuple." + "`count()` function counts the number of specified element that is present in the tuple." ] }, { @@ -1625,7 +1625,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**index()** function returns the index of the specified element. If the elements are more than one then the index of the first element of that specified element is returned" + "`index()` function returns the index of the specified element. If the elements are more than one then the index of the first element of that specified element is returned" ] }, { @@ -1654,7 +1654,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Sets" + "## Sets" ] }, { @@ -1717,7 +1717,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Built-in Functions" + "### Built-in Functions" ] }, { @@ -1746,7 +1746,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**union( )** function returns a set which contains all the elements of both the sets without repition." + "`union( )` function returns a set which contains all the elements of both the sets without repition." ] }, { @@ -1775,7 +1775,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**add( )** will add a particular element into the set. Note that the index of the newly added element is arbitrary and can be placed anywhere not neccessarily in the end." + "`add( )` will add a particular element into the set. Note that the index of the newly added element is arbitrary and can be placed anywhere not neccessarily in the end." ] }, { @@ -1805,7 +1805,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**intersection( )** function outputs a set which contains all the elements that are in both sets." + "`intersection( )` function outputs a set which contains all the elements that are in both sets." ] }, { @@ -1834,7 +1834,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**difference( )** function ouptuts a set which contains elements that are in set1 and not in set2." + "`difference( )` function ouptuts a set which contains elements that are in set1 and not in set2." ] }, { @@ -1863,7 +1863,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**symmetric_difference( )** function ouputs a function which contains elements that are in one of the sets." + "`symmetric_difference( )` function ouputs a function which contains elements that are in one of the sets." ] }, { @@ -1892,7 +1892,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**issubset( ), isdisjoint( ), issuperset( )** is used to check if the set1/set2 is a subset, disjoint or superset of set2/set1 respectively." + "`issubset( ), isdisjoint( ), issuperset( )` is used to check if the set1/set2 is a subset, disjoint or superset of set2/set1 respectively." ] }, { @@ -1965,7 +1965,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** is used to remove an arbitrary element in the set" + "`pop( )` is used to remove an arbitrary element in the set" ] }, { @@ -1992,7 +1992,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**remove( )** function deletes the specified element from the set." + "`remove( )` function deletes the specified element from the set." ] }, { @@ -2022,7 +2022,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**clear( )** is used to clear all the elements and make that set an empty set." + "`clear( )` is used to clear all the elements and make that set an empty set." ] }, { diff --git a/04.ipynb b/04.ipynb index 5a502ea..53abdad 100644 --- a/04.ipynb +++ b/04.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Strings" + "## Strings" ] }, { @@ -93,14 +93,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Built-in Functions" + "### Built-in Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**find( )** function returns the index value of the given data that is to found in the string. If it is not found it returns **-1**. Remember to not confuse the returned -1 for reverse indexing value." + "`find( )` function returns the index value of the given data that is to found in the string. If it is not found it returns `-1`. Remember to not confuse the returned -1 for reverse indexing value." ] }, { @@ -154,7 +154,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "One can also input **find( )** function between which index values it has to search." + "One can also input `find( )` function between which index values it has to search." ] }, { @@ -182,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**capitalize( )** is used to capitalize the first element in the string." + "`capitalize( )` is used to capitalize the first element in the string." ] }, { @@ -209,7 +209,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**center( )** is used to center align the string by specifying the field width." + "`center( )` is used to center align the string by specifying the field width." ] }, { @@ -267,7 +267,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**zfill( )** is used for zero padding by specifying the field width." + "`zfill( )` is used for zero padding by specifying the field width." ] }, { @@ -296,7 +296,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**expandtabs( )** allows you to change the spacing of the tab character. '\\t' which is by default set to 8 spaces." + "`expandtabs( )` allows you to change the spacing of the tab character. '\\t' which is by default set to 8 spaces." ] }, { @@ -329,7 +329,7 @@ "collapsed": true }, "source": [ - "**index( )** works the same way as **find( )** function the only difference is find returns '-1' when the input element is not found in the string but **index( )** function throws a ValueError" + "`index( )` works the same way as `find( )` function the only difference is find returns '-1' when the input element is not found in the string but `index( )` function throws a ValueError" ] }, { @@ -371,7 +371,7 @@ "collapsed": false }, "source": [ - "**endswith( )** function is used to check if the given string ends with the particular char which is given as input." + "`endswith( )` function is used to check if the given string ends with the particular char which is given as input." ] }, { @@ -425,7 +425,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**count( )** function counts the number of char in the given string. The start and the stop index can also be specified or left blank. (These are Implicit arguments which will be dealt in functions)" + "`count( )` function counts the number of char in the given string. The start and the stop index can also be specified or left blank. (These are Implicit arguments which will be dealt in functions)" ] }, { @@ -455,7 +455,7 @@ "collapsed": false }, "source": [ - "**join( )** function is used add a char in between the elements of the input string." + "`join( )` function is used add a char in between the elements of the input string." ] }, { @@ -491,7 +491,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**join( )** function can also be used to convert a list into a string." + "`join( )` function can also be used to convert a list into a string." ] }, { @@ -521,7 +521,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Before converting it into a string **join( )** function can be used to insert any char in between the list elements." + "Before converting it into a string `join( )` function can be used to insert any char in between the list elements." ] }, { @@ -550,7 +550,7 @@ "collapsed": false }, "source": [ - "**split( )** function is used to convert a string back to a list. Think of it as the opposite of the **join()** function." + "`split( )` function is used to convert a string back to a list. Think of it as the opposite of the `join()` function." ] }, { @@ -577,7 +577,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In **split( )** function one can also specify the number of times you want to split the string or the number of elements the new returned list should conatin. The number of elements is always one more than the specified number this is because it is split the number of times specified." + "In `split( )` function one can also specify the number of times you want to split the string or the number of elements the new returned list should conatin. The number of elements is always one more than the specified number this is because it is split the number of times specified." ] }, { @@ -606,7 +606,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**lower( )** converts any capital letter to small letter." + "`lower( )` converts any capital letter to small letter." ] }, { @@ -634,7 +634,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**upper( )** converts any small letter to capital letter." + "`upper( )` converts any small letter to capital letter." ] }, { @@ -663,7 +663,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**replace( )** function replaces the element with another element." + "`replace( )` function replaces the element with another element." ] }, { @@ -692,7 +692,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**strip( )** function is used to delete elements from the right end and the left end which is not required." + "`strip( )` function is used to delete elements from the right end and the left end which is not required." ] }, { @@ -739,7 +739,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**strip( )** function, when a char is specified then it deletes that char if it is present in the two ends of the specified string." + "`strip( )` function, when a char is specified then it deletes that char if it is present in the two ends of the specified string." ] }, { @@ -809,7 +809,7 @@ "collapsed": false }, "source": [ - "**lstrip( )** and **rstrip( )** function have the same functionality as strip function but the only difference is **lstrip( )** deletes only towards the left side and **rstrip( )** towards the right." + "`lstrip( )` and `rstrip( )` function have the same functionality as strip function but the only difference is `lstrip( )` deletes only towards the left side and `rstrip( )` towards the right." ] }, { @@ -837,7 +837,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Dictionaries" + "## Dictionaries" ] }, { @@ -952,7 +952,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**zip( )** function is used to combine two lists" + "`zip( )` function is used to combine two lists" ] }, { @@ -983,7 +983,7 @@ "source": [ "The two lists are combined to form a single list and each elements are clubbed with their respective elements from the other list inside a tuple. Tuples because that is what is assigned and the value should not change.\n", "\n", - "Further, To convert the above into a dictionary. **dict( )** function is used." + "Further, To convert the above into a dictionary. `dict( )` function is used." ] }, { @@ -1010,14 +1010,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Built-in Functions" + "### Built-in Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**clear( )** function is used to erase the entire database that was created." + "`clear( )` function is used to erase the entire database that was created." ] }, { @@ -1072,7 +1072,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**values( )** function returns a list with all the assigned values in the dictionary." + "`values( )` function returns a list with all the assigned values in the dictionary." ] }, { @@ -1101,7 +1101,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**keys( )** function returns all the index or the keys to which contains the values that it was assigned to." + "`keys( )` function returns all the index or the keys to which contains the values that it was assigned to." ] }, { @@ -1130,7 +1130,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**items( )** is returns a list containing both the list but each element in the dictionary is inside a tuple. This is same as the result that was obtained when zip function was used." + "`items( )` is returns a list containing both the list but each element in the dictionary is inside a tuple. This is same as the result that was obtained when zip function was used." ] }, { @@ -1159,7 +1159,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** function is used to get the remove that particular element and this removed element can be assigned to a new variable. But remember only the value is stored and not the key. Because the is just a index value." + "`pop( )` function is used to get the remove that particular element and this removed element can be assigned to a new variable. But remember only the value is stored and not the key. Because the is just a index value." ] }, { diff --git a/05.ipynb b/05.ipynb index d24f4ac..309a999 100644 --- a/05.ipynb +++ b/05.ipynb @@ -11,14 +11,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Control Flow Statements" + "# Control Flow Statements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##If" + "## If" ] }, { @@ -55,7 +55,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##If-else" + "## If-else" ] }, { @@ -98,7 +98,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##if-elif" + "## if-elif" ] }, { @@ -188,14 +188,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Loops" + "## Loops" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###For" + "### For" ] }, { @@ -304,7 +304,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###While" + "### While" ] }, { @@ -347,7 +347,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Break" + "## Break" ] }, { @@ -390,7 +390,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Continue" + "## Continue" ] }, { @@ -437,7 +437,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##List Comprehensions" + "## List Comprehensions" ] }, { diff --git a/06.ipynb b/06.ipynb index a642528..f6c411f 100644 --- a/06.ipynb +++ b/06.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Functions" + "# Functions" ] }, { @@ -116,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**firstfunc()** every time just prints the message to a single person. We can make our function **firstfunc()** to accept arguements which will store the name and then prints respective to that accepted name. To do so, add a argument within the function as shown." + "`firstfunc()` every time just prints the message to a single person. We can make our function `firstfunc()` to accept arguements which will store the name and then prints respective to that accepted name. To do so, add a argument within the function as shown." ] }, { @@ -155,7 +155,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The name \"Guido\" is actually stored in name1. So we pass this variable to the function **firstfunc()** as the variable username because that is the variable that is defined for this function. i.e name1 is passed as username." + "The name \"Guido\" is actually stored in name1. So we pass this variable to the function `firstfunc()` as the variable username because that is the variable that is defined for this function. i.e name1 is passed as username." ] }, { @@ -182,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let us simplify this even further by defining another function **secondfunc()** which accepts the name and stores it inside a variable and then calls the **firstfunc()** from inside the function itself." + "Let us simplify this even further by defining another function `secondfunc()` which accepts the name and stores it inside a variable and then calls the `firstfunc()` from inside the function itself." ] }, { @@ -226,7 +226,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Return Statement" + "## Return Statement" ] }, { @@ -253,7 +253,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The above defined **times( )** function accepts two arguements and return the variable z which contains the result of the product of the two arguements" + "The above defined `times( )` function accepts two arguements and return the variable z which contains the result of the product of the two arguements" ] }, { @@ -327,7 +327,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Since the **times( )** is now defined, we can document it as shown above. This document is returned whenever **times( )** function is called under **help( )** function." + "Since the `times( )` is now defined, we can document it as shown above. This document is returned whenever `times( )` function is called under `help( )` function." ] }, { @@ -443,7 +443,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Implicit arguments" + "## Implicit arguments" ] }, { @@ -469,14 +469,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**implicitadd( )** is a function accepts two arguments but most of the times the first argument needs to be added just by 3. Hence the second argument is assigned the value 3. Here the second argument is implicit." + "`implicitadd( )` is a function accepts two arguments but most of the times the first argument needs to be added just by 3. Hence the second argument is assigned the value 3. Here the second argument is implicit." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now if the second argument is not defined when calling the **implicitadd( )** function then it considered as 3." + "Now if the second argument is not defined when calling the `implicitadd( )` function then it considered as 3." ] }, { @@ -534,7 +534,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Any number of arguments" + "## Any number of arguments" ] }, { @@ -630,7 +630,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Global and Local Variables" + "## Global and Local Variables" ] }, { @@ -715,7 +715,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If a **global** variable is defined as shown in the example below then that variable can be called from anywhere." + "If a `global` variable is defined as shown in the example below then that variable can be called from anywhere." ] }, { @@ -783,14 +783,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Lambda Functions" + "## Lambda Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "These are small functions which are not defined with any name and carry a single expression whose result is returned. Lambda functions comes very handy when operating with lists. These function are defined by the keyword **lambda** followed by the variables, a colon and the respective expression." + "These are small functions which are not defined with any name and carry a single expression whose result is returned. Lambda functions comes very handy when operating with lists. These function are defined by the keyword `lambda` followed by the variables, a colon and the respective expression." ] }, { @@ -830,14 +830,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###map" + "### map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**map( )** function basically executes the function that is defined to each of the list's element separately." + "`map( )` function basically executes the function that is defined to each of the list's element separately." ] }, { @@ -942,14 +942,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###filter" + "### filter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**filter( )** function is used to filter out the values in a list. Note that **filter()** function returns the result in a new list." + "`filter( )` function is used to filter out the values in a list. Note that `filter()` function returns the result in a new list." ] }, { @@ -996,7 +996,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Notice what happens when **map()** is used." + "Notice what happens when `map()` is used." ] }, { @@ -1025,7 +1025,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can conclude that, whatever is returned true in **map( )** function that particular element is returned when **filter( )** function is used." + "We can conclude that, whatever is returned true in `map( )` function that particular element is returned when `filter( )` function is used." ] }, { diff --git a/07.ipynb b/07.ipynb index f233280..a86c94a 100644 --- a/07.ipynb +++ b/07.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Classes" + "# Classes" ] }, { @@ -53,7 +53,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pass** in python means do nothing. " + "`pass` in python means do nothing. " ] }, { @@ -138,7 +138,7 @@ "source": [ "These helps simplify the process of initializing a instance. For example,\n", "\n", - "Without the use of magic method or \\_\\_init\\_\\_ which is otherwise called as constructors. One had to define a **init( )** method and call the **init( )** function." + "Without the use of magic method or \\_\\_init\\_\\_ which is otherwise called as constructors. One had to define a `init( )` method and call the `init( )` function." ] }, { @@ -227,7 +227,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**dir( )** function comes very handy in looking into what the class contains and what all method it offers" + "`dir( )` function comes very handy in looking into what the class contains and what all method it offers" ] }, { @@ -256,7 +256,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**dir( )** of an instance also shows it's defined attributes." + "`dir( )` of an instance also shows it's defined attributes." ] }, { @@ -675,7 +675,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Inheritance" + "## Inheritance" ] }, { @@ -1136,7 +1136,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Where to go from here?" + "# Where to go from here?" ] }, { From 5c1cb7f42d5975d91f91a8fb7cc248321b8db002 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 20:40:31 +0200 Subject: [PATCH 02/10] reviewed section 1 --- .ipynb_checkpoints/01-checkpoint.ipynb | 635 +++++++++++-------------- 01.ipynb | 462 +++++++++--------- 2 files changed, 507 insertions(+), 590 deletions(-) diff --git a/.ipynb_checkpoints/01-checkpoint.ipynb b/.ipynb_checkpoints/01-checkpoint.ipynb index a9668bc..c8669d2 100644 --- a/.ipynb_checkpoints/01-checkpoint.ipynb +++ b/.ipynb_checkpoints/01-checkpoint.ipynb @@ -11,15 +11,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#The Zen Of Python" + "# The Zen Of Python" ] }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -64,15 +62,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "A name that is used to denote something or a value is called a variable. In python, variables can be declared and values can be assigned to it as follows," + "A name that is used to refer to an object is called a variable. In Python, variables can be declared and values can be assigned to it as follows:" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, + "execution_count": 3, + "metadata": {}, "outputs": [], "source": [ "x = 2\n", @@ -82,21 +78,22 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 46, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "7 Hey\n" - ] + "data": { + "text/plain": [ + "(2, 'Hey')" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print x+y, xy" + "x + y, xy" ] }, { @@ -108,10 +105,8 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ "x = y = 1" @@ -119,21 +114,22 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 1\n" - ] + "data": { + "text/plain": [ + "(1, 1)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print x,y" + "x, y" ] }, { @@ -147,7 +143,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Arithmetic Operators" + "## Arithmetic Operators" ] }, { @@ -167,10 +163,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -178,7 +172,7 @@ "3" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -189,10 +183,8 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "data": { @@ -200,7 +192,7 @@ "1" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -211,10 +203,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { @@ -222,7 +212,7 @@ "2" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -233,18 +223,16 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0" + "0.5" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -253,19 +241,10 @@ "1/2" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "0? This is because both the numerator and denominator are integers but the result is a float value hence an integer value is returned. By changing either the numerator or the denominator to float, correct answer can be obtained." - ] - }, { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -285,9 +264,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -308,36 +285,34 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Floor division is nothing but converting the result so obtained to the nearest integer." + "Floor division with `//` gives you the floor of the division result:" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1.0" + "1" ] }, - "execution_count": 12, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "2.8//2.0" + "3 // 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Relational Operators" + "## Relational Operators" ] }, { @@ -356,10 +331,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": true - }, + "execution_count": 15, + "metadata": {}, "outputs": [], "source": [ "z = 1" @@ -367,10 +340,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { "data": { @@ -378,7 +349,7 @@ "True" ] }, - "execution_count": 14, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -389,10 +360,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "data": { @@ -400,7 +369,7 @@ "False" ] }, - "execution_count": 15, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -413,7 +382,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Bitwise Operators" + "## Bitwise Operators" ] }, { @@ -432,43 +401,58 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": true - }, + "execution_count": 24, + "metadata": {}, "outputs": [], "source": [ - "a = 2 #10\n", - "b = 3 #11" + "a = 0b10 # decimal 2\n", + "b = 0b11 # decimal 3" ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 48, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "0b10\n" - ] + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print a & b\n", - "print bin(a&b)" + "a & b" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0b10'" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bin(a&b)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, "outputs": [ { "data": { @@ -476,7 +460,7 @@ "2" ] }, - "execution_count": 18, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -489,19 +473,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "0000 0101 -> 5 \n", + "`0000 0101` -> 5 \n", "\n", "Shifting the digits by 1 to the right and zero padding\n", "\n", - "0000 0010 -> 2" + "`0000 0010` -> 2" ] }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [ { "data": { @@ -509,7 +491,7 @@ "10" ] }, - "execution_count": 19, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -522,18 +504,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "0000 0101 -> 5 \n", + "`0000 0101` -> 5 \n", "\n", "Shifting the digits by 1 to the left and zero padding\n", "\n", - "0000 1010 -> 10" + "`0000 1010` -> 10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#Built-in Functions" + "# Built-in Functions" ] }, { @@ -547,22 +529,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Conversion from one system to another" + "## Conversion from one system to another" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Conversion from hexadecimal to decimal is done by adding prefix **0x** to the hexadecimal value or vice versa by using built in **hex( )**, Octal to decimal by adding prefix **0** to the octal value or vice versa by using built in function **oct( )**." + "Conversion from hexadecimal to decimal is done by adding prefix `0x` to the hexadecimal value or vice versa by using built in `hex( )`, Octal to decimal by adding prefix `0` to the octal value or vice versa by using built in function `oct( )`." ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 52, + "metadata": {}, "outputs": [ { "data": { @@ -570,7 +550,7 @@ "'0xaa'" ] }, - "execution_count": 20, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -581,10 +561,8 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, + "execution_count": 53, + "metadata": {}, "outputs": [ { "data": { @@ -592,7 +570,7 @@ "170" ] }, - "execution_count": 21, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -603,18 +581,16 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 54, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'010'" + "'0o10'" ] }, - "execution_count": 22, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -625,97 +601,89 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "8" + "2" ] }, - "execution_count": 23, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "010" + "0b10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**int( )** accepts two values when used for conversion, one is the value in a different number system and the other is its base. Note that input number in the different number system should be of string type." + "`int( )` accepts two values when used for conversion, one is the value in a different number system and the other is its base. Note that input number in the different number system should be of string type." ] }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, + "execution_count": 56, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "8\n", - "170\n", - "10\n" - ] + "data": { + "text/plain": [ + "(8, 170, 10)" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print int('010',8)\n", - "print int('0xaa',16)\n", - "print int('1010',2)" + "int('010',8), int('0xaa',16), int('1010',2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**int( )** can also be used to get only the integer value of a float number or can be used to convert a number which is of type string to integer format. Similarly, the function **str( )** can be used to convert the integer back to string format" + "`int( )` can also be used to get only the integer value of a float number or can be used to convert a number which is of type string to integer format. Similarly, the function `str( )` can be used to convert the integer back to string format" ] }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 57, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "7\n", - "7\n" - ] + "data": { + "text/plain": [ + "(7, 7)" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print int(7.7)\n", - "print int('7')" + "int(7.7), int('7')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Also note that function **bin( )** is used for binary and **float( )** for decimal/float values. **chr( )** is used for converting ASCII to its alphabet equivalent, **ord( )** is used for the other way round." + "Also note that function `bin( )` is used for binary and `float( )` for decimal/float values. `chr( )` is used for converting ASCII to its alphabet equivalent, `ord( )` is used for the other way round." ] }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, + "execution_count": 58, + "metadata": {}, "outputs": [ { "data": { @@ -723,7 +691,7 @@ "'b'" ] }, - "execution_count": 26, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -734,10 +702,8 @@ }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 59, + "metadata": {}, "outputs": [ { "data": { @@ -745,7 +711,7 @@ "98" ] }, - "execution_count": 27, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -758,78 +724,77 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Simplifying Arithmetic Operations" + "## Simplifying Arithmetic Operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**round( )** function rounds the input value to a specified number of places or to the nearest integer. " + "`round( )` function rounds the input value to a specified number of places or to the nearest integer. " ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 60, "metadata": { - "collapsed": false, "scrolled": false }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "6.0\n", - "4.56\n" - ] + "data": { + "text/plain": [ + "(6, 4.56)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print round(5.6231) \n", - "print round(4.55892, 2)" + "round(5.6231), round(4.55892, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**complex( )** is used to define a complex number and **abs( )** outputs the absolute value of the same." + "`complex( )` is used to define a complex number and `abs( )` outputs the absolute value of the same." ] }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, + "execution_count": 61, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.38516480713\n" - ] + "data": { + "text/plain": [ + "5.385164807134504" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "c =complex('5+2j')\n", - "print abs(c)" + "c = complex('5+2j')\n", + "abs(c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**divmod(x,y)** outputs the quotient and the remainder in a tuple(you will be learning about it in the further chapters) in the format (quotient, remainder). " + "`divmod(x,y)` outputs the quotient and the remainder in a tuple(you will be learning about it in the further chapters) in the format (quotient, remainder). " ] }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, + "execution_count": 39, + "metadata": {}, "outputs": [ { "data": { @@ -837,7 +802,7 @@ "(4, 1)" ] }, - "execution_count": 30, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -850,256 +815,216 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**isinstance( )** returns True, if the first argument is an instance of that class. Multiple classes can also be checked at once." + "`isinstance( )` returns True, if the first argument is an instance of that class. Multiple classes can also be checked at once." ] }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 62, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n", - "False\n", - "True\n" - ] + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print isinstance(1, int)\n", - "print isinstance(1.0,int)\n", - "print isinstance(1.0,(int,float))" + "isinstance(1, int)" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 63, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "**cmp(x,y)**\n", - "\n", - "|x ? y|Output|\n", - "|---|---|\n", - "| x < y | -1 |\n", - "| x == y | 0 |\n", - "| x > y | 1 |" + "isinstance(1.0,int)" ] }, { "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, + "execution_count": 64, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1\n", - "1\n", - "0\n" - ] + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print cmp(1,2)\n", - "print cmp(2,1)\n", - "print cmp(2,2)" + "isinstance(1.0,(int,float))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**pow(x,y,z)** can be used to find the power $x^y$ also the mod of the resulting value with the third specified number can be found i.e. : ($x^y$ % z)." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "27\n", - "2\n" - ] - } - ], - "source": [ - "print pow(3,3)\n", - "print pow(3,3,5)" + "`cmp(x,y)`\n", + "\n", + "|x ? y|Output|\n", + "|---|---|\n", + "| x < y | -1 |\n", + "| x == y | 0 |\n", + "| x > y | 1 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**range( )** function outputs the integers of the specified range. It can also be used to generate a series by specifying the difference between the two numbers within a particular range. The elements are returned in a list (will be discussing in detail later.)" + "`pow(x,y,z)` can be used to find the power $x^y$ also the mod of the resulting value with the third specified number can be found i.e. : ($x^y$ % z)." ] }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 65, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0, 1, 2]\n", - "[2, 3, 4, 5, 6, 7, 8]\n", - "[2, 10, 18, 26]\n" - ] + "data": { + "text/plain": [ + "(27, 2)" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print range(3)\n", - "print range(2,9)\n", - "print range(2,27,8)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##Accepting User Inputs" + "pow(3,3), pow(3,3,5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**raw_input( )** accepts input and stores it as a string. Hence, if the user inputs a integer, the code should convert the string to an integer and then proceed." + "`range( )` generates the sequence of integers of the specified range. It can also be used to generate a series by specifying the difference between the two numbers within a particular range. The elements are lazily generated, and will only be generated on demand (e.g. by passing them to the `list` constructor):" ] }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 66, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Type something here and it will be stored in variable abc \tHey\n" - ] + "data": { + "text/plain": [ + "range(0, 3)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "abc = raw_input(\"Type something here and it will be stored in variable abc \\t\")" + "range(5)" ] }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 67, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "str" + "[0, 1, 2]" ] }, - "execution_count": 36, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "type(abc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**input( )**, this is used only for accepting only integer inputs." + "list(range(5))" ] }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, + "execution_count": 68, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Only integer can be stored in in variable abc \t275\n" - ] + "data": { + "text/plain": [ + "[2, 3, 4, 5, 6, 7, 8]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "abc1 = input(\"Only integer can be stored in in variable abc \\t\")" + "list(range(2, 9))" ] }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 69, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "int" + "[2, 10, 18, 26]" ] }, - "execution_count": 38, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "type(abc1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that **type( )** returns the format or the type of a variable or a number" + "list(range(2,27,8))" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/01.ipynb b/01.ipynb index 19d1ec0..c8669d2 100644 --- a/01.ipynb +++ b/01.ipynb @@ -62,15 +62,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "A name that is used to denote something or a value is called a variable. In python, variables can be declared and values can be assigned to it as follows," + "A name that is used to refer to an object is called a variable. In Python, variables can be declared and values can be assigned to it as follows:" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, + "execution_count": 3, + "metadata": {}, "outputs": [], "source": [ "x = 2\n", @@ -80,19 +78,22 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 46, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "7 Hey\n" - ] + "data": { + "text/plain": [ + "(2, 'Hey')" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print x+y, xy" + "x + y, xy" ] }, { @@ -104,10 +105,8 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ "x = y = 1" @@ -115,19 +114,22 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 47, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 1\n" - ] + "data": { + "text/plain": [ + "(1, 1)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print x,y" + "x, y" ] }, { @@ -161,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -170,7 +172,7 @@ "3" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -181,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -190,7 +192,7 @@ "1" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -201,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -210,7 +212,7 @@ "2" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -221,16 +223,16 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0" + "0.5" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -239,13 +241,6 @@ "1/2" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "0? This is because both the numerator and denominator are integers but the result is a float value hence an integer value is returned. By changing either the numerator or the denominator to float, correct answer can be obtained." - ] - }, { "cell_type": "code", "execution_count": 10, @@ -290,27 +285,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Floor division is nothing but converting the result so obtained to the nearest integer." + "Floor division with `//` gives you the floor of the division result:" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1.0" + "1" ] }, - "execution_count": 12, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "2.8//2.0" + "3 // 2" ] }, { @@ -336,10 +331,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": true - }, + "execution_count": 15, + "metadata": {}, "outputs": [], "source": [ "z = 1" @@ -347,7 +340,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -356,7 +349,7 @@ "True" ] }, - "execution_count": 14, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -367,7 +360,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -376,7 +369,7 @@ "False" ] }, - "execution_count": 15, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -408,38 +401,57 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": true - }, + "execution_count": 24, + "metadata": {}, "outputs": [], "source": [ - "a = 2 #10\n", - "b = 3 #11" + "a = 0b10 # decimal 2\n", + "b = 0b11 # decimal 3" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 48, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "0b10\n" - ] + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print a & b\n", - "print bin(a&b)" + "a & b" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0b10'" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bin(a&b)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -448,7 +460,7 @@ "2" ] }, - "execution_count": 18, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -461,16 +473,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "0000 0101 -> 5 \n", + "`0000 0101` -> 5 \n", "\n", "Shifting the digits by 1 to the right and zero padding\n", "\n", - "0000 0010 -> 2" + "`0000 0010` -> 2" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -479,7 +491,7 @@ "10" ] }, - "execution_count": 19, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -492,11 +504,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "0000 0101 -> 5 \n", + "`0000 0101` -> 5 \n", "\n", "Shifting the digits by 1 to the left and zero padding\n", "\n", - "0000 1010 -> 10" + "`0000 1010` -> 10" ] }, { @@ -529,7 +541,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -538,7 +550,7 @@ "'0xaa'" ] }, - "execution_count": 20, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -549,7 +561,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -558,7 +570,7 @@ "170" ] }, - "execution_count": 21, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -569,16 +581,16 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'010'" + "'0o10'" ] }, - "execution_count": 22, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -589,22 +601,22 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "8" + "2" ] }, - "execution_count": 23, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "010" + "0b10" ] }, { @@ -616,23 +628,22 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 56, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "8\n", - "170\n", - "10\n" - ] + "data": { + "text/plain": [ + "(8, 170, 10)" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print int('010',8)\n", - "print int('0xaa',16)\n", - "print int('1010',2)" + "int('010',8), int('0xaa',16), int('1010',2)" ] }, { @@ -644,21 +655,22 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 57, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "7\n", - "7\n" - ] + "data": { + "text/plain": [ + "(7, 7)" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print int(7.7)\n", - "print int('7')" + "int(7.7), int('7')" ] }, { @@ -670,7 +682,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 58, "metadata": {}, "outputs": [ { @@ -679,7 +691,7 @@ "'b'" ] }, - "execution_count": 26, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -690,7 +702,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -699,7 +711,7 @@ "98" ] }, - "execution_count": 27, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -724,23 +736,24 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 60, "metadata": { "scrolled": false }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "6.0\n", - "4.56\n" - ] + "data": { + "text/plain": [ + "(6, 4.56)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print round(5.6231) \n", - "print round(4.55892, 2)" + "round(5.6231), round(4.55892, 2)" ] }, { @@ -752,20 +765,23 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 61, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "5.38516480713\n" - ] + "data": { + "text/plain": [ + "5.385164807134504" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "c =complex('5+2j')\n", - "print abs(c)" + "c = complex('5+2j')\n", + "abs(c)" ] }, { @@ -777,7 +793,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -786,7 +802,7 @@ "(4, 1)" ] }, - "execution_count": 30, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -804,213 +820,189 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 62, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n", - "False\n", - "True\n" - ] + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print isinstance(1, int)\n", - "print isinstance(1.0,int)\n", - "print isinstance(1.0,(int,float))" + "isinstance(1, int)" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 63, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "`cmp(x,y)`\n", - "\n", - "|x ? y|Output|\n", - "|---|---|\n", - "| x < y | -1 |\n", - "| x == y | 0 |\n", - "| x > y | 1 |" + "isinstance(1.0,int)" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 64, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1\n", - "1\n", - "0\n" - ] + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print cmp(1,2)\n", - "print cmp(2,1)\n", - "print cmp(2,2)" + "isinstance(1.0,(int,float))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "`pow(x,y,z)` can be used to find the power $x^y$ also the mod of the resulting value with the third specified number can be found i.e. : ($x^y$ % z)." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "27\n", - "2\n" - ] - } - ], - "source": [ - "print pow(3,3)\n", - "print pow(3,3,5)" + "`cmp(x,y)`\n", + "\n", + "|x ? y|Output|\n", + "|---|---|\n", + "| x < y | -1 |\n", + "| x == y | 0 |\n", + "| x > y | 1 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "`range( )` function outputs the integers of the specified range. It can also be used to generate a series by specifying the difference between the two numbers within a particular range. The elements are returned in a list (will be discussing in detail later.)" + "`pow(x,y,z)` can be used to find the power $x^y$ also the mod of the resulting value with the third specified number can be found i.e. : ($x^y$ % z)." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 65, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0, 1, 2]\n", - "[2, 3, 4, 5, 6, 7, 8]\n", - "[2, 10, 18, 26]\n" - ] + "data": { + "text/plain": [ + "(27, 2)" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print range(3)\n", - "print range(2,9)\n", - "print range(2,27,8)" + "pow(3,3), pow(3,3,5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Accepting User Inputs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`raw_input( )` accepts input and stores it as a string. Hence, if the user inputs a integer, the code should convert the string to an integer and then proceed." + "`range( )` generates the sequence of integers of the specified range. It can also be used to generate a series by specifying the difference between the two numbers within a particular range. The elements are lazily generated, and will only be generated on demand (e.g. by passing them to the `list` constructor):" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 66, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Type something here and it will be stored in variable abc \tHey\n" - ] + "data": { + "text/plain": [ + "range(0, 3)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "abc = raw_input(\"Type something here and it will be stored in variable abc \\t\")" + "range(5)" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "str" + "[0, 1, 2]" ] }, - "execution_count": 36, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "type(abc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`input( )`, this is used only for accepting only integer inputs." + "list(range(5))" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 68, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Only integer can be stored in variable abc \t275\n" - ] + "data": { + "text/plain": [ + "[2, 3, 4, 5, 6, 7, 8]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "abc1 = input(\"Only integer can be stored in variable abc \\t\")" + "list(range(2, 9))" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "int" + "[2, 10, 18, 26]" ] }, - "execution_count": 38, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "type(abc1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that `type( )` returns the format or the type of a variable or a number" + "list(range(2,27,8))" ] } ], From 08c54df27bfc330d5b48aad10198e3daa7ad921a Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 21:01:01 +0200 Subject: [PATCH 03/10] reviewed section 2 --- .ipynb_checkpoints/02-checkpoint.ipynb | 465 +++++++----------------- 02.ipynb | 470 +++++++------------------ 2 files changed, 245 insertions(+), 690 deletions(-) diff --git a/.ipynb_checkpoints/02-checkpoint.ipynb b/.ipynb_checkpoints/02-checkpoint.ipynb index c4cb722..a523a25 100644 --- a/.ipynb_checkpoints/02-checkpoint.ipynb +++ b/.ipynb_checkpoints/02-checkpoint.ipynb @@ -11,27 +11,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Print Statement" + "# Print Statement" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The **print** statement can be used in the following different ways :\n", - "\n", - " - print \"Hello World\"\n", - " - print \"Hello\", \n", - " - print \"Hello\" + \n", - " - print \"Hello %s\" % " + "The `print` function is used to print one or more objects to the screen:" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -42,13 +35,15 @@ } ], "source": [ - "print \"Hello World\"" + "print(\"Hello World\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "# Strings\n", + "\n", "In Python, single, double and triple quotes are used to denote a string.\n", "Most use single quotes when declaring a single character. \n", "Double quotes when declaring a line and triple quotes when declaring a paragraph/multiple lines." @@ -56,42 +51,42 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hey\n" - ] + "data": { + "text/plain": [ + "'Hey'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print 'Hey'" + "'Hey'" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "My name is Rajath Kumar M.P.\n", - "\n", - "I love Python.\n" - ] + "data": { + "text/plain": [ + "'My name is Rajath Kumar M.P.\\n\\nI love Python.'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"\"\"My name is Rajath Kumar M.P.\n", + "\"\"\"My name is Rajath Kumar M.P.\n", "\n", "I love Python.\"\"\"" ] @@ -105,9 +100,8 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 11, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -122,10 +116,10 @@ ], "source": [ "string1 = 'World'\n", - "print 'Hello', string1\n", + "print('Hello', string1)\n", "\n", "string2 = '!'\n", - "print 'Hello', string1, string2" + "print('Hello', string1, string2)" ] }, { @@ -137,473 +131,260 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "HelloWorld!\n" - ] - } - ], - "source": [ - "print 'Hello' + string1 + string2" - ] - }, - { - "cell_type": "markdown", + "execution_count": 19, "metadata": {}, - "source": [ - "**%s** is used to refer to a variable which contains a string." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello World\n" - ] + "data": { + "text/plain": [ + "'HelloWorld!'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"Hello %s\" % string1" + "'Hello' + string1 + string2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Similarly, when using other data types\n", - "\n", - " - %s -> string\n", - " - %d -> Integer\n", - " - %f -> Float\n", - " - %o -> Octal\n", - " - %x -> Hexadecimal\n", - " - %e -> exponential\n", - " \n", - "This can be used for conversions inside the print statement itself." + "The `format()` method on strings allows you to interpolate objects into templates. While string formatting can get quite sophisticated, in general you just use `{}` where you want your arguments to go:" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Actual Number = 18\n", - "Float of the number = 18.000000\n", - "Octal equivalent of the number = 22\n", - "Hexadecimal equivalent of the number = 12\n", - "Exponential equivalent of the number = 1.800000e+01\n" - ] - } - ], - "source": [ - "print \"Actual Number = %d\" %18\n", - "print \"Float of the number = %f\" %18\n", - "print \"Octal equivalent of the number = %o\" %18\n", - "print \"Hexadecimal equivalent of the number = %x\" %18\n", - "print \"Exponential equivalent of the number = %e\" %18" - ] - }, - { - "cell_type": "markdown", + "execution_count": 20, "metadata": {}, - "source": [ - "When referring to multiple variables parenthesis is used." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello World !\n" - ] + "data": { + "text/plain": [ + "'Hello World'" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"Hello %s %s\" %(string1,string2)" + "\"Hello {}\".format(string1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Other Examples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following are other different ways the print statement can be put to use." + "This works for all kinds of objects, not just string interpolants:" ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "I want %d to be printed here\n" - ] - } - ], - "source": [ - "print \"I want %%d to be printed %s\" %'here'" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "_A_A_A_A_A_A_A_A_A_A\n" - ] - } - ], - "source": [ - "print '_A'*10" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Jan\n", - "Feb\n", - "Mar\n", - "Apr\n", - "May\n", - "Jun\n", - "Jul\n", - "Aug\n" - ] - } - ], - "source": [ - "print \"Jan\\nFeb\\nMar\\nApr\\nMay\\nJun\\nJul\\nAug\"" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 21, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "I want \\n to be printed.\n" - ] + "data": { + "text/plain": [ + "'integers: 18'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"I want \\\\n to be printed.\"" + "\"integers: {}\".format(18)" ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Routine:\n", - "\t- Eat\n", - "\t- Sleep\n", - "\t- Repeat\n", - "\n" - ] - } - ], - "source": [ - "print \"\"\"\n", - "Routine:\n", - "\\t- Eat\n", - "\\t- Sleep\\n\\t- Repeat\n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#PrecisionWidth and FieldWidth" - ] - }, - { - "cell_type": "markdown", + "execution_count": 22, "metadata": {}, - "source": [ - "Fieldwidth is the width of the entire number and precision is the width towards the right. One can alter these widths based on the requirements.\n", - "\n", - "The default Precision Width is set to 6." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { "text/plain": [ - "'3.121312'" + "'floats: 4.2'" ] }, - "execution_count": 14, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%f\" % 3.121312312312" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice upto 6 decimal points are returned. To specify the number of decimal points, '%(fieldwidth).(precisionwidth)f' is used." + "\"floats: {}\".format(4.2)" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'3.12131'" + "'lists: [1, 2, 3]'" ] }, - "execution_count": 15, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%.5f\" % 3.121312312312" + "\"lists: {}\".format([1,2,3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "If the field width is set more than the necessary than the data right aligns itself to adjust to the specified values." + "You can pass multiple arguments to `format()` as well:" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 24, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "' 3.12131'" + "'Hello World!'" ] }, - "execution_count": 16, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%9.5f\" % 3.121312312312" + "\"Hello {}{}\".format(string1, string2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Zero padding is done by adding a 0 at the start of fieldwidth." + "# Precision and padding" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default `format()` will print the full precision of a `float`:" ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'00000000000003.12131'" + "'3.121312312312'" ] }, - "execution_count": 17, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%020.5f\" % 3.121312312312" + "\"{}\".format(3.121312312312)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For proper alignment, a space can be left blank in the field width so that when a negative number is used, proper alignment is maintained." + "You can limit this by using `{:.}` in the format specifier: " ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 3.121312\n", - "-3.121312\n" - ] - } - ], - "source": [ - "print \"% 9f\" % 3.121312312312\n", - "print \"% 9f\" % -3.121312312312" - ] - }, - { - "cell_type": "markdown", + "execution_count": 43, "metadata": {}, - "source": [ - "'+' sign can be returned at the beginning of a positive number by adding a + sign at the beginning of the field width." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "+3.121312\n", - "-3.121312\n" - ] + "data": { + "text/plain": [ + "'3.12'" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"%+9f\" % 3.121312312312\n", - "print \"% 9f\" % -3.121312312312" + "\"{:.3}\".format(3.121312312312)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As mentioned above, the data right aligns itself when the field width mentioned is larger than the actualy field width. But left alignment can be done by specifying a negative symbol in the field width." + "Similarly, you can specify padding with `{:.}`:" ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 44, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'3.121 '" + "' 3.12'" ] }, - "execution_count": 20, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%-9.3f\" % 3.121312312312" + "'{:6.3}'.format(3.121312312312)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This just scratches the surface of Python string formatting. Read all about it in [PEP 3101](https://www.python.org/dev/peps/pep-3101/)." ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/02.ipynb b/02.ipynb index 7b5a610..c09db20 100644 --- a/02.ipynb +++ b/02.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -18,20 +11,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `print` statement can be used in the following different ways :\n", - "\n", - " - print \"Hello World\"\n", - " - print \"Hello\", \n", - " - print \"Hello\" + \n", - " - print \"Hello %s\" % " + "The `print` function is used to print one or more objects to the screen:" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 45, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -42,13 +28,15 @@ } ], "source": [ - "print \"Hello World\"" + "print(\"Hello World\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "# Strings\n", + "\n", "In Python, single, double and triple quotes are used to denote a string.\n", "Most use single quotes when declaring a single character. \n", "Double quotes when declaring a line and triple quotes when declaring a paragraph/multiple lines." @@ -56,42 +44,42 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 46, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hey\n" - ] + "data": { + "text/plain": [ + "'Hey'" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print 'Hey'" + "'Hey'" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "My name is Rajath Kumar M.P.\n", - "\n", - "I love Python.\n" - ] + "data": { + "text/plain": [ + "'My name is Rajath Kumar M.P.\\n\\nI love Python.'" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"\"\"My name is Rajath Kumar M.P.\n", + "\"\"\"My name is Rajath Kumar M.P.\n", "\n", "I love Python.\"\"\"" ] @@ -105,9 +93,8 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 48, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -122,10 +109,10 @@ ], "source": [ "string1 = 'World'\n", - "print 'Hello', string1\n", + "print('Hello', string1)\n", "\n", "string2 = '!'\n", - "print 'Hello', string1, string2" + "print('Hello', string1, string2)" ] }, { @@ -137,473 +124,260 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "HelloWorld!\n" - ] - } - ], - "source": [ - "print 'Hello' + string1 + string2" - ] - }, - { - "cell_type": "markdown", + "execution_count": 49, "metadata": {}, - "source": [ - "`%s` is used to refer to a variable which contains a string." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello World\n" - ] + "data": { + "text/plain": [ + "'HelloWorld!'" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"Hello %s\" % string1" + "'Hello' + string1 + string2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Similarly, when using other data types\n", - "\n", - " - %s -> string\n", - " - %d -> Integer\n", - " - %f -> Float\n", - " - %o -> Octal\n", - " - %x -> Hexadecimal\n", - " - %e -> exponential\n", - " \n", - "This can be used for conversions inside the print statement itself." + "The `format()` method on strings allows you to interpolate objects into templates. While string formatting can get quite sophisticated, in general you just use `{}` where you want your arguments to go:" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Actual Number = 18\n", - "Float of the number = 18.000000\n", - "Octal equivalent of the number = 22\n", - "Hexadecimal equivalent of the number = 12\n", - "Exponential equivalent of the number = 1.800000e+01\n" - ] - } - ], - "source": [ - "print \"Actual Number = %d\" %18\n", - "print \"Float of the number = %f\" %18\n", - "print \"Octal equivalent of the number = %o\" %18\n", - "print \"Hexadecimal equivalent of the number = %x\" %18\n", - "print \"Exponential equivalent of the number = %e\" %18" - ] - }, - { - "cell_type": "markdown", + "execution_count": 50, "metadata": {}, - "source": [ - "When referring to multiple variables parenthesis is used." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello World !\n" - ] + "data": { + "text/plain": [ + "'Hello World'" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"Hello %s %s\" %(string1,string2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Other Examples" + "\"Hello {}\".format(string1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The following are other different ways the print statement can be put to use." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "I want %d to be printed here\n" - ] - } - ], - "source": [ - "print \"I want %%d to be printed %s\" %'here'" + "This works for all kinds of objects, not just string interpolants:" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "_A_A_A_A_A_A_A_A_A_A\n" - ] - } - ], - "source": [ - "print '_A'*10" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Jan\n", - "Feb\n", - "Mar\n", - "Apr\n", - "May\n", - "Jun\n", - "Jul\n", - "Aug\n" - ] - } - ], - "source": [ - "print \"Jan\\nFeb\\nMar\\nApr\\nMay\\nJun\\nJul\\nAug\"" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "I want \\n to be printed.\n" - ] + "data": { + "text/plain": [ + "'integers: 18'" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"I want \\\\n to be printed.\"" + "\"integers: {}\".format(18)" ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Routine:\n", - "\t- Eat\n", - "\t- Sleep\n", - "\t- Repeat\n", - "\n" - ] - } - ], - "source": [ - "print \"\"\"\n", - "Routine:\n", - "\\t- Eat\n", - "\\t- Sleep\\n\\t- Repeat\n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# PrecisionWidth and FieldWidth" - ] - }, - { - "cell_type": "markdown", + "execution_count": 52, "metadata": {}, - "source": [ - "Fieldwidth is the width of the entire number and precision is the width towards the right. One can alter these widths based on the requirements.\n", - "\n", - "The default Precision Width is set to 6." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { "text/plain": [ - "'3.121312'" + "'floats: 4.2'" ] }, - "execution_count": 14, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%f\" % 3.121312312312" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice upto 6 decimal points are returned. To specify the number of decimal points, '%(fieldwidth).(precisionwidth)f' is used." + "\"floats: {}\".format(4.2)" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 53, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'3.12131'" + "'lists: [1, 2, 3]'" ] }, - "execution_count": 15, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%.5f\" % 3.121312312312" + "\"lists: {}\".format([1,2,3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "If the field width is set more than the necessary than the data right aligns itself to adjust to the specified values." + "You can pass multiple arguments to `format()` as well:" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 54, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "' 3.12131'" + "'Hello World!'" ] }, - "execution_count": 16, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%9.5f\" % 3.121312312312" + "\"Hello {}{}\".format(string1, string2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Precision and padding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Zero padding is done by adding a 0 at the start of fieldwidth." + "By default `format()` will print the full precision of a `float`:" ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'00000000000003.12131'" + "'3.121312312312'" ] }, - "execution_count": 17, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%020.5f\" % 3.121312312312" + "\"{}\".format(3.121312312312)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For proper alignment, a space can be left blank in the field width so that when a negative number is used, proper alignment is maintained." + "You can limit this by using `{:.}` in the format specifier: " ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 3.121312\n", - "-3.121312\n" - ] - } - ], - "source": [ - "print \"% 9f\" % 3.121312312312\n", - "print \"% 9f\" % -3.121312312312" - ] - }, - { - "cell_type": "markdown", + "execution_count": 43, "metadata": {}, - "source": [ - "'+' sign can be returned at the beginning of a positive number by adding a + sign at the beginning of the field width." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "+3.121312\n", - "-3.121312\n" - ] + "data": { + "text/plain": [ + "'3.12'" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print \"%+9f\" % 3.121312312312\n", - "print \"% 9f\" % -3.121312312312" + "\"{:.3}\".format(3.121312312312)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As mentioned above, the data right aligns itself when the field width mentioned is larger than the actualy field width. But left alignment can be done by specifying a negative symbol in the field width." + "Similarly, you can specify padding with `{:.}`:" ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 44, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'3.121 '" + "' 3.12'" ] }, - "execution_count": 20, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"%-9.3f\" % 3.121312312312" + "'{:6.3}'.format(3.121312312312)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This just scratches the surface of Python string formatting. Read all about it in [PEP 3101](https://www.python.org/dev/peps/pep-3101/)." ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } From aced06ee200b91027028f4875d7e544bbc53d013 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 21:36:35 +0200 Subject: [PATCH 04/10] reviewed section 3 --- .ipynb_checkpoints/00-checkpoint.ipynb | 18 +- .ipynb_checkpoints/01-checkpoint.ipynb | 7 - .ipynb_checkpoints/02-checkpoint.ipynb | 81 +- .ipynb_checkpoints/03-checkpoint.ipynb | 1365 ++++++++++++------------ 00.ipynb | 18 +- 01.ipynb | 7 - 02.ipynb | 38 +- 03.ipynb | 1295 +++++++++++----------- 8 files changed, 1435 insertions(+), 1394 deletions(-) diff --git a/.ipynb_checkpoints/00-checkpoint.ipynb b/.ipynb_checkpoints/00-checkpoint.ipynb index eaeb7fb..757067d 100644 --- a/.ipynb_checkpoints/00-checkpoint.ipynb +++ b/.ipynb_checkpoints/00-checkpoint.ipynb @@ -4,14 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Python-Lectures" + "# Python Overview" ] }, { @@ -132,6 +125,15 @@ "This will clear all the outputs and now you can understand each statement and learn interactively." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get the notebooks\n", + "\n", + "The notebooks are available [on github](https://github.com/abingham/Python-Lectures). They are based on the [original work by Rajath Kumar M. P.](https://github.com/rajathkmp/Python-Lectures)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/.ipynb_checkpoints/01-checkpoint.ipynb b/.ipynb_checkpoints/01-checkpoint.ipynb index c8669d2..49a6d63 100644 --- a/.ipynb_checkpoints/01-checkpoint.ipynb +++ b/.ipynb_checkpoints/01-checkpoint.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/.ipynb_checkpoints/02-checkpoint.ipynb b/.ipynb_checkpoints/02-checkpoint.ipynb index a523a25..587bde7 100644 --- a/.ipynb_checkpoints/02-checkpoint.ipynb +++ b/.ipynb_checkpoints/02-checkpoint.ipynb @@ -4,38 +4,67 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" + "# `print`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Print Statement" + "The `print` function is used to print one or more objects to the screen:" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 45, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello World\n" + ] + } + ], "source": [ - "The `print` function is used to print one or more objects to the screen:" + "print(\"Hello World\")" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello world !\n" + ] + } + ], + "source": [ + "print(\"Hello\", \"world\", \"!\")" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Hello World\n" + "1 2.3 [4, 5, 6]\n" ] } ], "source": [ - "print(\"Hello World\")" + "print(1, 2.3, [4, 5, 6])" ] }, { @@ -51,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -60,7 +89,7 @@ "'Hey'" ] }, - "execution_count": 9, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -71,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 47, "metadata": {}, "outputs": [ { @@ -80,7 +109,7 @@ "'My name is Rajath Kumar M.P.\\n\\nI love Python.'" ] }, - "execution_count": 10, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -100,7 +129,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 48, "metadata": { "scrolled": true }, @@ -131,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -140,7 +169,7 @@ "'HelloWorld!'" ] }, - "execution_count": 19, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -158,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -167,7 +196,7 @@ "'Hello World'" ] }, - "execution_count": 20, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -185,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -194,7 +223,7 @@ "'integers: 18'" ] }, - "execution_count": 21, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -205,7 +234,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -214,7 +243,7 @@ "'floats: 4.2'" ] }, - "execution_count": 22, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -225,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -234,7 +263,7 @@ "'lists: [1, 2, 3]'" ] }, - "execution_count": 23, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -252,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 54, "metadata": {}, "outputs": [ { @@ -261,7 +290,7 @@ "'Hello World!'" ] }, - "execution_count": 24, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -286,7 +315,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 55, "metadata": {}, "outputs": [ { @@ -295,7 +324,7 @@ "'3.121312312312'" ] }, - "execution_count": 42, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } diff --git a/.ipynb_checkpoints/03-checkpoint.ipynb b/.ipynb_checkpoints/03-checkpoint.ipynb index 7a9de7f..823f5b0 100644 --- a/.ipynb_checkpoints/03-checkpoint.ipynb +++ b/.ipynb_checkpoints/03-checkpoint.ipynb @@ -4,28 +4,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" + "# Data Structures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#Data Structures" + "In simple terms, a data structure is a collection or group of data in a particular structure." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In simple terms, It is the the collection or group of data in a particular structure." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##Lists" + "## Lists" ] }, { @@ -34,55 +27,36 @@ "source": [ "Lists are the most commonly used data structure. Think of it as a sequence of data that is enclosed in square brackets and data are separated by a comma. Each of these data can be accessed by calling it's index value.\n", "\n", - "Lists are declared by just equating a variable to '[ ]' or list." + "Lists can be declared in literal form with `[ ]`:" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [], "source": [ - "a = []" + "x = ['apple', 'pear', 'orange']" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print type(a)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "One can directly assign the sequence of data to a list x as shown." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x = ['apple', 'orange']" + "type(x)" ] }, { @@ -96,15 +70,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In python, Indexing starts from 0. Thus now the list x, which has two elements will have apple at 0 index and orange at 1 index." + "In python, Indexing starts from 0. Thus now the list `x`, which has two elements will have apple at 0 index and orange at 1 index." ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "data": { @@ -112,7 +84,7 @@ "'apple'" ] }, - "execution_count": 4, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -130,10 +102,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "data": { @@ -141,7 +111,7 @@ "'orange'" ] }, - "execution_count": 5, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -154,15 +124,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you might have already guessed, x[0] = x[-2], x[1] = x[-1]. This concept can be extended towards lists with more many elements." + "As you might have already guessed, `x[0] = x[-2], x[1] = x[-1]`. This concept can be extended towards lists with more many elements." ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [], "source": [ "y = ['carrot','potato']" @@ -172,27 +140,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here we have declared two lists x and y each containing its own data. Now, these two lists can again be put into another list say z which will have it's data as two lists. This list inside a list is called as nested lists and is how an array would be declared which we will see later." + "Here we have declared two lists `x` and `y` each containing its own data. Now, these two lists can again be put into another list say `z` which will have it's data as two lists. This list inside a list is called as nested lists and is how an array would be declared which we will see later." ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[['apple', 'orange'], ['carrot', 'potato']]\n" - ] + "data": { + "text/plain": [ + "[['apple', 'pear', 'orange'], ['carrot', 'potato']]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "z = [x,y]\n", - "print z" + "z = [x,y]\n", + "z" ] }, { @@ -202,42 +171,41 @@ "Indexing in nested lists can be quite confusing if you do not understand how indexing works in python. So let us break it down and then arrive at a conclusion.\n", "\n", "Let us access the data 'apple' in the above nested list.\n", - "First, at index 0 there is a list ['apple','orange'] and at index 1 there is another list ['carrot','potato']. Hence z[0] should give us the first list which contains 'apple'." + "First, at index 0 there is a list ['apple','orange'] and at index 1 there is another list ['carrot','potato']. Hence `z[0]` should give us the first list which contains 'apple'." ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['apple', 'orange']\n" - ] + "data": { + "text/plain": [ + "['apple', 'pear', 'orange']" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "z1 = z[0]\n", - "print z1" + "z1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now observe that z1 is not at all a nested list thus to access 'apple', z1 should be indexed at 0." + "Now observe that `z1` is not at all a nested list thus to access 'apple', `z1` should be indexed at 0." ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "data": { @@ -245,7 +213,7 @@ "'apple'" ] }, - "execution_count": 9, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -258,15 +226,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Instead of doing the above, In python, you can access 'apple' by just writing the index values each time side by side." + "Instead of doing the above, In Python, you can access 'apple' by just writing the index values each time side by side." ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "data": { @@ -274,7 +240,7 @@ "'apple'" ] }, - "execution_count": 10, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -287,7 +253,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If there was a list inside a list inside a list then you can access the innermost value by executing z[ ][ ][ ]." + "If there was a list inside a list inside a list then you can access the innermost value by executing `z[ ][ ][ ]`." ] }, { @@ -301,41 +267,50 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Indexing was only limited to accessing a single element, Slicing on the other hand is accessing a sequence of data inside the list. In other words \"slicing\" the list.\n", + "Indexing was only limited to accessing a single element. Slicing on the other hand is accessing a sequence of data inside the list. In other words \"slicing\" the list.\n", "\n", - "Slicing is done by defining the index values of the first element and the last element from the parent list that is required in the sliced list. It is written as parentlist[ a : b ] where a,b are the index values from the parent list. If a or b is not defined then the index value is considered to be the first value for a if a is not defined and the last value for b when b is not defined." + "Slicing is done by defining the index values of the first element and the last element from the parent list that is required in the sliced list. It is written as parentlist `[ a : b ]` where `a,b` are the index values from the parent list. If a or b is not defined then the index value is considered to be the first value for a if a is not defined and the last value for b when b is not defined." ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 2, 3]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "num = [0,1,2,3,4,5,6,7,8,9]" + "num = [0,1,2,3,4,5,6,7,8,9]\n", + "num[0:4]" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0, 1, 2, 3]\n", - "[4, 5, 6, 7, 8, 9]\n" - ] + "data": { + "text/plain": [ + "[4, 5, 6, 7, 8, 9]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print num[0:4]\n", - "print num[4:]" + "num[4:]" ] }, { @@ -347,10 +322,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 25, + "metadata": {}, "outputs": [ { "data": { @@ -358,7 +331,7 @@ "[0, 3, 6]" ] }, - "execution_count": 13, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -371,22 +344,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Built in List Functions" + "### Built in List Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To find the length of the list or the number of elements in a list, **len( )** is used." + "To find the length of the list or the number of elements in a list, `len( )` is used." ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 27, + "metadata": {}, "outputs": [ { "data": { @@ -394,7 +365,7 @@ "10" ] }, - "execution_count": 14, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -407,15 +378,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If the list consists of all integer elements then **min( )** and **max( )** gives the minimum and maximum value in the list." + "If the list consists of all integer elements then `min( )` and `max( )` gives the minimum and maximum value in the list." ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 28, + "metadata": {}, "outputs": [ { "data": { @@ -423,7 +392,7 @@ "0" ] }, - "execution_count": 15, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -434,10 +403,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 29, + "metadata": {}, "outputs": [ { "data": { @@ -445,7 +412,7 @@ "9" ] }, - "execution_count": 16, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -463,10 +430,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 30, + "metadata": {}, "outputs": [ { "data": { @@ -474,7 +439,7 @@ "[1, 2, 3, 5, 4, 7]" ] }, - "execution_count": 17, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -492,10 +457,8 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 31, + "metadata": {}, "outputs": [], "source": [ "names = ['Earth','Air','Fire','Water']" @@ -510,10 +473,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 32, + "metadata": {}, "outputs": [ { "data": { @@ -521,7 +482,7 @@ "True" ] }, - "execution_count": 19, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -532,10 +493,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 33, + "metadata": {}, "outputs": [ { "data": { @@ -543,7 +502,7 @@ "False" ] }, - "execution_count": 20, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -556,15 +515,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In a list with elements as string, **max( )** and **min( )** is applicable. **max( )** would return a string element whose ASCII value is the highest and the lowest when **min( )** is used. Note that only the first index of each element is considered each time and if they value is the same then second index considered so on and so forth." + "In a list with elements as string, `max( )` and `min( )` is applicable. `max( )` would return a string element whose ASCII value is the highest and the lowest when `min( )` is used. Note that only the first index of each element is considered each time and if they value is the same then second index considered so on and so forth." ] }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": true - }, + "execution_count": 34, + "metadata": {}, "outputs": [], "source": [ "mlist = ['bzaa','ds','nc','az','z','klm']" @@ -572,23 +529,22 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 35, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "z\n", - "az\n" - ] + "data": { + "text/plain": [ + "('z', 'az')" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print max(mlist)\n", - "print min(mlist)" + "max(mlist), min(mlist)" ] }, { @@ -600,10 +556,8 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": true - }, + "execution_count": 36, + "metadata": {}, "outputs": [], "source": [ "nlist = ['1','94','93','1000']" @@ -611,77 +565,73 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, + "execution_count": 38, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "94\n", - "1\n" - ] + "data": { + "text/plain": [ + "('94', '1')" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print max(nlist)\n", - "print min(nlist)" + "max(nlist), min(nlist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Even if the numbers are declared in a string the first index of each element is considered and the maximum and minimum values are returned accordingly." + "Here, the strings are still sorted as string (that is, lexically) even though they \"look like\" numbers." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "But if you want to find the **max( )** string element based on the length of the string then another parameter 'key=len' is declared inside the **max( )** and **min( )** function." + "But if you want to find the `max( )` string element based on the length of the string then another parameter 'key=len' is declared inside the `max( )` and `min( )` function." ] }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 39, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Earth\n", - "Air\n" - ] + "data": { + "text/plain": [ + "('Earth', 'Air')" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print max(names, key=len)\n", - "print min(names, key=len)" + "max(names, key=len), min(names, key=len)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "But even 'Water' has length 5. **max()** or **min()** function returns the first element when there are two or more elements with the same length.\n", + "But even 'Water' has length 5. `max()` or `min()` function returns the first element when there are two or more elements with the same length.\n", "\n", - "Any other built in function can be used or lambda function (will be discussed later) in place of len.\n", + "Any other built in function can be used or lambda function (will be discussed later) in place of `len`.\n", "\n", - "A string can be converted into a list by using the **list()** function." + "A string can be converted into a list by using the `list()` function." ] }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, + "execution_count": 40, + "metadata": {}, "outputs": [ { "data": { @@ -689,7 +639,7 @@ "['h', 'e', 'l', 'l', 'o']" ] }, - "execution_count": 26, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -702,15 +652,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**append( )** is used to add a element at the end of the list." + "`append( )` is used to add a element at the end of the list." ] }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [], "source": [ "lst = [1,1,4,8,7]" @@ -718,37 +666,36 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 1]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 1]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.append(1)\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**count( )** is used to count the number of a particular element that is present in the list. " + "`count( )` is used to count the number of a particular element that is present in the list. " ] }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { "data": { @@ -756,7 +703,7 @@ "3" ] }, - "execution_count": 29, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -769,15 +716,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**append( )** function can also be used to add a entire list at the end. Observe that the resultant list becomes a nested list." + "`append( )` function can also be used to add a entire list at the end. Observe that the resultant list becomes a nested list." ] }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": true - }, + "execution_count": 44, + "metadata": {}, "outputs": [], "source": [ "lst1 = [5,4,2,8]" @@ -785,66 +730,64 @@ }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 45, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8]]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8]]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.append(lst1)\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "But if nested list is not what is desired then **extend( )** function can be used." + "But if nested list is not what is desired then `extend( )` function can be used." ] }, { "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, + "execution_count": 46, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2, 8]\n" - ] - } - ], - "source": [ - "lst.extend(lst1)\n", - "print lst" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2, 8]" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lst.extend(lst1)\n", + "lst" + ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**index( )** is used to find the index value of a particular element. Note that if there are multiple elements of the same value then the first index value of that element is returned." + "`index( )` is used to find the index value of a particular element. Note that if there are multiple elements of the same value then the first index value of that element is returned." ] }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ { "data": { @@ -852,7 +795,7 @@ "0" ] }, - "execution_count": 33, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -865,69 +808,69 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**insert(x,y)** is used to insert a element y at a specified index value x. **append( )** function made it only possible to insert at the end. " + "`insert(x,y)` is used to insert a element y at a specified index value x. `append( )` function made it only possible to insert at the end. " ] }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 48, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 'name', 1, [5, 4, 2, 8], 5, 4, 2, 8]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 'name', 1, [5, 4, 2, 8], 5, 4, 2, 8]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.insert(5, 'name')\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**insert(x,y)** inserts but does not replace element. If you want to replace the element with another element you simply assign the value to that particular index." + "`insert(x,y)` inserts but does not replace element. If you want to replace the element with another element you simply assign the value to that particular index." ] }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 49, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 'Python', 1, [5, 4, 2, 8], 5, 4, 2, 8]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 'Python', 1, [5, 4, 2, 8], 5, 4, 2, 8]" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst[5] = 'Python'\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** function return the last element in the list. This is similar to the operation of a stack. Hence it wouldn't be wrong to tell that lists can be used as a stack." + "`pop( )` function return the last element in the list. This is similar to the operation of a stack. Hence it wouldn't be wrong to tell that lists can be used as a stack." ] }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 50, + "metadata": {}, "outputs": [ { "data": { @@ -935,7 +878,7 @@ "8" ] }, - "execution_count": 36, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -953,10 +896,8 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [ { "data": { @@ -964,7 +905,7 @@ "1" ] }, - "execution_count": 37, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -977,83 +918,84 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** is used to remove element based on it's index value which can be assigned to a variable. One can also remove element by specifying the element itself using the **remove( )** function." + "`pop( )` is used to remove element based on it's index value which can be assigned to a variable. One can also remove element by specifying the element itself using the `remove( )` function." ] }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 52, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]\n" - ] + "data": { + "text/plain": [ + "[1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.remove('Python')\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Alternative to **remove** function but with using index value is **del**" + "Alternative to `remove` function but with using index value is `del`" ] }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 54, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]\n" - ] + "data": { + "text/plain": [ + "[1, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "del lst[1]\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "The entire elements present in the list can be reversed by using the **reverse()** function." + "The entire elements present in the list can be reversed by using the `reverse()` function." ] }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 4, 5, [5, 4, 2, 8], 1, 7, 8, 1]\n" - ] + "data": { + "text/plain": [ + "[2, 4, 5, [5, 4, 2, 8], 1, 7, 8, 1]" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.reverse()\n", - "print lst" + "lst" ] }, { @@ -1062,27 +1004,29 @@ "source": [ "Note that the nested list [5,4,2,8] is treated as a single element of the parent list lst. Thus the elements inside the nested list is not reversed.\n", "\n", - "Python offers built in operation **sort( )** to arrange the elements in ascending order." + "Python offers built in operation `sort( )` to arrange the elements in ascending order." ] }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, + "execution_count": 57, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 2, 4, 5, 7, 8, [5, 4, 2, 8]]\n" - ] + "data": { + "text/plain": [ + "[1, 2, 3, 6, 7, 9, 42]" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ + "lst = [9, 6, 3, 7, 2, 1, 42]\n", "lst.sort()\n", - "print lst" + "lst" ] }, { @@ -1094,52 +1038,72 @@ }, { "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, + "execution_count": 59, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[5, 4, 2, 8], 8, 7, 5, 4, 2, 1, 1]\n" - ] + "data": { + "text/plain": [ + "[42, 9, 7, 6, 3, 2, 1]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.sort(reverse=True)\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Similarly for lists containing string elements, **sort( )** would sort the elements based on it's ASCII value in ascending and by specifying reverse=True in descending." + "Similarly for lists containing string elements, `sort( )` would sort the elements based on it's ASCII value in ascending and by specifying `reverse=True` in descending." ] }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, + "execution_count": 61, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['Air', 'Earth', 'Fire', 'Water']\n", - "['Water', 'Fire', 'Earth', 'Air']\n" - ] + "data": { + "text/plain": [ + "['Air', 'Earth', 'Fire', 'Water']" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "names.sort()\n", - "print names\n", + "names" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Water', 'Fire', 'Earth', 'Air']" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "names.sort(reverse=True)\n", - "print names" + "names" ] }, { @@ -1151,25 +1115,44 @@ }, { "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, + "execution_count": 63, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['Air', 'Fire', 'Water', 'Earth']\n", - "['Water', 'Earth', 'Fire', 'Air']\n" - ] + "data": { + "text/plain": [ + "['Air', 'Fire', 'Water', 'Earth']" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "names.sort(key=len)\n", - "print names\n", + "names" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Water', 'Earth', 'Fire', 'Air']" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "names.sort(key=len,reverse=True)\n", - "print names" + "names" ] }, { @@ -1183,212 +1166,240 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Most of the new python programmers commit this mistake. Consider the following," + "To copy a list, it's not sufficient to simply assign a new name to it. Consider the following," ] }, { "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, + "execution_count": 66, + "metadata": {}, "outputs": [], "source": [ - "lista= [2,1,4,3]" + "lista = [2,1,4,3]" ] }, { "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, + "execution_count": 67, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 3]\n" - ] + "data": { + "text/plain": [ + "[2, 1, 4, 3]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "listb = lista\n", - "print listb" + "listb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here, We have declared a list, lista = [2,1,4,3]. This list is copied to listb by assigning it's value and it get's copied as seen. Now we perform some random operations on lista." + "Here, We have declared a list, `lista = [2,1,4,3]`. This list is assigned to `listb`. While we might expect `lista` and `listb` to be different lists, we can see that changes to `lista` are reflected in `listb`:" ] }, { "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, + "execution_count": 68, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4]\n", - "[2, 1, 4, 9]\n" - ] + "data": { + "text/plain": [ + "[2, 1, 4, 9]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lista.pop()\n", - "print lista\n", "lista.append(9)\n", - "print lista" + "lista" ] }, { "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, + "execution_count": 70, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 9]\n" - ] + "data": { + "text/plain": [ + "[2, 1, 4, 9]" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print listb" + "listb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "listb has also changed though no operation has been performed on it. This is because you have assigned the same memory space of lista to listb. So how do fix this?\n", + "`listb` has also changed though no operation has been performed on it. This is because `lista` and `listb` refer to the same object. So how do fix this?\n", "\n", - "If you recall, in slicing we had seen that parentlist[a:b] returns a list from parent list with start index a and end index b and if a and b is not mentioned then by default it considers the first and last element. We use the same concept here. By doing so, we are assigning the data of lista to listb as a variable." + "One way to copy a list is to construct a new list around it:" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "([1, 2, 3, 4], [2, 1, 4, 3])" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lista = [2,1,4,3]\n", + "listb = list(lista)\n", + "\n", + "lista.sort()\n", + "\n", + "lista, listb" + ] + }, + { + "cell_type": "markdown", "metadata": { "collapsed": true }, - "outputs": [], "source": [ - "lista = [2,1,4,3]" + "Another approach is to use slicing. Since slicing creates copies, a full slice of a list will effectively create a copy of it:" ] }, { "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, + "execution_count": 74, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 3]\n" - ] + "data": { + "text/plain": [ + "([1, 2, 3, 4], [1, 2, 3, 4])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "listb = lista[:]\n", - "print listb" + "lista, listb" ] }, { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4]\n", - "[2, 1, 4, 9]\n" - ] - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "lista.pop()\n", - "print lista\n", - "lista.append(9)\n", - "print lista" + "These lists are different objects but have identical contents. We can see this by modifying one of them:" ] }, { "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": false - }, + "execution_count": 75, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 3]\n" - ] + "data": { + "text/plain": [ + "([1, 2, 3], [1, 2, 3, 4])" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print listb" + "lista.pop()\n", + "lista, listb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Tuples" + "## Tuples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Tuples are similar to lists but only big difference is the elements inside a list can be changed but in tuple it cannot be changed. Think of tuples as something which has to be True for a particular something and cannot be True for no other values. For better understanding, Recall **divmod()** function." + "Tuples are similar to lists but only big difference is the elements inside a list can be changed but in tuple it cannot be changed. We can create tuples literals similar to how we create lists but using `()` instead:" ] }, { "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, + "execution_count": 76, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "(3, 1)\n", - "\n" - ] + "data": { + "text/plain": [ + "(3, 8, 5)" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "xyz = divmod(10,3)\n", - "print xyz\n", - "print type(xyz)" + "xyz = (3, 8, 5)\n", + "xyz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here the quotient has to be 3 and the remainder has to be 1. These values cannot be changed whatsoever when 10 is divided by 3. Hence divmod returns these values in a tuple." + "We can see that this is a tuple with the `type()` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tuple" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(xyz)" ] }, { @@ -1400,10 +1411,8 @@ }, { "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": false - }, + "execution_count": 79, + "metadata": {}, "outputs": [], "source": [ "tup = ()\n", @@ -1414,15 +1423,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If you want to directly declare a tuple it can be done by using a comma at the end of the data." + "One thing to keep in mind is that if you want to declare a tuple with a single element, you need a trailing comma:" ] }, { "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, + "execution_count": 81, + "metadata": {}, "outputs": [ { "data": { @@ -1430,42 +1437,40 @@ "(27,)" ] }, - "execution_count": 55, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "27," + "(27,)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "27 when multiplied by 2 yields 54, But when multiplied with a tuple the data is repeated twice." + "You can multiply a tuple by an integer to repeat it that many times:" ] }, { "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, + "execution_count": 83, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(27, 27)" + "('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')" ] }, - "execution_count": 56, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "2*(27,)" + "3 * ('a', 'b', 'c')" ] }, { @@ -1477,112 +1482,124 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 84, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1, 2, 3)\n", - "('H', 'e', 'l', 'l', 'o')\n" - ] + "data": { + "text/plain": [ + "(1, 2, 3)" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "tup3 = tuple([1,2,3])\n", - "print tup3\n", - "tup4 = tuple('Hello')\n", - "print tup4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It follows the same indexing and slicing as Lists." + "tup3" ] }, { "cell_type": "code", - "execution_count": 58, - "metadata": { - "collapsed": false - }, + "execution_count": 85, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "('H', 'e', 'l')\n" - ] + "data": { + "text/plain": [ + "('H', 'e', 'l', 'l', 'o')" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print tup3[1]\n", - "tup5 = tup4[:3]\n", - "print tup5" + "tup4 = tuple('Hello')\n", + "tup4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Mapping one tuple to another" + "It follows the same indexing and slicing as Lists." ] }, { "cell_type": "code", - "execution_count": 59, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "(a,b,c)= ('alpha','beta','gamma')" + "tup3[1]" ] }, { "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": false - }, + "execution_count": 87, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "alpha beta gamma\n" - ] + "data": { + "text/plain": [ + "('H', 'e', 'l')" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print a,b,c" + "tup5 = tup4[:3]\n", + "tup5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tuple unpacking\n", + "\n", + "You can assign the elements of a tuple to variables by separating the variable names by commans:" ] }, { "cell_type": "code", - "execution_count": 61, - "metadata": { - "collapsed": false - }, + "execution_count": 89, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "('R', 'a', 'j', 'a', 't', 'h', 'K', 'u', 'm', 'a', 'r', 'M', 'P')\n" - ] + "data": { + "text/plain": [ + "'The elements are alpha, beta, and gamma'" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "d = tuple('RajathKumarMP')\n", - "print d" + "a,b,c = ('alpha','beta','gamma')\n", + "\"The elements are {}, {}, and {}\".format(a, b, c)" ] }, { @@ -1596,15 +1613,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**count()** function counts the number of specified element that is present in the tuple." + "`count()` function counts the number of specified element that is present in the tuple." ] }, { "cell_type": "code", - "execution_count": 62, - "metadata": { - "collapsed": false - }, + "execution_count": 93, + "metadata": {}, "outputs": [ { "data": { @@ -1612,12 +1627,13 @@ "3" ] }, - "execution_count": 62, + "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "d = tuple('alphabetical')\n", "d.count('a')" ] }, @@ -1625,23 +1641,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**index()** function returns the index of the specified element. If the elements are more than one then the index of the first element of that specified element is returned" + "`index()` function returns the index of the specified element. If the elements are more than one then the index of the first element of that specified element is returned" ] }, { "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": false - }, + "execution_count": 94, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1" + "0" ] }, - "execution_count": 63, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } @@ -1654,56 +1668,58 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Sets" + "## Sets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Sets are mainly used to eliminate repeated numbers in a sequence/list. It is also used to perform some standard set operations.\n", + "Sets are collections of unique, immutable objects. It is also used to perform some standard set operations.\n", "\n", - "Sets are declared as set() which will initialize a empty set. Also set([sequence]) can be executed to declare a set with elements" + "Sets are declared as `set()` which will initialize a empty set. Also `set([sequence])` can be executed to declare a set with elements" ] }, { "cell_type": "code", - "execution_count": 64, - "metadata": { - "collapsed": false - }, + "execution_count": 95, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/plain": [ + "set" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "set1 = set()\n", - "print type(set1)" + "type(set1)" ] }, { "cell_type": "code", - "execution_count": 65, - "metadata": { - "collapsed": false - }, + "execution_count": 96, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "set([1, 2, 3, 4])\n" - ] + "data": { + "text/plain": [ + "{1, 2, 3, 4}" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "set0 = set([1,2,2,3,3,4])\n", - "print set0" + "set0" ] }, { @@ -1717,15 +1733,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Built-in Functions" + "### Built-in Functions" ] }, { "cell_type": "code", - "execution_count": 66, - "metadata": { - "collapsed": false - }, + "execution_count": 97, + "metadata": {}, "outputs": [], "source": [ "set1 = set([1,2,3])" @@ -1733,10 +1747,8 @@ }, { "cell_type": "code", - "execution_count": 67, - "metadata": { - "collapsed": false - }, + "execution_count": 98, + "metadata": {}, "outputs": [], "source": [ "set2 = set([2,3,4,5])" @@ -1746,15 +1758,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**union( )** function returns a set which contains all the elements of both the sets without repition." + "`union( )` function returns a set which contains all the elements of both the sets without repition." ] }, { "cell_type": "code", - "execution_count": 68, - "metadata": { - "collapsed": false - }, + "execution_count": 99, + "metadata": {}, "outputs": [ { "data": { @@ -1762,7 +1772,7 @@ "{1, 2, 3, 4, 5}" ] }, - "execution_count": 68, + "execution_count": 99, "metadata": {}, "output_type": "execute_result" } @@ -1775,15 +1785,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**add( )** will add a particular element into the set. Note that the index of the newly added element is arbitrary and can be placed anywhere not neccessarily in the end." + "`add( )` will add a particular element into the set. Note that the index of the newly added element is arbitrary and can be placed anywhere not neccessarily in the end." ] }, { "cell_type": "code", - "execution_count": 69, - "metadata": { - "collapsed": false - }, + "execution_count": 100, + "metadata": {}, "outputs": [ { "data": { @@ -1791,7 +1799,7 @@ "{0, 1, 2, 3}" ] }, - "execution_count": 69, + "execution_count": 100, "metadata": {}, "output_type": "execute_result" } @@ -1805,15 +1813,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**intersection( )** function outputs a set which contains all the elements that are in both sets." + "`intersection( )` function outputs a set which contains all the elements that are in both sets." ] }, { "cell_type": "code", - "execution_count": 70, - "metadata": { - "collapsed": false - }, + "execution_count": 101, + "metadata": {}, "outputs": [ { "data": { @@ -1821,7 +1827,7 @@ "{2, 3}" ] }, - "execution_count": 70, + "execution_count": 101, "metadata": {}, "output_type": "execute_result" } @@ -1834,15 +1840,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**difference( )** function ouptuts a set which contains elements that are in set1 and not in set2." + "`difference( )` function ouptuts a set which contains elements that are in set1 and not in set2." ] }, { "cell_type": "code", - "execution_count": 71, - "metadata": { - "collapsed": false - }, + "execution_count": 102, + "metadata": {}, "outputs": [ { "data": { @@ -1850,7 +1854,7 @@ "{0, 1}" ] }, - "execution_count": 71, + "execution_count": 102, "metadata": {}, "output_type": "execute_result" } @@ -1863,15 +1867,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**symmetric_difference( )** function ouputs a function which contains elements that are in one of the sets." + "`symmetric_difference( )` function ouputs a function which contains elements that are in one of the sets." ] }, { "cell_type": "code", - "execution_count": 72, - "metadata": { - "collapsed": false - }, + "execution_count": 103, + "metadata": {}, "outputs": [ { "data": { @@ -1879,7 +1881,7 @@ "{0, 1, 4, 5}" ] }, - "execution_count": 72, + "execution_count": 103, "metadata": {}, "output_type": "execute_result" } @@ -1892,15 +1894,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**issubset( ), isdisjoint( ), issuperset( )** is used to check if the set1/set2 is a subset, disjoint or superset of set2/set1 respectively." + "`issubset( ), isdisjoint( ), issuperset( )` is used to check if the set1/set2 is a subset, disjoint or superset of set2/set1 respectively." ] }, { "cell_type": "code", - "execution_count": 73, - "metadata": { - "collapsed": false - }, + "execution_count": 104, + "metadata": {}, "outputs": [ { "data": { @@ -1908,7 +1908,7 @@ "False" ] }, - "execution_count": 73, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" } @@ -1919,10 +1919,8 @@ }, { "cell_type": "code", - "execution_count": 74, - "metadata": { - "collapsed": false - }, + "execution_count": 105, + "metadata": {}, "outputs": [ { "data": { @@ -1930,7 +1928,7 @@ "False" ] }, - "execution_count": 74, + "execution_count": 105, "metadata": {}, "output_type": "execute_result" } @@ -1941,10 +1939,8 @@ }, { "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, + "execution_count": 106, + "metadata": {}, "outputs": [ { "data": { @@ -1952,7 +1948,7 @@ "False" ] }, - "execution_count": 75, + "execution_count": 106, "metadata": {}, "output_type": "execute_result" } @@ -1965,42 +1961,41 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** is used to remove an arbitrary element in the set" + "`pop( )` is used to remove an arbitrary element in the set" ] }, { "cell_type": "code", - "execution_count": 76, - "metadata": { - "collapsed": false - }, + "execution_count": 107, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "set([1, 2, 3])\n" - ] + "data": { + "text/plain": [ + "{1, 2, 3}" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "set1.pop()\n", - "print set1" + "set1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**remove( )** function deletes the specified element from the set." + "`remove( )` function deletes the specified element from the set." ] }, { "cell_type": "code", - "execution_count": 77, - "metadata": { - "collapsed": false - }, + "execution_count": 108, + "metadata": {}, "outputs": [ { "data": { @@ -2008,7 +2003,7 @@ "{1, 3}" ] }, - "execution_count": 77, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" } @@ -2022,15 +2017,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**clear( )** is used to clear all the elements and make that set an empty set." + "`clear( )` is used to clear all the elements and make that set an empty set." ] }, { "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": false - }, + "execution_count": 109, + "metadata": {}, "outputs": [ { "data": { @@ -2038,7 +2031,7 @@ "set()" ] }, - "execution_count": 78, + "execution_count": 109, "metadata": {}, "output_type": "execute_result" } @@ -2051,23 +2044,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/00.ipynb b/00.ipynb index eaeb7fb..757067d 100644 --- a/00.ipynb +++ b/00.ipynb @@ -4,14 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Python-Lectures" + "# Python Overview" ] }, { @@ -132,6 +125,15 @@ "This will clear all the outputs and now you can understand each statement and learn interactively." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get the notebooks\n", + "\n", + "The notebooks are available [on github](https://github.com/abingham/Python-Lectures). They are based on the [original work by Rajath Kumar M. P.](https://github.com/rajathkmp/Python-Lectures)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/01.ipynb b/01.ipynb index c8669d2..49a6d63 100644 --- a/01.ipynb +++ b/01.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/02.ipynb b/02.ipynb index c09db20..587bde7 100644 --- a/02.ipynb +++ b/02.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Print Statement" + "# `print`" ] }, { @@ -31,6 +31,42 @@ "print(\"Hello World\")" ] }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello world !\n" + ] + } + ], + "source": [ + "print(\"Hello\", \"world\", \"!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 2.3 [4, 5, 6]\n" + ] + } + ], + "source": [ + "print(1, 2.3, [4, 5, 6])" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/03.ipynb b/03.ipynb index 0082443..823f5b0 100644 --- a/03.ipynb +++ b/03.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -18,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In simple terms, It is the the collection or group of data in a particular structure." + "In simple terms, a data structure is a collection or group of data in a particular structure." ] }, { @@ -34,55 +27,36 @@ "source": [ "Lists are the most commonly used data structure. Think of it as a sequence of data that is enclosed in square brackets and data are separated by a comma. Each of these data can be accessed by calling it's index value.\n", "\n", - "Lists are declared by just equating a variable to '[ ]' or list." + "Lists can be declared in literal form with `[ ]`:" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [], "source": [ - "a = []" + "x = ['apple', 'pear', 'orange']" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print type(a)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "One can directly assign the sequence of data to a list x as shown." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x = ['apple', 'orange']" + "type(x)" ] }, { @@ -96,15 +70,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In python, Indexing starts from 0. Thus now the list x, which has two elements will have apple at 0 index and orange at 1 index." + "In python, Indexing starts from 0. Thus now the list `x`, which has two elements will have apple at 0 index and orange at 1 index." ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "data": { @@ -112,7 +84,7 @@ "'apple'" ] }, - "execution_count": 4, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -130,10 +102,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "data": { @@ -141,7 +111,7 @@ "'orange'" ] }, - "execution_count": 5, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -154,15 +124,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you might have already guessed, x[0] = x[-2], x[1] = x[-1]. This concept can be extended towards lists with more many elements." + "As you might have already guessed, `x[0] = x[-2], x[1] = x[-1]`. This concept can be extended towards lists with more many elements." ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [], "source": [ "y = ['carrot','potato']" @@ -172,27 +140,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here we have declared two lists x and y each containing its own data. Now, these two lists can again be put into another list say z which will have it's data as two lists. This list inside a list is called as nested lists and is how an array would be declared which we will see later." + "Here we have declared two lists `x` and `y` each containing its own data. Now, these two lists can again be put into another list say `z` which will have it's data as two lists. This list inside a list is called as nested lists and is how an array would be declared which we will see later." ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[['apple', 'orange'], ['carrot', 'potato']]\n" - ] + "data": { + "text/plain": [ + "[['apple', 'pear', 'orange'], ['carrot', 'potato']]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "z = [x,y]\n", - "print z" + "z = [x,y]\n", + "z" ] }, { @@ -202,42 +171,41 @@ "Indexing in nested lists can be quite confusing if you do not understand how indexing works in python. So let us break it down and then arrive at a conclusion.\n", "\n", "Let us access the data 'apple' in the above nested list.\n", - "First, at index 0 there is a list ['apple','orange'] and at index 1 there is another list ['carrot','potato']. Hence z[0] should give us the first list which contains 'apple'." + "First, at index 0 there is a list ['apple','orange'] and at index 1 there is another list ['carrot','potato']. Hence `z[0]` should give us the first list which contains 'apple'." ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['apple', 'orange']\n" - ] + "data": { + "text/plain": [ + "['apple', 'pear', 'orange']" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "z1 = z[0]\n", - "print z1" + "z1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now observe that z1 is not at all a nested list thus to access 'apple', z1 should be indexed at 0." + "Now observe that `z1` is not at all a nested list thus to access 'apple', `z1` should be indexed at 0." ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "data": { @@ -245,7 +213,7 @@ "'apple'" ] }, - "execution_count": 9, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -258,15 +226,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Instead of doing the above, In python, you can access 'apple' by just writing the index values each time side by side." + "Instead of doing the above, In Python, you can access 'apple' by just writing the index values each time side by side." ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "data": { @@ -274,7 +240,7 @@ "'apple'" ] }, - "execution_count": 10, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -287,7 +253,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If there was a list inside a list inside a list then you can access the innermost value by executing z[ ][ ][ ]." + "If there was a list inside a list inside a list then you can access the innermost value by executing `z[ ][ ][ ]`." ] }, { @@ -301,41 +267,50 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Indexing was only limited to accessing a single element, Slicing on the other hand is accessing a sequence of data inside the list. In other words \"slicing\" the list.\n", + "Indexing was only limited to accessing a single element. Slicing on the other hand is accessing a sequence of data inside the list. In other words \"slicing\" the list.\n", "\n", - "Slicing is done by defining the index values of the first element and the last element from the parent list that is required in the sliced list. It is written as parentlist[ a : b ] where a,b are the index values from the parent list. If a or b is not defined then the index value is considered to be the first value for a if a is not defined and the last value for b when b is not defined." + "Slicing is done by defining the index values of the first element and the last element from the parent list that is required in the sliced list. It is written as parentlist `[ a : b ]` where `a,b` are the index values from the parent list. If a or b is not defined then the index value is considered to be the first value for a if a is not defined and the last value for b when b is not defined." ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 2, 3]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "num = [0,1,2,3,4,5,6,7,8,9]" + "num = [0,1,2,3,4,5,6,7,8,9]\n", + "num[0:4]" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0, 1, 2, 3]\n", - "[4, 5, 6, 7, 8, 9]\n" - ] + "data": { + "text/plain": [ + "[4, 5, 6, 7, 8, 9]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print num[0:4]\n", - "print num[4:]" + "num[4:]" ] }, { @@ -347,10 +322,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 25, + "metadata": {}, "outputs": [ { "data": { @@ -358,7 +331,7 @@ "[0, 3, 6]" ] }, - "execution_count": 13, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -383,10 +356,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 27, + "metadata": {}, "outputs": [ { "data": { @@ -394,7 +365,7 @@ "10" ] }, - "execution_count": 14, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -412,10 +383,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 28, + "metadata": {}, "outputs": [ { "data": { @@ -423,7 +392,7 @@ "0" ] }, - "execution_count": 15, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -434,10 +403,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 29, + "metadata": {}, "outputs": [ { "data": { @@ -445,7 +412,7 @@ "9" ] }, - "execution_count": 16, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -463,10 +430,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 30, + "metadata": {}, "outputs": [ { "data": { @@ -474,7 +439,7 @@ "[1, 2, 3, 5, 4, 7]" ] }, - "execution_count": 17, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -492,10 +457,8 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 31, + "metadata": {}, "outputs": [], "source": [ "names = ['Earth','Air','Fire','Water']" @@ -510,10 +473,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 32, + "metadata": {}, "outputs": [ { "data": { @@ -521,7 +482,7 @@ "True" ] }, - "execution_count": 19, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -532,10 +493,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 33, + "metadata": {}, "outputs": [ { "data": { @@ -543,7 +502,7 @@ "False" ] }, - "execution_count": 20, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -561,10 +520,8 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": true - }, + "execution_count": 34, + "metadata": {}, "outputs": [], "source": [ "mlist = ['bzaa','ds','nc','az','z','klm']" @@ -572,23 +529,22 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 35, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "z\n", - "az\n" - ] + "data": { + "text/plain": [ + "('z', 'az')" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print max(mlist)\n", - "print min(mlist)" + "max(mlist), min(mlist)" ] }, { @@ -600,10 +556,8 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": true - }, + "execution_count": 36, + "metadata": {}, "outputs": [], "source": [ "nlist = ['1','94','93','1000']" @@ -611,30 +565,29 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, + "execution_count": 38, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "94\n", - "1\n" - ] + "data": { + "text/plain": [ + "('94', '1')" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print max(nlist)\n", - "print min(nlist)" + "max(nlist), min(nlist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Even if the numbers are declared in a string the first index of each element is considered and the maximum and minimum values are returned accordingly." + "Here, the strings are still sorted as string (that is, lexically) even though they \"look like\" numbers." ] }, { @@ -646,23 +599,22 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 39, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Earth\n", - "Air\n" - ] + "data": { + "text/plain": [ + "('Earth', 'Air')" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print max(names, key=len)\n", - "print min(names, key=len)" + "max(names, key=len), min(names, key=len)" ] }, { @@ -671,17 +623,15 @@ "source": [ "But even 'Water' has length 5. `max()` or `min()` function returns the first element when there are two or more elements with the same length.\n", "\n", - "Any other built in function can be used or lambda function (will be discussed later) in place of len.\n", + "Any other built in function can be used or lambda function (will be discussed later) in place of `len`.\n", "\n", "A string can be converted into a list by using the `list()` function." ] }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, + "execution_count": 40, + "metadata": {}, "outputs": [ { "data": { @@ -689,7 +639,7 @@ "['h', 'e', 'l', 'l', 'o']" ] }, - "execution_count": 26, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -707,10 +657,8 @@ }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [], "source": [ "lst = [1,1,4,8,7]" @@ -718,22 +666,23 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 1]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 1]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.append(1)\n", - "print lst" + "lst" ] }, { @@ -745,10 +694,8 @@ }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { "data": { @@ -756,7 +703,7 @@ "3" ] }, - "execution_count": 29, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -774,10 +721,8 @@ }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": true - }, + "execution_count": 44, + "metadata": {}, "outputs": [], "source": [ "lst1 = [5,4,2,8]" @@ -785,52 +730,52 @@ }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 45, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8]]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8]]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.append(lst1)\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "But if nested list is not what is desired then `extend( )` function can be used." ] }, { "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, + "execution_count": 46, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2, 8]\n" - ] - } - ], - "source": [ - "lst.extend(lst1)\n", - "print lst" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2, 8]" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lst.extend(lst1)\n", + "lst" + ] }, { "cell_type": "markdown", @@ -841,10 +786,8 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ { "data": { @@ -852,7 +795,7 @@ "0" ] }, - "execution_count": 33, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -870,22 +813,23 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 48, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 'name', 1, [5, 4, 2, 8], 5, 4, 2, 8]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 'name', 1, [5, 4, 2, 8], 5, 4, 2, 8]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.insert(5, 'name')\n", - "print lst" + "lst" ] }, { @@ -897,22 +841,23 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 49, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 4, 8, 7, 'Python', 1, [5, 4, 2, 8], 5, 4, 2, 8]\n" - ] + "data": { + "text/plain": [ + "[1, 1, 4, 8, 7, 'Python', 1, [5, 4, 2, 8], 5, 4, 2, 8]" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst[5] = 'Python'\n", - "print lst" + "lst" ] }, { @@ -924,10 +869,8 @@ }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 50, + "metadata": {}, "outputs": [ { "data": { @@ -935,7 +878,7 @@ "8" ] }, - "execution_count": 36, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -953,10 +896,8 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [ { "data": { @@ -964,7 +905,7 @@ "1" ] }, - "execution_count": 37, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -982,22 +923,23 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 52, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]\n" - ] + "data": { + "text/plain": [ + "[1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.remove('Python')\n", - "print lst" + "lst" ] }, { @@ -1009,51 +951,51 @@ }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 54, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]\n" - ] + "data": { + "text/plain": [ + "[1, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "del lst[1]\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "The entire elements present in the list can be reversed by using the `reverse()` function." ] }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 4, 5, [5, 4, 2, 8], 1, 7, 8, 1]\n" - ] + "data": { + "text/plain": [ + "[2, 4, 5, [5, 4, 2, 8], 1, 7, 8, 1]" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.reverse()\n", - "print lst" + "lst" ] }, { @@ -1067,22 +1009,24 @@ }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, + "execution_count": 57, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 1, 2, 4, 5, 7, 8, [5, 4, 2, 8]]\n" - ] + "data": { + "text/plain": [ + "[1, 2, 3, 6, 7, 9, 42]" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ + "lst = [9, 6, 3, 7, 2, 1, 42]\n", "lst.sort()\n", - "print lst" + "lst" ] }, { @@ -1094,52 +1038,72 @@ }, { "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, + "execution_count": 59, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[5, 4, 2, 8], 8, 7, 5, 4, 2, 1, 1]\n" - ] + "data": { + "text/plain": [ + "[42, 9, 7, 6, 3, 2, 1]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lst.sort(reverse=True)\n", - "print lst" + "lst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Similarly for lists containing string elements, `sort( )` would sort the elements based on it's ASCII value in ascending and by specifying reverse=True in descending." + "Similarly for lists containing string elements, `sort( )` would sort the elements based on it's ASCII value in ascending and by specifying `reverse=True` in descending." ] }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, + "execution_count": 61, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['Air', 'Earth', 'Fire', 'Water']\n", - "['Water', 'Fire', 'Earth', 'Air']\n" - ] + "data": { + "text/plain": [ + "['Air', 'Earth', 'Fire', 'Water']" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "names.sort()\n", - "print names\n", + "names" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Water', 'Fire', 'Earth', 'Air']" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "names.sort(reverse=True)\n", - "print names" + "names" ] }, { @@ -1151,25 +1115,44 @@ }, { "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, + "execution_count": 63, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['Air', 'Fire', 'Water', 'Earth']\n", - "['Water', 'Earth', 'Fire', 'Air']\n" - ] + "data": { + "text/plain": [ + "['Air', 'Fire', 'Water', 'Earth']" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "names.sort(key=len)\n", - "print names\n", + "names" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Water', 'Earth', 'Fire', 'Air']" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "names.sort(key=len,reverse=True)\n", - "print names" + "names" ] }, { @@ -1183,169 +1166,178 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Most of the new python programmers commit this mistake. Consider the following," + "To copy a list, it's not sufficient to simply assign a new name to it. Consider the following," ] }, { "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, + "execution_count": 66, + "metadata": {}, "outputs": [], "source": [ - "lista= [2,1,4,3]" + "lista = [2,1,4,3]" ] }, { "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, + "execution_count": 67, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 3]\n" - ] + "data": { + "text/plain": [ + "[2, 1, 4, 3]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "listb = lista\n", - "print listb" + "listb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here, We have declared a list, lista = [2,1,4,3]. This list is copied to listb by assigning it's value and it get's copied as seen. Now we perform some random operations on lista." + "Here, We have declared a list, `lista = [2,1,4,3]`. This list is assigned to `listb`. While we might expect `lista` and `listb` to be different lists, we can see that changes to `lista` are reflected in `listb`:" ] }, { "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, + "execution_count": 68, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4]\n", - "[2, 1, 4, 9]\n" - ] + "data": { + "text/plain": [ + "[2, 1, 4, 9]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "lista.pop()\n", - "print lista\n", "lista.append(9)\n", - "print lista" + "lista" ] }, { "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, + "execution_count": 70, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 9]\n" - ] + "data": { + "text/plain": [ + "[2, 1, 4, 9]" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print listb" + "listb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "listb has also changed though no operation has been performed on it. This is because you have assigned the same memory space of lista to listb. So how do fix this?\n", + "`listb` has also changed though no operation has been performed on it. This is because `lista` and `listb` refer to the same object. So how do fix this?\n", "\n", - "If you recall, in slicing we had seen that parentlist[a:b] returns a list from parent list with start index a and end index b and if a and b is not mentioned then by default it considers the first and last element. We use the same concept here. By doing so, we are assigning the data of lista to listb as a variable." + "One way to copy a list is to construct a new list around it:" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "([1, 2, 3, 4], [2, 1, 4, 3])" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lista = [2,1,4,3]\n", + "listb = list(lista)\n", + "\n", + "lista.sort()\n", + "\n", + "lista, listb" + ] + }, + { + "cell_type": "markdown", "metadata": { "collapsed": true }, - "outputs": [], "source": [ - "lista = [2,1,4,3]" + "Another approach is to use slicing. Since slicing creates copies, a full slice of a list will effectively create a copy of it:" ] }, { "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, + "execution_count": 74, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 3]\n" - ] + "data": { + "text/plain": [ + "([1, 2, 3, 4], [1, 2, 3, 4])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "listb = lista[:]\n", - "print listb" + "lista, listb" ] }, { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4]\n", - "[2, 1, 4, 9]\n" - ] - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "lista.pop()\n", - "print lista\n", - "lista.append(9)\n", - "print lista" + "These lists are different objects but have identical contents. We can see this by modifying one of them:" ] }, { "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": false - }, + "execution_count": 75, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2, 1, 4, 3]\n" - ] + "data": { + "text/plain": [ + "([1, 2, 3], [1, 2, 3, 4])" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print listb" + "lista.pop()\n", + "lista, listb" ] }, { @@ -1359,36 +1351,55 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Tuples are similar to lists but only big difference is the elements inside a list can be changed but in tuple it cannot be changed. Think of tuples as something which has to be True for a particular something and cannot be True for no other values. For better understanding, Recall `divmod()` function." + "Tuples are similar to lists but only big difference is the elements inside a list can be changed but in tuple it cannot be changed. We can create tuples literals similar to how we create lists but using `()` instead:" ] }, { "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, + "execution_count": 76, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "(3, 1)\n", - "\n" - ] + "data": { + "text/plain": [ + "(3, 8, 5)" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "xyz = divmod(10,3)\n", - "print xyz\n", - "print type(xyz)" + "xyz = (3, 8, 5)\n", + "xyz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here the quotient has to be 3 and the remainder has to be 1. These values cannot be changed whatsoever when 10 is divided by 3. Hence divmod returns these values in a tuple." + "We can see that this is a tuple with the `type()` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tuple" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(xyz)" ] }, { @@ -1400,10 +1411,8 @@ }, { "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": false - }, + "execution_count": 79, + "metadata": {}, "outputs": [], "source": [ "tup = ()\n", @@ -1414,15 +1423,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If you want to directly declare a tuple it can be done by using a comma at the end of the data." + "One thing to keep in mind is that if you want to declare a tuple with a single element, you need a trailing comma:" ] }, { "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, + "execution_count": 81, + "metadata": {}, "outputs": [ { "data": { @@ -1430,42 +1437,40 @@ "(27,)" ] }, - "execution_count": 55, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "27," + "(27,)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "27 when multiplied by 2 yields 54, But when multiplied with a tuple the data is repeated twice." + "You can multiply a tuple by an integer to repeat it that many times:" ] }, { "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, + "execution_count": 83, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(27, 27)" + "('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')" ] }, - "execution_count": 56, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "2*(27,)" + "3 * ('a', 'b', 'c')" ] }, { @@ -1477,112 +1482,124 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 84, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1, 2, 3)\n", - "('H', 'e', 'l', 'l', 'o')\n" - ] + "data": { + "text/plain": [ + "(1, 2, 3)" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "tup3 = tuple([1,2,3])\n", - "print tup3\n", - "tup4 = tuple('Hello')\n", - "print tup4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It follows the same indexing and slicing as Lists." + "tup3" ] }, { "cell_type": "code", - "execution_count": 58, - "metadata": { - "collapsed": false - }, + "execution_count": 85, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "('H', 'e', 'l')\n" - ] + "data": { + "text/plain": [ + "('H', 'e', 'l', 'l', 'o')" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print tup3[1]\n", - "tup5 = tup4[:3]\n", - "print tup5" + "tup4 = tuple('Hello')\n", + "tup4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Mapping one tuple to another" + "It follows the same indexing and slicing as Lists." ] }, { "cell_type": "code", - "execution_count": 59, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "(a,b,c)= ('alpha','beta','gamma')" + "tup3[1]" ] }, { "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": false - }, + "execution_count": 87, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "alpha beta gamma\n" - ] + "data": { + "text/plain": [ + "('H', 'e', 'l')" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print a,b,c" + "tup5 = tup4[:3]\n", + "tup5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tuple unpacking\n", + "\n", + "You can assign the elements of a tuple to variables by separating the variable names by commans:" ] }, { "cell_type": "code", - "execution_count": 61, - "metadata": { - "collapsed": false - }, + "execution_count": 89, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "('R', 'a', 'j', 'a', 't', 'h', 'K', 'u', 'm', 'a', 'r', 'M', 'P')\n" - ] + "data": { + "text/plain": [ + "'The elements are alpha, beta, and gamma'" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "d = tuple('RajathKumarMP')\n", - "print d" + "a,b,c = ('alpha','beta','gamma')\n", + "\"The elements are {}, {}, and {}\".format(a, b, c)" ] }, { @@ -1601,10 +1618,8 @@ }, { "cell_type": "code", - "execution_count": 62, - "metadata": { - "collapsed": false - }, + "execution_count": 93, + "metadata": {}, "outputs": [ { "data": { @@ -1612,12 +1627,13 @@ "3" ] }, - "execution_count": 62, + "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "d = tuple('alphabetical')\n", "d.count('a')" ] }, @@ -1630,18 +1646,16 @@ }, { "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": false - }, + "execution_count": 94, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1" + "0" ] }, - "execution_count": 63, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } @@ -1661,49 +1675,51 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sets are mainly used to eliminate repeated numbers in a sequence/list. It is also used to perform some standard set operations.\n", + "Sets are collections of unique, immutable objects. It is also used to perform some standard set operations.\n", "\n", - "Sets are declared as set() which will initialize a empty set. Also set([sequence]) can be executed to declare a set with elements" + "Sets are declared as `set()` which will initialize a empty set. Also `set([sequence])` can be executed to declare a set with elements" ] }, { "cell_type": "code", - "execution_count": 64, - "metadata": { - "collapsed": false - }, + "execution_count": 95, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/plain": [ + "set" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "set1 = set()\n", - "print type(set1)" + "type(set1)" ] }, { "cell_type": "code", - "execution_count": 65, - "metadata": { - "collapsed": false - }, + "execution_count": 96, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "set([1, 2, 3, 4])\n" - ] + "data": { + "text/plain": [ + "{1, 2, 3, 4}" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "set0 = set([1,2,2,3,3,4])\n", - "print set0" + "set0" ] }, { @@ -1722,10 +1738,8 @@ }, { "cell_type": "code", - "execution_count": 66, - "metadata": { - "collapsed": false - }, + "execution_count": 97, + "metadata": {}, "outputs": [], "source": [ "set1 = set([1,2,3])" @@ -1733,10 +1747,8 @@ }, { "cell_type": "code", - "execution_count": 67, - "metadata": { - "collapsed": false - }, + "execution_count": 98, + "metadata": {}, "outputs": [], "source": [ "set2 = set([2,3,4,5])" @@ -1751,10 +1763,8 @@ }, { "cell_type": "code", - "execution_count": 68, - "metadata": { - "collapsed": false - }, + "execution_count": 99, + "metadata": {}, "outputs": [ { "data": { @@ -1762,7 +1772,7 @@ "{1, 2, 3, 4, 5}" ] }, - "execution_count": 68, + "execution_count": 99, "metadata": {}, "output_type": "execute_result" } @@ -1780,10 +1790,8 @@ }, { "cell_type": "code", - "execution_count": 69, - "metadata": { - "collapsed": false - }, + "execution_count": 100, + "metadata": {}, "outputs": [ { "data": { @@ -1791,7 +1799,7 @@ "{0, 1, 2, 3}" ] }, - "execution_count": 69, + "execution_count": 100, "metadata": {}, "output_type": "execute_result" } @@ -1810,10 +1818,8 @@ }, { "cell_type": "code", - "execution_count": 70, - "metadata": { - "collapsed": false - }, + "execution_count": 101, + "metadata": {}, "outputs": [ { "data": { @@ -1821,7 +1827,7 @@ "{2, 3}" ] }, - "execution_count": 70, + "execution_count": 101, "metadata": {}, "output_type": "execute_result" } @@ -1839,10 +1845,8 @@ }, { "cell_type": "code", - "execution_count": 71, - "metadata": { - "collapsed": false - }, + "execution_count": 102, + "metadata": {}, "outputs": [ { "data": { @@ -1850,7 +1854,7 @@ "{0, 1}" ] }, - "execution_count": 71, + "execution_count": 102, "metadata": {}, "output_type": "execute_result" } @@ -1868,10 +1872,8 @@ }, { "cell_type": "code", - "execution_count": 72, - "metadata": { - "collapsed": false - }, + "execution_count": 103, + "metadata": {}, "outputs": [ { "data": { @@ -1879,7 +1881,7 @@ "{0, 1, 4, 5}" ] }, - "execution_count": 72, + "execution_count": 103, "metadata": {}, "output_type": "execute_result" } @@ -1897,10 +1899,8 @@ }, { "cell_type": "code", - "execution_count": 73, - "metadata": { - "collapsed": false - }, + "execution_count": 104, + "metadata": {}, "outputs": [ { "data": { @@ -1908,7 +1908,7 @@ "False" ] }, - "execution_count": 73, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" } @@ -1919,10 +1919,8 @@ }, { "cell_type": "code", - "execution_count": 74, - "metadata": { - "collapsed": false - }, + "execution_count": 105, + "metadata": {}, "outputs": [ { "data": { @@ -1930,7 +1928,7 @@ "False" ] }, - "execution_count": 74, + "execution_count": 105, "metadata": {}, "output_type": "execute_result" } @@ -1941,10 +1939,8 @@ }, { "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, + "execution_count": 106, + "metadata": {}, "outputs": [ { "data": { @@ -1952,7 +1948,7 @@ "False" ] }, - "execution_count": 75, + "execution_count": 106, "metadata": {}, "output_type": "execute_result" } @@ -1970,22 +1966,23 @@ }, { "cell_type": "code", - "execution_count": 76, - "metadata": { - "collapsed": false - }, + "execution_count": 107, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "set([1, 2, 3])\n" - ] + "data": { + "text/plain": [ + "{1, 2, 3}" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "set1.pop()\n", - "print set1" + "set1" ] }, { @@ -1997,10 +1994,8 @@ }, { "cell_type": "code", - "execution_count": 77, - "metadata": { - "collapsed": false - }, + "execution_count": 108, + "metadata": {}, "outputs": [ { "data": { @@ -2008,7 +2003,7 @@ "{1, 3}" ] }, - "execution_count": 77, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" } @@ -2027,10 +2022,8 @@ }, { "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": false - }, + "execution_count": 109, + "metadata": {}, "outputs": [ { "data": { @@ -2038,7 +2031,7 @@ "set()" ] }, - "execution_count": 78, + "execution_count": 109, "metadata": {}, "output_type": "execute_result" } @@ -2051,23 +2044,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } From 4812cfc8f4368f3f66a94826ce5e3b1526f542e4 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 21:55:00 +0200 Subject: [PATCH 05/10] reviewed section 4 --- .ipynb_checkpoints/04-checkpoint.ipynb | 1071 ++++++++++++++---------- 04.ipynb | 1013 ++++++++++++---------- 2 files changed, 1201 insertions(+), 883 deletions(-) diff --git a/.ipynb_checkpoints/04-checkpoint.ipynb b/.ipynb_checkpoints/04-checkpoint.ipynb index 5a502ea..c626147 100644 --- a/.ipynb_checkpoints/04-checkpoint.ipynb +++ b/.ipynb_checkpoints/04-checkpoint.ipynb @@ -4,61 +4,103 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" + "## Strings, continued" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Strings" + "Strings are immutable sequences of unicode code points:" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 82, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Taj Mahal is beautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "str" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "Strings are ordered text based data which are represented by enclosing the same in single/double/triple quotes." + "string0 = 'Taj Mahal is beautiful'\n", + "display(String0 , type(String0))" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Taj Mahal is beautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "str" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "String0 = 'Taj Mahal is beautiful'\n", "String1 = \"Taj Mahal is beautiful\"\n", - "String2 = '''Taj Mahal\n", - "is\n", - "beautiful'''" + "display(String1, type(String1))" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 79, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Taj Mahal is beautiful \n", - "Taj Mahal is beautiful \n", - "Taj Mahal\n", - "is\n", - "beautiful \n" - ] + "data": { + "text/plain": [ + "'Taj Mahal\\nis\\nbeautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "str" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0 , type(String0)\n", - "print String1, type(String1)\n", - "print String2, type(String2)" + "String2 = '''Taj Mahal\n", + "is\n", + "beautiful'''\n", + "display(String2, type(String2))" ] }, { @@ -70,58 +112,84 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 80, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "M\n", - "Mahal is beautiful\n" - ] + "data": { + "text/plain": [ + "'M'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'Mahal is beautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0[4]\n", - "print String0[4:]" + "display(String0[4], String0[4:])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###Built-in Functions" + "### Built-in Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**find( )** function returns the index value of the given data that is to found in the string. If it is not found it returns **-1**. Remember to not confuse the returned -1 for reverse indexing value." + "`find( )` function returns the index value of the given data that is to found in the string. If it is not found it returns `-1`. Remember to not confuse the returned -1 for reverse indexing value." ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "7\n", - "-1\n" - ] + "data": { + "text/plain": [ + "7" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0.find('al')\n", - "print String0.find('am')" + "String0.find('al')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.find('am')" ] }, { @@ -133,91 +201,110 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "a\n" - ] + "data": { + "text/plain": [ + "'a'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0[7]" + "String0[7]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "One can also input **find( )** function between which index values it has to search." + "One can also input `find( )` function between which index values it has to search." ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "2\n" - ] + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0.find('j',1)\n", - "print String0.find('j',1,3)" + "String0.find('j',1)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.find('j',1,3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**capitalize( )** is used to capitalize the first element in the string." + "`capitalize( )` is used to capitalize the first element in the string." ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Observe the first letter in this sentence.\n" - ] + "data": { + "text/plain": [ + "'Observe the first letter in this sentence.'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "String3 = 'observe the first letter in this sentence.'\n", - "print String3.capitalize()" + "String3.capitalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**center( )** is used to center align the string by specifying the field width." + "`center( )` is used to center align the string by specifying the field width." ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "data": { @@ -225,7 +312,7 @@ "' Taj Mahal is beautiful '" ] }, - "execution_count": 8, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -243,10 +330,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { @@ -254,7 +339,7 @@ "'------------------------Taj Mahal is beautiful------------------------'" ] }, - "execution_count": 9, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -267,15 +352,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**zfill( )** is used for zero padding by specifying the field width." + "`zfill( )` is used for zero padding by specifying the field width." ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "data": { @@ -283,7 +366,7 @@ "'00000000Taj Mahal is beautiful'" ] }, - "execution_count": 10, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -296,31 +379,68 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**expandtabs( )** allows you to change the spacing of the tab character. '\\t' which is by default set to 8 spaces." + "`expandtabs( )` allows you to change the spacing of the tab character. '\\t' which is by default set to 8 spaces." ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "h\te\tl\tl\to\n", - "h e l l o\n", - "h e l l o\n" - ] + "data": { + "text/plain": [ + "'h\\te\\tl\\tl\\to'" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "s = 'h\\te\\tl\\tl\\to'\n", - "print s\n", - "print s.expandtabs(1)\n", - "print s.expandtabs()" + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h e l l o'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.expandtabs(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h e l l o'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.expandtabs()" ] }, { @@ -329,24 +449,54 @@ "collapsed": true }, "source": [ - "**index( )** works the same way as **find( )** function the only difference is find returns '-1' when the input element is not found in the string but **index( )** function throws a ValueError" + "`index( )` works the same way as `find( )` function the only difference is find returns '-1' when the input element is not found in the string but `index( )` function throws a `ValueError`" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 26, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n", - "4\n" - ] - }, + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.index('Taj')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.index('Mahal',0)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ { "ename": "ValueError", "evalue": "substring not found", @@ -354,43 +504,40 @@ "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[1;32m 1\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Taj'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Mahal'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Mahal'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m20\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[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Mahal'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: substring not found" ] } ], "source": [ - "print String0.index('Taj')\n", - "print String0.index('Mahal',0)\n", - "print String0.index('Mahal',10,20)" + "String0.index('Mahal',10,20)" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "**endswith( )** function is used to check if the given string ends with the particular char which is given as input." + "`endswith( )` function is used to check if the given string ends with the particular char which is given as input." ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 30, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "False\n" - ] + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0.endswith('y')" + "\"llamas\".endswith('y')" ] }, { @@ -402,68 +549,79 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 78, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n", - "True\n" - ] + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0.endswith('l',0)\n", - "print String0.endswith('M',0,5)" + "display(\"llamas\".endswith('as',0), \"llamas\".endswith('as',0,3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**count( )** function counts the number of char in the given string. The start and the stop index can also be specified or left blank. (These are Implicit arguments which will be dealt in functions)" + "`count( )` function counts the number of char in the given string. The start and the stop index can also be specified or left blank. (These are Implicit arguments which will be dealt in functions)" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 77, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "4\n", - "2\n" - ] + "data": { + "text/plain": [ + "3" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0.count('a',0)\n", - "print String0.count('a',5,10)" + "s = \"alphabetical\"\n", + "display(s.count('a',0), s.count('a',5,10))" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "**join( )** function is used add a char in between the elements of the input string." + "`join( )` function is used add a char in between the elements of the input string." ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { "data": { @@ -471,7 +629,7 @@ "'*a_a-'" ] }, - "execution_count": 16, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -491,216 +649,235 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**join( )** function can also be used to convert a list into a string." + "`join( )` function can also be used to convert a list into a string." ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 76, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['T', 'a', 'j', ' ', 'M', 'a', 'h', 'a', 'l', ' ', 'i', 's', ' ', 'b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l']\n", - "Taj Mahal is beautiful\n" - ] + "data": { + "text/plain": [ + "['t',\n", + " 'h',\n", + " 'e',\n", + " ' ',\n", + " 'q',\n", + " 'u',\n", + " 'i',\n", + " 'c',\n", + " 'k',\n", + " ' ',\n", + " 'b',\n", + " 'r',\n", + " 'o',\n", + " 'w',\n", + " 'n',\n", + " ' ',\n", + " 'f',\n", + " 'o',\n", + " 'x']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'the quick brown fox'" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "a = list(String0)\n", - "print a\n", + "a = list('the quick brown fox')\n", "b = ''.join(a)\n", - "print b" + "display(a, b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Before converting it into a string **join( )** function can be used to insert any char in between the list elements." + "Before converting it into a string `join( )` function can be used to insert any char in between the list elements." ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 40, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " /i/s/ /b/e/a/u/t/i/f/u/l\n" - ] + "data": { + "text/plain": [ + "' /b/r/o/w/n/ /f/o/x'" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "c = '/'.join(a)[18:]\n", - "print c" + "c" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "**split( )** function is used to convert a string back to a list. Think of it as the opposite of the **join()** function." + "`split( )` function is used to convert a string back to a list. Think of it as the opposite of the `join()` function." ] }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' ', 'i', 's', ' ', 'b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l']\n" - ] + "data": { + "text/plain": [ + "[' ', 'b', 'r', 'o', 'w', 'n', ' ', 'f', 'o', 'x']" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "d = c.split('/')\n", - "print d" + "d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In **split( )** function one can also specify the number of times you want to split the string or the number of elements the new returned list should conatin. The number of elements is always one more than the specified number this is because it is split the number of times specified." + "In `split( )` function one can also specify the number of times you want to split the string or the number of elements the new returned list should conatin. The number of elements is always one more than the specified number this is because it is split the number of times specified." ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' ', 'i', 's', ' /b/e/a/u/t/i/f/u/l']\n", - "4\n" - ] + "data": { + "text/plain": [ + "([' ', 'b', 'r', 'o/w/n/ /f/o/x'], 4)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "e = c.split('/',3)\n", - "print e\n", - "print len(e)" + "e, len(e)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**lower( )** converts any capital letter to small letter." + "`lower( )` converts any capital letter to small letter." ] }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Taj Mahal is beautiful\n", - "taj mahal is beautiful\n" - ] + "data": { + "text/plain": [ + "'why am i yelling?'" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0\n", - "print String0.lower()" + "s = \"WHY AM I YELLING?\"\n", + "s.lower()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**upper( )** converts any small letter to capital letter." + "`upper( )` converts any small letter to capital letter." ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 44, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'TAJ MAHAL IS BEAUTIFUL'" + "'WHISPER'" ] }, - "execution_count": 22, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "String0.upper()" + "s = 'whisper'\n", + "s.upper()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**replace( )** function replaces the element with another element." + "`replace( )` function replaces the element with another element." ] }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, + "execution_count": 45, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'Bengaluru is beautiful'" + "'green eggs'" ] }, - "execution_count": 23, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "String0.replace('Taj Mahal','Bengaluru')" + "\"green onions\".replace('onions','eggs')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**strip( )** function is used to delete elements from the right end and the left end which is not required." + "`strip( )` function is used to delete elements from the right end and the left end which is not required." ] }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": true - }, + "execution_count": 46, + "metadata": {}, "outputs": [], "source": [ "f = ' hello '" @@ -715,10 +892,8 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ { "data": { @@ -726,7 +901,7 @@ "'hello'" ] }, - "execution_count": 25, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -739,34 +914,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**strip( )** function, when a char is specified then it deletes that char if it is present in the two ends of the specified string." + "`strip( )` function, when a char is specified then it deletes that char if it is present in the two ends of the specified string." ] }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": true - }, + "execution_count": 50, + "metadata": {}, "outputs": [], "source": [ - "f = ' ***----hello---******* '" + "f = '***----hello---*******'" ] }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "' ***----hello---******* '" + "'----hello---'" ] }, - "execution_count": 27, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -779,72 +950,41 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The asterisk had to be deleted but is not. This is because there is a space in both the right and left hand side. So in strip function. The characters need to be inputted in the specific order in which they are present." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "----hello---\n", - "hello\n" - ] - } - ], - "source": [ - "print f.strip(' *')\n", - "print f.strip(' *-')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "**lstrip( )** and **rstrip( )** function have the same functionality as strip function but the only difference is **lstrip( )** deletes only towards the left side and **rstrip( )** towards the right." + "`lstrip( )` and `rstrip( )` function have the same functionality as strip function but the only difference is `lstrip( )` deletes only towards the left side and `rstrip( )` towards the right." ] }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, + "execution_count": 52, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "----hello---******* \n", - " ***----hello---\n" - ] + "data": { + "text/plain": [ + "('----hello---*******', '***----hello---')" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print f.lstrip(' *')\n", - "print f.rstrip(' *')" + "display(f.lstrip(' *'), f.rstrip(' *'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Dictionaries" + "## Dictionaries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Dictionaries are more used like a database because here you can index a particular sequence with your user defined string." + "Dictionaries are mappings of immutable keys to mutable values." ] }, { @@ -856,77 +996,88 @@ }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, + "execution_count": 75, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " \n" - ] + "data": { + "text/plain": [ + "dict" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "dict" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "d0 = {}\n", "d1 = dict()\n", - "print type(d0), type(d1)" + "display(type(d0), type(d1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Dictionary works somewhat like a list but with an added capability of assigning it's own index style." + "To assign to a `dict` you can use the `[]` operator:" ] }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'OneTwo': 12, 'One': 1}\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'OneTwo': 12}" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "d0['One'] = 1\n", "d0['OneTwo'] = 12 \n", - "print d0" + "d0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "That is how a dictionary looks like. Now you are able to access '1' by the index value set at 'One'" + "You can also retrieve values by key with the `[]` operator:" ] }, { "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, + "execution_count": 57, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "1\n" - ] + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print d0['One']" + "d0['One']" ] }, { @@ -938,10 +1089,8 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, + "execution_count": 58, + "metadata": {}, "outputs": [], "source": [ "names = ['One', 'Two', 'Three', 'Four', 'Five']\n", @@ -952,92 +1101,93 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**zip( )** function is used to combine two lists" + "`zip( )` function is used to combine two lists" ] }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 59, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[('One', 1), ('Two', 2), ('Three', 3), ('Four', 4), ('Five', 5)]\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "d2 = zip(names,numbers)\n", - "print d2" + "d2" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "The two lists are combined to form a single list and each elements are clubbed with their respective elements from the other list inside a tuple. Tuples because that is what is assigned and the value should not change.\n", "\n", - "Further, To convert the above into a dictionary. **dict( )** function is used." + "Further, To convert the above into a dictionary. `dict( )` function is used." ] }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 61, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Four': 4, 'Five': 5, 'Three': 3, 'Two': 2, 'One': 1}\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5}" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "a1 = dict(d2)\n", - "print a1" + "a1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###Built-in Functions" + "### Built-in Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**clear( )** function is used to erase the entire database that was created." + "`clear( )` function is used to erase the entire database that was created." ] }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 63, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{}\n" - ] + "data": { + "text/plain": [ + "{}" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "a1.clear()\n", - "print a1" + "a1" ] }, { @@ -1049,46 +1199,45 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, + "execution_count": 70, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Four': 4, 'Five': 5, 'Three': 3, 'Two': 2, 'One': 1}\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'Two': 2, 'Three': 3, 'Five': 5, 'Four': 4}" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "for i in range(len(names)):\n", " a1[names[i]] = numbers[i]\n", - "print a1" + "a1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**values( )** function returns a list with all the assigned values in the dictionary." + "`values( )` function returns a list with all the assigned values in the dictionary." ] }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 71, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[4, 5, 3, 2, 1]" + "dict_values([1, 2, 3, 5, 4])" ] }, - "execution_count": 38, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -1101,23 +1250,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**keys( )** function returns all the index or the keys to which contains the values that it was assigned to." + "`keys( )` function returns all the index or the keys to which contains the values that it was assigned to." ] }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 72, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['Four', 'Five', 'Three', 'Two', 'One']" + "dict_keys(['One', 'Two', 'Three', 'Five', 'Four'])" ] }, - "execution_count": 39, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -1130,23 +1277,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**items( )** is returns a list containing both the list but each element in the dictionary is inside a tuple. This is same as the result that was obtained when zip function was used." + "`items( )` is returns a list containing both the list but each element in the dictionary is inside a tuple. This is same as the result that was obtained when zip function was used." ] }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 73, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('Four', 4), ('Five', 5), ('Three', 3), ('Two', 2), ('One', 1)]" + "dict_items([('One', 1), ('Two', 2), ('Three', 3), ('Five', 5), ('Four', 4)])" ] }, - "execution_count": 40, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } @@ -1159,51 +1304,65 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pop( )** function is used to get the remove that particular element and this removed element can be assigned to a new variable. But remember only the value is stored and not the key. Because the is just a index value." + "`pop( )` function is used to get the remove that particular element and this removed element can be assigned to a new variable. But remember only the value is stored and not the key. Because the is just a index value." ] }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, + "execution_count": 74, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Five': 5, 'Three': 3, 'Two': 2, 'One': 1}\n", - "4\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'Two': 2, 'Three': 3, 'Five': 5}" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "4" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "a2 = a1.pop('Four')\n", - "print a1\n", - "print a2" + "display(a1, a2)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/04.ipynb b/04.ipynb index 53abdad..c626147 100644 --- a/04.ipynb +++ b/04.ipynb @@ -4,61 +4,103 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" + "## Strings, continued" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Strings" + "Strings are immutable sequences of unicode code points:" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 82, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Taj Mahal is beautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "str" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "Strings are ordered text based data which are represented by enclosing the same in single/double/triple quotes." + "string0 = 'Taj Mahal is beautiful'\n", + "display(String0 , type(String0))" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Taj Mahal is beautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "str" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "String0 = 'Taj Mahal is beautiful'\n", "String1 = \"Taj Mahal is beautiful\"\n", - "String2 = '''Taj Mahal\n", - "is\n", - "beautiful'''" + "display(String1, type(String1))" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 79, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Taj Mahal is beautiful \n", - "Taj Mahal is beautiful \n", - "Taj Mahal\n", - "is\n", - "beautiful \n" - ] + "data": { + "text/plain": [ + "'Taj Mahal\\nis\\nbeautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "str" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0 , type(String0)\n", - "print String1, type(String1)\n", - "print String2, type(String2)" + "String2 = '''Taj Mahal\n", + "is\n", + "beautiful'''\n", + "display(String2, type(String2))" ] }, { @@ -70,23 +112,30 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 80, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "M\n", - "Mahal is beautiful\n" - ] + "data": { + "text/plain": [ + "'M'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'Mahal is beautiful'" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0[4]\n", - "print String0[4:]" + "display(String0[4], String0[4:])" ] }, { @@ -105,23 +154,42 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "7\n", - "-1\n" - ] + "data": { + "text/plain": [ + "7" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0.find('al')\n", - "print String0.find('am')" + "String0.find('al')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.find('am')" ] }, { @@ -133,21 +201,22 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "a\n" - ] + "data": { + "text/plain": [ + "'a'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0[7]" + "String0[7]" ] }, { @@ -159,23 +228,42 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "2\n" - ] + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0.find('j',1)\n", - "print String0.find('j',1,3)" + "String0.find('j',1)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.find('j',1,3)" ] }, { @@ -187,22 +275,23 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Observe the first letter in this sentence.\n" - ] + "data": { + "text/plain": [ + "'Observe the first letter in this sentence.'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "String3 = 'observe the first letter in this sentence.'\n", - "print String3.capitalize()" + "String3.capitalize()" ] }, { @@ -214,10 +303,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "data": { @@ -225,7 +312,7 @@ "' Taj Mahal is beautiful '" ] }, - "execution_count": 8, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -243,10 +330,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { @@ -254,7 +339,7 @@ "'------------------------Taj Mahal is beautiful------------------------'" ] }, - "execution_count": 9, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -272,10 +357,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "data": { @@ -283,7 +366,7 @@ "'00000000Taj Mahal is beautiful'" ] }, - "execution_count": 10, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -301,26 +384,63 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "h\te\tl\tl\to\n", - "h e l l o\n", - "h e l l o\n" - ] + "data": { + "text/plain": [ + "'h\\te\\tl\\tl\\to'" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "s = 'h\\te\\tl\\tl\\to'\n", - "print s\n", - "print s.expandtabs(1)\n", - "print s.expandtabs()" + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h e l l o'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.expandtabs(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h e l l o'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.expandtabs()" ] }, { @@ -329,24 +449,54 @@ "collapsed": true }, "source": [ - "`index( )` works the same way as `find( )` function the only difference is find returns '-1' when the input element is not found in the string but `index( )` function throws a ValueError" + "`index( )` works the same way as `find( )` function the only difference is find returns '-1' when the input element is not found in the string but `index( )` function throws a `ValueError`" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 26, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n", - "4\n" - ] - }, + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.index('Taj')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "String0.index('Mahal',0)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ { "ename": "ValueError", "evalue": "substring not found", @@ -354,43 +504,40 @@ "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[1;32m 1\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Taj'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Mahal'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Mahal'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m20\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[0mString0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Mahal'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: substring not found" ] } ], "source": [ - "print String0.index('Taj')\n", - "print String0.index('Mahal',0)\n", - "print String0.index('Mahal',10,20)" + "String0.index('Mahal',10,20)" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "`endswith( )` function is used to check if the given string ends with the particular char which is given as input." ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 30, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "False\n" - ] + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0.endswith('y')" + "\"llamas\".endswith('y')" ] }, { @@ -402,23 +549,30 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 78, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n", - "True\n" - ] + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0.endswith('l',0)\n", - "print String0.endswith('M',0,5)" + "display(\"llamas\".endswith('as',0), \"llamas\".endswith('as',0,3))" ] }, { @@ -430,40 +584,44 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 77, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "4\n", - "2\n" - ] + "data": { + "text/plain": [ + "3" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "print String0.count('a',0)\n", - "print String0.count('a',5,10)" + "s = \"alphabetical\"\n", + "display(s.count('a',0), s.count('a',5,10))" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "`join( )` function is used add a char in between the elements of the input string." ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { "data": { @@ -471,7 +629,7 @@ "'*a_a-'" ] }, - "execution_count": 16, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -496,25 +654,50 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 76, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['T', 'a', 'j', ' ', 'M', 'a', 'h', 'a', 'l', ' ', 'i', 's', ' ', 'b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l']\n", - "Taj Mahal is beautiful\n" - ] + "data": { + "text/plain": [ + "['t',\n", + " 'h',\n", + " 'e',\n", + " ' ',\n", + " 'q',\n", + " 'u',\n", + " 'i',\n", + " 'c',\n", + " 'k',\n", + " ' ',\n", + " 'b',\n", + " 'r',\n", + " 'o',\n", + " 'w',\n", + " 'n',\n", + " ' ',\n", + " 'f',\n", + " 'o',\n", + " 'x']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'the quick brown fox'" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "a = list(String0)\n", - "print a\n", + "a = list('the quick brown fox')\n", "b = ''.join(a)\n", - "print b" + "display(a, b)" ] }, { @@ -526,51 +709,51 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 40, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " /i/s/ /b/e/a/u/t/i/f/u/l\n" - ] + "data": { + "text/plain": [ + "' /b/r/o/w/n/ /f/o/x'" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "c = '/'.join(a)[18:]\n", - "print c" + "c" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "`split( )` function is used to convert a string back to a list. Think of it as the opposite of the `join()` function." ] }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' ', 'i', 's', ' ', 'b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l']\n" - ] + "data": { + "text/plain": [ + "[' ', 'b', 'r', 'o', 'w', 'n', ' ', 'f', 'o', 'x']" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "d = c.split('/')\n", - "print d" + "d" ] }, { @@ -582,24 +765,23 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' ', 'i', 's', ' /b/e/a/u/t/i/f/u/l']\n", - "4\n" - ] + "data": { + "text/plain": [ + "([' ', 'b', 'r', 'o/w/n/ /f/o/x'], 4)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "e = c.split('/',3)\n", - "print e\n", - "print len(e)" + "e, len(e)" ] }, { @@ -611,23 +793,23 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Taj Mahal is beautiful\n", - "taj mahal is beautiful\n" - ] + "data": { + "text/plain": [ + "'why am i yelling?'" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print String0\n", - "print String0.lower()" + "s = \"WHY AM I YELLING?\"\n", + "s.lower()" ] }, { @@ -639,24 +821,23 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 44, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'TAJ MAHAL IS BEAUTIFUL'" + "'WHISPER'" ] }, - "execution_count": 22, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "String0.upper()" + "s = 'whisper'\n", + "s.upper()" ] }, { @@ -668,24 +849,22 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, + "execution_count": 45, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'Bengaluru is beautiful'" + "'green eggs'" ] }, - "execution_count": 23, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "String0.replace('Taj Mahal','Bengaluru')" + "\"green onions\".replace('onions','eggs')" ] }, { @@ -697,10 +876,8 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": true - }, + "execution_count": 46, + "metadata": {}, "outputs": [], "source": [ "f = ' hello '" @@ -715,10 +892,8 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ { "data": { @@ -726,7 +901,7 @@ "'hello'" ] }, - "execution_count": 25, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -744,29 +919,25 @@ }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": true - }, + "execution_count": 50, + "metadata": {}, "outputs": [], "source": [ - "f = ' ***----hello---******* '" + "f = '***----hello---*******'" ] }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "' ***----hello---******* '" + "'----hello---'" ] }, - "execution_count": 27, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -778,59 +949,28 @@ { "cell_type": "markdown", "metadata": {}, - "source": [ - "The asterisk had to be deleted but is not. This is because there is a space in both the right and left hand side. So in strip function. The characters need to be inputted in the specific order in which they are present." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "----hello---\n", - "hello\n" - ] - } - ], - "source": [ - "print f.strip(' *')\n", - "print f.strip(' *-')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, "source": [ "`lstrip( )` and `rstrip( )` function have the same functionality as strip function but the only difference is `lstrip( )` deletes only towards the left side and `rstrip( )` towards the right." ] }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, + "execution_count": 52, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "----hello---******* \n", - " ***----hello---\n" - ] + "data": { + "text/plain": [ + "('----hello---*******', '***----hello---')" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print f.lstrip(' *')\n", - "print f.rstrip(' *')" + "display(f.lstrip(' *'), f.rstrip(' *'))" ] }, { @@ -844,7 +984,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Dictionaries are more used like a database because here you can index a particular sequence with your user defined string." + "Dictionaries are mappings of immutable keys to mutable values." ] }, { @@ -856,77 +996,88 @@ }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, + "execution_count": 75, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " \n" - ] + "data": { + "text/plain": [ + "dict" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "dict" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "d0 = {}\n", "d1 = dict()\n", - "print type(d0), type(d1)" + "display(type(d0), type(d1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Dictionary works somewhat like a list but with an added capability of assigning it's own index style." + "To assign to a `dict` you can use the `[]` operator:" ] }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'OneTwo': 12, 'One': 1}\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'OneTwo': 12}" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "d0['One'] = 1\n", "d0['OneTwo'] = 12 \n", - "print d0" + "d0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "That is how a dictionary looks like. Now you are able to access '1' by the index value set at 'One'" + "You can also retrieve values by key with the `[]` operator:" ] }, { "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, + "execution_count": 57, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "1\n" - ] + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print d0['One']" + "d0['One']" ] }, { @@ -938,10 +1089,8 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, + "execution_count": 58, + "metadata": {}, "outputs": [], "source": [ "names = ['One', 'Two', 'Three', 'Four', 'Five']\n", @@ -957,29 +1106,28 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 59, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[('One', 1), ('Two', 2), ('Three', 3), ('Four', 4), ('Five', 5)]\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "d2 = zip(names,numbers)\n", - "print d2" + "d2" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "The two lists are combined to form a single list and each elements are clubbed with their respective elements from the other list inside a tuple. Tuples because that is what is assigned and the value should not change.\n", "\n", @@ -988,22 +1136,23 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 61, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Four': 4, 'Five': 5, 'Three': 3, 'Two': 2, 'One': 1}\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5}" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "a1 = dict(d2)\n", - "print a1" + "a1" ] }, { @@ -1022,22 +1171,23 @@ }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 63, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{}\n" - ] + "data": { + "text/plain": [ + "{}" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "a1.clear()\n", - "print a1" + "a1" ] }, { @@ -1049,23 +1199,24 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, + "execution_count": 70, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Four': 4, 'Five': 5, 'Three': 3, 'Two': 2, 'One': 1}\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'Two': 2, 'Three': 3, 'Five': 5, 'Four': 4}" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "for i in range(len(names)):\n", " a1[names[i]] = numbers[i]\n", - "print a1" + "a1" ] }, { @@ -1077,18 +1228,16 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 71, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[4, 5, 3, 2, 1]" + "dict_values([1, 2, 3, 5, 4])" ] }, - "execution_count": 38, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -1106,18 +1255,16 @@ }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 72, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['Four', 'Five', 'Three', 'Two', 'One']" + "dict_keys(['One', 'Two', 'Three', 'Five', 'Four'])" ] }, - "execution_count": 39, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -1135,18 +1282,16 @@ }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 73, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('Four', 4), ('Five', 5), ('Three', 3), ('Two', 2), ('One', 1)]" + "dict_items([('One', 1), ('Two', 2), ('Three', 3), ('Five', 5), ('Four', 4)])" ] }, - "execution_count": 40, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } @@ -1164,46 +1309,60 @@ }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, + "execution_count": 74, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Five': 5, 'Three': 3, 'Two': 2, 'One': 1}\n", - "4\n" - ] + "data": { + "text/plain": [ + "{'One': 1, 'Two': 2, 'Three': 3, 'Five': 5}" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "4" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "a2 = a1.pop('Four')\n", - "print a1\n", - "print a2" + "display(a1, a2)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } From 540877118808e8e3db0c0f4448ad6c1a393dda31 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 22:02:53 +0200 Subject: [PATCH 06/10] reviewed section 5 --- .ipynb_checkpoints/05-checkpoint.ipynb | 233 +++++++++++-------------- 05.ipynb | 215 ++++++++++------------- 2 files changed, 195 insertions(+), 253 deletions(-) diff --git a/.ipynb_checkpoints/05-checkpoint.ipynb b/.ipynb_checkpoints/05-checkpoint.ipynb index d24f4ac..dd1ee84 100644 --- a/.ipynb_checkpoints/05-checkpoint.ipynb +++ b/.ipynb_checkpoints/05-checkpoint.ipynb @@ -4,38 +4,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" + "# Control Flow Statements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#Control Flow Statements" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##If" + "## If-statements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "The basic form of the if-statement is:\n", + "```\n", "if some_condition:\n", - " \n", - " algorithm" + " algorithm\n", + "```" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -48,35 +41,33 @@ "source": [ "x = 12\n", "if x >10:\n", - " print \"Hello\"" + " print(\"Hello\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##If-else" + "## If-else" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "You can also have an `else` block which is executed if the `if` statement is not true:\n", + "```\n", "if some_condition:\n", - " \n", - " algorithm\n", - " \n", + " do something\n", "else:\n", - " \n", - " algorithm" + " do something else\n", + "```" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 3, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -89,24 +80,24 @@ "source": [ "x = 12\n", "if x > 10:\n", - " print \"hello\"\n", + " print(\"hello\")\n", "else:\n", - " print \"world\"" + " print(\"world\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##if-elif" + "## if-elif" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ + "You can have multiple condition using `elif`. They are tested in order, and the first which evaluates to true is executed. If none evaluate to true, then the optional `else` block is executed (if it exists):\n", + "```\n", "if some_condition:\n", " \n", " algorithm\n", @@ -117,21 +108,20 @@ "\n", "else:\n", " \n", - " algorithm" + " algorithm\n", + "```" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "x y:\n", - " print \"x>y\"\n", + " print(\"greater\")\n", "elif x < y:\n", - " print \"x y:\n", - " print \"x>y\"\n", + " print(\"greater\")\n", "elif x < y:\n", - " print \"x=7:\n", " break" ] @@ -390,7 +368,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Continue" + "## Continue" ] }, { @@ -402,10 +380,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -427,17 +403,17 @@ "source": [ "for i in range(10):\n", " if i>4:\n", - " print \"The end.\"\n", + " print(\"The end.\")\n", " continue\n", " elif i<7:\n", - " print i" + " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##List Comprehensions" + "## List Comprehensions" ] }, { @@ -449,17 +425,18 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]\n" - ] + "data": { + "text/plain": [ + "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -467,7 +444,7 @@ "for i in range(1,11):\n", " x = 27*i\n", " res.append(x)\n", - "print res" + "res" ] }, { @@ -479,10 +456,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { "data": { @@ -490,7 +465,7 @@ "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" ] }, - "execution_count": 12, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -503,7 +478,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "That's it!. Only remember to enclose it in square brackets" + "That's it! Only remember to enclose it in square brackets" ] }, { @@ -515,10 +490,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "data": { @@ -526,7 +499,7 @@ "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" ] }, - "execution_count": 13, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -544,10 +517,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { @@ -555,7 +526,7 @@ "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" ] }, - "execution_count": 14, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -567,23 +538,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/05.ipynb b/05.ipynb index 309a999..dd1ee84 100644 --- a/05.ipynb +++ b/05.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -18,24 +11,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## If" + "## If-statements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "The basic form of the if-statement is:\n", + "```\n", "if some_condition:\n", - " \n", - " algorithm" + " algorithm\n", + "```" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -48,7 +41,7 @@ "source": [ "x = 12\n", "if x >10:\n", - " print \"Hello\"" + " print(\"Hello\")" ] }, { @@ -62,21 +55,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "You can also have an `else` block which is executed if the `if` statement is not true:\n", + "```\n", "if some_condition:\n", - " \n", - " algorithm\n", - " \n", + " do something\n", "else:\n", - " \n", - " algorithm" + " do something else\n", + "```" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 3, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -89,9 +80,9 @@ "source": [ "x = 12\n", "if x > 10:\n", - " print \"hello\"\n", + " print(\"hello\")\n", "else:\n", - " print \"world\"" + " print(\"world\")" ] }, { @@ -103,10 +94,10 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ + "You can have multiple condition using `elif`. They are tested in order, and the first which evaluates to true is executed. If none evaluate to true, then the optional `else` block is executed (if it exists):\n", + "```\n", "if some_condition:\n", " \n", " algorithm\n", @@ -117,21 +108,20 @@ "\n", "else:\n", " \n", - " algorithm" + " algorithm\n", + "```" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "x y:\n", - " print \"x>y\"\n", + " print(\"greater\")\n", "elif x < y:\n", - " print \"x y:\n", - " print \"x>y\"\n", + " print(\"greater\")\n", "elif x < y:\n", - " print \"x=7:\n", " break" ] @@ -402,10 +380,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -427,10 +403,10 @@ "source": [ "for i in range(10):\n", " if i>4:\n", - " print \"The end.\"\n", + " print(\"The end.\")\n", " continue\n", " elif i<7:\n", - " print i" + " print(i)" ] }, { @@ -449,17 +425,18 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]\n" - ] + "data": { + "text/plain": [ + "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -467,7 +444,7 @@ "for i in range(1,11):\n", " x = 27*i\n", " res.append(x)\n", - "print res" + "res" ] }, { @@ -479,10 +456,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { "data": { @@ -490,7 +465,7 @@ "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" ] }, - "execution_count": 12, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -503,7 +478,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "That's it!. Only remember to enclose it in square brackets" + "That's it! Only remember to enclose it in square brackets" ] }, { @@ -515,10 +490,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "data": { @@ -526,7 +499,7 @@ "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" ] }, - "execution_count": 13, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -544,10 +517,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { @@ -555,7 +526,7 @@ "[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]" ] }, - "execution_count": 14, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -567,23 +538,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } From a7a22c86aa12379b713e9469b762a831f64fab35 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 22:14:15 +0200 Subject: [PATCH 07/10] reviewed section 6 --- .ipynb_checkpoints/05-checkpoint.ipynb | 8 +- .ipynb_checkpoints/06-checkpoint.ipynb | 597 +++++++++---------------- 05.ipynb | 8 +- 06.ipynb | 571 +++++++++-------------- 4 files changed, 431 insertions(+), 753 deletions(-) diff --git a/.ipynb_checkpoints/05-checkpoint.ipynb b/.ipynb_checkpoints/05-checkpoint.ipynb index dd1ee84..524ab74 100644 --- a/.ipynb_checkpoints/05-checkpoint.ipynb +++ b/.ipynb_checkpoints/05-checkpoint.ipynb @@ -56,7 +56,7 @@ "metadata": {}, "source": [ "You can also have an `else` block which is executed if the `if` statement is not true:\n", - "```\n", + "```python\n", "if some_condition:\n", " do something\n", "else:\n", @@ -97,7 +97,7 @@ "metadata": {}, "source": [ "You can have multiple condition using `elif`. They are tested in order, and the first which evaluates to true is executed. If none evaluate to true, then the optional `else` block is executed (if it exists):\n", - "```\n", + "```python\n", "if some_condition:\n", " \n", " algorithm\n", @@ -191,7 +191,7 @@ "metadata": {}, "source": [ "The main looping construct in Python is the for-loop. It uses the form:\n", - "```\n", + "```python\n", "for item in sequence: \n", " algorithm\n", "```" @@ -294,7 +294,7 @@ "metadata": {}, "source": [ "While-loops will execute a body as long as some condition is true:\n", - "```\n", + "```python\n", "while some_condition:\n", " algorithm\n", "```" diff --git a/.ipynb_checkpoints/06-checkpoint.ipynb b/.ipynb_checkpoints/06-checkpoint.ipynb index a642528..6efc7a0 100644 --- a/.ipynb_checkpoints/06-checkpoint.ipynb +++ b/.ipynb_checkpoints/06-checkpoint.ipynb @@ -4,14 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#Functions" + "# Functions" ] }, { @@ -32,14 +25,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "```python\n", "def funcname(arg1, arg2,... argN):\n", - " \n", - " ''' Document String'''\n", + " '''docstring'''\n", "\n", " statements\n", "\n", - "\n", - " return " + " return \n", + "````" ] }, { @@ -52,9 +45,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -66,8 +57,8 @@ } ], "source": [ - "print \"Hey Rajath!\"\n", - "print \"Rajath, How do you do?\"" + "print(\"Hey Rajath!\")\n", + "print(\"Rajath, How do you do?\")" ] }, { @@ -82,22 +73,18 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def firstfunc():\n", - " print \"Hey Rajath!\"\n", - " print \"Rajath, How do you do?\" " + " print(\"Hey Rajath!\")\n", + " print(\"Rajath, How do you do?\") " ] }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -116,28 +103,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**firstfunc()** every time just prints the message to a single person. We can make our function **firstfunc()** to accept arguements which will store the name and then prints respective to that accepted name. To do so, add a argument within the function as shown." + "`firstfunc()` every time just prints the message to a single person. We can make our function `firstfunc()` to accept arguements which will store the name and then prints respective to that accepted name. To do so, add a argument within the function as shown." ] }, { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def firstfunc(username):\n", - " print \"Hey\", username + '!'\n", - " print username + ',' ,\"How do you do?\"" + " print(\"Hey\", username + '!')\n", + " print(username + ',' ,\"How do you do?\")" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -148,22 +131,20 @@ } ], "source": [ - "name1 = raw_input('Please enter your name : ')" + "name1 = input('Please enter your name : ')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The name \"Guido\" is actually stored in name1. So we pass this variable to the function **firstfunc()** as the variable username because that is the variable that is defined for this function. i.e name1 is passed as username." + "The name you enter is actually stored in `name1`. So we pass this variable to the function `firstfunc()` as the variable username because that is the variable that is defined for this function. i.e name1 is passed as username." ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -182,39 +163,36 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let us simplify this even further by defining another function **secondfunc()** which accepts the name and stores it inside a variable and then calls the **firstfunc()** from inside the function itself." + "Let us simplify this even further by defining another function `secondfunc()` which accepts the name and stores it inside a variable and then calls the `firstfunc()` from inside the function itself." ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [], "source": [ "def firstfunc(username):\n", - " print \"Hey\", username + '!'\n", - " print username + ',' ,\"How do you do?\"\n", + " print(\"Hey\", username + '!')\n", + " print(username + ',' ,\"How do you do?\")\n", + " \n", "def secondfunc():\n", - " name = raw_input(\"Please enter your name : \")\n", + " name = input(\"Please enter your name : \")\n", " firstfunc(name)" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Please enter your name : karthik\n", - "Hey karthik!\n", - "karthik, How do you do?\n" + "Please enter your name : Jones\n", + "Hey Jones!\n", + "Jones, How do you do?\n" ] } ], @@ -226,7 +204,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Return Statement" + "## Return Statement" ] }, { @@ -238,10 +216,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": true - }, + "execution_count": 10, + "metadata": {}, "outputs": [], "source": [ "def times(x,y):\n", @@ -253,34 +229,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The above defined **times( )** function accepts two arguements and return the variable z which contains the result of the product of the two arguements" + "The above defined `times( )` function accepts two arguements and return the variable z which contains the result of the product of the two arguements" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "20\n" - ] + "data": { + "text/plain": [ + "20" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "c = times(4,5)\n", - "print c" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The z value is stored in variable c and can be used for further operations." + "times(4,5)" ] }, { @@ -292,10 +261,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [], "source": [ "def times(x,y):\n", @@ -305,37 +272,35 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "20\n" - ] + "data": { + "text/plain": [ + "20" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "c = times(4,5)\n", - "print c" + "times(4,5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Since the **times( )** is now defined, we can document it as shown above. This document is returned whenever **times( )** function is called under **help( )** function." + "Since the `times( )` is now defined, we can document it as shown above. This document is returned whenever `times( )` function is called under `help( )` function." ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -362,10 +327,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": true - }, + "execution_count": 17, + "metadata": {}, "outputs": [], "source": [ "eglist = [10,50,30,12,6,8,100]" @@ -373,10 +336,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": true - }, + "execution_count": 18, + "metadata": {}, "outputs": [], "source": [ "def egfunc(eglist):\n", @@ -396,10 +357,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "data": { @@ -407,7 +366,7 @@ "(100, 6, 10, 100)" ] }, - "execution_count": 16, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -418,10 +377,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -436,32 +393,30 @@ ], "source": [ "a,b,c,d = egfunc(eglist)\n", - "print ' a =',a,'\\n b =',b,'\\n c =',c,'\\n d =',d" + "print(' a =',a,'\\n b =',b,'\\n c =',c,'\\n d =',d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Implicit arguments" + "## Default arguments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "When an argument of a function is common in majority of the cases or it is \"implicit\" this concept is used." + "You can specify default values for the right-most arguments in a function:" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": true - }, + "execution_count": 21, + "metadata": {}, "outputs": [], "source": [ - "def implicitadd(x,y=3):\n", + "def implicitadd(x, y=3):\n", " return x+y" ] }, @@ -469,22 +424,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**implicitadd( )** is a function accepts two arguments but most of the times the first argument needs to be added just by 3. Hence the second argument is assigned the value 3. Here the second argument is implicit." + "`implicitadd( )` is a function accepts two arguments but most of the times the first argument needs to be added just by 3. Hence the second argument is assigned the value 3. Here the second argument is implicit." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now if the second argument is not defined when calling the **implicitadd( )** function then it considered as 3." + "Now if the second argument is not defined when calling the `implicitadd( )` function then it considered as 3." ] }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [ { "data": { @@ -492,7 +445,7 @@ "7" ] }, - "execution_count": 19, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -510,10 +463,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { "data": { @@ -521,7 +472,7 @@ "8" ] }, - "execution_count": 20, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -534,7 +485,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Any number of arguments" + "## Any number of arguments" ] }, { @@ -546,10 +497,8 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": true - }, + "execution_count": 25, + "metadata": {}, "outputs": [], "source": [ "def add_n(*args):\n", @@ -557,7 +506,7 @@ " reslist = []\n", " for i in args:\n", " reslist.append(i)\n", - " print reslist\n", + " print(reslist)\n", " return sum(reslist)" ] }, @@ -570,10 +519,8 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 26, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -588,7 +535,7 @@ "15" ] }, - "execution_count": 22, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -599,10 +546,8 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, + "execution_count": 27, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -617,7 +562,7 @@ "6" ] }, - "execution_count": 23, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -630,245 +575,114 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Global and Local Variables" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Whatever variable is declared inside a function is local variable and outside the function in global variable." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "eg1 = [1,2,3,4,5]" + "## Lambda Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In the below function we are appending a element to the declared list inside the function. eg2 variable declared inside the function is a local variable." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def egfunc1():\n", - " def thirdfunc(arg1):\n", - " eg2 = arg1[:]\n", - " eg2.append(6)\n", - " print \"This is happening inside the function :\", eg2 \n", - " print \"This is happening before the function is called : \", eg1\n", - " thirdfunc(eg1)\n", - " print \"This is happening outside the function :\", eg1 \n", - " print \"Accessing a variable declared inside the function from outside :\" , eg2" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is happening before the function is called : [1, 2, 3, 4, 5]\n", - "This is happening inside the function : [1, 2, 3, 4, 5, 6]\n", - "This is happening outside the function : [1, 2, 3, 4, 5]\n", - "Accessing a variable declared inside the function from outside :" - ] - }, - { - "ename": "NameError", - "evalue": "global name 'eg2' is not defined", - "output_type": "error", - "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[0megfunc1\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;36megfunc1\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mthirdfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meg1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0;34m\"This is happening outside the function :\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0;34m\"Accessing a variable declared inside the function from outside :\"\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0meg2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: global name 'eg2' is not defined" - ] - } - ], - "source": [ - "egfunc1()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If a **global** variable is defined as shown in the example below then that variable can be called from anywhere." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "eg3 = [1,2,3,4,5]" + "These are small functions which are not defined with any name and carry a single expression whose result is returned. Lambda functions comes very handy when operating with lists. These function are defined by the keyword `lambda` followed by the variables, a colon and the respective expression." ] }, { "cell_type": "code", "execution_count": 28, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "def egfunc1():\n", - " def thirdfunc(arg1):\n", - " global eg2\n", - " eg2 = arg1[:]\n", - " eg2.append(6)\n", - " print \"This is happening inside the function :\", eg2 \n", - " print \"This is happening before the function is called : \", eg1\n", - " thirdfunc(eg1)\n", - " print \"This is happening outside the function :\", eg1 \n", - " print \"Accessing a variable declared inside the function from outside :\" , eg2" + "z = lambda x: x * x" ] }, { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is happening before the function is called : [1, 2, 3, 4, 5]\n", - "This is happening inside the function : [1, 2, 3, 4, 5, 6]\n", - "This is happening outside the function : [1, 2, 3, 4, 5]\n", - "Accessing a variable declared inside the function from outside : [1, 2, 3, 4, 5, 6]\n" - ] + "data": { + "text/plain": [ + "64" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "egfunc1()" + "z(8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##Lambda Functions" + "### map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "These are small functions which are not defined with any name and carry a single expression whose result is returned. Lambda functions comes very handy when operating with lists. These function are defined by the keyword **lambda** followed by the variables, a colon and the respective expression." + "`map( )` function basically executes the function that is defined to each of the list's element separately." ] }, { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "z = lambda x: x * x" + "list1 = [1,2,3,4,5,6,7,8,9]" ] }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 32, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "64" + "" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "z(8)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###map" + "m = map(lambda x:x+2, list1)\n", + "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**map( )** function basically executes the function that is defined to each of the list's element separately." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "list1 = [1,2,3,4,5,6,7,8,9]" + "As we see above, `map` produces a \"map\" which lazily evaluates its values. As with `range()`, we need to force the evalation of the `map` in order to see the values. One way to do that is by passing the `map` to the list constructor:" ] }, { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[3, 4, 5, 6, 7, 8, 9, 10, 11]\n" - ] + "data": { + "text/plain": [ + "[3, 4, 5, 6, 7, 8, 9, 10, 11]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "eg = map(lambda x:x+2, list1)\n", - "print eg" + "list(m)" ] }, { @@ -881,9 +695,7 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "list2 = [9,8,7,6,5,4,3,2,1]" @@ -891,73 +703,71 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 10, 10, 10, 10, 10, 10, 10, 10]\n" - ] + "data": { + "text/plain": [ + "[10, 10, 10, 10, 10, 10, 10, 10, 10]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "eg2 = map(lambda x,y:x+y, list1,list2)\n", - "print eg2" + "eg2 = list(map(lambda x,y:x+y, list1,list2))\n", + "eg2" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "Not only lambda function but also other built in functions can also be used." ] }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 38, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['10', '10', '10', '10', '10', '10', '10', '10', '10']\n" - ] + "data": { + "text/plain": [ + "['10', '10', '10', '10', '10', '10', '10', '10', '10']" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "eg3 = map(str,eg2)\n", - "print eg3" + "eg3 = list(map(str,eg2))\n", + "eg3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###filter" + "### filter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**filter( )** function is used to filter out the values in a list. Note that **filter()** function returns the result in a new list." + "`filter( )` function is used to filter out the values in a list. Note that `filter()` function returns the result in a new list." ] }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": true - }, + "execution_count": 39, + "metadata": {}, "outputs": [], "source": [ "list1 = [1,2,3,4,5,6,7,8,9]" @@ -972,10 +782,36 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f = filter(lambda x:x<5,list1)\n", + "f" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like `map`, `filter` is also lazy:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, "outputs": [ { "data": { @@ -983,28 +819,26 @@ "[1, 2, 3, 4]" ] }, - "execution_count": 38, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "filter(lambda x:x<5,list1)" + "list(f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Notice what happens when **map()** is used." + "Notice what happens when `map()` is used." ] }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { "data": { @@ -1012,28 +846,26 @@ "[True, True, True, True, False, False, False, False, False]" ] }, - "execution_count": 39, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "map(lambda x:x<5, list1)" + "list(map(lambda x:x<5, list1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can conclude that, whatever is returned true in **map( )** function that particular element is returned when **filter( )** function is used." + "We can conclude that, whatever is returned true in `map( )` function that particular element is returned when `filter( )` function is used." ] }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 46, + "metadata": {}, "outputs": [ { "data": { @@ -1041,35 +873,42 @@ "[4, 8]" ] }, - "execution_count": 40, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "filter(lambda x:x%4==0,list1)" + "list(filter(lambda x:x%4==0,list1))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/05.ipynb b/05.ipynb index dd1ee84..524ab74 100644 --- a/05.ipynb +++ b/05.ipynb @@ -56,7 +56,7 @@ "metadata": {}, "source": [ "You can also have an `else` block which is executed if the `if` statement is not true:\n", - "```\n", + "```python\n", "if some_condition:\n", " do something\n", "else:\n", @@ -97,7 +97,7 @@ "metadata": {}, "source": [ "You can have multiple condition using `elif`. They are tested in order, and the first which evaluates to true is executed. If none evaluate to true, then the optional `else` block is executed (if it exists):\n", - "```\n", + "```python\n", "if some_condition:\n", " \n", " algorithm\n", @@ -191,7 +191,7 @@ "metadata": {}, "source": [ "The main looping construct in Python is the for-loop. It uses the form:\n", - "```\n", + "```python\n", "for item in sequence: \n", " algorithm\n", "```" @@ -294,7 +294,7 @@ "metadata": {}, "source": [ "While-loops will execute a body as long as some condition is true:\n", - "```\n", + "```python\n", "while some_condition:\n", " algorithm\n", "```" diff --git a/06.ipynb b/06.ipynb index f6c411f..6efc7a0 100644 --- a/06.ipynb +++ b/06.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -32,14 +25,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "```python\n", "def funcname(arg1, arg2,... argN):\n", - " \n", - " ''' Document String'''\n", + " '''docstring'''\n", "\n", " statements\n", "\n", - "\n", - " return " + " return \n", + "````" ] }, { @@ -52,9 +45,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -66,8 +57,8 @@ } ], "source": [ - "print \"Hey Rajath!\"\n", - "print \"Rajath, How do you do?\"" + "print(\"Hey Rajath!\")\n", + "print(\"Rajath, How do you do?\")" ] }, { @@ -82,22 +73,18 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def firstfunc():\n", - " print \"Hey Rajath!\"\n", - " print \"Rajath, How do you do?\" " + " print(\"Hey Rajath!\")\n", + " print(\"Rajath, How do you do?\") " ] }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -122,22 +109,18 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def firstfunc(username):\n", - " print \"Hey\", username + '!'\n", - " print username + ',' ,\"How do you do?\"" + " print(\"Hey\", username + '!')\n", + " print(username + ',' ,\"How do you do?\")" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -148,22 +131,20 @@ } ], "source": [ - "name1 = raw_input('Please enter your name : ')" + "name1 = input('Please enter your name : ')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The name \"Guido\" is actually stored in name1. So we pass this variable to the function `firstfunc()` as the variable username because that is the variable that is defined for this function. i.e name1 is passed as username." + "The name you enter is actually stored in `name1`. So we pass this variable to the function `firstfunc()` as the variable username because that is the variable that is defined for this function. i.e name1 is passed as username." ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -187,34 +168,31 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [], "source": [ "def firstfunc(username):\n", - " print \"Hey\", username + '!'\n", - " print username + ',' ,\"How do you do?\"\n", + " print(\"Hey\", username + '!')\n", + " print(username + ',' ,\"How do you do?\")\n", + " \n", "def secondfunc():\n", - " name = raw_input(\"Please enter your name : \")\n", + " name = input(\"Please enter your name : \")\n", " firstfunc(name)" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Please enter your name : karthik\n", - "Hey karthik!\n", - "karthik, How do you do?\n" + "Please enter your name : Jones\n", + "Hey Jones!\n", + "Jones, How do you do?\n" ] } ], @@ -238,10 +216,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": true - }, + "execution_count": 10, + "metadata": {}, "outputs": [], "source": [ "def times(x,y):\n", @@ -258,29 +234,22 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "20\n" - ] + "data": { + "text/plain": [ + "20" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "c = times(4,5)\n", - "print c" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The z value is stored in variable c and can be used for further operations." + "times(4,5)" ] }, { @@ -292,10 +261,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [], "source": [ "def times(x,y):\n", @@ -305,22 +272,22 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "20\n" - ] + "data": { + "text/plain": [ + "20" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "c = times(4,5)\n", - "print c" + "times(4,5)" ] }, { @@ -332,10 +299,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -362,10 +327,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": true - }, + "execution_count": 17, + "metadata": {}, "outputs": [], "source": [ "eglist = [10,50,30,12,6,8,100]" @@ -373,10 +336,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": true - }, + "execution_count": 18, + "metadata": {}, "outputs": [], "source": [ "def egfunc(eglist):\n", @@ -396,10 +357,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "data": { @@ -407,7 +366,7 @@ "(100, 6, 10, 100)" ] }, - "execution_count": 16, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -418,10 +377,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -436,32 +393,30 @@ ], "source": [ "a,b,c,d = egfunc(eglist)\n", - "print ' a =',a,'\\n b =',b,'\\n c =',c,'\\n d =',d" + "print(' a =',a,'\\n b =',b,'\\n c =',c,'\\n d =',d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Implicit arguments" + "## Default arguments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "When an argument of a function is common in majority of the cases or it is \"implicit\" this concept is used." + "You can specify default values for the right-most arguments in a function:" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": true - }, + "execution_count": 21, + "metadata": {}, "outputs": [], "source": [ - "def implicitadd(x,y=3):\n", + "def implicitadd(x, y=3):\n", " return x+y" ] }, @@ -481,10 +436,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [ { "data": { @@ -492,7 +445,7 @@ "7" ] }, - "execution_count": 19, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -510,10 +463,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { "data": { @@ -521,7 +472,7 @@ "8" ] }, - "execution_count": 20, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -546,10 +497,8 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": true - }, + "execution_count": 25, + "metadata": {}, "outputs": [], "source": [ "def add_n(*args):\n", @@ -557,7 +506,7 @@ " reslist = []\n", " for i in args:\n", " reslist.append(i)\n", - " print reslist\n", + " print(reslist)\n", " return sum(reslist)" ] }, @@ -570,10 +519,8 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 26, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -588,7 +535,7 @@ "15" ] }, - "execution_count": 22, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -599,10 +546,8 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, + "execution_count": 27, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -617,7 +562,7 @@ "6" ] }, - "execution_count": 23, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -630,245 +575,114 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Global and Local Variables" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Whatever variable is declared inside a function is local variable and outside the function in global variable." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "eg1 = [1,2,3,4,5]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the below function we are appending a element to the declared list inside the function. eg2 variable declared inside the function is a local variable." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def egfunc1():\n", - " def thirdfunc(arg1):\n", - " eg2 = arg1[:]\n", - " eg2.append(6)\n", - " print \"This is happening inside the function :\", eg2 \n", - " print \"This is happening before the function is called : \", eg1\n", - " thirdfunc(eg1)\n", - " print \"This is happening outside the function :\", eg1 \n", - " print \"Accessing a variable declared inside the function from outside :\" , eg2" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is happening before the function is called : [1, 2, 3, 4, 5]\n", - "This is happening inside the function : [1, 2, 3, 4, 5, 6]\n", - "This is happening outside the function : [1, 2, 3, 4, 5]\n", - "Accessing a variable declared inside the function from outside :" - ] - }, - { - "ename": "NameError", - "evalue": "global name 'eg2' is not defined", - "output_type": "error", - "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[0megfunc1\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;36megfunc1\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mthirdfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meg1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0;34m\"This is happening outside the function :\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0;34m\"Accessing a variable declared inside the function from outside :\"\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0meg2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: global name 'eg2' is not defined" - ] - } - ], - "source": [ - "egfunc1()" + "## Lambda Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "If a `global` variable is defined as shown in the example below then that variable can be called from anywhere." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "eg3 = [1,2,3,4,5]" + "These are small functions which are not defined with any name and carry a single expression whose result is returned. Lambda functions comes very handy when operating with lists. These function are defined by the keyword `lambda` followed by the variables, a colon and the respective expression." ] }, { "cell_type": "code", "execution_count": 28, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "def egfunc1():\n", - " def thirdfunc(arg1):\n", - " global eg2\n", - " eg2 = arg1[:]\n", - " eg2.append(6)\n", - " print \"This is happening inside the function :\", eg2 \n", - " print \"This is happening before the function is called : \", eg1\n", - " thirdfunc(eg1)\n", - " print \"This is happening outside the function :\", eg1 \n", - " print \"Accessing a variable declared inside the function from outside :\" , eg2" + "z = lambda x: x * x" ] }, { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is happening before the function is called : [1, 2, 3, 4, 5]\n", - "This is happening inside the function : [1, 2, 3, 4, 5, 6]\n", - "This is happening outside the function : [1, 2, 3, 4, 5]\n", - "Accessing a variable declared inside the function from outside : [1, 2, 3, 4, 5, 6]\n" - ] + "data": { + "text/plain": [ + "64" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "egfunc1()" + "z(8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Lambda Functions" + "### map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "These are small functions which are not defined with any name and carry a single expression whose result is returned. Lambda functions comes very handy when operating with lists. These function are defined by the keyword `lambda` followed by the variables, a colon and the respective expression." + "`map( )` function basically executes the function that is defined to each of the list's element separately." ] }, { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "z = lambda x: x * x" + "list1 = [1,2,3,4,5,6,7,8,9]" ] }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 32, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "64" + "" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "z(8)" + "m = map(lambda x:x+2, list1)\n", + "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### map" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`map( )` function basically executes the function that is defined to each of the list's element separately." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "list1 = [1,2,3,4,5,6,7,8,9]" + "As we see above, `map` produces a \"map\" which lazily evaluates its values. As with `range()`, we need to force the evalation of the `map` in order to see the values. One way to do that is by passing the `map` to the list constructor:" ] }, { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[3, 4, 5, 6, 7, 8, 9, 10, 11]\n" - ] + "data": { + "text/plain": [ + "[3, 4, 5, 6, 7, 8, 9, 10, 11]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "eg = map(lambda x:x+2, list1)\n", - "print eg" + "list(m)" ] }, { @@ -881,9 +695,7 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "list2 = [9,8,7,6,5,4,3,2,1]" @@ -891,51 +703,51 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 10, 10, 10, 10, 10, 10, 10, 10]\n" - ] + "data": { + "text/plain": [ + "[10, 10, 10, 10, 10, 10, 10, 10, 10]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "eg2 = map(lambda x,y:x+y, list1,list2)\n", - "print eg2" + "eg2 = list(map(lambda x,y:x+y, list1,list2))\n", + "eg2" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "Not only lambda function but also other built in functions can also be used." ] }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 38, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['10', '10', '10', '10', '10', '10', '10', '10', '10']\n" - ] + "data": { + "text/plain": [ + "['10', '10', '10', '10', '10', '10', '10', '10', '10']" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "eg3 = map(str,eg2)\n", - "print eg3" + "eg3 = list(map(str,eg2))\n", + "eg3" ] }, { @@ -954,10 +766,8 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": true - }, + "execution_count": 39, + "metadata": {}, "outputs": [], "source": [ "list1 = [1,2,3,4,5,6,7,8,9]" @@ -972,10 +782,36 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f = filter(lambda x:x<5,list1)\n", + "f" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like `map`, `filter` is also lazy:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, "outputs": [ { "data": { @@ -983,13 +819,13 @@ "[1, 2, 3, 4]" ] }, - "execution_count": 38, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "filter(lambda x:x<5,list1)" + "list(f)" ] }, { @@ -1001,10 +837,8 @@ }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { "data": { @@ -1012,13 +846,13 @@ "[True, True, True, True, False, False, False, False, False]" ] }, - "execution_count": 39, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "map(lambda x:x<5, list1)" + "list(map(lambda x:x<5, list1))" ] }, { @@ -1030,10 +864,8 @@ }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 46, + "metadata": {}, "outputs": [ { "data": { @@ -1041,35 +873,42 @@ "[4, 8]" ] }, - "execution_count": 40, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "filter(lambda x:x%4==0,list1)" + "list(filter(lambda x:x%4==0,list1))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } From 38c42245f3e84930d1aa969924521349d4e8d731 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 22:49:38 +0200 Subject: [PATCH 08/10] reviewed section 7 --- .ipynb_checkpoints/07-checkpoint.ipynb | 1063 +++++------------------- 07.ipynb | 1055 +++++------------------ 2 files changed, 406 insertions(+), 1712 deletions(-) diff --git a/.ipynb_checkpoints/07-checkpoint.ipynb b/.ipynb_checkpoints/07-checkpoint.ipynb index f233280..4d004e8 100644 --- a/.ipynb_checkpoints/07-checkpoint.ipynb +++ b/.ipynb_checkpoints/07-checkpoint.ipynb @@ -4,45 +4,39 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" + "# Classes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#Classes" + "Everything in Python is an object, and every object has a type. We can create our own types in Python by defining classes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Variables, Lists, Dictionaries etc in python is a object. Without getting into the theory part of Object Oriented Programming, explanation of the concepts will be done along this tutorial." + "A class is declared as follows:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "A class is declared as follows" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "class class_name:\n", + "```python\n", + "class ClassName:\n", + " class body\n", + "```\n", "\n", - " Functions" + "Let's define the simplest class we can:" ] }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "class FirstClass:\n", @@ -53,41 +47,44 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**pass** in python means do nothing. " + "`pass` in python means do nothing. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Above, a class object named \"FirstClass\" is declared now consider a \"egclass\" which has all the characteristics of \"FirstClass\". So all you have to do is, equate the \"egclass\" to \"FirstClass\". In python jargon this is called as creating an instance. \"egclass\" is the instance of \"FirstClass\"" + "We can create an instance of our class by calling it:" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "egclass = FirstClass()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that our new object is of the right type:" + ] + }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "instance" + "__main__.FirstClass" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -96,20 +93,25 @@ "type(egclass)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Interestingly, we can also see that our class has a type. This hints at the nature of Python where everything - even a class - is an object:" + ] + }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "classobj" + "type" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -122,59 +124,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now let us add some \"functionality\" to the class. So that our \"FirstClass\" is defined in a better way. A function inside a class is called as a \"Method\" of that class" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Most of the classes will have a function named \"\\_\\_init\\_\\_\". These are called as magic methods. In this method you basically initialize the variables of that class or any other initial algorithms which is applicable to all methods is specified in this method. A variable inside a class is called an attribute." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These helps simplify the process of initializing a instance. For example,\n", + "## __init__\n", "\n", - "Without the use of magic method or \\_\\_init\\_\\_ which is otherwise called as constructors. One had to define a **init( )** method and call the **init( )** function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "eg0 = FirstClass()\n", - "eg0.init()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But when the constructor is defined the \\_\\_init\\_\\_ is called thus intializing the instance created. " + "Many classes need some sort of initialization. We do this with the `__init__` method. This is called when an new instance of our class is created, before a reference to that object is made available to the caller." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We will make our \"FirstClass\" to accept two variables name and symbol.\n", - "\n", - "I will be explaining about the \"self\" in a while." + "We'll give our `FirstClass` class a `__init__` that accepts two arguments`name` and `symbol`. We'll store those arguments on the instance:" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, + "execution_count": 7, + "metadata": {}, "outputs": [], "source": [ "class FirstClass:\n", @@ -187,27 +152,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we have defined a function and added the \\_\\_init\\_\\_ method. We can create a instance of FirstClass which now accepts two arguments. " + "Now that we have defined a function and added the `__init__` method. We can create a instance of `FirstClass` which now accepts two arguments. " ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ "eg1 = FirstClass('one',1)\n", "eg2 = FirstClass('two',2)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `self`\n", + "\n", + "You probably noticed the `self` argument in our `__init__`. This argument is automatically assigned to the instance on which the method is being executed. Python does this for all instance methods, not just `__init__`." + ] + }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -219,31 +189,54 @@ } ], "source": [ - "print eg1.name, eg1.symbol\n", - "print eg2.name, eg2.symbol" + "print(eg1.name, eg1.symbol)\n", + "print(eg2.name, eg2.symbol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**dir( )** function comes very handy in looking into what the class contains and what all method it offers" + "`dir( )` function comes very handy in looking into what the class contains and what all method it offers" ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__']" + "['__class__',\n", + " '__delattr__',\n", + " '__dict__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__eq__',\n", + " '__format__',\n", + " '__ge__',\n", + " '__getattribute__',\n", + " '__gt__',\n", + " '__hash__',\n", + " '__init__',\n", + " '__init_subclass__',\n", + " '__le__',\n", + " '__lt__',\n", + " '__module__',\n", + " '__ne__',\n", + " '__new__',\n", + " '__reduce__',\n", + " '__reduce_ex__',\n", + " '__repr__',\n", + " '__setattr__',\n", + " '__sizeof__',\n", + " '__str__',\n", + " '__subclasshook__',\n", + " '__weakref__']" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -256,23 +249,48 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**dir( )** of an instance also shows it's defined attributes." + "`dir( )` of an instance also shows it's defined attributes." ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__', 'name', 'symbol']" + "['__class__',\n", + " '__delattr__',\n", + " '__dict__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__eq__',\n", + " '__format__',\n", + " '__ge__',\n", + " '__getattribute__',\n", + " '__gt__',\n", + " '__hash__',\n", + " '__init__',\n", + " '__init_subclass__',\n", + " '__le__',\n", + " '__lt__',\n", + " '__module__',\n", + " '__ne__',\n", + " '__new__',\n", + " '__reduce__',\n", + " '__reduce_ex__',\n", + " '__repr__',\n", + " '__setattr__',\n", + " '__sizeof__',\n", + " '__str__',\n", + " '__subclasshook__',\n", + " '__weakref__',\n", + " 'name',\n", + " 'symbol']" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -285,905 +303,234 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Changing the FirstClass function a bit," + "## Methods\n", + "\n", + "Methods are defined for classes using `def` inside the class body. `__init__` that we looked at above is an example of a method. Let us add some more methods to `FirstClass`:" ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": true - }, + "execution_count": 15, + "metadata": {}, "outputs": [], "source": [ "class FirstClass:\n", " def __init__(self,name,symbol):\n", - " self.n = name\n", - " self.s = symbol" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Changing self.name and self.symbol to self.n and self.s respectively will yield," + " self.name = name\n", + " self.symbol = symbol\n", + " \n", + " def square(self):\n", + " return self.symbol * self.symbol\n", + " \n", + " def cube(self):\n", + " return self.symbol * self.symbol * self.symbol\n", + " \n", + " def multiply(self, x):\n", + " return self.symbol * x" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": true - }, + "execution_count": 16, + "metadata": {}, "outputs": [], "source": [ - "eg1 = FirstClass('one',1)\n", - "eg2 = FirstClass('two',2)" + "eg4 = FirstClass('Five',5)" ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "FirstClass instance has no attribute 'name'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\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;32mprint\u001b[0m \u001b[0meg1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbol\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0meg2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbol\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mAttributeError\u001b[0m: FirstClass instance has no attribute 'name'" + "name": "stdout", + "output_type": "stream", + "text": [ + "25\n", + "125\n" ] } ], "source": [ - "print eg1.name, eg1.symbol\n", - "print eg2.name, eg2.symbol" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "AttributeError, Remember variables are nothing but attributes inside a class? So this means we have not given the correct attribute for the instance." + "print(eg4.square())\n", + "print(eg4.cube())" ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__', 'n', 's']" + "10" ] }, - "execution_count": 14, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dir(eg1)" + "eg4.multiply(2)" ] }, { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "one 1\n", - "two 2\n" - ] - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "print eg1.n, eg1.s\n", - "print eg2.n, eg2.s" + "## Inheritance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "So now we have solved the error. Now let us compare the two examples that we saw.\n", - "\n", - "When I declared self.name and self.symbol, there was no attribute error for eg1.name and eg1.symbol and when I declared self.n and self.s, there was no attribute error for eg1.n and eg1.s\n", - "\n", - "From the above we can conclude that self is nothing but the instance itself.\n", - "\n", - "Remember, self is not predefined it is userdefined. You can make use of anything you are comfortable with. But it has become a common practice to use self." + "In many cases you'll have several classes that share common elements. For example, you might be modeling animals on a farm. All of our animals will have a name and number of legs, so we'll create a base class (i.e. a class we plan to inherit from) called `Animal`:" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": true - }, + "execution_count": 30, + "metadata": {}, "outputs": [], "source": [ - "class FirstClass:\n", - " def __init__(asdf1234,name,symbol):\n", - " asdf1234.n = name\n", - " asdf1234.s = symbol" + "class Animal:\n", + " def __init__(self, name, legs):\n", + " self.name = name\n", + " self.legs = legs" ] }, { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": true - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "eg1 = FirstClass('one',1)\n", - "eg2 = FirstClass('two',2)" + "Now we'll create a few *subclasses* of `Animal`. These subclasses will specify how many legs the animal has while leaving the actual name for individual instances. Let's start with llamas:" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "one 1\n", - "two 2\n" - ] - } - ], + "execution_count": 32, + "metadata": {}, + "outputs": [], "source": [ - "print eg1.n, eg1.s\n", - "print eg2.n, eg2.s" + "class Llama(Animal):\n", + " def __init__(self, name, color):\n", + " super().__init__(name, 4)\n", + " self.color = color" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Since eg1 and eg2 are instances of FirstClass it need not necessarily be limited to FirstClass itself. It might extend itself by declaring other attributes without having the attribute to be declared inside the FirstClass." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "eg1.cube = 1\n", - "eg2.cube = 8" + "The `__init__` for `Llama` accepts a name and color. It passes the name and the number 4 (that's how many legs our llamas have) to the base class `__init__`, i.e. `Animal.__init__`.\n", + "\n", + "We can construct a `Llama` and see how it works:" ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 35, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__', 'cube', 'n', 's']" + "'The llama named Llarry has 4 legs and off-white wool'" ] }, - "execution_count": 20, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dir(eg1)" + "llarry = Llama('Llarry', 'off-white')\n", + "\n", + "'The llama named {} has {} legs and {} wool'.format(\n", + " llarry.name, llarry.legs, llarry.color)" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ - "Just like global and local variables as we saw earlier, even classes have it's own types of variables.\n", - "\n", - "Class Attribute : attributes defined outside the method and is applicable to all the instances.\n", + "### `super`\n", "\n", - "Instance Attribute : attributes defined inside a method and is applicable to only that method and is unique to each instance." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class FirstClass:\n", - " test = 'test'\n", - " def __init__(self,name,symbol):\n", - " self.name = name\n", - " self.symbol = symbol" + "The call to `super` in `Llama.__init__` essentially means \"call `__init__` on the base class\". `super()` is actually slightly more sophisticatd than that, but that's a sufficient explanation for our purposes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here test is a class attribute and name is a instance attribute." + "### Another subclass\n", + "\n", + "We can create another `Animal` subclass to fill our farm and show how subclasses can centralize structure and behavior. Here's how our `Chicken` class looks:" ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": true - }, + "execution_count": 36, + "metadata": {}, "outputs": [], "source": [ - "eg3 = FirstClass('Three',3)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "test Three\n" - ] - } - ], - "source": [ - "print eg3.test, eg3.name" + "class Chicken(Animal):\n", + " def __init__(self, name):\n", + " super().__init__(name, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let us add some more methods to FirstClass." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "class FirstClass:\n", - " def __init__(self,name,symbol):\n", - " self.name = name\n", - " self.symbol = symbol\n", - " def square(self):\n", - " return self.symbol * self.symbol\n", - " def cube(self):\n", - " return self.symbol * self.symbol * self.symbol\n", - " def multiply(self, x):\n", - " return self.symbol * x" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "eg4 = FirstClass('Five',5)" + "Chickens are simpler than Llamas in that they don't add any new attributes. But they follow the same pattern as Llamas by passing a user-provided name argument to the base-class initializer along with a hard-coded 2 legs. Let's see our chickens in action:" ] }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "25\n", - "125\n" - ] - } - ], - "source": [ - "print eg4.square()\n", - "print eg4.cube()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "10" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "eg4.multiply(2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above can also be written as," - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "10" + "'The chicken named Marco Pollo has 2 legs'" ] }, - "execution_count": 28, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FirstClass.multiply(eg4,2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##Inheritance" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There might be cases where a new class would have all the previous characteristics of an already defined class. So the new class can \"inherit\" the previous class and add it's own methods to it. This is called as inheritance." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Consider class SoftwareEngineer which has a method salary." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "class SoftwareEngineer:\n", - " def __init__(self,name,age):\n", - " self.name = name\n", - " self.age = age\n", - " def salary(self, value):\n", - " self.money = value\n", - " print self.name,\"earns\",self.money" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = SoftwareEngineer('Kartik',26)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Kartik earns 40000\n" - ] - } - ], - "source": [ - "a.salary(40000)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['__doc__', '__init__', '__module__', 'salary']" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dir(SoftwareEngineer)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now consider another class Artist which tells us about the amount of money an artist earns and his artform." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class Artist:\n", - " def __init__(self,name,age):\n", - " self.name = name\n", - " self.age = age\n", - " def money(self,value):\n", - " self.money = value\n", - " print self.name,\"earns\",self.money\n", - " def artform(self, job):\n", - " self.job = job\n", - " print self.name,\"is a\", self.job" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "b = Artist('Nitin',20)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Nitin earns 50000\n", - "Nitin is a Musician\n" - ] - } - ], - "source": [ - "b.money(50000)\n", - "b.artform('Musician')" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['__doc__', '__init__', '__module__', 'artform', 'money']" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dir(Artist)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "money method and salary method are the same. So we can generalize the method to salary and inherit the SoftwareEngineer class to Artist class. Now the artist class becomes," - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class Artist(SoftwareEngineer):\n", - " def artform(self, job):\n", - " self.job = job\n", - " print self.name,\"is a\", self.job" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "c = Artist('Nishanth',21)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['__doc__', '__init__', '__module__', 'artform', 'salary']" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dir(Artist)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Nishanth earns 60000\n", - "Nishanth is a Dancer\n" - ] - } - ], - "source": [ - "c.salary(60000)\n", - "c.artform('Dancer')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Suppose say while inheriting a particular method is not suitable for the new class. One can override this method by defining again that method with the same name inside the new class." - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "class Artist(SoftwareEngineer):\n", - " def artform(self, job):\n", - " self.job = job\n", - " print self.name,\"is a\", self.job\n", - " def salary(self, value):\n", - " self.money = value\n", - " print self.name,\"earns\",self.money\n", - " print \"I am overriding the SoftwareEngineer class's salary method\"" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "c = Artist('Nishanth',21)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Nishanth earns 60000\n", - "I am overriding the SoftwareEngineer class's salary method\n", - "Nishanth is a Dancer\n" - ] - } - ], - "source": [ - "c.salary(60000)\n", - "c.artform('Dancer')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If not sure how many times methods will be called it will become difficult to declare so many variables to carry each result hence it is better to declare a list and append the result." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class emptylist:\n", - " def __init__(self):\n", - " self.data = []\n", - " def one(self,x):\n", - " self.data.append(x)\n", - " def two(self, x ):\n", - " self.data.append(x**2)\n", - " def three(self, x):\n", - " self.data.append(x**3)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "xc = emptylist()" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1]\n" - ] - } - ], - "source": [ - "xc.one(1)\n", - "print xc.data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Since xc.data is a list direct list operations can also be performed." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 8]\n" - ] - } - ], - "source": [ - "xc.data.append(8)\n", - "print xc.data" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 8, 9]\n" - ] - } - ], - "source": [ - "xc.two(3)\n", - "print xc.data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If the number of input arguments varies from instance to instance asterisk can be used as shown." - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class NotSure:\n", - " def __init__(self, *args):\n", - " self.data = ''.join(list(args)) " - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "yz = NotSure('I', 'Do' , 'Not', 'Know', 'What', 'To','Type')" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'IDoNotKnowWhatToType'" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "yz.data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#Where to go from here?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Practice alone can help you get the hang of python. Give your self problem statements and solve them. You can also sign up to any competitive coding platform for problem statements. The more you code the more you discover and the more you start appreciating the language.\n", - "\n", - "\n", - "Now that you have been introduced to python, You can try out the different python libraries in the field of your interest. I highly recommend you to check out this curated list of Python frameworks, libraries and software http://awesome-python.com\n", - "\n", - "\n", - "The official python documentation : https://docs.python.org/2/\n", - "\n", - "\n", - "You can also check out Python practice programs written by my friend, Kartik Kannapur. Github Repo : https://github.com/rajathkumarmp/Python-Lectures \n", - "\n", - "\n", - "Enjoy solving problem statements because life is short, you need python!\n", - "\n", - "\n", - "Peace.\n", - "\n", - "\n", - "Rajath Kumar M.P ( rajathkumar dot exe at gmail dot com)" + "c = Chicken('Marco Pollo')\n", + "'The chicken named {} has {} legs'.format(c.name, c.legs)" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/07.ipynb b/07.ipynb index a86c94a..4d004e8 100644 --- a/07.ipynb +++ b/07.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -18,31 +11,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Variables, Lists, Dictionaries etc in python is a object. Without getting into the theory part of Object Oriented Programming, explanation of the concepts will be done along this tutorial." + "Everything in Python is an object, and every object has a type. We can create our own types in Python by defining classes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "A class is declared as follows" + "A class is declared as follows:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "class class_name:\n", + "```python\n", + "class ClassName:\n", + " class body\n", + "```\n", "\n", - " Functions" + "Let's define the simplest class we can:" ] }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "class FirstClass:\n", @@ -60,34 +54,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Above, a class object named \"FirstClass\" is declared now consider a \"egclass\" which has all the characteristics of \"FirstClass\". So all you have to do is, equate the \"egclass\" to \"FirstClass\". In python jargon this is called as creating an instance. \"egclass\" is the instance of \"FirstClass\"" + "We can create an instance of our class by calling it:" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "egclass = FirstClass()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that our new object is of the right type:" + ] + }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "instance" + "__main__.FirstClass" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -96,20 +93,25 @@ "type(egclass)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Interestingly, we can also see that our class has a type. This hints at the nature of Python where everything - even a class - is an object:" + ] + }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "classobj" + "type" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -122,59 +124,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now let us add some \"functionality\" to the class. So that our \"FirstClass\" is defined in a better way. A function inside a class is called as a \"Method\" of that class" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Most of the classes will have a function named \"\\_\\_init\\_\\_\". These are called as magic methods. In this method you basically initialize the variables of that class or any other initial algorithms which is applicable to all methods is specified in this method. A variable inside a class is called an attribute." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These helps simplify the process of initializing a instance. For example,\n", + "## __init__\n", "\n", - "Without the use of magic method or \\_\\_init\\_\\_ which is otherwise called as constructors. One had to define a `init( )` method and call the `init( )` function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "eg0 = FirstClass()\n", - "eg0.init()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But when the constructor is defined the \\_\\_init\\_\\_ is called thus intializing the instance created. " + "Many classes need some sort of initialization. We do this with the `__init__` method. This is called when an new instance of our class is created, before a reference to that object is made available to the caller." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We will make our \"FirstClass\" to accept two variables name and symbol.\n", - "\n", - "I will be explaining about the \"self\" in a while." + "We'll give our `FirstClass` class a `__init__` that accepts two arguments`name` and `symbol`. We'll store those arguments on the instance:" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, + "execution_count": 7, + "metadata": {}, "outputs": [], "source": [ "class FirstClass:\n", @@ -187,27 +152,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we have defined a function and added the \\_\\_init\\_\\_ method. We can create a instance of FirstClass which now accepts two arguments. " + "Now that we have defined a function and added the `__init__` method. We can create a instance of `FirstClass` which now accepts two arguments. " ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ "eg1 = FirstClass('one',1)\n", "eg2 = FirstClass('two',2)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `self`\n", + "\n", + "You probably noticed the `self` argument in our `__init__`. This argument is automatically assigned to the instance on which the method is being executed. Python does this for all instance methods, not just `__init__`." + ] + }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -219,8 +189,8 @@ } ], "source": [ - "print eg1.name, eg1.symbol\n", - "print eg2.name, eg2.symbol" + "print(eg1.name, eg1.symbol)\n", + "print(eg2.name, eg2.symbol)" ] }, { @@ -232,18 +202,41 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__']" + "['__class__',\n", + " '__delattr__',\n", + " '__dict__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__eq__',\n", + " '__format__',\n", + " '__ge__',\n", + " '__getattribute__',\n", + " '__gt__',\n", + " '__hash__',\n", + " '__init__',\n", + " '__init_subclass__',\n", + " '__le__',\n", + " '__lt__',\n", + " '__module__',\n", + " '__ne__',\n", + " '__new__',\n", + " '__reduce__',\n", + " '__reduce_ex__',\n", + " '__repr__',\n", + " '__setattr__',\n", + " '__sizeof__',\n", + " '__str__',\n", + " '__subclasshook__',\n", + " '__weakref__']" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -261,18 +254,43 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__', 'name', 'symbol']" + "['__class__',\n", + " '__delattr__',\n", + " '__dict__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__eq__',\n", + " '__format__',\n", + " '__ge__',\n", + " '__getattribute__',\n", + " '__gt__',\n", + " '__hash__',\n", + " '__init__',\n", + " '__init_subclass__',\n", + " '__le__',\n", + " '__lt__',\n", + " '__module__',\n", + " '__ne__',\n", + " '__new__',\n", + " '__reduce__',\n", + " '__reduce_ex__',\n", + " '__repr__',\n", + " '__setattr__',\n", + " '__sizeof__',\n", + " '__str__',\n", + " '__subclasshook__',\n", + " '__weakref__',\n", + " 'name',\n", + " 'symbol']" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -285,905 +303,234 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Changing the FirstClass function a bit," + "## Methods\n", + "\n", + "Methods are defined for classes using `def` inside the class body. `__init__` that we looked at above is an example of a method. Let us add some more methods to `FirstClass`:" ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": true - }, + "execution_count": 15, + "metadata": {}, "outputs": [], "source": [ "class FirstClass:\n", " def __init__(self,name,symbol):\n", - " self.n = name\n", - " self.s = symbol" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Changing self.name and self.symbol to self.n and self.s respectively will yield," + " self.name = name\n", + " self.symbol = symbol\n", + " \n", + " def square(self):\n", + " return self.symbol * self.symbol\n", + " \n", + " def cube(self):\n", + " return self.symbol * self.symbol * self.symbol\n", + " \n", + " def multiply(self, x):\n", + " return self.symbol * x" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": true - }, + "execution_count": 16, + "metadata": {}, "outputs": [], "source": [ - "eg1 = FirstClass('one',1)\n", - "eg2 = FirstClass('two',2)" + "eg4 = FirstClass('Five',5)" ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "FirstClass instance has no attribute 'name'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\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;32mprint\u001b[0m \u001b[0meg1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbol\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0meg2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbol\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mAttributeError\u001b[0m: FirstClass instance has no attribute 'name'" + "name": "stdout", + "output_type": "stream", + "text": [ + "25\n", + "125\n" ] } ], "source": [ - "print eg1.name, eg1.symbol\n", - "print eg2.name, eg2.symbol" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "AttributeError, Remember variables are nothing but attributes inside a class? So this means we have not given the correct attribute for the instance." + "print(eg4.square())\n", + "print(eg4.cube())" ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__', 'n', 's']" + "10" ] }, - "execution_count": 14, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dir(eg1)" + "eg4.multiply(2)" ] }, { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "one 1\n", - "two 2\n" - ] - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "print eg1.n, eg1.s\n", - "print eg2.n, eg2.s" + "## Inheritance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "So now we have solved the error. Now let us compare the two examples that we saw.\n", - "\n", - "When I declared self.name and self.symbol, there was no attribute error for eg1.name and eg1.symbol and when I declared self.n and self.s, there was no attribute error for eg1.n and eg1.s\n", - "\n", - "From the above we can conclude that self is nothing but the instance itself.\n", - "\n", - "Remember, self is not predefined it is userdefined. You can make use of anything you are comfortable with. But it has become a common practice to use self." + "In many cases you'll have several classes that share common elements. For example, you might be modeling animals on a farm. All of our animals will have a name and number of legs, so we'll create a base class (i.e. a class we plan to inherit from) called `Animal`:" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": true - }, + "execution_count": 30, + "metadata": {}, "outputs": [], "source": [ - "class FirstClass:\n", - " def __init__(asdf1234,name,symbol):\n", - " asdf1234.n = name\n", - " asdf1234.s = symbol" + "class Animal:\n", + " def __init__(self, name, legs):\n", + " self.name = name\n", + " self.legs = legs" ] }, { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": true - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "eg1 = FirstClass('one',1)\n", - "eg2 = FirstClass('two',2)" + "Now we'll create a few *subclasses* of `Animal`. These subclasses will specify how many legs the animal has while leaving the actual name for individual instances. Let's start with llamas:" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "one 1\n", - "two 2\n" - ] - } - ], + "execution_count": 32, + "metadata": {}, + "outputs": [], "source": [ - "print eg1.n, eg1.s\n", - "print eg2.n, eg2.s" + "class Llama(Animal):\n", + " def __init__(self, name, color):\n", + " super().__init__(name, 4)\n", + " self.color = color" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Since eg1 and eg2 are instances of FirstClass it need not necessarily be limited to FirstClass itself. It might extend itself by declaring other attributes without having the attribute to be declared inside the FirstClass." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "eg1.cube = 1\n", - "eg2.cube = 8" + "The `__init__` for `Llama` accepts a name and color. It passes the name and the number 4 (that's how many legs our llamas have) to the base class `__init__`, i.e. `Animal.__init__`.\n", + "\n", + "We can construct a `Llama` and see how it works:" ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 35, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__', 'cube', 'n', 's']" + "'The llama named Llarry has 4 legs and off-white wool'" ] }, - "execution_count": 20, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dir(eg1)" + "llarry = Llama('Llarry', 'off-white')\n", + "\n", + "'The llama named {} has {} legs and {} wool'.format(\n", + " llarry.name, llarry.legs, llarry.color)" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ - "Just like global and local variables as we saw earlier, even classes have it's own types of variables.\n", + "### `super`\n", "\n", - "Class Attribute : attributes defined outside the method and is applicable to all the instances.\n", - "\n", - "Instance Attribute : attributes defined inside a method and is applicable to only that method and is unique to each instance." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class FirstClass:\n", - " test = 'test'\n", - " def __init__(self,name,symbol):\n", - " self.name = name\n", - " self.symbol = symbol" + "The call to `super` in `Llama.__init__` essentially means \"call `__init__` on the base class\". `super()` is actually slightly more sophisticatd than that, but that's a sufficient explanation for our purposes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here test is a class attribute and name is a instance attribute." + "### Another subclass\n", + "\n", + "We can create another `Animal` subclass to fill our farm and show how subclasses can centralize structure and behavior. Here's how our `Chicken` class looks:" ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": true - }, + "execution_count": 36, + "metadata": {}, "outputs": [], "source": [ - "eg3 = FirstClass('Three',3)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "test Three\n" - ] - } - ], - "source": [ - "print eg3.test, eg3.name" + "class Chicken(Animal):\n", + " def __init__(self, name):\n", + " super().__init__(name, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let us add some more methods to FirstClass." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "class FirstClass:\n", - " def __init__(self,name,symbol):\n", - " self.name = name\n", - " self.symbol = symbol\n", - " def square(self):\n", - " return self.symbol * self.symbol\n", - " def cube(self):\n", - " return self.symbol * self.symbol * self.symbol\n", - " def multiply(self, x):\n", - " return self.symbol * x" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "eg4 = FirstClass('Five',5)" + "Chickens are simpler than Llamas in that they don't add any new attributes. But they follow the same pattern as Llamas by passing a user-provided name argument to the base-class initializer along with a hard-coded 2 legs. Let's see our chickens in action:" ] }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "25\n", - "125\n" - ] - } - ], - "source": [ - "print eg4.square()\n", - "print eg4.cube()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "10" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "eg4.multiply(2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above can also be written as," - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "10" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "FirstClass.multiply(eg4,2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Inheritance" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There might be cases where a new class would have all the previous characteristics of an already defined class. So the new class can \"inherit\" the previous class and add it's own methods to it. This is called as inheritance." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Consider class SoftwareEngineer which has a method salary." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "class SoftwareEngineer:\n", - " def __init__(self,name,age):\n", - " self.name = name\n", - " self.age = age\n", - " def salary(self, value):\n", - " self.money = value\n", - " print self.name,\"earns\",self.money" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = SoftwareEngineer('Kartik',26)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Kartik earns 40000\n" - ] - } - ], - "source": [ - "a.salary(40000)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['__doc__', '__init__', '__module__', 'salary']" + "'The chicken named Marco Pollo has 2 legs'" ] }, - "execution_count": 32, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dir(SoftwareEngineer)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now consider another class Artist which tells us about the amount of money an artist earns and his artform." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class Artist:\n", - " def __init__(self,name,age):\n", - " self.name = name\n", - " self.age = age\n", - " def money(self,value):\n", - " self.money = value\n", - " print self.name,\"earns\",self.money\n", - " def artform(self, job):\n", - " self.job = job\n", - " print self.name,\"is a\", self.job" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "b = Artist('Nitin',20)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Nitin earns 50000\n", - "Nitin is a Musician\n" - ] - } - ], - "source": [ - "b.money(50000)\n", - "b.artform('Musician')" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['__doc__', '__init__', '__module__', 'artform', 'money']" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dir(Artist)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "money method and salary method are the same. So we can generalize the method to salary and inherit the SoftwareEngineer class to Artist class. Now the artist class becomes," - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class Artist(SoftwareEngineer):\n", - " def artform(self, job):\n", - " self.job = job\n", - " print self.name,\"is a\", self.job" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "c = Artist('Nishanth',21)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['__doc__', '__init__', '__module__', 'artform', 'salary']" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dir(Artist)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Nishanth earns 60000\n", - "Nishanth is a Dancer\n" - ] - } - ], - "source": [ - "c.salary(60000)\n", - "c.artform('Dancer')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Suppose say while inheriting a particular method is not suitable for the new class. One can override this method by defining again that method with the same name inside the new class." - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "class Artist(SoftwareEngineer):\n", - " def artform(self, job):\n", - " self.job = job\n", - " print self.name,\"is a\", self.job\n", - " def salary(self, value):\n", - " self.money = value\n", - " print self.name,\"earns\",self.money\n", - " print \"I am overriding the SoftwareEngineer class's salary method\"" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "c = Artist('Nishanth',21)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Nishanth earns 60000\n", - "I am overriding the SoftwareEngineer class's salary method\n", - "Nishanth is a Dancer\n" - ] - } - ], - "source": [ - "c.salary(60000)\n", - "c.artform('Dancer')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If not sure how many times methods will be called it will become difficult to declare so many variables to carry each result hence it is better to declare a list and append the result." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class emptylist:\n", - " def __init__(self):\n", - " self.data = []\n", - " def one(self,x):\n", - " self.data.append(x)\n", - " def two(self, x ):\n", - " self.data.append(x**2)\n", - " def three(self, x):\n", - " self.data.append(x**3)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "xc = emptylist()" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1]\n" - ] - } - ], - "source": [ - "xc.one(1)\n", - "print xc.data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Since xc.data is a list direct list operations can also be performed." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 8]\n" - ] - } - ], - "source": [ - "xc.data.append(8)\n", - "print xc.data" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 8, 9]\n" - ] - } - ], - "source": [ - "xc.two(3)\n", - "print xc.data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If the number of input arguments varies from instance to instance asterisk can be used as shown." - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class NotSure:\n", - " def __init__(self, *args):\n", - " self.data = ''.join(list(args)) " - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "yz = NotSure('I', 'Do' , 'Not', 'Know', 'What', 'To','Type')" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'IDoNotKnowWhatToType'" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "yz.data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Where to go from here?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Practice alone can help you get the hang of python. Give your self problem statements and solve them. You can also sign up to any competitive coding platform for problem statements. The more you code the more you discover and the more you start appreciating the language.\n", - "\n", - "\n", - "Now that you have been introduced to python, You can try out the different python libraries in the field of your interest. I highly recommend you to check out this curated list of Python frameworks, libraries and software http://awesome-python.com\n", - "\n", - "\n", - "The official python documentation : https://docs.python.org/2/\n", - "\n", - "\n", - "You can also check out Python practice programs written by my friend, Kartik Kannapur. Github Repo : https://github.com/rajathkumarmp/Python-Lectures \n", - "\n", - "\n", - "Enjoy solving problem statements because life is short, you need python!\n", - "\n", - "\n", - "Peace.\n", - "\n", - "\n", - "Rajath Kumar M.P ( rajathkumar dot exe at gmail dot com)" + "c = Chicken('Marco Pollo')\n", + "'The chicken named {} has {} legs'.format(c.name, c.legs)" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } From 09d37c5157fdc33282ad94b94c94e82f340efa20 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 22:50:16 +0200 Subject: [PATCH 09/10] removed a bunch of unnecessary files --- Python.pdf | Bin 223340 -> 0 bytes tex/.texpadtmp/00.aux | 147 --- tex/.texpadtmp/00.log | 2344 ---------------------------------- tex/.texpadtmp/00.out | 56 - tex/.texpadtmp/00.synctex.gz | Bin 231892 -> 0 bytes tex/.texpadtmp/00.toc | 58 - tex/00.tex | 323 ----- tex/01.tex | 702 ---------- tex/02.tex | 473 ------- tex/03.tex | 1102 ---------------- tex/04.tex | 731 ----------- tex/05.tex | 500 -------- tex/06.tex | 697 ---------- tex/07.tex | 748 ----------- 14 files changed, 7881 deletions(-) delete mode 100644 Python.pdf delete mode 100644 tex/.texpadtmp/00.aux delete mode 100644 tex/.texpadtmp/00.log delete mode 100644 tex/.texpadtmp/00.out delete mode 100644 tex/.texpadtmp/00.synctex.gz delete mode 100644 tex/.texpadtmp/00.toc delete mode 100644 tex/00.tex delete mode 100644 tex/01.tex delete mode 100644 tex/02.tex delete mode 100644 tex/03.tex delete mode 100644 tex/04.tex delete mode 100644 tex/05.tex delete mode 100644 tex/06.tex delete mode 100644 tex/07.tex diff --git a/Python.pdf b/Python.pdf deleted file mode 100644 index f6b047ee48cc332f9be1a86deea73cfa67ad307c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223340 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

LA8;iqeA>ih_q8%l1VRZ^U6*d54*KmUGRJ=1cMP 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 OgMkb;ZfM=pX7~q0w0_3` diff --git a/tex/.texpadtmp/00.aux b/tex/.texpadtmp/00.aux deleted file mode 100644 index 2aff996..0000000 --- a/tex/.texpadtmp/00.aux +++ /dev/null @@ -1,147 +0,0 @@ -\relax -\providecommand\hyper@newdestlabel[2]{} -\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} -\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined -\global\let\oldcontentsline\contentsline -\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} -\global\let\oldnewlabel\newlabel -\gdef\newlabel#1#2{\newlabelxx{#1}#2} -\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} -\AtEndDocument{\ifx\hyper@anchor\@undefined -\let\contentsline\oldcontentsline -\let\newlabel\oldnewlabel -\fi} -\fi} -\global\let\hyper@last\relax -\gdef\HyperFirstAtBeginDocument#1{#1} -\providecommand\HyField@AuxAddToFields[1]{} -\providecommand\HyField@AuxAddToCoFields[2]{} -\providecommand \oddpage@label [2]{} -\@writefile{toc}{\contentsline {section}{\numberline {1}Python}{3}{section.1}} -\newlabel{python}{{1}{3}{Python}{section.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Introduction}{3}{subsection.1.1}} -\newlabel{introduction}{{1.1}{3}{Introduction}{subsection.1.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Installation}{3}{subsection.1.2}} -\newlabel{installation}{{1.2}{3}{Installation}{subsection.1.2}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.2.1}Installation from unofficial distributions}{3}{subsubsection.1.2.1}} -\newlabel{installation-from-unofficial-distributions}{{1.2.1}{3}{Installation from unofficial distributions}{subsubsection.1.2.1}{}} -\newlabel{anaconda}{{1.2.1}{3}{Anaconda}{section*.2}{}} -\@writefile{toc}{\contentsline {paragraph}{Anaconda}{3}{section*.2}} -\newlabel{canopy}{{1.2.1}{3}{Canopy}{section*.3}{}} -\@writefile{toc}{\contentsline {paragraph}{Canopy}{3}{section*.3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Launching IPython Notebook}{3}{subsection.1.3}} -\newlabel{launching-ipython-notebook}{{1.3}{3}{Launching IPython Notebook}{subsection.1.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.4}How to learn from this resource?}{3}{subsection.1.4}} -\newlabel{how-to-learn-from-this-resource}{{1.4}{3}{How to learn from this resource?}{subsection.1.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.5}License}{3}{subsection.1.5}} -\newlabel{license}{{1.5}{3}{License}{subsection.1.5}{}} -\gdef \LT@i {\LT@entry - {1}{38.50012pt}\LT@entry - {1}{75.13902pt}} -\@writefile{toc}{\contentsline {section}{\numberline {2}The Zen Of Python}{4}{section.2}} -\newlabel{the-zen-of-python}{{2}{4}{The Zen Of Python}{section.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {3}Variables}{4}{section.3}} -\newlabel{variables}{{3}{4}{Variables}{section.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4}Operators}{4}{section.4}} -\newlabel{operators}{{4}{4}{Operators}{section.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Arithmetic Operators}{4}{subsection.4.1}} -\newlabel{arithmetic-operators}{{4.1}{4}{Arithmetic Operators}{subsection.4.1}{}} -\gdef \LT@ii {\LT@entry - {1}{38.50012pt}\LT@entry - {2}{110.80576pt}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Relational Operators}{5}{subsection.4.2}} -\newlabel{relational-operators}{{4.2}{5}{Relational Operators}{subsection.4.2}{}} -\gdef \LT@iii {\LT@entry - {1}{38.50012pt}\LT@entry - {1}{75.13902pt}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Bitwise Operators}{6}{subsection.4.3}} -\newlabel{bitwise-operators}{{4.3}{6}{Bitwise Operators}{subsection.4.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5}Built-in Functions}{6}{section.5}} -\newlabel{built-in-functions}{{5}{6}{Built-in Functions}{section.5}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Conversion from one system to another}{6}{subsection.5.1}} -\newlabel{conversion-from-one-system-to-another}{{5.1}{6}{Conversion from one system to another}{subsection.5.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Simplifying Arithmetic Operations}{7}{subsection.5.2}} -\newlabel{simplifying-arithmetic-operations}{{5.2}{7}{Simplifying Arithmetic Operations}{subsection.5.2}{}} -\gdef \LT@iv {\LT@entry - {2}{38.77788pt}\LT@entry - {1}{38.22234pt}} -\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Accepting User Inputs}{9}{subsection.5.3}} -\newlabel{accepting-user-inputs}{{5.3}{9}{Accepting User Inputs}{subsection.5.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6}Print Statement}{10}{section.6}} -\newlabel{print-statement}{{6}{10}{Print Statement}{section.6}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Other Examples}{11}{subsection.6.1}} -\newlabel{other-examples}{{6.1}{11}{Other Examples}{subsection.6.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {7}PrecisionWidth and FieldWidth}{12}{section.7}} -\newlabel{precisionwidth-and-fieldwidth}{{7}{12}{PrecisionWidth and FieldWidth}{section.7}{}} -\@writefile{toc}{\contentsline {section}{\numberline {8}Data Structures}{13}{section.8}} -\newlabel{data-structures}{{8}{13}{Data Structures}{section.8}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.1}Lists}{13}{subsection.8.1}} -\newlabel{lists}{{8.1}{13}{Lists}{subsection.8.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.1.1}Indexing}{13}{subsubsection.8.1.1}} -\newlabel{indexing}{{8.1.1}{13}{Indexing}{subsubsection.8.1.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.1.2}Slicing}{14}{subsubsection.8.1.2}} -\newlabel{slicing}{{8.1.2}{14}{Slicing}{subsubsection.8.1.2}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.1.3}Built in List Functions}{14}{subsubsection.8.1.3}} -\newlabel{built-in-list-functions}{{8.1.3}{14}{Built in List Functions}{subsubsection.8.1.3}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.1.4}Copying a list}{18}{subsubsection.8.1.4}} -\newlabel{copying-a-list}{{8.1.4}{18}{Copying a list}{subsubsection.8.1.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2}Tuples}{19}{subsection.8.2}} -\newlabel{tuples}{{8.2}{19}{Tuples}{subsection.8.2}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.1}Mapping one tuple to another}{20}{subsubsection.8.2.1}} -\newlabel{mapping-one-tuple-to-another}{{8.2.1}{20}{Mapping one tuple to another}{subsubsection.8.2.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.2}Built In Tuple functions}{20}{subsubsection.8.2.2}} -\newlabel{built-in-tuple-functions}{{8.2.2}{20}{Built In Tuple functions}{subsubsection.8.2.2}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.3}Sets}{20}{subsection.8.3}} -\newlabel{sets}{{8.3}{20}{Sets}{subsection.8.3}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.1}Built-in Functions}{20}{subsubsection.8.3.1}} -\newlabel{built-in-functions}{{8.3.1}{20}{Built-in Functions}{subsubsection.8.3.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.4}Strings}{22}{subsection.8.4}} -\newlabel{strings}{{8.4}{22}{Strings}{subsection.8.4}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.1}Built-in Functions}{22}{subsubsection.8.4.1}} -\newlabel{built-in-functions}{{8.4.1}{22}{Built-in Functions}{subsubsection.8.4.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.5}Dictionaries}{26}{subsection.8.5}} -\newlabel{dictionaries}{{8.5}{26}{Dictionaries}{subsection.8.5}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.5.1}Built-in Functions}{26}{subsubsection.8.5.1}} -\newlabel{built-in-functions}{{8.5.1}{26}{Built-in Functions}{subsubsection.8.5.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {9}Control Flow Statements}{28}{section.9}} -\newlabel{control-flow-statements}{{9}{28}{Control Flow Statements}{section.9}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.1}If}{28}{subsection.9.1}} -\newlabel{if}{{9.1}{28}{If}{subsection.9.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.2}If-else}{28}{subsection.9.2}} -\newlabel{if-else}{{9.2}{28}{If-else}{subsection.9.2}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.3}if-elif}{28}{subsection.9.3}} -\newlabel{if-elif}{{9.3}{28}{if-elif}{subsection.9.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.4}Loops}{29}{subsection.9.4}} -\newlabel{loops}{{9.4}{29}{Loops}{subsection.9.4}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {9.4.1}For}{29}{subsubsection.9.4.1}} -\newlabel{for}{{9.4.1}{29}{For}{subsubsection.9.4.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {9.4.2}While}{30}{subsubsection.9.4.2}} -\newlabel{while}{{9.4.2}{30}{While}{subsubsection.9.4.2}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.5}Break}{30}{subsection.9.5}} -\newlabel{break}{{9.5}{30}{Break}{subsection.9.5}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.6}Continue}{30}{subsection.9.6}} -\newlabel{continue}{{9.6}{30}{Continue}{subsection.9.6}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.7}List Comprehensions}{31}{subsection.9.7}} -\newlabel{list-comprehensions}{{9.7}{31}{List Comprehensions}{subsection.9.7}{}} -\@writefile{toc}{\contentsline {section}{\numberline {10}Functions}{32}{section.10}} -\newlabel{functions}{{10}{32}{Functions}{section.10}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.1}Return Statement}{33}{subsection.10.1}} -\newlabel{return-statement}{{10.1}{33}{Return Statement}{subsection.10.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.2}Implicit arguments}{34}{subsection.10.2}} -\newlabel{implicit-arguments}{{10.2}{34}{Implicit arguments}{subsection.10.2}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.3}Any number of arguments}{34}{subsection.10.3}} -\newlabel{any-number-of-arguments}{{10.3}{34}{Any number of arguments}{subsection.10.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.4}Global and Local Variables}{35}{subsection.10.4}} -\newlabel{global-and-local-variables}{{10.4}{35}{Global and Local Variables}{subsection.10.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.5}Lambda Functions}{36}{subsection.10.5}} -\newlabel{lambda-functions}{{10.5}{36}{Lambda Functions}{subsection.10.5}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {10.5.1}map}{36}{subsubsection.10.5.1}} -\newlabel{map}{{10.5.1}{36}{map}{subsubsection.10.5.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {10.5.2}filter}{37}{subsubsection.10.5.2}} -\newlabel{filter}{{10.5.2}{37}{filter}{subsubsection.10.5.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {11}Classes}{38}{section.11}} -\newlabel{classes}{{11}{38}{Classes}{section.11}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {11.1}Inheritance}{41}{subsection.11.1}} -\newlabel{inheritance}{{11.1}{41}{Inheritance}{subsection.11.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {12}Where to go from here?}{43}{section.12}} -\newlabel{where-to-go-from-here}{{12}{43}{Where to go from here?}{section.12}{}} diff --git a/tex/.texpadtmp/00.log b/tex/.texpadtmp/00.log deleted file mode 100644 index b873918..0000000 --- a/tex/.texpadtmp/00.log +++ /dev/null @@ -1,2344 +0,0 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex 2014.5.25) 2 OCT 2015 16:03 -entering extended mode - restricted \write18 enabled. - file:line:error style messages enabled. - %&-line parsing enabled. -**00.tex -(./00.tex -LaTeX2e <2014/05/01> -Babel <3.9k> and hyphenation patterns for 78 languages loaded. -(/usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls -Document Class: article 2007/10/19 v1.4h Standard LaTeX document class -(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option) -) -\c@part=\count79 -\c@section=\count80 -\c@subsection=\count81 -\c@subsubsection=\count82 -\c@paragraph=\count83 -\c@subparagraph=\count84 -\c@figure=\count85 -\c@table=\count86 -\abovecaptionskip=\skip41 -\belowcaptionskip=\skip42 -\bibindent=\dimen102 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2014/04/25 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) - (/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2014/05/08 v1.15 key=value parser (DPC) -\KV@toks@=\toks14 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) - (/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 1999/03/16 v1.09 sin cos tan (DPC) -) (/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/graphics.cfg -File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live -) -Package graphics Info: Driver file: pdftex.def on input line 91. - (/usr/local/texlive/2014/texmf-dist/tex/latex/pdftex-def/pdftex.def -File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/infwarerr.sty -Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) -) (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ltxcmds.sty -Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) -) -\Gread@gobject=\count87 -)) -\Gin@req@height=\dimen103 -\Gin@req@width=\dimen104 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/adjustbox/adjustbox.sty -Package: adjustbox 2012/05/21 v1.0 Adjusting TeX boxes (trim, clip, ...) - (/usr/local/texlive/2014/texmf-dist/tex/latex/xkeyval/xkeyval.sty -Package: xkeyval 2014/05/09 v2.6d package option processing (HA) - (/usr/local/texlive/2014/texmf-dist/tex/generic/xkeyval/xkeyval.tex -\XKV@toks=\toks15 -\XKV@tempa@toks=\toks16 -\XKV@depth=\count88 -File: xkeyval.tex 2014/05/09 v2.6d key=value parser (HA) -)) (/usr/local/texlive/2014/texmf-dist/tex/latex/adjustbox/adjcalc.sty -Package: adjcalc 2012/05/16 v1.1 Provides advanced setlength with multiple back-ends (calc, etex, pgfmath) -) (/usr/local/texlive/2014/texmf-dist/tex/latex/adjustbox/trimclip.sty -Package: trimclip 2012/05/16 v1.0 Trim and clip general TeX material - (/usr/local/texlive/2014/texmf-dist/tex/latex/collectbox/collectbox.sty -Package: collectbox 2012/05/17 v0.4b Collect macro arguments as boxes -\collectedbox=\box26 -) -\tc@llx=\dimen105 -\tc@lly=\dimen106 -\tc@urx=\dimen107 -\tc@ury=\dimen108 -Package trimclip Info: Using driver 'tc-pdftex.def'. - (/usr/local/texlive/2014/texmf-dist/tex/latex/adjustbox/tc-pdftex.def -File: tc-pdftex.def 2012/05/13 v1.0 Clipping driver for pdftex -)) -\adjbox@Width=\dimen109 -\adjbox@Height=\dimen110 -\adjbox@Depth=\dimen111 -\adjbox@Totalheight=\dimen112 - (/usr/local/texlive/2014/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty -Package: ifoddpage 2011/09/13 v1.0 Conditionals for odd/even page detection -\c@checkoddpage=\count89 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/varwidth/varwidth.sty -Package: varwidth 2009/03/30 ver 0.92; Variable-width minipages -\@vwid@box=\box27 -\sift@deathcycles=\count90 -\@vwid@loff=\dimen113 -\@vwid@roff=\dimen114 -)) (/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/color.sty -Package: color 2014/04/23 v1.1a Standard LaTeX Color (DPC) - (/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/color.cfg -File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive -) -Package color Info: Driver file: pdftex.def on input line 137. -) (/usr/local/texlive/2014/texmf-dist/tex/latex/tools/enumerate.sty -Package: enumerate 1999/03/05 v3.00 enumerate extensions (DPC) -\@enLab=\toks17 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/geometry/geometry.sty -Package: geometry 2010/09/12 v5.6 Page Geometry - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifpdf.sty -Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) -Package ifpdf Info: pdfTeX in PDF mode is detected. -) (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifvtex.sty -Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) -Package ifvtex Info: VTeX not detected. -) (/usr/local/texlive/2014/texmf-dist/tex/generic/ifxetex/ifxetex.sty -Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional -) -\Gm@cnth=\count91 -\Gm@cntv=\count92 -\c@Gm@tempcnt=\count93 -\Gm@bindingoffset=\dimen115 -\Gm@wd@mp=\dimen116 -\Gm@odd@mp=\dimen117 -\Gm@even@mp=\dimen118 -\Gm@layoutwidth=\dimen119 -\Gm@layoutheight=\dimen120 -\Gm@layouthoffset=\dimen121 -\Gm@layoutvoffset=\dimen122 -\Gm@dimlist=\toks18 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2013/01/14 v2.14 AMS math features -\@mathmargin=\skip43 - -For additional information on amsmath, use the `?' option. -(/usr/local/texlive/2014/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2000/06/29 v2.01 - (/usr/local/texlive/2014/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 -\@emptytoks=\toks19 -\ex@=\dimen123 -)) (/usr/local/texlive/2014/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d -\pmbraise@=\dimen124 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 1999/12/14 v2.01 operator names -) -\inf@bad=\count94 -LaTeX Info: Redefining \frac on input line 210. -\uproot@=\count95 -\leftroot@=\count96 -LaTeX Info: Redefining \overline on input line 306. -\classnum@=\count97 -\DOTSCASE@=\count98 -LaTeX Info: Redefining \ldots on input line 378. -LaTeX Info: Redefining \dots on input line 381. -LaTeX Info: Redefining \cdots on input line 466. -\Mathstrutbox@=\box28 -\strutbox@=\box29 -\big@size=\dimen125 -LaTeX Font Info: Redeclaring font encoding OML on input line 566. -LaTeX Font Info: Redeclaring font encoding OMS on input line 567. -\macc@depth=\count99 -\c@MaxMatrixCols=\count100 -\dotsspace@=\muskip10 -\c@parentequation=\count101 -\dspbrk@lvl=\count102 -\tag@help=\toks20 -\row@=\count103 -\column@=\count104 -\maxfields@=\count105 -\andhelp@=\toks21 -\eqnshift@=\dimen126 -\alignsep@=\dimen127 -\tagshift@=\dimen128 -\tagwidth@=\dimen129 -\totwidth@=\dimen130 -\lineht@=\dimen131 -\@envbody=\toks22 -\multlinegap=\skip44 -\multlinetaggap=\skip45 -\mathdisplay@stack=\toks23 -LaTeX Info: Redefining \[ on input line 2665. -LaTeX Info: Redefining \] on input line 2666. -) (/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols - (/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) (/usr/local/texlive/2014/texmf-dist/tex/latex/eurosym/eurosym.sty -Package: eurosym 1998/08/06 v1.1 European currency symbol ``Euro'' -\@eurobox=\box30 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/ucs/ucs.sty -Package: ucs 2013/05/11 v2.2 UCS: Unicode input support - (/usr/local/texlive/2014/texmf-dist/tex/latex/ucs/data/uni-global.def -File: uni-global.def 2013/05/13 UCS: Unicode global data -) -\uc@secondtry=\count106 -\uc@combtoks=\toks24 -\uc@combtoksb=\toks25 -\uc@temptokena=\toks26 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/base/inputenc.sty -Package: inputenc 2014/04/30 v1.2b Input encoding file -\inpenc@prehook=\toks27 -\inpenc@posthook=\toks28 - (/usr/local/texlive/2014/texmf-dist/tex/latex/ucs/utf8x.def -File: utf8x.def 2004/10/17 UCS: Input encoding UTF-8 -)) (/usr/local/texlive/2014/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -Package: fancyvrb 2008/02/07 - Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix <2008/02/07> (tvz) -\FV@CodeLineNo=\count107 -\FV@InFile=\read1 -\FV@TabBox=\box31 -\c@FancyVerbLine=\count108 -\FV@StepNumber=\count109 -\FV@OutFile=\write3 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/grffile.sty -Package: grffile 2012/04/05 v1.16 Extended file name support for graphics (HO) - (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/kvoptions.sty -Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty -Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/etexcmds.sty -Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifluatex.sty -Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -) -Package etexcmds Info: Could not find \expanded. -(etexcmds) That can mean that you are not using pdfTeX 1.50 or -(etexcmds) that some package has redefined \expanded. -(etexcmds) In the latter case, load this package earlier. -))) (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty -Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO) -Package pdftexcmds Info: LuaTeX not detected. -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -) -Package grffile Info: Option `multidot' is set to `true'. -Package grffile Info: Option `extendedchars' is set to `false'. -Package grffile Info: Option `space' is set to `true'. -Package grffile Info: \Gin@ii of package `graphicx' fixed on input line 486. -) (/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty -Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) -Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) -Package hobsub Info: Skipping package `infwarerr' (already loaded). -Package hobsub Info: Skipping package `ltxcmds' (already loaded). -Package hobsub Info: Skipping package `ifluatex' (already loaded). -Package hobsub Info: Skipping package `ifvtex' (already loaded). -Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) -Package hobsub Info: Skipping package `ifpdf' (already loaded). -Package hobsub Info: Skipping package `etexcmds' (already loaded). -Package hobsub Info: Skipping package `kvsetkeys' (already loaded). -Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) -Package hobsub Info: Skipping package `pdftexcmds' (already loaded). -Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) -Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO) -Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) -Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) -) -Package hobsub Info: Skipping package `hobsub' (already loaded). -Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) -Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) -Package: xcolor-patch 2011/01/30 xcolor patch -Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) -Package atveryend Info: \enddocument detected (standard20110627). -Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) -Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) -Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) -) (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/auxhook.sty -Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) -) -\@linkdim=\dimen132 -\Hy@linkcounter=\count110 -\Hy@pagecounter=\count111 - (/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) -) -\Hy@SavedSpaceFactor=\count112 - (/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/hyperref.cfg -File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive -) -Package hyperref Info: Hyper figures OFF on input line 4443. -Package hyperref Info: Link nesting OFF on input line 4448. -Package hyperref Info: Hyper index ON on input line 4451. -Package hyperref Info: Plain pages OFF on input line 4458. -Package hyperref Info: Backreferencing OFF on input line 4463. -Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4688. -\c@Hy@tempcnt=\count113 - (/usr/local/texlive/2014/texmf-dist/tex/latex/url/url.sty -\Urlmuskip=\muskip11 -Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. -) -LaTeX Info: Redefining \url on input line 5041. -\XeTeXLinkMargin=\dimen133 -\Fld@menulength=\count114 -\Field@Width=\dimen134 -\Fld@charsize=\dimen135 -Package hyperref Info: Hyper figures OFF on input line 6295. -Package hyperref Info: Link nesting OFF on input line 6300. -Package hyperref Info: Hyper index ON on input line 6303. -Package hyperref Info: backreferencing OFF on input line 6310. -Package hyperref Info: Link coloring OFF on input line 6315. -Package hyperref Info: Link coloring with OCG OFF on input line 6320. -Package hyperref Info: PDF/A mode OFF on input line 6325. -LaTeX Info: Redefining \ref on input line 6365. -LaTeX Info: Redefining \pageref on input line 6369. -\Hy@abspage=\count115 -\c@Item=\count116 -\c@Hfootnote=\count117 -) - -Package hyperref Message: Driver (autodetected): hpdftex. - -(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX -\Fld@listcount=\count118 -\c@bookmark@seq@number=\count119 - (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty -Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) -Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 282. -) -\Hy@SectionHShift=\skip46 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/tools/longtable.sty -Package: longtable 2004/02/01 v4.11 Multi-page Table package (DPC) -\LTleft=\skip47 -\LTright=\skip48 -\LTpre=\skip49 -\LTpost=\skip50 -\LTchunksize=\count120 -\LTcapwidth=\dimen136 -\LT@head=\box32 -\LT@firsthead=\box33 -\LT@foot=\box34 -\LT@lastfoot=\box35 -\LT@cols=\count121 -\LT@rows=\count122 -\c@LT@tables=\count123 -\c@LT@chunks=\count124 -\LT@p@ftn=\toks29 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/booktabs/booktabs.sty -Package: booktabs 2005/04/14 v1.61803 publication quality tables -\heavyrulewidth=\dimen137 -\lightrulewidth=\dimen138 -\cmidrulewidth=\dimen139 -\belowrulesep=\dimen140 -\belowbottomsep=\dimen141 -\aboverulesep=\dimen142 -\abovetopsep=\dimen143 -\cmidrulesep=\dimen144 -\cmidrulekern=\dimen145 -\defaultaddspace=\dimen146 -\@cmidla=\count125 -\@cmidlb=\count126 -\@aboverulesep=\dimen147 -\@belowrulesep=\dimen148 -\@thisruleclass=\count127 -\@lastruleclass=\count128 -\@thisrulewidth=\dimen149 -) -Package color Info: Redefining color red on input line 51. -Package color Info: Redefining color green on input line 52. -Package color Info: Redefining color blue on input line 54. -Package color Info: Redefining color cyan on input line 56. -Package color Info: Redefining color lightgray on input line 57. -Package hyperref Info: Option `breaklinks' set `true' on input line 211. -Package hyperref Info: Option `colorlinks' set `true' on input line 211. - (/Users/rajathkumar/Github/pythonclass/tex/.texpadtmp/00.aux - -LaTeX Warning: Label `built-in-functions' multiply defined. - - -LaTeX Warning: Label `built-in-functions' multiply defined. - - -LaTeX Warning: Label `built-in-functions' multiply defined. - -) -\openout1 = `00.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 218. -LaTeX Font Info: ... okay on input line 218. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 218. -LaTeX Font Info: ... okay on input line 218. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 218. -LaTeX Font Info: ... okay on input line 218. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 218. -LaTeX Font Info: ... okay on input line 218. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 218. -LaTeX Font Info: ... okay on input line 218. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 218. -LaTeX Font Info: ... okay on input line 218. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 218. -LaTeX Font Info: ... okay on input line 218. - (/usr/local/texlive/2014/texmf-dist/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count129 -\scratchdimen=\dimen150 -\scratchbox=\box36 -\nofMPsegments=\count130 -\nofMParguments=\count131 -\everyMPshowfont=\toks30 -\MPscratchCnt=\count132 -\MPscratchDim=\dimen151 -\MPnumerator=\count133 -\makeMPintoPDFobject=\count134 -\everyMPtoPDFconversion=\toks31 -) (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf - (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/grfext.sty -Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) -) -Package grfext Info: Graphics extension search list: -(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPEG,.JBIG2,.JB2,.eps] -(grfext) \AppendGraphicsExtensions on input line 452. - (/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live -)) -*geometry* driver: auto-detecting -*geometry* detected driver: pdftex - -Package geometry Warning: The marginal notes overrun the paper. - Add 3.73001pt and more to the right margin. - -*geometry* verbose mode - [ preamble ] result: -* driver: pdftex -* paper: -* layout: -* layoutoffset:(h,v)=(0.0pt,0.0pt) -* modes: -* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt) -* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt) -* \paperwidth=614.295pt -* \paperheight=794.96999pt -* \textwidth=469.75502pt -* \textheight=650.43001pt -* \oddsidemargin=0.0pt -* \evensidemargin=0.0pt -* \topmargin=-37.0pt -* \headheight=12.0pt -* \headsep=25.0pt -* \topskip=10.0pt -* \footskip=30.0pt -* \marginparwidth=65.0pt -* \marginparsep=11.0pt -* \columnsep=10.0pt -* \skip\footins=9.0pt plus 4.0pt minus 2.0pt -* \hoffset=0.0pt -* \voffset=0.0pt -* \mag=1000 -* \@twocolumnfalse -* \@twosidefalse -* \@mparswitchfalse -* \@reversemarginfalse -* (1in=72.27pt=25.4mm, 1cm=28.453pt) - -(/usr/local/texlive/2014/texmf-dist/tex/latex/ucs/ucsencs.def -File: ucsencs.def 2011/01/21 Fixes to fontencodings LGR, T3 -) -\AtBeginShipoutBox=\box37 -Package hyperref Info: Link coloring ON on input line 218. - (/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section - (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.sty -Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) -) -\c@section@level=\count135 -) -LaTeX Info: Redefining \ref on input line 218. -LaTeX Info: Redefining \pageref on input line 218. -LaTeX Info: Redefining \nameref on input line 218. - (/Users/rajathkumar/Github/pythonclass/tex/.texpadtmp/00.out) (/Users/rajathkumar/Github/pythonclass/tex/.texpadtmp/00.out) -\@outlinefile=\write4 -\openout4 = `00.out'. - -LaTeX Font Info: Try loading font information for U+msa on input line 225. - (/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Try loading font information for U+msb on input line 225. - (/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) [1 - -{/usr/local/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (/Users/rajathkumar/Github/pythonclass/tex/.texpadtmp/00.tocpdfTeX warning (ext4): destination with the same identifier (name{page.1}) has been already used, duplicate ignored - - \relax -l.49 ...0.1}Return Statement}{32}{subsection.10.1} - [1]) -\tf@toc=\write5 -\openout5 = `00.toc'. - - [2] [3] (./01.tex -Package color Info: Redefining color orange on input line 18. -Package color Info: Redefining color darkorange on input line 19. -Package color Info: Redefining color darkgreen on input line 20. -Package color Info: Redefining color myteal on input line 21. -Package color Info: Redefining color gray on input line 22. -Package color Info: Redefining color lightgray on input line 23. -Package color Info: Redefining color mediumgray on input line 24. -Package color Info: Redefining color inputbackground on input line 25. -Package color Info: Redefining color outputbackground on input line 26. -Package color Info: Redefining color traceback on input line 27. -Package color Info: Redefining color red on input line 29. -Package color Info: Redefining color green on input line 30. -Package color Info: Redefining color brown on input line 31. -Package color Info: Redefining color blue on input line 32. -Package color Info: Redefining color purple on input line 33. -Package color Info: Redefining color cyan on input line 34. -Package color Info: Redefining color lightgray on input line 35. -Package color Info: Redefining color darkgray on input line 38. -Package color Info: Redefining color lightred on input line 39. -Package color Info: Redefining color lightgreen on input line 40. -Package color Info: Redefining color lightblue on input line 41. -Package color Info: Redefining color lightpurple on input line 42. -Package color Info: Redefining color lightcyan on input line 43. - - -./01.tex:49: LaTeX Error: Command \Shaded already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.49 \newenvironment{Shaded}{}{} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:50: LaTeX Error: Command \KeywordTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.50 ...color[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:51: LaTeX Error: Command \DataTypeTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.51 ...[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:52: LaTeX Error: Command \DecValTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.52 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:53: LaTeX Error: Command \BaseNTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.53 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:54: LaTeX Error: Command \FloatTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.54 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:55: LaTeX Error: Command \CharTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.55 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:56: LaTeX Error: Command \StringTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.56 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:57: LaTeX Error: Command \CommentTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.57 ...color[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:58: LaTeX Error: Command \OtherTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.58 ...[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:59: LaTeX Error: Command \AlertTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.59 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:60: LaTeX Error: Command \FunctionTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.60 ...[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:61: LaTeX Error: Command \RegionMarkerTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.61 \newcommand{\RegionMarkerTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:62: LaTeX Error: Command \ErrorTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.62 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./01.tex:63: LaTeX Error: Command \NormalTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.63 \newcommand{\NormalTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -Package color Info: Redefining color incolor on input line 175. -Package color Info: Redefining color outcolor on input line 176. -Package hyperref Info: Option `breaklinks' set `true' on input line 190. - -Package hyperref Warning: Option `colorlinks' has already been used, -(hyperref) setting the option has no effect on input line 190. - - -./01.tex:196: LaTeX Error: Can be used only in preamble. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.196 \begin{document} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -LaTeX Font Info: Font shape `OT1/cmtt/bx/n' in size <10> not available -(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 207. -[4] -LaTeX Font Info: Try loading font information for OML+cmr on input line 360. - (/usr/local/texlive/2014/texmf-dist/tex/latex/base/omlcmr.fd -File: omlcmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: Font shape `OML/cmr/m/n' in size <10> not available -(Font) Font shape `OML/cmm/m/it' tried instead on input line 360. - [5] [6] [7] [8] [9] (./02.tex -Package color Info: Redefining color orange on input line 16. -Package color Info: Redefining color darkorange on input line 17. -Package color Info: Redefining color darkgreen on input line 18. -Package color Info: Redefining color myteal on input line 19. -Package color Info: Redefining color gray on input line 20. -Package color Info: Redefining color lightgray on input line 21. -Package color Info: Redefining color mediumgray on input line 22. -Package color Info: Redefining color inputbackground on input line 23. -Package color Info: Redefining color outputbackground on input line 24. -Package color Info: Redefining color traceback on input line 25. -Package color Info: Redefining color red on input line 27. -Package color Info: Redefining color green on input line 28. -Package color Info: Redefining color brown on input line 29. -Package color Info: Redefining color blue on input line 30. -Package color Info: Redefining color purple on input line 31. -Package color Info: Redefining color cyan on input line 32. -Package color Info: Redefining color lightgray on input line 33. -Package color Info: Redefining color darkgray on input line 36. -Package color Info: Redefining color lightred on input line 37. -Package color Info: Redefining color lightgreen on input line 38. -Package color Info: Redefining color lightblue on input line 39. -Package color Info: Redefining color lightpurple on input line 40. -Package color Info: Redefining color lightcyan on input line 41. - - -./02.tex:47: LaTeX Error: Command \Shaded already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.47 \newenvironment{Shaded}{}{} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:48: LaTeX Error: Command \KeywordTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.48 ...color[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:49: LaTeX Error: Command \DataTypeTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.49 ...[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:50: LaTeX Error: Command \DecValTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.50 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:51: LaTeX Error: Command \BaseNTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.51 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:52: LaTeX Error: Command \FloatTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.52 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:53: LaTeX Error: Command \CharTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.53 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:54: LaTeX Error: Command \StringTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.54 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:55: LaTeX Error: Command \CommentTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.55 ...color[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:56: LaTeX Error: Command \OtherTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.56 ...[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:57: LaTeX Error: Command \AlertTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.57 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:58: LaTeX Error: Command \FunctionTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.58 ...[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:59: LaTeX Error: Command \RegionMarkerTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.59 \newcommand{\RegionMarkerTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:60: LaTeX Error: Command \ErrorTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.60 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./02.tex:61: LaTeX Error: Command \NormalTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.61 \newcommand{\NormalTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -Package color Info: Redefining color incolor on input line 173. -Package color Info: Redefining color outcolor on input line 174. -Package hyperref Info: Option `breaklinks' set `true' on input line 188. - -Package hyperref Warning: Option `colorlinks' has already been used, -(hyperref) setting the option has no effect on input line 188. - - -./02.tex:192: LaTeX Error: Can be used only in preamble. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.192 \begin{document} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -[10] -LaTeX Font Info: Try loading font information for OMS+cmtt on input line 362. -LaTeX Font Info: No file OMScmtt.fd. on input line 362. - - -LaTeX Font Warning: Font shape `OMS/cmtt/m/n' undefined -(Font) using `OMS/cmsy/m/n' instead -(Font) for symbol `textbackslash' on input line 362. - -[11] [12] (./03.tex -Package color Info: Redefining color orange on input line 16. -Package color Info: Redefining color darkorange on input line 17. -Package color Info: Redefining color darkgreen on input line 18. -Package color Info: Redefining color myteal on input line 19. -Package color Info: Redefining color gray on input line 20. -Package color Info: Redefining color lightgray on input line 21. -Package color Info: Redefining color mediumgray on input line 22. -Package color Info: Redefining color inputbackground on input line 23. -Package color Info: Redefining color outputbackground on input line 24. -Package color Info: Redefining color traceback on input line 25. -Package color Info: Redefining color red on input line 27. -Package color Info: Redefining color green on input line 28. -Package color Info: Redefining color brown on input line 29. -Package color Info: Redefining color blue on input line 30. -Package color Info: Redefining color purple on input line 31. -Package color Info: Redefining color cyan on input line 32. -Package color Info: Redefining color lightgray on input line 33. -Package color Info: Redefining color darkgray on input line 36. -Package color Info: Redefining color lightred on input line 37. -Package color Info: Redefining color lightgreen on input line 38. -Package color Info: Redefining color lightblue on input line 39. -Package color Info: Redefining color lightpurple on input line 40. -Package color Info: Redefining color lightcyan on input line 41. - - -./03.tex:47: LaTeX Error: Command \Shaded already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.47 \newenvironment{Shaded}{}{} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:48: LaTeX Error: Command \KeywordTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.48 ...color[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:49: LaTeX Error: Command \DataTypeTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.49 ...[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:50: LaTeX Error: Command \DecValTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.50 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:51: LaTeX Error: Command \BaseNTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.51 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:52: LaTeX Error: Command \FloatTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.52 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:53: LaTeX Error: Command \CharTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.53 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:54: LaTeX Error: Command \StringTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.54 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:55: LaTeX Error: Command \CommentTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.55 ...color[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:56: LaTeX Error: Command \OtherTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.56 ...[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:57: LaTeX Error: Command \AlertTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.57 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:58: LaTeX Error: Command \FunctionTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.58 ...[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:59: LaTeX Error: Command \RegionMarkerTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.59 \newcommand{\RegionMarkerTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:60: LaTeX Error: Command \ErrorTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.60 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./03.tex:61: LaTeX Error: Command \NormalTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.61 \newcommand{\NormalTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -Package color Info: Redefining color incolor on input line 173. -Package color Info: Redefining color outcolor on input line 174. -Package hyperref Info: Option `breaklinks' set `true' on input line 188. - -Package hyperref Warning: Option `colorlinks' has already been used, -(hyperref) setting the option has no effect on input line 188. - - -./03.tex:195: LaTeX Error: Can be used only in preamble. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.195 \begin{document} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -[13] [14] [15] [16] [17] [18] [19] [20] [21] (./04.tex -Package color Info: Redefining color orange on input line 15. -Package color Info: Redefining color darkorange on input line 16. -Package color Info: Redefining color darkgreen on input line 17. -Package color Info: Redefining color myteal on input line 18. -Package color Info: Redefining color gray on input line 19. -Package color Info: Redefining color lightgray on input line 20. -Package color Info: Redefining color mediumgray on input line 21. -Package color Info: Redefining color inputbackground on input line 22. -Package color Info: Redefining color outputbackground on input line 23. -Package color Info: Redefining color traceback on input line 24. -Package color Info: Redefining color red on input line 26. -Package color Info: Redefining color green on input line 27. -Package color Info: Redefining color brown on input line 28. -Package color Info: Redefining color blue on input line 29. -Package color Info: Redefining color purple on input line 30. -Package color Info: Redefining color cyan on input line 31. -Package color Info: Redefining color lightgray on input line 32. -Package color Info: Redefining color darkgray on input line 35. -Package color Info: Redefining color lightred on input line 36. -Package color Info: Redefining color lightgreen on input line 37. -Package color Info: Redefining color lightblue on input line 38. -Package color Info: Redefining color lightpurple on input line 39. -Package color Info: Redefining color lightcyan on input line 40. - - -./04.tex:46: LaTeX Error: Command \Shaded already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.46 \newenvironment{Shaded}{}{} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:47: LaTeX Error: Command \KeywordTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.47 ...color[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:48: LaTeX Error: Command \DataTypeTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.48 ...[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:49: LaTeX Error: Command \DecValTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.49 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:50: LaTeX Error: Command \BaseNTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.50 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:51: LaTeX Error: Command \FloatTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.51 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:52: LaTeX Error: Command \CharTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.52 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:53: LaTeX Error: Command \StringTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.53 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:54: LaTeX Error: Command \CommentTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.54 ...color[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:55: LaTeX Error: Command \OtherTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.55 ...[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:56: LaTeX Error: Command \AlertTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.56 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:57: LaTeX Error: Command \FunctionTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.57 ...[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:58: LaTeX Error: Command \RegionMarkerTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.58 \newcommand{\RegionMarkerTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:59: LaTeX Error: Command \ErrorTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.59 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./04.tex:60: LaTeX Error: Command \NormalTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.60 \newcommand{\NormalTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -Package color Info: Redefining color incolor on input line 172. -Package color Info: Redefining color outcolor on input line 173. -Package hyperref Info: Option `breaklinks' set `true' on input line 187. - -Package hyperref Warning: Option `colorlinks' has already been used, -(hyperref) setting the option has no effect on input line 187. - - -./04.tex:192: LaTeX Error: Can be used only in preamble. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.192 \begin{document} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -[22] [23] [24] -LaTeX Font Info: Try loading font information for OMS+cmr on input line 577. - (/usr/local/texlive/2014/texmf-dist/tex/latex/base/omscmr.fd -File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available -(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 577. - [25] [26] [27] (./05.tex -Package color Info: Redefining color orange on input line 15. -Package color Info: Redefining color darkorange on input line 16. -Package color Info: Redefining color darkgreen on input line 17. -Package color Info: Redefining color myteal on input line 18. -Package color Info: Redefining color gray on input line 19. -Package color Info: Redefining color lightgray on input line 20. -Package color Info: Redefining color mediumgray on input line 21. -Package color Info: Redefining color inputbackground on input line 22. -Package color Info: Redefining color outputbackground on input line 23. -Package color Info: Redefining color traceback on input line 24. -Package color Info: Redefining color red on input line 26. -Package color Info: Redefining color green on input line 27. -Package color Info: Redefining color brown on input line 28. -Package color Info: Redefining color blue on input line 29. -Package color Info: Redefining color purple on input line 30. -Package color Info: Redefining color cyan on input line 31. -Package color Info: Redefining color lightgray on input line 32. -Package color Info: Redefining color darkgray on input line 35. -Package color Info: Redefining color lightred on input line 36. -Package color Info: Redefining color lightgreen on input line 37. -Package color Info: Redefining color lightblue on input line 38. -Package color Info: Redefining color lightpurple on input line 39. -Package color Info: Redefining color lightcyan on input line 40. - - -./05.tex:46: LaTeX Error: Command \Shaded already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.46 \newenvironment{Shaded}{}{} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:47: LaTeX Error: Command \KeywordTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.47 ...color[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:48: LaTeX Error: Command \DataTypeTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.48 ...[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:49: LaTeX Error: Command \DecValTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.49 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:50: LaTeX Error: Command \BaseNTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.50 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:51: LaTeX Error: Command \FloatTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.51 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:52: LaTeX Error: Command \CharTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.52 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:53: LaTeX Error: Command \StringTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.53 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:54: LaTeX Error: Command \CommentTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.54 ...color[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:55: LaTeX Error: Command \OtherTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.55 ...[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:56: LaTeX Error: Command \AlertTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.56 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:57: LaTeX Error: Command \FunctionTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.57 ...[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:58: LaTeX Error: Command \RegionMarkerTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.58 \newcommand{\RegionMarkerTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:59: LaTeX Error: Command \ErrorTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.59 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./05.tex:60: LaTeX Error: Command \NormalTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.60 \newcommand{\NormalTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -Package color Info: Redefining color incolor on input line 172. -Package color Info: Redefining color outcolor on input line 173. -Package hyperref Info: Option `breaklinks' set `true' on input line 187. - -Package hyperref Warning: Option `colorlinks' has already been used, -(hyperref) setting the option has no effect on input line 187. - - -./05.tex:193: LaTeX Error: Can be used only in preamble. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.193 \begin{document} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -[28] [29] [30] [31] (./06.tex -Package color Info: Redefining color orange on input line 15. -Package color Info: Redefining color darkorange on input line 16. -Package color Info: Redefining color darkgreen on input line 17. -Package color Info: Redefining color myteal on input line 18. -Package color Info: Redefining color gray on input line 19. -Package color Info: Redefining color lightgray on input line 20. -Package color Info: Redefining color mediumgray on input line 21. -Package color Info: Redefining color inputbackground on input line 22. -Package color Info: Redefining color outputbackground on input line 23. -Package color Info: Redefining color traceback on input line 24. -Package color Info: Redefining color red on input line 26. -Package color Info: Redefining color green on input line 27. -Package color Info: Redefining color brown on input line 28. -Package color Info: Redefining color blue on input line 29. -Package color Info: Redefining color purple on input line 30. -Package color Info: Redefining color cyan on input line 31. -Package color Info: Redefining color lightgray on input line 32. -Package color Info: Redefining color darkgray on input line 35. -Package color Info: Redefining color lightred on input line 36. -Package color Info: Redefining color lightgreen on input line 37. -Package color Info: Redefining color lightblue on input line 38. -Package color Info: Redefining color lightpurple on input line 39. -Package color Info: Redefining color lightcyan on input line 40. - - -./06.tex:46: LaTeX Error: Command \Shaded already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.46 \newenvironment{Shaded}{}{} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:47: LaTeX Error: Command \KeywordTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.47 ...color[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:48: LaTeX Error: Command \DataTypeTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.48 ...[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:49: LaTeX Error: Command \DecValTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.49 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:50: LaTeX Error: Command \BaseNTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.50 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:51: LaTeX Error: Command \FloatTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.51 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:52: LaTeX Error: Command \CharTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.52 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:53: LaTeX Error: Command \StringTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.53 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:54: LaTeX Error: Command \CommentTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.54 ...color[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:55: LaTeX Error: Command \OtherTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.55 ...[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:56: LaTeX Error: Command \AlertTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.56 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:57: LaTeX Error: Command \FunctionTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.57 ...[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:58: LaTeX Error: Command \RegionMarkerTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.58 \newcommand{\RegionMarkerTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:59: LaTeX Error: Command \ErrorTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.59 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./06.tex:60: LaTeX Error: Command \NormalTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.60 \newcommand{\NormalTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -Package color Info: Redefining color incolor on input line 172. -Package color Info: Redefining color outcolor on input line 173. -Package hyperref Info: Option `breaklinks' set `true' on input line 187. - -Package hyperref Warning: Option `colorlinks' has already been used, -(hyperref) setting the option has no effect on input line 187. - - -./06.tex:192: LaTeX Error: Can be used only in preamble. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.192 \begin{document} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -[32] [33] [34] [35] [36] [37] (./07.tex -Package color Info: Redefining color orange on input line 15. -Package color Info: Redefining color darkorange on input line 16. -Package color Info: Redefining color darkgreen on input line 17. -Package color Info: Redefining color myteal on input line 18. -Package color Info: Redefining color gray on input line 19. -Package color Info: Redefining color lightgray on input line 20. -Package color Info: Redefining color mediumgray on input line 21. -Package color Info: Redefining color inputbackground on input line 22. -Package color Info: Redefining color outputbackground on input line 23. -Package color Info: Redefining color traceback on input line 24. -Package color Info: Redefining color red on input line 26. -Package color Info: Redefining color green on input line 27. -Package color Info: Redefining color brown on input line 28. -Package color Info: Redefining color blue on input line 29. -Package color Info: Redefining color purple on input line 30. -Package color Info: Redefining color cyan on input line 31. -Package color Info: Redefining color lightgray on input line 32. -Package color Info: Redefining color darkgray on input line 35. -Package color Info: Redefining color lightred on input line 36. -Package color Info: Redefining color lightgreen on input line 37. -Package color Info: Redefining color lightblue on input line 38. -Package color Info: Redefining color lightpurple on input line 39. -Package color Info: Redefining color lightcyan on input line 40. - - -./07.tex:46: LaTeX Error: Command \Shaded already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.46 \newenvironment{Shaded}{}{} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:47: LaTeX Error: Command \KeywordTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.47 ...color[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:48: LaTeX Error: Command \DataTypeTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.48 ...[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:49: LaTeX Error: Command \DecValTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.49 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:50: LaTeX Error: Command \BaseNTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.50 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:51: LaTeX Error: Command \FloatTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.51 ...[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:52: LaTeX Error: Command \CharTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.52 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:53: LaTeX Error: Command \StringTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.53 ...[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:54: LaTeX Error: Command \CommentTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.54 ...color[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:55: LaTeX Error: Command \OtherTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.55 ...[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:56: LaTeX Error: Command \AlertTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.56 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:57: LaTeX Error: Command \FunctionTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.57 ...[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:58: LaTeX Error: Command \RegionMarkerTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.58 \newcommand{\RegionMarkerTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:59: LaTeX Error: Command \ErrorTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.59 ...color[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - - -./07.tex:60: LaTeX Error: Command \NormalTok already defined. - Or name \end... illegal, see p.192 of the manual. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.60 \newcommand{\NormalTok}[1]{{#1}} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -Package color Info: Redefining color incolor on input line 172. -Package color Info: Redefining color outcolor on input line 173. -Package hyperref Info: Option `breaklinks' set `true' on input line 187. - -Package hyperref Warning: Option `colorlinks' has already been used, -(hyperref) setting the option has no effect on input line 187. - - -./07.tex:192: LaTeX Error: Can be used only in preamble. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.192 \begin{document} - -Your command was ignored. -Type I to replace it with another command, -or to continue without it. - -[38] [39] [40] [41] [42] -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 748. - [43] -Package atveryend Info: Empty hook `AfterLastShipout' on input line 748. - (/Users/rajathkumar/Github/pythonclass/tex/.texpadtmp/00.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 748. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 748. -Package rerunfilecheck Info: File `00.out' has not changed. -(rerunfilecheck) Checksum: . - - -LaTeX Font Warning: Some font shapes were not available, defaults substituted. - - -LaTeX Warning: There were multiply-defined labels. - -Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 748. - ) ) ) ) ) ) ) ) -(\end occurred inside a group at level 7) - -### semi simple group (level 7) entered at line 192 (\begingroup) -### semi simple group (level 6) entered at line 192 (\begingroup) -### semi simple group (level 5) entered at line 193 (\begingroup) -### semi simple group (level 4) entered at line 192 (\begingroup) -### semi simple group (level 3) entered at line 195 (\begingroup) -### semi simple group (level 2) entered at line 192 (\begingroup) -### semi simple group (level 1) entered at line 196 (\begingroup) -### bottom level -Here is how much of TeX's memory you used: - 8481 strings out of 493117 - 125919 string characters out of 6135433 - 248616 words of memory out of 5000000 - 11656 multiletter control sequences out of 15000+600000 - 12484 words of font info for 49 fonts, out of 8000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 36i,6n,35p,617b,2376s stack positions out of 5000i,500n,10000p,200000b,80000s - -Output written on /Users/rajathkumar/Github/pythonclass/tex/.texpadtmp/00.pdf (44 pages, 223221 bytes). -PDF statistics: - 551 PDF objects out of 1000 (max. 8388607) - 489 compressed objects within 5 object streams - 107 named destinations out of 1000 (max. 500000) - 449 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/tex/.texpadtmp/00.out b/tex/.texpadtmp/00.out deleted file mode 100644 index 025d507..0000000 --- a/tex/.texpadtmp/00.out +++ /dev/null @@ -1,56 +0,0 @@ -\BOOKMARK [1][-]{section.1}{Python}{}% 1 -\BOOKMARK [2][-]{subsection.1.1}{Introduction}{section.1}% 2 -\BOOKMARK [2][-]{subsection.1.2}{Installation}{section.1}% 3 -\BOOKMARK [3][-]{subsubsection.1.2.1}{Installation from unofficial distributions}{subsection.1.2}% 4 -\BOOKMARK [2][-]{subsection.1.3}{Launching IPython Notebook}{section.1}% 5 -\BOOKMARK [2][-]{subsection.1.4}{How to learn from this resource?}{section.1}% 6 -\BOOKMARK [2][-]{subsection.1.5}{License}{section.1}% 7 -\BOOKMARK [1][-]{section.2}{The Zen Of Python}{}% 8 -\BOOKMARK [1][-]{section.3}{Variables}{}% 9 -\BOOKMARK [1][-]{section.4}{Operators}{}% 10 -\BOOKMARK [2][-]{subsection.4.1}{Arithmetic Operators}{section.4}% 11 -\BOOKMARK [2][-]{subsection.4.2}{Relational Operators}{section.4}% 12 -\BOOKMARK [2][-]{subsection.4.3}{Bitwise Operators}{section.4}% 13 -\BOOKMARK [1][-]{section.5}{Built-in Functions}{}% 14 -\BOOKMARK [2][-]{subsection.5.1}{Conversion from one system to another}{section.5}% 15 -\BOOKMARK [2][-]{subsection.5.2}{Simplifying Arithmetic Operations}{section.5}% 16 -\BOOKMARK [2][-]{subsection.5.3}{Accepting User Inputs}{section.5}% 17 -\BOOKMARK [1][-]{section.6}{Print Statement}{}% 18 -\BOOKMARK [2][-]{subsection.6.1}{Other Examples}{section.6}% 19 -\BOOKMARK [1][-]{section.7}{PrecisionWidth and FieldWidth}{}% 20 -\BOOKMARK [1][-]{section.8}{Data Structures}{}% 21 -\BOOKMARK [2][-]{subsection.8.1}{Lists}{section.8}% 22 -\BOOKMARK [3][-]{subsubsection.8.1.1}{Indexing}{subsection.8.1}% 23 -\BOOKMARK [3][-]{subsubsection.8.1.2}{Slicing}{subsection.8.1}% 24 -\BOOKMARK [3][-]{subsubsection.8.1.3}{Built in List Functions}{subsection.8.1}% 25 -\BOOKMARK [3][-]{subsubsection.8.1.4}{Copying a list}{subsection.8.1}% 26 -\BOOKMARK [2][-]{subsection.8.2}{Tuples}{section.8}% 27 -\BOOKMARK [3][-]{subsubsection.8.2.1}{Mapping one tuple to another}{subsection.8.2}% 28 -\BOOKMARK [3][-]{subsubsection.8.2.2}{Built In Tuple functions}{subsection.8.2}% 29 -\BOOKMARK [2][-]{subsection.8.3}{Sets}{section.8}% 30 -\BOOKMARK [3][-]{subsubsection.8.3.1}{Built-in Functions}{subsection.8.3}% 31 -\BOOKMARK [2][-]{subsection.8.4}{Strings}{section.8}% 32 -\BOOKMARK [3][-]{subsubsection.8.4.1}{Built-in Functions}{subsection.8.4}% 33 -\BOOKMARK [2][-]{subsection.8.5}{Dictionaries}{section.8}% 34 -\BOOKMARK [3][-]{subsubsection.8.5.1}{Built-in Functions}{subsection.8.5}% 35 -\BOOKMARK [1][-]{section.9}{Control Flow Statements}{}% 36 -\BOOKMARK [2][-]{subsection.9.1}{If}{section.9}% 37 -\BOOKMARK [2][-]{subsection.9.2}{If-else}{section.9}% 38 -\BOOKMARK [2][-]{subsection.9.3}{if-elif}{section.9}% 39 -\BOOKMARK [2][-]{subsection.9.4}{Loops}{section.9}% 40 -\BOOKMARK [3][-]{subsubsection.9.4.1}{For}{subsection.9.4}% 41 -\BOOKMARK [3][-]{subsubsection.9.4.2}{While}{subsection.9.4}% 42 -\BOOKMARK [2][-]{subsection.9.5}{Break}{section.9}% 43 -\BOOKMARK [2][-]{subsection.9.6}{Continue}{section.9}% 44 -\BOOKMARK [2][-]{subsection.9.7}{List Comprehensions}{section.9}% 45 -\BOOKMARK [1][-]{section.10}{Functions}{}% 46 -\BOOKMARK [2][-]{subsection.10.1}{Return Statement}{section.10}% 47 -\BOOKMARK [2][-]{subsection.10.2}{Implicit arguments}{section.10}% 48 -\BOOKMARK [2][-]{subsection.10.3}{Any number of arguments}{section.10}% 49 -\BOOKMARK [2][-]{subsection.10.4}{Global and Local Variables}{section.10}% 50 -\BOOKMARK [2][-]{subsection.10.5}{Lambda Functions}{section.10}% 51 -\BOOKMARK [3][-]{subsubsection.10.5.1}{map}{subsection.10.5}% 52 -\BOOKMARK [3][-]{subsubsection.10.5.2}{filter}{subsection.10.5}% 53 -\BOOKMARK [1][-]{section.11}{Classes}{}% 54 -\BOOKMARK [2][-]{subsection.11.1}{Inheritance}{section.11}% 55 -\BOOKMARK [1][-]{section.12}{Where to go from here?}{}% 56 diff --git a/tex/.texpadtmp/00.synctex.gz b/tex/.texpadtmp/00.synctex.gz deleted file mode 100644 index 7755c9817a782a8a178ca7a0e53a553534ff441c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231892 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%0A{43SG>un+6*T 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.10 - \usepackage{booktabs} % table support for pandoc > 1.12.2 - - - - - \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} - \definecolor{darkorange}{rgb}{.71,0.21,0.01} - \definecolor{darkgreen}{rgb}{.12,.54,.11} - \definecolor{myteal}{rgb}{.26, .44, .56} - \definecolor{gray}{gray}{0.45} - \definecolor{lightgray}{gray}{.95} - \definecolor{mediumgray}{gray}{.8} - \definecolor{inputbackground}{rgb}{.95, .95, .85} - \definecolor{outputbackground}{rgb}{.95, .95, .95} - \definecolor{traceback}{rgb}{1, .95, .95} - % ansi colors - \definecolor{red}{rgb}{.6,0,0} - \definecolor{green}{rgb}{0,.65,0} - \definecolor{brown}{rgb}{0.6,0.6,0} - \definecolor{blue}{rgb}{0,.145,.698} - \definecolor{purple}{rgb}{.698,.145,.698} - \definecolor{cyan}{rgb}{0,.698,.698} - \definecolor{lightgray}{gray}{0.5} - - % bright ansi colors - \definecolor{darkgray}{gray}{0.25} - \definecolor{lightred}{rgb}{1.0,0.39,0.28} - \definecolor{lightgreen}{rgb}{0.48,0.99,0.0} - \definecolor{lightblue}{rgb}{0.53,0.81,0.92} - \definecolor{lightpurple}{rgb}{0.87,0.63,0.87} - \definecolor{lightcyan}{rgb}{0.5,1.0,0.83} - - % commands and environments needed by pandoc snippets - % extracted from the output of `pandoc -s` - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} - % Add ',fontsize=\small' for more characters per line - \newenvironment{Shaded}{}{} - \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - \newcommand{\RegionMarkerTok}[1]{{#1}} - \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\NormalTok}[1]{{#1}} - - % Define a nice break command that doesn't care if a line doesn't already - % exist. - \def\br{\hspace*{\fill} \\* } - % Math Jax compatability definitions - \def\gt{>} - \def\lt{<} - % Document parameters - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - \geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in} - - - - \begin{document} - -\begin{titlepage} - \title{\Huge{Get Started with Python}} - \author{Rajath Kumar M.P. \\ \\ Department of Electronics and Communication Engineering \\ RNS Institute of Technology, Bangalore \\ \\rajathkumar.exe@gmail.com} - \date{} - \maketitle - \thispagestyle{empty} -\end{titlepage} - - - - - - \tableofcontents - - \newpage - - - - \section{Python}\label{python} - - \subsection{Introduction}\label{introduction} - - Python is a modern, robust, high level programming language. It is very -easy to pick up even if you are completely new to programming. - - \subsection{Installation}\label{installation} - - Mac OS X and Linux comes pre installed with python. Windows users can -download python from https://www.python.org/downloads/ . - -To install IPython run, - -\begin{verbatim} -$ pip install ipython[all] -\end{verbatim} - -This will install all the necessary dependencies for the notebook, -qtconsole, tests etc. - - \subsubsection{Installation from unofficial -distributions}\label{installation-from-unofficial-distributions} - - Installing all the necessary libraries might prove troublesome. Anaconda -and Canopy comes pre packaged with all the necessary python libraries -and also IPython. - - \paragraph{Anaconda}\label{anaconda} - - Download Anaconda from https://www.continuum.io/downloads - -Anaconda is completely free and includes more than 300 python packages. -Both python 2.7 and 3.4 options are available. - - \paragraph{Canopy}\label{canopy} - - Download Canopy from https://store.enthought.com/downloads/\#default - -Canopy has a premium version which offers 300+ python packages. But the -free version works just fine. Canopy as of now supports only 2.7 but it -comes with its own text editor and IPython environment. - - \subsection{Launching IPython -Notebook}\label{launching-ipython-notebook} - - From the terminal - -\begin{verbatim} -ipython notebook -\end{verbatim} - -In Canopy and Anaconda, Open the respective terminals and execute the -above. - - \subsection{How to learn from this -resource?}\label{how-to-learn-from-this-resource} - - Download all the ipython notebooks from this repository -https://github.com/rajathkumarmp/Python-Lectures - -Launch ipython notebook from the folder which contains the notebooks. -Open each one of them - -\begin{verbatim} -Cell > All Output > Clear -\end{verbatim} - -This will clear all the outputs and now you can understand each -statement and learn interactively. - - \subsection{License}\label{license} - - This work is licensed under the Creative Commons Attribution 3.0 -Unported License. To view a copy of this license, visit -http://creativecommons.org/licenses/by/3.0/ - - - % Add a bibliography block to the postdoc - - \newpage - - \input{01} - - - \end{document} diff --git a/tex/01.tex b/tex/01.tex deleted file mode 100644 index 225a5e0..0000000 --- a/tex/01.tex +++ /dev/null @@ -1,702 +0,0 @@ - -% Default to the notebook output style - - - - -% Inherit from the specified cell style. - - - - - - - - - - - \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} - \definecolor{darkorange}{rgb}{.71,0.21,0.01} - \definecolor{darkgreen}{rgb}{.12,.54,.11} - \definecolor{myteal}{rgb}{.26, .44, .56} - \definecolor{gray}{gray}{0.45} - \definecolor{lightgray}{gray}{.95} - \definecolor{mediumgray}{gray}{.8} - \definecolor{inputbackground}{rgb}{.95, .95, .85} - \definecolor{outputbackground}{rgb}{.95, .95, .95} - \definecolor{traceback}{rgb}{1, .95, .95} - % ansi colors - \definecolor{red}{rgb}{.6,0,0} - \definecolor{green}{rgb}{0,.65,0} - \definecolor{brown}{rgb}{0.6,0.6,0} - \definecolor{blue}{rgb}{0,.145,.698} - \definecolor{purple}{rgb}{.698,.145,.698} - \definecolor{cyan}{rgb}{0,.698,.698} - \definecolor{lightgray}{gray}{0.5} - - % bright ansi colors - \definecolor{darkgray}{gray}{0.25} - \definecolor{lightred}{rgb}{1.0,0.39,0.28} - \definecolor{lightgreen}{rgb}{0.48,0.99,0.0} - \definecolor{lightblue}{rgb}{0.53,0.81,0.92} - \definecolor{lightpurple}{rgb}{0.87,0.63,0.87} - \definecolor{lightcyan}{rgb}{0.5,1.0,0.83} - - % commands and environments needed by pandoc snippets - % extracted from the output of `pandoc -s` - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} - % Add ',fontsize=\small' for more characters per line - \newenvironment{Shaded}{}{} - \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - \newcommand{\RegionMarkerTok}[1]{{#1}} - \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\NormalTok}[1]{{#1}} - - % Define a nice break command that doesn't care if a line doesn't already - % exist. - \def\br{\hspace*{\fill} \\* } - % Math Jax compatability definitions - \def\gt{>} - \def\lt{<} - % Document parameters - \title{} - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - - - - \begin{document} - - - \maketitle - - - - - \section{The Zen Of Python}\label{the-zen-of-python} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}1}]:} \PY{k+kn}{import} \PY{n+nn}{this} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -The Zen of Python, by Tim Peters - -Beautiful is better than ugly. -Explicit is better than implicit. -Simple is better than complex. -Complex is better than complicated. -Flat is better than nested. -Sparse is better than dense. -Readability counts. -Special cases aren't special enough to break the rules. -Although practicality beats purity. -Errors should never pass silently. -Unless explicitly silenced. -In the face of ambiguity, refuse the temptation to guess. -There should be one-- and preferably only one --obvious way to do it. -Although that way may not be obvious at first unless you're Dutch. -Now is better than never. -Although never is often better than *right* now. -If the implementation is hard to explain, it's a bad idea. -If the implementation is easy to explain, it may be a good idea. -Namespaces are one honking great idea -- let's do more of those! - \end{Verbatim} - - \section{Variables}\label{variables} - - A name that is used to denote something or a value is called a variable. -In python, variables can be declared and values can be assigned to it as -follows, - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}2}]:} \PY{n}{x} \PY{o}{=} \PY{l+m+mi}{2} - \PY{n}{y} \PY{o}{=} \PY{l+m+mi}{5} - \PY{n}{xy} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{Hey}\PY{l+s}{\PYZsq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}3}]:} \PY{k}{print} \PY{n}{x}\PY{o}{+}\PY{n}{y}\PY{p}{,} \PY{n}{xy} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -7 Hey - \end{Verbatim} - - Multiple variables can be assigned with the same value. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}4}]:} \PY{n}{x} \PY{o}{=} \PY{n}{y} \PY{o}{=} \PY{l+m+mi}{1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}5}]:} \PY{k}{print} \PY{n}{x}\PY{p}{,}\PY{n}{y} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -1 1 - \end{Verbatim} - - \section{Operators}\label{operators} - - \subsection{Arithmetic Operators}\label{arithmetic-operators} - - \begin{longtable}[c]{@{}ll@{}} -\toprule -Symbol & Task Performed\tabularnewline -\midrule -\endhead -+ & Addition\tabularnewline -- & Subtraction\tabularnewline -/ & division\tabularnewline -\% & mod\tabularnewline -* & multiplication\tabularnewline -// & floor division\tabularnewline -** & to the power of\tabularnewline -\bottomrule -\end{longtable} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}6}]:} \PY{l+m+mi}{1}\PY{o}{+}\PY{l+m+mi}{2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}6}]:} 3 -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}7}]:} \PY{l+m+mi}{2}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}7}]:} 1 -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}8}]:} \PY{l+m+mi}{1}\PY{o}{*}\PY{l+m+mi}{2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}8}]:} 2 -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}9}]:} \PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}9}]:} 0 -\end{Verbatim} - - 0? This is because both the numerator and denominator are integers but -the result is a float value hence an integer value is returned. By -changing either the numerator or the denominator to float, correct -answer can be obtained. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}10}]:} \PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mf}{2.0} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}10}]:} 0.5 -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}11}]:} \PY{l+m+mi}{15}\PY{o}{\PYZpc{}}\PY{k}{10} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}11}]:} 5 -\end{Verbatim} - - Floor division is nothing but converting the result so obtained to the -nearest integer. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}12}]:} \PY{l+m+mf}{2.8}\PY{o}{/}\PY{o}{/}\PY{l+m+mf}{2.0} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}12}]:} 1.0 -\end{Verbatim} - - \subsection{Relational Operators}\label{relational-operators} - - \begin{longtable}[c]{@{}ll@{}} -\toprule -Symbol & Task Performed\tabularnewline -\midrule -\endhead -== & True, if it is equal\tabularnewline -!= & True, if not equal to\tabularnewline -\textless{} & less than\tabularnewline -\textgreater{} & greater than\tabularnewline -\textless{}= & less than or equal to\tabularnewline -\textgreater{}= & greater than or equal to\tabularnewline -\bottomrule -\end{longtable} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}13}]:} \PY{n}{z} \PY{o}{=} \PY{l+m+mi}{1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}14}]:} \PY{n}{z} \PY{o}{==} \PY{l+m+mi}{1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}14}]:} True -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}15}]:} \PY{n}{z} \PY{o}{\PYZgt{}} \PY{l+m+mi}{1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}15}]:} False -\end{Verbatim} - - \subsection{Bitwise Operators}\label{bitwise-operators} - - \begin{longtable}[c]{@{}ll@{}} -\toprule -Symbol & Task Performed\tabularnewline -\midrule -\endhead -\& & Logical And\tabularnewline -l & Logical OR\tabularnewline -\^{} & XOR\tabularnewline -\textasciitilde{} & Negate\tabularnewline -\textgreater{}\textgreater{} & Right shift\tabularnewline -\textless{}\textless{} & Left shift\tabularnewline -\bottomrule -\end{longtable} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}16}]:} \PY{n}{a} \PY{o}{=} \PY{l+m+mi}{2} \PY{c}{\PYZsh{}10} - \PY{n}{b} \PY{o}{=} \PY{l+m+mi}{3} \PY{c}{\PYZsh{}11} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}17}]:} \PY{k}{print} \PY{n}{a} \PY{o}{\PYZam{}} \PY{n}{b} - \PY{k}{print} \PY{n+nb}{bin}\PY{p}{(}\PY{n}{a}\PY{o}{\PYZam{}}\PY{n}{b}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -2 -0b10 - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}18}]:} \PY{l+m+mi}{5} \PY{o}{\PYZgt{}\PYZgt{}} \PY{l+m+mi}{1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}18}]:} 2 -\end{Verbatim} - - 0000 0101 -\textgreater{} 5 - -Shifting the digits by 1 to the right and zero padding - -0000 0010 -\textgreater{} 2 - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}19}]:} \PY{l+m+mi}{5} \PY{o}{\PYZlt{}\PYZlt{}} \PY{l+m+mi}{1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}19}]:} 10 -\end{Verbatim} - - 0000 0101 -\textgreater{} 5 - -Shifting the digits by 1 to the left and zero padding - -0000 1010 -\textgreater{} 10 - - \section{Built-in Functions}\label{built-in-functions} - - Python comes loaded with pre-built functions - - \subsection{Conversion from one system to -another}\label{conversion-from-one-system-to-another} - - Conversion from hexadecimal to decimal is done by adding prefix -\textbf{0x} to the hexadecimal value or vice versa by using built in -\textbf{hex( )}, Octal to decimal by adding prefix \textbf{0} to the -octal value or vice versa by using built in function \textbf{oct( )}. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}20}]:} \PY{n+nb}{hex}\PY{p}{(}\PY{l+m+mi}{170}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}20}]:} '0xaa' -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}21}]:} \PY{l+m+mh}{0xAA} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}21}]:} 170 -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}22}]:} \PY{n+nb}{oct}\PY{p}{(}\PY{l+m+mi}{8}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}22}]:} '010' -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}23}]:} \PY{l+m+mo}{010} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}23}]:} 8 -\end{Verbatim} - - \textbf{int( )} accepts two values when used for conversion, one is the -value in a different number system and the other is its base. Note that -input number in the different number system should be of string type. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}24}]:} \PY{k}{print} \PY{n+nb}{int}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{010}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{int}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{0xaa}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{16}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{int}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{1010}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -8 -170 -10 - \end{Verbatim} - - \textbf{int( )} can also be used to get only the integer value of a -float number or can be used to convert a number which is of type string -to integer format. Similarly, the function \textbf{str( )} can be used -to convert the integer back to string format - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}25}]:} \PY{k}{print} \PY{n+nb}{int}\PY{p}{(}\PY{l+m+mf}{7.7}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{int}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{7}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -7 -7 - \end{Verbatim} - - Also note that function \textbf{bin( )} is used for binary and -\textbf{float( )} for decimal/float values. \textbf{chr( )} is used for -converting ASCII to its alphabet equivalent, \textbf{ord( )} is used for -the other way round. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}26}]:} \PY{n+nb}{chr}\PY{p}{(}\PY{l+m+mi}{98}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}26}]:} 'b' -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}27}]:} \PY{n+nb}{ord}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{b}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}27}]:} 98 -\end{Verbatim} - - \subsection{Simplifying Arithmetic -Operations}\label{simplifying-arithmetic-operations} - - \textbf{round( )} function rounds the input value to a specified number -of places or to the nearest integer. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}28}]:} \PY{k}{print} \PY{n+nb}{round}\PY{p}{(}\PY{l+m+mf}{5.6231}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{round}\PY{p}{(}\PY{l+m+mf}{4.55892}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -6.0 -4.56 - \end{Verbatim} - - \textbf{complex( )} is used to define a complex number and \textbf{abs( -)} outputs the absolute value of the same. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}29}]:} \PY{n}{c} \PY{o}{=}\PY{n+nb}{complex}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{5+2j}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{abs}\PY{p}{(}\PY{n}{c}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -5.38516480713 - \end{Verbatim} - - \textbf{divmod(x,y)} outputs the quotient and the remainder in a -tuple(you will be learning about it in the further chapters) in the -format (quotient, remainder). - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}30}]:} \PY{n+nb}{divmod}\PY{p}{(}\PY{l+m+mi}{9}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}30}]:} (4, 1) -\end{Verbatim} - - \textbf{isinstance( )} returns True, if the first argument is an -instance of that class. Multiple classes can also be checked at once. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}31}]:} \PY{k}{print} \PY{n+nb}{isinstance}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,} \PY{n+nb}{int}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{isinstance}\PY{p}{(}\PY{l+m+mf}{1.0}\PY{p}{,}\PY{n+nb}{int}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{isinstance}\PY{p}{(}\PY{l+m+mf}{1.0}\PY{p}{,}\PY{p}{(}\PY{n+nb}{int}\PY{p}{,}\PY{n+nb}{float}\PY{p}{)}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -True -False -True - \end{Verbatim} - - \textbf{cmp(x,y)} - -\begin{longtable}[c]{@{}ll@{}} -\toprule -x ? y & Output\tabularnewline -\midrule -\endhead -x \textless{} y & -1\tabularnewline -x == y & 0\tabularnewline -x \textgreater{} y & 1\tabularnewline -\bottomrule -\end{longtable} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}32}]:} \PY{k}{print} \PY{n+nb}{cmp}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{cmp}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{cmp}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] --1 -1 -0 - \end{Verbatim} - - \textbf{pow(x,y,z)} can be used to find the power \(x^y\) also the mod -of the resulting value with the third specified number can be found i.e. -: (\(x^y\) \% z). - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}33}]:} \PY{k}{print} \PY{n+nb}{pow}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{pow}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -27 -2 - \end{Verbatim} - - \textbf{range( )} function outputs the integers of the specified range. -It can also be used to generate a series by specifying the difference -between the two numbers within a particular range. The elements are -returned in a list (will be discussing in detail later.) - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}34}]:} \PY{k}{print} \PY{n+nb}{range}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{range}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{9}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{range}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{27}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[0, 1, 2] -[2, 3, 4, 5, 6, 7, 8] -[2, 10, 18, 26] - \end{Verbatim} - - \subsection{Accepting User Inputs}\label{accepting-user-inputs} - - \textbf{raw\_input( )} accepts input and stores it as a string. Hence, -if the user inputs a integer, the code should convert the string to an -integer and then proceed. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}35}]:} \PY{n}{abc} \PY{o}{=} \PY{n+nb}{raw\PYZus{}input}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Type something here and it will be stored in variable abc }\PY{l+s+se}{\PYZbs{}t}\PY{l+s}{\PYZdq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Type something here and it will be stored in variable abc Hey - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}36}]:} \PY{n+nb}{type}\PY{p}{(}\PY{n}{abc}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}36}]:} str -\end{Verbatim} - - \textbf{input( )}, this is used only for accepting only integer inputs. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}37}]:} \PY{n}{abc1} \PY{o}{=} \PY{n+nb}{input}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Only integer can be stored in in variable abc }\PY{l+s+se}{\PYZbs{}t}\PY{l+s}{\PYZdq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Only integer can be stored in in variable abc 275 - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}38}]:} \PY{n+nb}{type}\PY{p}{(}\PY{n}{abc1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}38}]:} int -\end{Verbatim} - - Note that \textbf{type( )} returns the format or the type of a variable -or a number - - - % Add a bibliography block to the postdoc - \newpage - - \input{02} - - \end{document} diff --git a/tex/02.tex b/tex/02.tex deleted file mode 100644 index 0096ffd..0000000 --- a/tex/02.tex +++ /dev/null @@ -1,473 +0,0 @@ - -% Default to the notebook output style - - - - -% Inherit from the specified cell style. - - - - - - - - - \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} - \definecolor{darkorange}{rgb}{.71,0.21,0.01} - \definecolor{darkgreen}{rgb}{.12,.54,.11} - \definecolor{myteal}{rgb}{.26, .44, .56} - \definecolor{gray}{gray}{0.45} - \definecolor{lightgray}{gray}{.95} - \definecolor{mediumgray}{gray}{.8} - \definecolor{inputbackground}{rgb}{.95, .95, .85} - \definecolor{outputbackground}{rgb}{.95, .95, .95} - \definecolor{traceback}{rgb}{1, .95, .95} - % ansi colors - \definecolor{red}{rgb}{.6,0,0} - \definecolor{green}{rgb}{0,.65,0} - \definecolor{brown}{rgb}{0.6,0.6,0} - \definecolor{blue}{rgb}{0,.145,.698} - \definecolor{purple}{rgb}{.698,.145,.698} - \definecolor{cyan}{rgb}{0,.698,.698} - \definecolor{lightgray}{gray}{0.5} - - % bright ansi colors - \definecolor{darkgray}{gray}{0.25} - \definecolor{lightred}{rgb}{1.0,0.39,0.28} - \definecolor{lightgreen}{rgb}{0.48,0.99,0.0} - \definecolor{lightblue}{rgb}{0.53,0.81,0.92} - \definecolor{lightpurple}{rgb}{0.87,0.63,0.87} - \definecolor{lightcyan}{rgb}{0.5,1.0,0.83} - - % commands and environments needed by pandoc snippets - % extracted from the output of `pandoc -s` - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} - % Add ',fontsize=\small' for more characters per line - \newenvironment{Shaded}{}{} - \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - \newcommand{\RegionMarkerTok}[1]{{#1}} - \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\NormalTok}[1]{{#1}} - - % Define a nice break command that doesn't care if a line doesn't already - % exist. - \def\br{\hspace*{\fill} \\* } - % Math Jax compatability definitions - \def\gt{>} - \def\lt{<} - % Document parameters - \title{} - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - - \begin{document} - - - \maketitle - - - - - \section{Print Statement}\label{print-statement} - - The \textbf{print} statement can be used in the following different ways -: - -\begin{verbatim} -- print "Hello World" -- print "Hello", -- print "Hello" + -- print "Hello %s" % -\end{verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}1}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hello World}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hello World - \end{Verbatim} - - In Python, single, double and triple quotes are used to denote a string. -Most use single quotes when declaring a single character. Double quotes -when declaring a line and triple quotes when declaring a -paragraph/multiple lines. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}2}]:} \PY{k}{print} \PY{l+s}{\PYZsq{}}\PY{l+s}{Hey}\PY{l+s}{\PYZsq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hey - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}3}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}\PYZdq{}\PYZdq{}}\PY{l+s}{My name is Rajath Kumar M.P.} - - \PY{l+s}{I love Python.}\PY{l+s}{\PYZdq{}\PYZdq{}\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -My name is Rajath Kumar M.P. - -I love Python. - \end{Verbatim} - - Strings can be assigned to variable say \emph{string1} and -\emph{string2} which can called when using the print statement. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}4}]:} \PY{n}{string1} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{World}\PY{l+s}{\PYZsq{}} - \PY{k}{print} \PY{l+s}{\PYZsq{}}\PY{l+s}{Hello}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{n}{string1} - - \PY{n}{string2} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{!}\PY{l+s}{\PYZsq{}} - \PY{k}{print} \PY{l+s}{\PYZsq{}}\PY{l+s}{Hello}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{n}{string1}\PY{p}{,} \PY{n}{string2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hello World -Hello World ! - \end{Verbatim} - - String concatenation is the ``addition'' of two strings. Observe that -while concatenating there will be no space between the strings. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}5}]:} \PY{k}{print} \PY{l+s}{\PYZsq{}}\PY{l+s}{Hello}\PY{l+s}{\PYZsq{}} \PY{o}{+} \PY{n}{string1} \PY{o}{+} \PY{n}{string2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -HelloWorld! - \end{Verbatim} - - \textbf{\%s} is used to refer to a variable which contains a string. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}6}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hello }\PY{l+s+si}{\PYZpc{}s}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{n}{string1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hello World - \end{Verbatim} - - Similarly, when using other data types - -\begin{verbatim} -- %s -> string -- %d -> Integer -- %f -> Float -- %o -> Octal -- %x -> Hexadecimal -- %e -> exponential -\end{verbatim} - -This can be used for conversions inside the print statement itself. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}7}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Actual Number = }\PY{l+s+si}{\PYZpc{}d}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{k}{18} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Float of the number = }\PY{l+s+si}{\PYZpc{}f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{k}{18} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Octal equivalent of the number = }\PY{l+s+si}{\PYZpc{}o}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{k}{18} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hexadecimal equivalent of the number = }\PY{l+s+si}{\PYZpc{}x}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{k}{18} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Exponential equivalent of the number = }\PY{l+s+si}{\PYZpc{}e}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{k}{18} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Actual Number = 18 -Float of the number = 18.000000 -Octal equivalent of the number = 22 -Hexadecimal equivalent of the number = 12 -Exponential equivalent of the number = 1.800000e+01 - \end{Verbatim} - - When referring to multiple variables parenthesis is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}8}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hello }\PY{l+s+si}{\PYZpc{}s}\PY{l+s}{ }\PY{l+s+si}{\PYZpc{}s}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{p}{(}\PY{n}{string1}\PY{p}{,}\PY{n}{string2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hello World ! - \end{Verbatim} - - \subsection{Other Examples}\label{other-examples} - - The following are other different ways the print statement can be put to -use. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}9}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{I want }\PY{l+s+si}{\PYZpc{}\PYZpc{}}\PY{l+s}{d to be printed }\PY{l+s+si}{\PYZpc{}s}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{l+s}{\PYZsq{}}\PY{l+s}{here}\PY{l+s}{\PYZsq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -I want \%d to be printed here - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}10}]:} \PY{k}{print} \PY{l+s}{\PYZsq{}}\PY{l+s}{\PYZus{}A}\PY{l+s}{\PYZsq{}}\PY{o}{*}\PY{l+m+mi}{10} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -\_A\_A\_A\_A\_A\_A\_A\_A\_A\_A - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}11}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Jan}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{Feb}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{Mar}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{Apr}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{May}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{Jun}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{Jul}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{Aug}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Jan -Feb -Mar -Apr -May -Jun -Jul -Aug - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}12}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{I want }\PY{l+s+se}{\PYZbs{}\PYZbs{}}\PY{l+s}{n to be printed.}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -I want \textbackslash{}n to be printed. - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}13}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}\PYZdq{}\PYZdq{}} - \PY{l+s}{Routine:} - \PY{l+s+se}{\PYZbs{}t}\PY{l+s}{\PYZhy{} Eat} - \PY{l+s+se}{\PYZbs{}t}\PY{l+s}{\PYZhy{} Sleep}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+se}{\PYZbs{}t}\PY{l+s}{\PYZhy{} Repeat} - \PY{l+s}{\PYZdq{}\PYZdq{}\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Routine: - - Eat - - Sleep - - Repeat - \end{Verbatim} - - \section{PrecisionWidth and -FieldWidth}\label{precisionwidth-and-fieldwidth} - - Fieldwidth is the width of the entire number and precision is the width -towards the right. One can alter these widths based on the requirements. - -The default Precision Width is set to 6. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}14}]:} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{}f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{l+m+mf}{3.121312312312} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}14}]:} '3.121312' -\end{Verbatim} - - Notice upto 6 decimal points are returned. To specify the number of -decimal points, `\%(fieldwidth).(precisionwidth)f' is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}15}]:} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{}.5f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{l+m+mf}{3.121312312312} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}15}]:} '3.12131' -\end{Verbatim} - - If the field width is set more than the necessary than the data right -aligns itself to adjust to the specified values. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}16}]:} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{}9.5f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{l+m+mf}{3.121312312312} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}16}]:} ' 3.12131' -\end{Verbatim} - - Zero padding is done by adding a 0 at the start of fieldwidth. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}17}]:} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{}020.5f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{l+m+mf}{3.121312312312} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}17}]:} '00000000000003.12131' -\end{Verbatim} - - For proper alignment, a space can be left blank in the field width so -that when a negative number is used, proper alignment is maintained. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}18}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{} 9f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{l+m+mf}{3.121312312312} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{} 9f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{o}{\PYZhy{}}\PY{l+m+mf}{3.121312312312} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -3.121312 --3.121312 - \end{Verbatim} - - `+' sign can be returned at the beginning of a positive number by adding -a + sign at the beginning of the field width. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}19}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{}+9f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{l+m+mf}{3.121312312312} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{} 9f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{o}{\PYZhy{}}\PY{l+m+mf}{3.121312312312} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -+3.121312 --3.121312 - \end{Verbatim} - - As mentioned above, the data right aligns itself when the field width -mentioned is larger than the actualy field width. But left alignment can -be done by specifying a negative symbol in the field width. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}20}]:} \PY{l+s}{\PYZdq{}}\PY{l+s+si}{\PYZpc{}\PYZhy{}9.3f}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}} \PY{l+m+mf}{3.121312312312} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}20}]:} '3.121 ' -\end{Verbatim} - - - % Add a bibliography block to the postdoc - \newpage - - \input{03} - - - \end{document} diff --git a/tex/03.tex b/tex/03.tex deleted file mode 100644 index 310ef16..0000000 --- a/tex/03.tex +++ /dev/null @@ -1,1102 +0,0 @@ - -% Default to the notebook output style - - - - -% Inherit from the specified cell style. - - - - - - - - - \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} - \definecolor{darkorange}{rgb}{.71,0.21,0.01} - \definecolor{darkgreen}{rgb}{.12,.54,.11} - \definecolor{myteal}{rgb}{.26, .44, .56} - \definecolor{gray}{gray}{0.45} - \definecolor{lightgray}{gray}{.95} - \definecolor{mediumgray}{gray}{.8} - \definecolor{inputbackground}{rgb}{.95, .95, .85} - \definecolor{outputbackground}{rgb}{.95, .95, .95} - \definecolor{traceback}{rgb}{1, .95, .95} - % ansi colors - \definecolor{red}{rgb}{.6,0,0} - \definecolor{green}{rgb}{0,.65,0} - \definecolor{brown}{rgb}{0.6,0.6,0} - \definecolor{blue}{rgb}{0,.145,.698} - \definecolor{purple}{rgb}{.698,.145,.698} - \definecolor{cyan}{rgb}{0,.698,.698} - \definecolor{lightgray}{gray}{0.5} - - % bright ansi colors - \definecolor{darkgray}{gray}{0.25} - \definecolor{lightred}{rgb}{1.0,0.39,0.28} - \definecolor{lightgreen}{rgb}{0.48,0.99,0.0} - \definecolor{lightblue}{rgb}{0.53,0.81,0.92} - \definecolor{lightpurple}{rgb}{0.87,0.63,0.87} - \definecolor{lightcyan}{rgb}{0.5,1.0,0.83} - - % commands and environments needed by pandoc snippets - % extracted from the output of `pandoc -s` - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} - % Add ',fontsize=\small' for more characters per line - \newenvironment{Shaded}{}{} - \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - \newcommand{\RegionMarkerTok}[1]{{#1}} - \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\NormalTok}[1]{{#1}} - - % Define a nice break command that doesn't care if a line doesn't already - % exist. - \def\br{\hspace*{\fill} \\* } - % Math Jax compatability definitions - \def\gt{>} - \def\lt{<} - % Document parameters - \title{} - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - - - - - \begin{document} - - - \maketitle - - - - - \section{Data Structures}\label{data-structures} - - In simple terms, It is the the collection or group of data in a -particular structure. - - \subsection{Lists}\label{lists} - - Lists are the most commonly used data structure. Think of it as a -sequence of data that is enclosed in square brackets and data are -separated by a comma. Each of these data can be accessed by calling it's -index value. - -Lists are declared by just equating a variable to `{[} {]}' or list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}1}]:} \PY{n}{a} \PY{o}{=} \PY{p}{[}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}2}]:} \PY{k}{print} \PY{n+nb}{type}\PY{p}{(}\PY{n}{a}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] - - \end{Verbatim} - - One can directly assign the sequence of data to a list x as shown. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}3}]:} \PY{n}{x} \PY{o}{=} \PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{apple}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{orange}\PY{l+s}{\PYZsq{}}\PY{p}{]} -\end{Verbatim} - - \subsubsection{Indexing}\label{indexing} - - In python, Indexing starts from 0. Thus now the list x, which has two -elements will have apple at 0 index and orange at 1 index. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}4}]:} \PY{n}{x}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}4}]:} 'apple' -\end{Verbatim} - - Indexing can also be done in reverse order. That is the last element can -be accessed first. Here, indexing starts from -1. Thus index value -1 -will be orange and index -2 will be apple. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}5}]:} \PY{n}{x}\PY{p}{[}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}5}]:} 'orange' -\end{Verbatim} - - As you might have already guessed, x{[}0{]} = x{[}-2{]}, x{[}1{]} = -x{[}-1{]}. This concept can be extended towards lists with more many -elements. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}6}]:} \PY{n}{y} \PY{o}{=} \PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{carrot}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{potato}\PY{l+s}{\PYZsq{}}\PY{p}{]} -\end{Verbatim} - - Here we have declared two lists x and y each containing its own data. -Now, these two lists can again be put into another list say z which will -have it's data as two lists. This list inside a list is called as nested -lists and is how an array would be declared which we will see later. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}7}]:} \PY{n}{z} \PY{o}{=} \PY{p}{[}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{]} - \PY{k}{print} \PY{n}{z} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[['apple', 'orange'], ['carrot', 'potato']] - \end{Verbatim} - - Indexing in nested lists can be quite confusing if you do not understand -how indexing works in python. So let us break it down and then arrive at -a conclusion. - -Let us access the data `apple' in the above nested list. First, at index -0 there is a list {[}`apple',`orange'{]} and at index 1 there is another -list {[}`carrot',`potato'{]}. Hence z{[}0{]} should give us the first -list which contains `apple'. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}8}]:} \PY{n}{z1} \PY{o}{=} \PY{n}{z}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} - \PY{k}{print} \PY{n}{z1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -['apple', 'orange'] - \end{Verbatim} - - Now observe that z1 is not at all a nested list thus to access `apple', -z1 should be indexed at 0. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}9}]:} \PY{n}{z1}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}9}]:} 'apple' -\end{Verbatim} - - Instead of doing the above, In python, you can access `apple' by just -writing the index values each time side by side. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}10}]:} \PY{n}{z}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}10}]:} 'apple' -\end{Verbatim} - - If there was a list inside a list inside a list then you can access the -innermost value by executing z{[} {]}{[} {]}{[} {]}. - - \subsubsection{Slicing}\label{slicing} - - Indexing was only limited to accessing a single element, Slicing on the -other hand is accessing a sequence of data inside the list. In other -words ``slicing'' the list. - -Slicing is done by defining the index values of the first element and -the last element from the parent list that is required in the sliced -list. It is written as parentlist{[} a : b {]} where a,b are the index -values from the parent list. If a or b is not defined then the index -value is considered to be the first value for a if a is not defined and -the last value for b when b is not defined. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}11}]:} \PY{n}{num} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{6}\PY{p}{,}\PY{l+m+mi}{7}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{,}\PY{l+m+mi}{9}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}12}]:} \PY{k}{print} \PY{n}{num}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{:}\PY{l+m+mi}{4}\PY{p}{]} - \PY{k}{print} \PY{n}{num}\PY{p}{[}\PY{l+m+mi}{4}\PY{p}{:}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[0, 1, 2, 3] -[4, 5, 6, 7, 8, 9] - \end{Verbatim} - - You can also slice a parent list with a fixed length or step length. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}13}]:} \PY{n}{num}\PY{p}{[}\PY{p}{:}\PY{l+m+mi}{9}\PY{p}{:}\PY{l+m+mi}{3}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}13}]:} [0, 3, 6] -\end{Verbatim} - - \subsubsection{Built in List Functions}\label{built-in-list-functions} - - To find the length of the list or the number of elements in a list, -\textbf{len( )} is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}14}]:} \PY{n+nb}{len}\PY{p}{(}\PY{n}{num}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}14}]:} 10 -\end{Verbatim} - - If the list consists of all integer elements then \textbf{min( )} and -\textbf{max( )} gives the minimum and maximum value in the list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}15}]:} \PY{n+nb}{min}\PY{p}{(}\PY{n}{num}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}15}]:} 0 -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}16}]:} \PY{n+nb}{max}\PY{p}{(}\PY{n}{num}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}16}]:} 9 -\end{Verbatim} - - Lists can be concatenated by adding, `+' them. The resultant list will -contain all the elements of the lists that were added. The resultant -list will not be a nested list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}17}]:} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{]} \PY{o}{+} \PY{p}{[}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{7}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}17}]:} [1, 2, 3, 5, 4, 7] -\end{Verbatim} - - There might arise a requirement where you might need to check if a -particular element is there in a predefined list. Consider the below -list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}18}]:} \PY{n}{names} \PY{o}{=} \PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{Earth}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Air}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Fire}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Water}\PY{l+s}{\PYZsq{}}\PY{p}{]} -\end{Verbatim} - - To check if `Fire' and `Rajath' is present in the list names. A -conventional approach would be to use a for loop and iterate over the -list and use the if condition. But in python you can use `a in b' -concept which would return `True' if a is present in b and `False' if -not. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}19}]:} \PY{l+s}{\PYZsq{}}\PY{l+s}{Fire}\PY{l+s}{\PYZsq{}} \PY{o+ow}{in} \PY{n}{names} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}19}]:} True -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}20}]:} \PY{l+s}{\PYZsq{}}\PY{l+s}{Rajath}\PY{l+s}{\PYZsq{}} \PY{o+ow}{in} \PY{n}{names} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}20}]:} False -\end{Verbatim} - - In a list with elements as string, \textbf{max( )} and \textbf{min( )} -is applicable. \textbf{max( )} would return a string element whose ASCII -value is the highest and the lowest when \textbf{min( )} is used. Note -that only the first index of each element is considered each time and if -they value is the same then second index considered so on and so forth. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}21}]:} \PY{n}{mlist} \PY{o}{=} \PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{bzaa}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{ds}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{nc}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{az}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{z}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{klm}\PY{l+s}{\PYZsq{}}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}22}]:} \PY{k}{print} \PY{n+nb}{max}\PY{p}{(}\PY{n}{mlist}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{min}\PY{p}{(}\PY{n}{mlist}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -z -az - \end{Verbatim} - - Here the first index of each element is considered and thus z has the -highest ASCII value thus it is returned and minimum ASCII is a. But what -if numbers are declared as strings? - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}23}]:} \PY{n}{nlist} \PY{o}{=} \PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{1}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{94}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{93}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{1000}\PY{l+s}{\PYZsq{}}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}24}]:} \PY{k}{print} \PY{n+nb}{max}\PY{p}{(}\PY{n}{nlist}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{min}\PY{p}{(}\PY{n}{nlist}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -94 -1 - \end{Verbatim} - - Even if the numbers are declared in a string the first index of each -element is considered and the maximum and minimum values are returned -accordingly. - - But if you want to find the \textbf{max( )} string element based on the -length of the string then another parameter `key=len' is declared inside -the \textbf{max( )} and \textbf{min( )} function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}25}]:} \PY{k}{print} \PY{n+nb}{max}\PY{p}{(}\PY{n}{names}\PY{p}{,} \PY{n}{key}\PY{o}{=}\PY{n+nb}{len}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{min}\PY{p}{(}\PY{n}{names}\PY{p}{,} \PY{n}{key}\PY{o}{=}\PY{n+nb}{len}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Earth -Air - \end{Verbatim} - - But even `Water' has length 5. \textbf{max()} or \textbf{min()} function -returns the first element when there are two or more elements with the -same length. - -Any other built in function can be used or lambda function (will be -discussed later) in place of len. - -A string can be converted into a list by using the \textbf{list()} -function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}26}]:} \PY{n+nb}{list}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{hello}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}26}]:} ['h', 'e', 'l', 'l', 'o'] -\end{Verbatim} - - \textbf{append( )} is used to add a element at the end of the list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}27}]:} \PY{n}{lst} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{,}\PY{l+m+mi}{7}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}28}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 1, 4, 8, 7, 1] - \end{Verbatim} - - \textbf{count( )} is used to count the number of a particular element -that is present in the list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}29}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{count}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}29}]:} 3 -\end{Verbatim} - - \textbf{append( )} function can also be used to add a entire list at the -end. Observe that the resultant list becomes a nested list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}30}]:} \PY{n}{lst1} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}31}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{n}{lst1}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 1, 4, 8, 7, 1, [5, 4, 2, 8]] - \end{Verbatim} - - But if nested list is not what is desired then \textbf{extend( )} -function can be used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}32}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{extend}\PY{p}{(}\PY{n}{lst1}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2, 8] - \end{Verbatim} - - \textbf{index( )} is used to find the index value of a particular -element. Note that if there are multiple elements of the same value then -the first index value of that element is returned. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}33}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{index}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}33}]:} 0 -\end{Verbatim} - - \textbf{insert(x,y)} is used to insert a element y at a specified index -value x. \textbf{append( )} function made it only possible to insert at -the end. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}34}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{insert}\PY{p}{(}\PY{l+m+mi}{5}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{name}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 1, 4, 8, 7, 'name', 1, [5, 4, 2, 8], 5, 4, 2, 8] - \end{Verbatim} - - \textbf{insert(x,y)} inserts but does not replace element. If you want -to replace the element with another element you simply assign the value -to that particular index. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}35}]:} \PY{n}{lst}\PY{p}{[}\PY{l+m+mi}{5}\PY{p}{]} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{Python}\PY{l+s}{\PYZsq{}} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 1, 4, 8, 7, 'Python', 1, [5, 4, 2, 8], 5, 4, 2, 8] - \end{Verbatim} - - \textbf{pop( )} function return the last element in the list. This is -similar to the operation of a stack. Hence it wouldn't be wrong to tell -that lists can be used as a stack. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}36}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{pop}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}36}]:} 8 -\end{Verbatim} - - Index value can be specified to pop a ceratin element corresponding to -that index value. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}37}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{pop}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}37}]:} 1 -\end{Verbatim} - - \textbf{pop( )} is used to remove element based on it's index value -which can be assigned to a variable. One can also remove element by -specifying the element itself using the \textbf{remove( )} function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}38}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{remove}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Python}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2] - \end{Verbatim} - - Alternative to \textbf{remove} function but with using index value is -\textbf{del} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}39}]:} \PY{k}{del} \PY{n}{lst}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{]} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2] - \end{Verbatim} - - The entire elements present in the list can be reversed by using the -\textbf{reverse()} function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}40}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{reverse}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[2, 4, 5, [5, 4, 2, 8], 1, 7, 8, 1] - \end{Verbatim} - - Note that the nested list {[}5,4,2,8{]} is treated as a single element -of the parent list lst. Thus the elements inside the nested list is not -reversed. - -Python offers built in operation \textbf{sort( )} to arrange the -elements in ascending order. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}41}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{sort}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 1, 2, 4, 5, 7, 8, [5, 4, 2, 8]] - \end{Verbatim} - - For descending order, By default the reverse condition will be False for -reverse. Hence changing it to True would arrange the elements in -descending order. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}42}]:} \PY{n}{lst}\PY{o}{.}\PY{n}{sort}\PY{p}{(}\PY{n}{reverse}\PY{o}{=}\PY{n+nb+bp}{True}\PY{p}{)} - \PY{k}{print} \PY{n}{lst} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[[5, 4, 2, 8], 8, 7, 5, 4, 2, 1, 1] - \end{Verbatim} - - Similarly for lists containing string elements, \textbf{sort( )} would -sort the elements based on it's ASCII value in ascending and by -specifying reverse=True in descending. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}43}]:} \PY{n}{names}\PY{o}{.}\PY{n}{sort}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{names} - \PY{n}{names}\PY{o}{.}\PY{n}{sort}\PY{p}{(}\PY{n}{reverse}\PY{o}{=}\PY{n+nb+bp}{True}\PY{p}{)} - \PY{k}{print} \PY{n}{names} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -['Air', 'Earth', 'Fire', 'Water'] -['Water', 'Fire', 'Earth', 'Air'] - \end{Verbatim} - - To sort based on length key=len should be specified as shown. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}44}]:} \PY{n}{names}\PY{o}{.}\PY{n}{sort}\PY{p}{(}\PY{n}{key}\PY{o}{=}\PY{n+nb}{len}\PY{p}{)} - \PY{k}{print} \PY{n}{names} - \PY{n}{names}\PY{o}{.}\PY{n}{sort}\PY{p}{(}\PY{n}{key}\PY{o}{=}\PY{n+nb}{len}\PY{p}{,}\PY{n}{reverse}\PY{o}{=}\PY{n+nb+bp}{True}\PY{p}{)} - \PY{k}{print} \PY{n}{names} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -['Air', 'Fire', 'Water', 'Earth'] -['Water', 'Earth', 'Fire', 'Air'] - \end{Verbatim} - - \subsubsection{Copying a list}\label{copying-a-list} - - Most of the new python programmers commit this mistake. Consider the -following, - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}45}]:} \PY{n}{lista}\PY{o}{=} \PY{p}{[}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}46}]:} \PY{n}{listb} \PY{o}{=} \PY{n}{lista} - \PY{k}{print} \PY{n}{listb} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[2, 1, 4, 3] - \end{Verbatim} - - Here, We have declared a list, lista = {[}2,1,4,3{]}. This list is -copied to listb by assigning it's value and it get's copied as seen. Now -we perform some random operations on lista. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}47}]:} \PY{n}{lista}\PY{o}{.}\PY{n}{pop}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{lista} - \PY{n}{lista}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{l+m+mi}{9}\PY{p}{)} - \PY{k}{print} \PY{n}{lista} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[2, 1, 4] -[2, 1, 4, 9] - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}48}]:} \PY{k}{print} \PY{n}{listb} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[2, 1, 4, 9] - \end{Verbatim} - - listb has also changed though no operation has been performed on it. -This is because you have assigned the same memory space of lista to -listb. So how do fix this? - -If you recall, in slicing we had seen that parentlist{[}a:b{]} returns a -list from parent list with start index a and end index b and if a and b -is not mentioned then by default it considers the first and last -element. We use the same concept here. By doing so, we are assigning the -data of lista to listb as a variable. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}49}]:} \PY{n}{lista} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}50}]:} \PY{n}{listb} \PY{o}{=} \PY{n}{lista}\PY{p}{[}\PY{p}{:}\PY{p}{]} - \PY{k}{print} \PY{n}{listb} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[2, 1, 4, 3] - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}51}]:} \PY{n}{lista}\PY{o}{.}\PY{n}{pop}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{lista} - \PY{n}{lista}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{l+m+mi}{9}\PY{p}{)} - \PY{k}{print} \PY{n}{lista} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[2, 1, 4] -[2, 1, 4, 9] - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}52}]:} \PY{k}{print} \PY{n}{listb} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[2, 1, 4, 3] - \end{Verbatim} - - \subsection{Tuples}\label{tuples} - - Tuples are similar to lists but only big difference is the elements -inside a list can be changed but in tuple it cannot be changed. Think of -tuples as something which has to be True for a particular something and -cannot be True for no other values. For better understanding, Recall -\textbf{divmod()} function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}53}]:} \PY{n}{xyz} \PY{o}{=} \PY{n+nb}{divmod}\PY{p}{(}\PY{l+m+mi}{10}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} - \PY{k}{print} \PY{n}{xyz} - \PY{k}{print} \PY{n+nb}{type}\PY{p}{(}\PY{n}{xyz}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -(3, 1) - - \end{Verbatim} - - Here the quotient has to be 3 and the remainder has to be 1. These -values cannot be changed whatsoever when 10 is divided by 3. Hence -divmod returns these values in a tuple. - - To define a tuple, A variable is assigned to paranthesis ( ) or tuple( -). - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}54}]:} \PY{n}{tup} \PY{o}{=} \PY{p}{(}\PY{p}{)} - \PY{n}{tup2} \PY{o}{=} \PY{n+nb}{tuple}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - If you want to directly declare a tuple it can be done by using a comma -at the end of the data. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}55}]:} \PY{l+m+mi}{27}\PY{p}{,} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}55}]:} (27,) -\end{Verbatim} - - 27 when multiplied by 2 yields 54, But when multiplied with a tuple the -data is repeated twice. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}56}]:} \PY{l+m+mi}{2}\PY{o}{*}\PY{p}{(}\PY{l+m+mi}{27}\PY{p}{,}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}56}]:} (27, 27) -\end{Verbatim} - - Values can be assigned while declaring a tuple. It takes a list as input -and converts it into a tuple or it takes a string and converts it into a -tuple. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}57}]:} \PY{n}{tup3} \PY{o}{=} \PY{n+nb}{tuple}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{]}\PY{p}{)} - \PY{k}{print} \PY{n}{tup3} - \PY{n}{tup4} \PY{o}{=} \PY{n+nb}{tuple}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Hello}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{tup4} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -(1, 2, 3) -('H', 'e', 'l', 'l', 'o') - \end{Verbatim} - - It follows the same indexing and slicing as Lists. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}58}]:} \PY{k}{print} \PY{n}{tup3}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{]} - \PY{n}{tup5} \PY{o}{=} \PY{n}{tup4}\PY{p}{[}\PY{p}{:}\PY{l+m+mi}{3}\PY{p}{]} - \PY{k}{print} \PY{n}{tup5} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -2 -('H', 'e', 'l') - \end{Verbatim} - - \subsubsection{Mapping one tuple to -another}\label{mapping-one-tuple-to-another} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}59}]:} \PY{p}{(}\PY{n}{a}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{c}\PY{p}{)}\PY{o}{=} \PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{alpha}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{beta}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{gamma}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}60}]:} \PY{k}{print} \PY{n}{a}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{c} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -alpha beta gamma - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}61}]:} \PY{n}{d} \PY{o}{=} \PY{n+nb}{tuple}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{RajathKumarMP}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{d} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -('R', 'a', 'j', 'a', 't', 'h', 'K', 'u', 'm', 'a', 'r', 'M', 'P') - \end{Verbatim} - - \subsubsection{Built In Tuple functions}\label{built-in-tuple-functions} - - \textbf{count()} function counts the number of specified element that is -present in the tuple. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}62}]:} \PY{n}{d}\PY{o}{.}\PY{n}{count}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{a}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}62}]:} 3 -\end{Verbatim} - - \textbf{index()} function returns the index of the specified element. If -the elements are more than one then the index of the first element of -that specified element is returned - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}63}]:} \PY{n}{d}\PY{o}{.}\PY{n}{index}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{a}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}63}]:} 1 -\end{Verbatim} - - \subsection{Sets}\label{sets} - - Sets are mainly used to eliminate repeated numbers in a sequence/list. -It is also used to perform some standard set operations. - -Sets are declared as set() which will initialize a empty set. Also -set({[}sequence{]}) can be executed to declare a set with elements - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}64}]:} \PY{n}{set1} \PY{o}{=} \PY{n+nb}{set}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{type}\PY{p}{(}\PY{n}{set1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] - - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}65}]:} \PY{n}{set0} \PY{o}{=} \PY{n+nb}{set}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{]}\PY{p}{)} - \PY{k}{print} \PY{n}{set0} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -set([1, 2, 3, 4]) - \end{Verbatim} - - elements 2,3 which are repeated twice are seen only once. Thus in a set -each element is distinct. - - \subsubsection{Built-in Functions}\label{built-in-functions} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}66}]:} \PY{n}{set1} \PY{o}{=} \PY{n+nb}{set}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{]}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}67}]:} \PY{n}{set2} \PY{o}{=} \PY{n+nb}{set}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{]}\PY{p}{)} -\end{Verbatim} - - \textbf{union( )} function returns a set which contains all the elements -of both the sets without repition. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}68}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{union}\PY{p}{(}\PY{n}{set2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}68}]:} \{1, 2, 3, 4, 5\} -\end{Verbatim} - - \textbf{add( )} will add a particular element into the set. Note that -the index of the newly added element is arbitrary and can be placed -anywhere not neccessarily in the end. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}69}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{add}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{)} - \PY{n}{set1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}69}]:} \{0, 1, 2, 3\} -\end{Verbatim} - - \textbf{intersection( )} function outputs a set which contains all the -elements that are in both sets. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}70}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{intersection}\PY{p}{(}\PY{n}{set2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}70}]:} \{2, 3\} -\end{Verbatim} - - \textbf{difference( )} function ouptuts a set which contains elements -that are in set1 and not in set2. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}71}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{difference}\PY{p}{(}\PY{n}{set2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}71}]:} \{0, 1\} -\end{Verbatim} - - \textbf{symmetric\_difference( )} function ouputs a function which -contains elements that are in one of the sets. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}72}]:} \PY{n}{set2}\PY{o}{.}\PY{n}{symmetric\PYZus{}difference}\PY{p}{(}\PY{n}{set1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}72}]:} \{0, 1, 4, 5\} -\end{Verbatim} - - \textbf{issubset( ), isdisjoint( ), issuperset( )} is used to check if -the set1/set2 is a subset, disjoint or superset of set2/set1 -respectively. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}73}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{issubset}\PY{p}{(}\PY{n}{set2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}73}]:} False -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}74}]:} \PY{n}{set2}\PY{o}{.}\PY{n}{isdisjoint}\PY{p}{(}\PY{n}{set1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}74}]:} False -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}75}]:} \PY{n}{set2}\PY{o}{.}\PY{n}{issuperset}\PY{p}{(}\PY{n}{set1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}75}]:} False -\end{Verbatim} - - \textbf{pop( )} is used to remove an arbitrary element in the set - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}76}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{pop}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{set1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -set([1, 2, 3]) - \end{Verbatim} - - \textbf{remove( )} function deletes the specified element from the set. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}77}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{remove}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)} - \PY{n}{set1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}77}]:} \{1, 3\} -\end{Verbatim} - - \textbf{clear( )} is used to clear all the elements and make that set an -empty set. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}78}]:} \PY{n}{set1}\PY{o}{.}\PY{n}{clear}\PY{p}{(}\PY{p}{)} - \PY{n}{set1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}78}]:} set() -\end{Verbatim} - - - % Add a bibliography block to the postdoc - \newpage - - \input{04} - - - \end{document} diff --git a/tex/04.tex b/tex/04.tex deleted file mode 100644 index 1f0fc89..0000000 --- a/tex/04.tex +++ /dev/null @@ -1,731 +0,0 @@ - -% Default to the notebook output style - - - - -% Inherit from the specified cell style. - - - - - - - - \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} - \definecolor{darkorange}{rgb}{.71,0.21,0.01} - \definecolor{darkgreen}{rgb}{.12,.54,.11} - \definecolor{myteal}{rgb}{.26, .44, .56} - \definecolor{gray}{gray}{0.45} - \definecolor{lightgray}{gray}{.95} - \definecolor{mediumgray}{gray}{.8} - \definecolor{inputbackground}{rgb}{.95, .95, .85} - \definecolor{outputbackground}{rgb}{.95, .95, .95} - \definecolor{traceback}{rgb}{1, .95, .95} - % ansi colors - \definecolor{red}{rgb}{.6,0,0} - \definecolor{green}{rgb}{0,.65,0} - \definecolor{brown}{rgb}{0.6,0.6,0} - \definecolor{blue}{rgb}{0,.145,.698} - \definecolor{purple}{rgb}{.698,.145,.698} - \definecolor{cyan}{rgb}{0,.698,.698} - \definecolor{lightgray}{gray}{0.5} - - % bright ansi colors - \definecolor{darkgray}{gray}{0.25} - \definecolor{lightred}{rgb}{1.0,0.39,0.28} - \definecolor{lightgreen}{rgb}{0.48,0.99,0.0} - \definecolor{lightblue}{rgb}{0.53,0.81,0.92} - \definecolor{lightpurple}{rgb}{0.87,0.63,0.87} - \definecolor{lightcyan}{rgb}{0.5,1.0,0.83} - - % commands and environments needed by pandoc snippets - % extracted from the output of `pandoc -s` - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} - % Add ',fontsize=\small' for more characters per line - \newenvironment{Shaded}{}{} - \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - \newcommand{\RegionMarkerTok}[1]{{#1}} - \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\NormalTok}[1]{{#1}} - - % Define a nice break command that doesn't care if a line doesn't already - % exist. - \def\br{\hspace*{\fill} \\* } - % Math Jax compatability definitions - \def\gt{>} - \def\lt{<} - % Document parameters - \title{} - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - - - \begin{document} - - - \maketitle - - - - - \subsection{Strings}\label{strings} - - Strings are ordered text based data which are represented by enclosing -the same in single/double/triple quotes. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}1}]:} \PY{n}{String0} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{Taj Mahal is beautiful}\PY{l+s}{\PYZsq{}} - \PY{n}{String1} \PY{o}{=} \PY{l+s}{\PYZdq{}}\PY{l+s}{Taj Mahal is beautiful}\PY{l+s}{\PYZdq{}} - \PY{n}{String2} \PY{o}{=} \PY{l+s}{\PYZsq{}\PYZsq{}\PYZsq{}}\PY{l+s}{Taj Mahal} - \PY{l+s}{is} - \PY{l+s}{beautiful}\PY{l+s}{\PYZsq{}\PYZsq{}\PYZsq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}2}]:} \PY{k}{print} \PY{n}{String0} \PY{p}{,} \PY{n+nb}{type}\PY{p}{(}\PY{n}{String0}\PY{p}{)} - \PY{k}{print} \PY{n}{String1}\PY{p}{,} \PY{n+nb}{type}\PY{p}{(}\PY{n}{String1}\PY{p}{)} - \PY{k}{print} \PY{n}{String2}\PY{p}{,} \PY{n+nb}{type}\PY{p}{(}\PY{n}{String2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Taj Mahal is beautiful -Taj Mahal is beautiful -Taj Mahal -is -beautiful - \end{Verbatim} - - String Indexing and Slicing are similar to Lists which was explained in -detail earlier. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}3}]:} \PY{k}{print} \PY{n}{String0}\PY{p}{[}\PY{l+m+mi}{4}\PY{p}{]} - \PY{k}{print} \PY{n}{String0}\PY{p}{[}\PY{l+m+mi}{4}\PY{p}{:}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -M -Mahal is beautiful - \end{Verbatim} - - \subsubsection{Built-in Functions}\label{built-in-functions} - - \textbf{find( )} function returns the index value of the given data that -is to found in the string. If it is not found it returns \textbf{-1}. -Remember to not confuse the returned -1 for reverse indexing value. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}4}]:} \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{find}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{al}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{find}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{am}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -7 --1 - \end{Verbatim} - - The index value returned is the index of the first element in the input -data. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}5}]:} \PY{k}{print} \PY{n}{String0}\PY{p}{[}\PY{l+m+mi}{7}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -a - \end{Verbatim} - - One can also input \textbf{find( )} function between which index values -it has to search. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}6}]:} \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{find}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{j}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} - \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{find}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{j}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -2 -2 - \end{Verbatim} - - \textbf{capitalize( )} is used to capitalize the first element in the -string. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}7}]:} \PY{n}{String3} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{observe the first letter in this sentence.}\PY{l+s}{\PYZsq{}} - \PY{k}{print} \PY{n}{String3}\PY{o}{.}\PY{n}{capitalize}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Observe the first letter in this sentence. - \end{Verbatim} - - \textbf{center( )} is used to center align the string by specifying the -field width. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}8}]:} \PY{n}{String0}\PY{o}{.}\PY{n}{center}\PY{p}{(}\PY{l+m+mi}{70}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}8}]:} ' Taj Mahal is beautiful ' -\end{Verbatim} - - One can also fill the left out spaces with any other character. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}9}]:} \PY{n}{String0}\PY{o}{.}\PY{n}{center}\PY{p}{(}\PY{l+m+mi}{70}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}9}]:} '------------------------Taj Mahal is beautiful------------------------' -\end{Verbatim} - - \textbf{zfill( )} is used for zero padding by specifying the field -width. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}10}]:} \PY{n}{String0}\PY{o}{.}\PY{n}{zfill}\PY{p}{(}\PY{l+m+mi}{30}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}10}]:} '00000000Taj Mahal is beautiful' -\end{Verbatim} - - \textbf{expandtabs( )} allows you to change the spacing of the tab -character. `\t' which is by default set to 8 spaces. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}11}]:} \PY{n}{s} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{h}\PY{l+s+se}{\PYZbs{}t}\PY{l+s}{e}\PY{l+s+se}{\PYZbs{}t}\PY{l+s}{l}\PY{l+s+se}{\PYZbs{}t}\PY{l+s}{l}\PY{l+s+se}{\PYZbs{}t}\PY{l+s}{o}\PY{l+s}{\PYZsq{}} - \PY{k}{print} \PY{n}{s} - \PY{k}{print} \PY{n}{s}\PY{o}{.}\PY{n}{expandtabs}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)} - \PY{k}{print} \PY{n}{s}\PY{o}{.}\PY{n}{expandtabs}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -h e l l o -h e l l o -h e l l o - \end{Verbatim} - - \textbf{index( )} works the same way as \textbf{find( )} function the -only difference is find returns `-1' when the input element is not found -in the string but \textbf{index( )} function throws a ValueError - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}12}]:} \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{index}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Taj}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{index}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Mahal}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{)} - \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{index}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Mahal}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{,}\PY{l+m+mi}{20}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -0 -4 - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] - - --------------------------------------------------------------------------- - - ValueError Traceback (most recent call last) - - in () - 1 print String0.index('Taj') - 2 print String0.index('Mahal',0) - ----> 3 print String0.index('Mahal',10,20) - - - ValueError: substring not found - - \end{Verbatim} - - \textbf{endswith( )} function is used to check if the given string ends -with the particular char which is given as input. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}13}]:} \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{endswith}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{y}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -False - \end{Verbatim} - - The start and stop index values can also be specified. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}14}]:} \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{endswith}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{l}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{)} - \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{endswith}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{M}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -True -True - \end{Verbatim} - - \textbf{count( )} function counts the number of char in the given -string. The start and the stop index can also be specified or left -blank. (These are Implicit arguments which will be dealt in functions) - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}15}]:} \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{count}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{a}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{)} - \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{count}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{a}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -4 -2 - \end{Verbatim} - - \textbf{join( )} function is used add a char in between the elements of -the input string. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}16}]:} \PY{l+s}{\PYZsq{}}\PY{l+s}{a}\PY{l+s}{\PYZsq{}}\PY{o}{.}\PY{n}{join}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{*\PYZus{}\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}16}]:} '*a\_a-' -\end{Verbatim} - - '*\_-`is the input string and char 'a' is added in between each element - - \textbf{join( )} function can also be used to convert a list into a -string. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}17}]:} \PY{n}{a} \PY{o}{=} \PY{n+nb}{list}\PY{p}{(}\PY{n}{String0}\PY{p}{)} - \PY{k}{print} \PY{n}{a} - \PY{n}{b} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{\PYZsq{}}\PY{o}{.}\PY{n}{join}\PY{p}{(}\PY{n}{a}\PY{p}{)} - \PY{k}{print} \PY{n}{b} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -['T', 'a', 'j', ' ', 'M', 'a', 'h', 'a', 'l', ' ', 'i', 's', ' ', 'b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l'] -Taj Mahal is beautiful - \end{Verbatim} - - Before converting it into a string \textbf{join( )} function can be used -to insert any char in between the list elements. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}18}]:} \PY{n}{c} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{/}\PY{l+s}{\PYZsq{}}\PY{o}{.}\PY{n}{join}\PY{p}{(}\PY{n}{a}\PY{p}{)}\PY{p}{[}\PY{l+m+mi}{18}\PY{p}{:}\PY{p}{]} - \PY{k}{print} \PY{n}{c} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -/i/s/ /b/e/a/u/t/i/f/u/l - \end{Verbatim} - - \textbf{split( )} function is used to convert a string back to a list. -Think of it as the opposite of the \textbf{join()} function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}19}]:} \PY{n}{d} \PY{o}{=} \PY{n}{c}\PY{o}{.}\PY{n}{split}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{/}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{d} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[' ', 'i', 's', ' ', 'b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l'] - \end{Verbatim} - - In \textbf{split( )} function one can also specify the number of times -you want to split the string or the number of elements the new returned -list should conatin. The number of elements is always one more than the -specified number this is because it is split the number of times -specified. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}20}]:} \PY{n}{e} \PY{o}{=} \PY{n}{c}\PY{o}{.}\PY{n}{split}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{/}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} - \PY{k}{print} \PY{n}{e} - \PY{k}{print} \PY{n+nb}{len}\PY{p}{(}\PY{n}{e}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[' ', 'i', 's', ' /b/e/a/u/t/i/f/u/l'] -4 - \end{Verbatim} - - \textbf{lower( )} converts any capital letter to small letter. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}21}]:} \PY{k}{print} \PY{n}{String0} - \PY{k}{print} \PY{n}{String0}\PY{o}{.}\PY{n}{lower}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Taj Mahal is beautiful -taj mahal is beautiful - \end{Verbatim} - - \textbf{upper( )} converts any small letter to capital letter. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}22}]:} \PY{n}{String0}\PY{o}{.}\PY{n}{upper}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}22}]:} 'TAJ MAHAL IS BEAUTIFUL' -\end{Verbatim} - - \textbf{replace( )} function replaces the element with another element. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}23}]:} \PY{n}{String0}\PY{o}{.}\PY{n}{replace}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Taj Mahal}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Bengaluru}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}23}]:} 'Bengaluru is beautiful' -\end{Verbatim} - - \textbf{strip( )} function is used to delete elements from the right end -and the left end which is not required. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}24}]:} \PY{n}{f} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{ hello }\PY{l+s}{\PYZsq{}} -\end{Verbatim} - - If no char is specified then it will delete all the spaces that is -present in the right and left hand side of the data. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}25}]:} \PY{n}{f}\PY{o}{.}\PY{n}{strip}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}25}]:} 'hello' -\end{Verbatim} - - \textbf{strip( )} function, when a char is specified then it deletes -that char if it is present in the two ends of the specified string. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}26}]:} \PY{n}{f} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{ ***\PYZhy{}\PYZhy{}\PYZhy{}\PYZhy{}hello\PYZhy{}\PYZhy{}\PYZhy{}******* }\PY{l+s}{\PYZsq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}27}]:} \PY{n}{f}\PY{o}{.}\PY{n}{strip}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{*}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}27}]:} ' ***----hello---******* ' -\end{Verbatim} - - The asterisk had to be deleted but is not. This is because there is a -space in both the right and left hand side. So in strip function. The -characters need to be inputted in the specific order in which they are -present. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}28}]:} \PY{k}{print} \PY{n}{f}\PY{o}{.}\PY{n}{strip}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{ *}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{f}\PY{o}{.}\PY{n}{strip}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{ *\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -----hello--- -hello - \end{Verbatim} - - \textbf{lstrip( )} and \textbf{rstrip( )} function have the same -functionality as strip function but the only difference is -\textbf{lstrip( )} deletes only towards the left side and -\textbf{rstrip( )} towards the right. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}29}]:} \PY{k}{print} \PY{n}{f}\PY{o}{.}\PY{n}{lstrip}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{ *}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{f}\PY{o}{.}\PY{n}{rstrip}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{ *}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -----hello---******* - ***----hello--- - \end{Verbatim} - - \subsection{Dictionaries}\label{dictionaries} - - Dictionaries are more used like a database because here you can index a -particular sequence with your user defined string. - - To define a dictionary, equate a variable to \{ \} or dict() - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}30}]:} \PY{n}{d0} \PY{o}{=} \PY{p}{\PYZob{}}\PY{p}{\PYZcb{}} - \PY{n}{d1} \PY{o}{=} \PY{n+nb}{dict}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n+nb}{type}\PY{p}{(}\PY{n}{d0}\PY{p}{)}\PY{p}{,} \PY{n+nb}{type}\PY{p}{(}\PY{n}{d1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] - - \end{Verbatim} - - Dictionary works somewhat like a list but with an added capability of -assigning it's own index style. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}31}]:} \PY{n}{d0}\PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{One}\PY{l+s}{\PYZsq{}}\PY{p}{]} \PY{o}{=} \PY{l+m+mi}{1} - \PY{n}{d0}\PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{OneTwo}\PY{l+s}{\PYZsq{}}\PY{p}{]} \PY{o}{=} \PY{l+m+mi}{12} - \PY{k}{print} \PY{n}{d0} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -\{'OneTwo': 12, 'One': 1\} - \end{Verbatim} - - That is how a dictionary looks like. Now you are able to access `1' by -the index value set at `One' - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}32}]:} \PY{k}{print} \PY{n}{d0}\PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{One}\PY{l+s}{\PYZsq{}}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -1 - \end{Verbatim} - - Two lists which are related can be merged to form a dictionary. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}33}]:} \PY{n}{names} \PY{o}{=} \PY{p}{[}\PY{l+s}{\PYZsq{}}\PY{l+s}{One}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{Two}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{Three}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{Four}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{Five}\PY{l+s}{\PYZsq{}}\PY{p}{]} - \PY{n}{numbers} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mi}{3}\PY{p}{,} \PY{l+m+mi}{4}\PY{p}{,} \PY{l+m+mi}{5}\PY{p}{]} -\end{Verbatim} - - \textbf{zip( )} function is used to combine two lists - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}34}]:} \PY{n}{d2} \PY{o}{=} \PY{n+nb}{zip}\PY{p}{(}\PY{n}{names}\PY{p}{,}\PY{n}{numbers}\PY{p}{)} - \PY{k}{print} \PY{n}{d2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[('One', 1), ('Two', 2), ('Three', 3), ('Four', 4), ('Five', 5)] - \end{Verbatim} - - The two lists are combined to form a single list and each elements are -clubbed with their respective elements from the other list inside a -tuple. Tuples because that is what is assigned and the value should not -change. - -Further, To convert the above into a dictionary. \textbf{dict( )} -function is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}35}]:} \PY{n}{a1} \PY{o}{=} \PY{n+nb}{dict}\PY{p}{(}\PY{n}{d2}\PY{p}{)} - \PY{k}{print} \PY{n}{a1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -\{'Four': 4, 'Five': 5, 'Three': 3, 'Two': 2, 'One': 1\} - \end{Verbatim} - - \subsubsection{Built-in Functions}\label{built-in-functions} - - \textbf{clear( )} function is used to erase the entire database that was -created. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}36}]:} \PY{n}{a1}\PY{o}{.}\PY{n}{clear}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{a1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -\{\} - \end{Verbatim} - - Dictionary can also be built using loops. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}37}]:} \PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n+nb}{len}\PY{p}{(}\PY{n}{names}\PY{p}{)}\PY{p}{)}\PY{p}{:} - \PY{n}{a1}\PY{p}{[}\PY{n}{names}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{]} \PY{o}{=} \PY{n}{numbers}\PY{p}{[}\PY{n}{i}\PY{p}{]} - \PY{k}{print} \PY{n}{a1} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -\{'Four': 4, 'Five': 5, 'Three': 3, 'Two': 2, 'One': 1\} - \end{Verbatim} - - \textbf{values( )} function returns a list with all the assigned values -in the dictionary. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}38}]:} \PY{n}{a1}\PY{o}{.}\PY{n}{values}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}38}]:} [4, 5, 3, 2, 1] -\end{Verbatim} - - \textbf{keys( )} function returns all the index or the keys to which -contains the values that it was assigned to. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}39}]:} \PY{n}{a1}\PY{o}{.}\PY{n}{keys}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}39}]:} ['Four', 'Five', 'Three', 'Two', 'One'] -\end{Verbatim} - - \textbf{items( )} is returns a list containing both the list but each -element in the dictionary is inside a tuple. This is same as the result -that was obtained when zip function was used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}40}]:} \PY{n}{a1}\PY{o}{.}\PY{n}{items}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}40}]:} [('Four', 4), ('Five', 5), ('Three', 3), ('Two', 2), ('One', 1)] -\end{Verbatim} - - \textbf{pop( )} function is used to get the remove that particular -element and this removed element can be assigned to a new variable. But -remember only the value is stored and not the key. Because the is just a -index value. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}41}]:} \PY{n}{a2} \PY{o}{=} \PY{n}{a1}\PY{o}{.}\PY{n}{pop}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Four}\PY{l+s}{\PYZsq{}}\PY{p}{)} - \PY{k}{print} \PY{n}{a1} - \PY{k}{print} \PY{n}{a2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -\{'Five': 5, 'Three': 3, 'Two': 2, 'One': 1\} -4 - \end{Verbatim} - - - % Add a bibliography block to the postdoc - - \newpage - - \input{05} - - \end{document} diff --git a/tex/05.tex b/tex/05.tex deleted file mode 100644 index b8535de..0000000 --- a/tex/05.tex +++ /dev/null @@ -1,500 +0,0 @@ - -% Default to the notebook output style - - - - -% Inherit from the specified cell style. - - - - - - - - \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} - \definecolor{darkorange}{rgb}{.71,0.21,0.01} - \definecolor{darkgreen}{rgb}{.12,.54,.11} - \definecolor{myteal}{rgb}{.26, .44, .56} - \definecolor{gray}{gray}{0.45} - \definecolor{lightgray}{gray}{.95} - \definecolor{mediumgray}{gray}{.8} - \definecolor{inputbackground}{rgb}{.95, .95, .85} - \definecolor{outputbackground}{rgb}{.95, .95, .95} - \definecolor{traceback}{rgb}{1, .95, .95} - % ansi colors - \definecolor{red}{rgb}{.6,0,0} - \definecolor{green}{rgb}{0,.65,0} - \definecolor{brown}{rgb}{0.6,0.6,0} - \definecolor{blue}{rgb}{0,.145,.698} - \definecolor{purple}{rgb}{.698,.145,.698} - \definecolor{cyan}{rgb}{0,.698,.698} - \definecolor{lightgray}{gray}{0.5} - - % bright ansi colors - \definecolor{darkgray}{gray}{0.25} - \definecolor{lightred}{rgb}{1.0,0.39,0.28} - \definecolor{lightgreen}{rgb}{0.48,0.99,0.0} - \definecolor{lightblue}{rgb}{0.53,0.81,0.92} - \definecolor{lightpurple}{rgb}{0.87,0.63,0.87} - \definecolor{lightcyan}{rgb}{0.5,1.0,0.83} - - % commands and environments needed by pandoc snippets - % extracted from the output of `pandoc -s` - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} - % Add ',fontsize=\small' for more characters per line - \newenvironment{Shaded}{}{} - \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - \newcommand{\RegionMarkerTok}[1]{{#1}} - \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\NormalTok}[1]{{#1}} - - % Define a nice break command that doesn't care if a line doesn't already - % exist. - \def\br{\hspace*{\fill} \\* } - % Math Jax compatability definitions - \def\gt{>} - \def\lt{<} - % Document parameters - \title{} - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - - - - \begin{document} - - - \maketitle - - - - - \section{Control Flow Statements}\label{control-flow-statements} - - \subsection{If}\label{if} - - if some\_condition: - -\begin{verbatim} -algorithm -\end{verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}1}]:} \PY{n}{x} \PY{o}{=} \PY{l+m+mi}{12} - \PY{k}{if} \PY{n}{x} \PY{o}{\PYZgt{}}\PY{l+m+mi}{10}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hello}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hello - \end{Verbatim} - - \subsection{If-else}\label{if-else} - - if some\_condition: - -\begin{verbatim} -algorithm -\end{verbatim} - -else: - -\begin{verbatim} -algorithm -\end{verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}2}]:} \PY{n}{x} \PY{o}{=} \PY{l+m+mi}{12} - \PY{k}{if} \PY{n}{x} \PY{o}{\PYZgt{}} \PY{l+m+mi}{10}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{hello}\PY{l+s}{\PYZdq{}} - \PY{k}{else}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{world}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -hello - \end{Verbatim} - - \subsection{if-elif}\label{if-elif} - - if some\_condition: - -\begin{verbatim} -algorithm -\end{verbatim} - -elif some\_condition: - -\begin{verbatim} -algorithm -\end{verbatim} - -else: - -\begin{verbatim} -algorithm -\end{verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}3}]:} \PY{n}{x} \PY{o}{=} \PY{l+m+mi}{10} - \PY{n}{y} \PY{o}{=} \PY{l+m+mi}{12} - \PY{k}{if} \PY{n}{x} \PY{o}{\PYZgt{}} \PY{n}{y}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{x\PYZgt{}y}\PY{l+s}{\PYZdq{}} - \PY{k}{elif} \PY{n}{x} \PY{o}{\PYZlt{}} \PY{n}{y}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{x\PYZlt{}y}\PY{l+s}{\PYZdq{}} - \PY{k}{else}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{x=y}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -x} - \def\lt{<} - % Document parameters - \title{} - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - - - \begin{document} - - - \maketitle - - - - - \section{Functions}\label{functions} - - Most of the times, In a algorithm the statements keep repeating and it -will be a tedious job to execute the same statements again and again and -will consume a lot of memory and is not efficient. Enter Functions. - - This is the basic syntax of a function - - def funcname(arg1, arg2,\ldots{} argN): - -\begin{verbatim} -''' Document String''' - -statements - - -return -\end{verbatim} - - Read the above syntax as, A function by name ``funcname'' is defined, -which accepts arguements ``arg1,arg2,\ldots{}.argN''. The function is -documented and it is `''Document String'''. The function after executing -the statements returns a ``value''. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}1}]:} \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hey Rajath!}\PY{l+s}{\PYZdq{}} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Rajath, How do you do?}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hey Rajath! -Rajath, How do you do? - \end{Verbatim} - - Instead of writing the above two statements every single time it can be -replaced by defining a function which would do the job in just one line. - -Defining a function firstfunc(). - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}2}]:} \PY{k}{def} \PY{n+nf}{firstfunc}\PY{p}{(}\PY{p}{)}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hey Rajath!}\PY{l+s}{\PYZdq{}} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Rajath, How do you do?}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}3}]:} \PY{n}{firstfunc}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hey Rajath! -Rajath, How do you do? - \end{Verbatim} - - \textbf{firstfunc()} every time just prints the message to a single -person. We can make our function \textbf{firstfunc()} to accept -arguements which will store the name and then prints respective to that -accepted name. To do so, add a argument within the function as shown. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}4}]:} \PY{k}{def} \PY{n+nf}{firstfunc}\PY{p}{(}\PY{n}{username}\PY{p}{)}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hey}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{username} \PY{o}{+} \PY{l+s}{\PYZsq{}}\PY{l+s}{!}\PY{l+s}{\PYZsq{}} - \PY{k}{print} \PY{n}{username} \PY{o}{+} \PY{l+s}{\PYZsq{}}\PY{l+s}{,}\PY{l+s}{\PYZsq{}} \PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{How do you do?}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}5}]:} \PY{n}{name1} \PY{o}{=} \PY{n+nb}{raw\PYZus{}input}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Please enter your name : }\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Please enter your name : Guido - \end{Verbatim} - - The name ``Guido'' is actually stored in name1. So we pass this variable -to the function \textbf{firstfunc()} as the variable username because -that is the variable that is defined for this function. i.e name1 is -passed as username. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}6}]:} \PY{n}{firstfunc}\PY{p}{(}\PY{n}{name1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Hey Guido! -Guido, How do you do? - \end{Verbatim} - - Let us simplify this even further by defining another function -\textbf{secondfunc()} which accepts the name and stores it inside a -variable and then calls the \textbf{firstfunc()} from inside the -function itself. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}7}]:} \PY{k}{def} \PY{n+nf}{firstfunc}\PY{p}{(}\PY{n}{username}\PY{p}{)}\PY{p}{:} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Hey}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{username} \PY{o}{+} \PY{l+s}{\PYZsq{}}\PY{l+s}{!}\PY{l+s}{\PYZsq{}} - \PY{k}{print} \PY{n}{username} \PY{o}{+} \PY{l+s}{\PYZsq{}}\PY{l+s}{,}\PY{l+s}{\PYZsq{}} \PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{How do you do?}\PY{l+s}{\PYZdq{}} - \PY{k}{def} \PY{n+nf}{secondfunc}\PY{p}{(}\PY{p}{)}\PY{p}{:} - \PY{n}{name} \PY{o}{=} \PY{n+nb}{raw\PYZus{}input}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Please enter your name : }\PY{l+s}{\PYZdq{}}\PY{p}{)} - \PY{n}{firstfunc}\PY{p}{(}\PY{n}{name}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}8}]:} \PY{n}{secondfunc}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Please enter your name : karthik -Hey karthik! -karthik, How do you do? - \end{Verbatim} - - \subsection{Return Statement}\label{return-statement} - - When the function results in some value and that value has to be stored -in a variable or needs to be sent back or returned for further operation -to the main algorithm, return statement is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}9}]:} \PY{k}{def} \PY{n+nf}{times}\PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{)}\PY{p}{:} - \PY{n}{z} \PY{o}{=} \PY{n}{x}\PY{o}{*}\PY{n}{y} - \PY{k}{return} \PY{n}{z} -\end{Verbatim} - - The above defined \textbf{times( )} function accepts two arguements and -return the variable z which contains the result of the product of the -two arguements - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}10}]:} \PY{n}{c} \PY{o}{=} \PY{n}{times}\PY{p}{(}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)} - \PY{k}{print} \PY{n}{c} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -20 - \end{Verbatim} - - The z value is stored in variable c and can be used for further -operations. - - Instead of declaring another variable the entire statement itself can be -used in the return statement as shown. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}11}]:} \PY{k}{def} \PY{n+nf}{times}\PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{)}\PY{p}{:} - \PY{l+s+sd}{\PYZsq{}\PYZsq{}\PYZsq{}This multiplies the two input arguments\PYZsq{}\PYZsq{}\PYZsq{}} - \PY{k}{return} \PY{n}{x}\PY{o}{*}\PY{n}{y} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}12}]:} \PY{n}{c} \PY{o}{=} \PY{n}{times}\PY{p}{(}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)} - \PY{k}{print} \PY{n}{c} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -20 - \end{Verbatim} - - Since the \textbf{times( )} is now defined, we can document it as shown -above. This document is returned whenever \textbf{times( )} function is -called under \textbf{help( )} function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}13}]:} \PY{n}{help}\PY{p}{(}\PY{n}{times}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Help on function times in module \_\_main\_\_: - -times(x, y) - This multiplies the two input arguments - \end{Verbatim} - - Multiple variable can also be returned, But keep in mind the order. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}14}]:} \PY{n}{eglist} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{10}\PY{p}{,}\PY{l+m+mi}{50}\PY{p}{,}\PY{l+m+mi}{30}\PY{p}{,}\PY{l+m+mi}{12}\PY{p}{,}\PY{l+m+mi}{6}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{,}\PY{l+m+mi}{100}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}15}]:} \PY{k}{def} \PY{n+nf}{egfunc}\PY{p}{(}\PY{n}{eglist}\PY{p}{)}\PY{p}{:} - \PY{n}{highest} \PY{o}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n}{eglist}\PY{p}{)} - \PY{n}{lowest} \PY{o}{=} \PY{n+nb}{min}\PY{p}{(}\PY{n}{eglist}\PY{p}{)} - \PY{n}{first} \PY{o}{=} \PY{n}{eglist}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} - \PY{n}{last} \PY{o}{=} \PY{n}{eglist}\PY{p}{[}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{]} - \PY{k}{return} \PY{n}{highest}\PY{p}{,}\PY{n}{lowest}\PY{p}{,}\PY{n}{first}\PY{p}{,}\PY{n}{last} -\end{Verbatim} - - If the function is just called without any variable for it to be -assigned to, the result is returned inside a tuple. But if the variables -are mentioned then the result is assigned to the variable in a -particular order which is declared in the return statement. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}16}]:} \PY{n}{egfunc}\PY{p}{(}\PY{n}{eglist}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}16}]:} (100, 6, 10, 100) -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}17}]:} \PY{n}{a}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{c}\PY{p}{,}\PY{n}{d} \PY{o}{=} \PY{n}{egfunc}\PY{p}{(}\PY{n}{eglist}\PY{p}{)} - \PY{k}{print} \PY{l+s}{\PYZsq{}}\PY{l+s}{ a =}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{n}{a}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{ b =}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{ c =}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{n}{c}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s}{ d =}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{n}{d} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -a = 100 - b = 6 - c = 10 - d = 100 - \end{Verbatim} - - \subsection{Implicit arguments}\label{implicit-arguments} - - When an argument of a function is common in majority of the cases or it -is ``implicit'' this concept is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}18}]:} \PY{k}{def} \PY{n+nf}{implicitadd}\PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{o}{=}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{:} - \PY{k}{return} \PY{n}{x}\PY{o}{+}\PY{n}{y} -\end{Verbatim} - - \textbf{implicitadd( )} is a function accepts two arguments but most of -the times the first argument needs to be added just by 3. Hence the -second argument is assigned the value 3. Here the second argument is -implicit. - - Now if the second argument is not defined when calling the -\textbf{implicitadd( )} function then it considered as 3. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}19}]:} \PY{n}{implicitadd}\PY{p}{(}\PY{l+m+mi}{4}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}19}]:} 7 -\end{Verbatim} - - But if the second argument is specified then this value overrides the -implicit value assigned to the argument - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}20}]:} \PY{n}{implicitadd}\PY{p}{(}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}20}]:} 8 -\end{Verbatim} - - \subsection{Any number of arguments}\label{any-number-of-arguments} - - If the number of arguments that is to be accepted by a function is not -known then a asterisk symbol is used before the argument. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}21}]:} \PY{k}{def} \PY{n+nf}{add\PYZus{}n}\PY{p}{(}\PY{o}{*}\PY{n}{args}\PY{p}{)}\PY{p}{:} - \PY{n}{res} \PY{o}{=} \PY{l+m+mi}{0} - \PY{n}{reslist} \PY{o}{=} \PY{p}{[}\PY{p}{]} - \PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n}{args}\PY{p}{:} - \PY{n}{reslist}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{n}{i}\PY{p}{)} - \PY{k}{print} \PY{n}{reslist} - \PY{k}{return} \PY{n+nb}{sum}\PY{p}{(}\PY{n}{reslist}\PY{p}{)} -\end{Verbatim} - - The above function accepts any number of arguments, defines a list and -appends all the arguments into that list and return the sum of all the -arguments. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}22}]:} \PY{n}{add\PYZus{}n}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 2, 3, 4, 5] - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}22}]:} 15 -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}23}]:} \PY{n}{add\PYZus{}n}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 2, 3] - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}23}]:} 6 -\end{Verbatim} - - \subsection{Global and Local -Variables}\label{global-and-local-variables} - - Whatever variable is declared inside a function is local variable and -outside the function in global variable. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}24}]:} \PY{n}{eg1} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{]} -\end{Verbatim} - - In the below function we are appending a element to the declared list -inside the function. eg2 variable declared inside the function is a -local variable. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}25}]:} \PY{k}{def} \PY{n+nf}{egfunc1}\PY{p}{(}\PY{p}{)}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{thirdfunc}\PY{p}{(}\PY{n}{arg1}\PY{p}{)}\PY{p}{:} - \PY{n}{eg2} \PY{o}{=} \PY{n}{arg1}\PY{p}{[}\PY{p}{:}\PY{p}{]} - \PY{n}{eg2}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{l+m+mi}{6}\PY{p}{)} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{This is happening inside the function :}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{eg2} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{This is happening before the function is called : }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{eg1} - \PY{n}{thirdfunc}\PY{p}{(}\PY{n}{eg1}\PY{p}{)} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{This is happening outside the function :}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{eg1} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Accessing a variable declared inside the function from outside :}\PY{l+s}{\PYZdq{}} \PY{p}{,} \PY{n}{eg2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}26}]:} \PY{n}{egfunc1}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -This is happening before the function is called : [1, 2, 3, 4, 5] -This is happening inside the function : [1, 2, 3, 4, 5, 6] -This is happening outside the function : [1, 2, 3, 4, 5] -Accessing a variable declared inside the function from outside : - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] - - --------------------------------------------------------------------------- - - NameError Traceback (most recent call last) - - in () - ----> 1 egfunc1() - - - in egfunc1() - 7 thirdfunc(eg1) - 8 print "This is happening outside the function :", eg1 - ----> 9 print "Accessing a variable declared inside the function from outside :" , eg2 - - - NameError: global name 'eg2' is not defined - - \end{Verbatim} - - If a \textbf{global} variable is defined as shown in the example below -then that variable can be called from anywhere. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}27}]:} \PY{n}{eg3} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] - - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}28}]:} \PY{k}{def} \PY{n+nf}{egfunc1}\PY{p}{(}\PY{p}{)}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{thirdfunc}\PY{p}{(}\PY{n}{arg1}\PY{p}{)}\PY{p}{:} - \PY{k}{global} \PY{n}{eg2} - \PY{n}{eg2} \PY{o}{=} \PY{n}{arg1}\PY{p}{[}\PY{p}{:}\PY{p}{]} - \PY{n}{eg2}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{l+m+mi}{6}\PY{p}{)} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{This is happening inside the function :}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{eg2} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{This is happening before the function is called : }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{eg1} - \PY{n}{thirdfunc}\PY{p}{(}\PY{n}{eg1}\PY{p}{)} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{This is happening outside the function :}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{eg1} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Accessing a variable declared inside the function from outside :}\PY{l+s}{\PYZdq{}} \PY{p}{,} \PY{n}{eg2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}29}]:} \PY{n}{egfunc1}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -This is happening before the function is called : [1, 2, 3, 4, 5] -This is happening inside the function : [1, 2, 3, 4, 5, 6] -This is happening outside the function : [1, 2, 3, 4, 5] -Accessing a variable declared inside the function from outside : [1, 2, 3, 4, 5, 6] - \end{Verbatim} - - \subsection{Lambda Functions}\label{lambda-functions} - - These are small functions which are not defined with any name and carry -a single expression whose result is returned. Lambda functions comes -very handy when operating with lists. These function are defined by the -keyword \textbf{lambda} followed by the variables, a colon and the -respective expression. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}30}]:} \PY{n}{z} \PY{o}{=} \PY{k}{lambda} \PY{n}{x}\PY{p}{:} \PY{n}{x} \PY{o}{*} \PY{n}{x} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}31}]:} \PY{n}{z}\PY{p}{(}\PY{l+m+mi}{8}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}31}]:} 64 -\end{Verbatim} - - \subsubsection{map}\label{map} - - \textbf{map( )} function basically executes the function that is defined -to each of the list's element separately. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}32}]:} \PY{n}{list1} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{6}\PY{p}{,}\PY{l+m+mi}{7}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{,}\PY{l+m+mi}{9}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}33}]:} \PY{n}{eg} \PY{o}{=} \PY{n+nb}{map}\PY{p}{(}\PY{k}{lambda} \PY{n}{x}\PY{p}{:}\PY{n}{x}\PY{o}{+}\PY{l+m+mi}{2}\PY{p}{,} \PY{n}{list1}\PY{p}{)} - \PY{k}{print} \PY{n}{eg} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[3, 4, 5, 6, 7, 8, 9, 10, 11] - \end{Verbatim} - - You can also add two lists. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}34}]:} \PY{n}{list2} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{9}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{,}\PY{l+m+mi}{7}\PY{p}{,}\PY{l+m+mi}{6}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{]} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}35}]:} \PY{n}{eg2} \PY{o}{=} \PY{n+nb}{map}\PY{p}{(}\PY{k}{lambda} \PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{:}\PY{n}{x}\PY{o}{+}\PY{n}{y}\PY{p}{,} \PY{n}{list1}\PY{p}{,}\PY{n}{list2}\PY{p}{)} - \PY{k}{print} \PY{n}{eg2} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[10, 10, 10, 10, 10, 10, 10, 10, 10] - \end{Verbatim} - - Not only lambda function but also other built in functions can also be -used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}36}]:} \PY{n}{eg3} \PY{o}{=} \PY{n+nb}{map}\PY{p}{(}\PY{n+nb}{str}\PY{p}{,}\PY{n}{eg2}\PY{p}{)} - \PY{k}{print} \PY{n}{eg3} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -['10', '10', '10', '10', '10', '10', '10', '10', '10'] - \end{Verbatim} - - \subsubsection{filter}\label{filter} - - \textbf{filter( )} function is used to filter out the values in a list. -Note that \textbf{filter()} function returns the result in a new list. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}37}]:} \PY{n}{list1} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{6}\PY{p}{,}\PY{l+m+mi}{7}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{,}\PY{l+m+mi}{9}\PY{p}{]} -\end{Verbatim} - - To get the elements which are less than 5, - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}38}]:} \PY{n+nb}{filter}\PY{p}{(}\PY{k}{lambda} \PY{n}{x}\PY{p}{:}\PY{n}{x}\PY{o}{\PYZlt{}}\PY{l+m+mi}{5}\PY{p}{,}\PY{n}{list1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}38}]:} [1, 2, 3, 4] -\end{Verbatim} - - Notice what happens when \textbf{map()} is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}39}]:} \PY{n+nb}{map}\PY{p}{(}\PY{k}{lambda} \PY{n}{x}\PY{p}{:}\PY{n}{x}\PY{o}{\PYZlt{}}\PY{l+m+mi}{5}\PY{p}{,} \PY{n}{list1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}39}]:} [True, True, True, True, False, False, False, False, False] -\end{Verbatim} - - We can conclude that, whatever is returned true in \textbf{map( )} -function that particular element is returned when \textbf{filter( )} -function is used. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}40}]:} \PY{n+nb}{filter}\PY{p}{(}\PY{k}{lambda} \PY{n}{x}\PY{p}{:}\PY{n}{x}\PY{o}{\PYZpc{}}\PY{k}{4}==0,list1) -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}40}]:} [4, 8] -\end{Verbatim} - - - % Add a bibliography block to the postdoc - - \newpage - - \input{07} - - \end{document} diff --git a/tex/07.tex b/tex/07.tex deleted file mode 100644 index cd3ee46..0000000 --- a/tex/07.tex +++ /dev/null @@ -1,748 +0,0 @@ - -% Default to the notebook output style - - - - -% Inherit from the specified cell style. - - - - - - - - \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} - \definecolor{darkorange}{rgb}{.71,0.21,0.01} - \definecolor{darkgreen}{rgb}{.12,.54,.11} - \definecolor{myteal}{rgb}{.26, .44, .56} - \definecolor{gray}{gray}{0.45} - \definecolor{lightgray}{gray}{.95} - \definecolor{mediumgray}{gray}{.8} - \definecolor{inputbackground}{rgb}{.95, .95, .85} - \definecolor{outputbackground}{rgb}{.95, .95, .95} - \definecolor{traceback}{rgb}{1, .95, .95} - % ansi colors - \definecolor{red}{rgb}{.6,0,0} - \definecolor{green}{rgb}{0,.65,0} - \definecolor{brown}{rgb}{0.6,0.6,0} - \definecolor{blue}{rgb}{0,.145,.698} - \definecolor{purple}{rgb}{.698,.145,.698} - \definecolor{cyan}{rgb}{0,.698,.698} - \definecolor{lightgray}{gray}{0.5} - - % bright ansi colors - \definecolor{darkgray}{gray}{0.25} - \definecolor{lightred}{rgb}{1.0,0.39,0.28} - \definecolor{lightgreen}{rgb}{0.48,0.99,0.0} - \definecolor{lightblue}{rgb}{0.53,0.81,0.92} - \definecolor{lightpurple}{rgb}{0.87,0.63,0.87} - \definecolor{lightcyan}{rgb}{0.5,1.0,0.83} - - % commands and environments needed by pandoc snippets - % extracted from the output of `pandoc -s` - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} - % Add ',fontsize=\small' for more characters per line - \newenvironment{Shaded}{}{} - \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} - \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} - \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} - \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} - \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} - \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} - \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} - \newcommand{\RegionMarkerTok}[1]{{#1}} - \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} - \newcommand{\NormalTok}[1]{{#1}} - - % Define a nice break command that doesn't care if a line doesn't already - % exist. - \def\br{\hspace*{\fill} \\* } - % Math Jax compatability definitions - \def\gt{>} - \def\lt{<} - % Document parameters - \title{} - - - - - % Pygments definitions - -\makeatletter -\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% - \let\PY@ul=\relax \let\PY@tc=\relax% - \let\PY@bc=\relax \let\PY@ff=\relax} -\def\PY@tok#1{\csname PY@tok@#1\endcsname} -\def\PY@toks#1+{\ifx\relax#1\empty\else% - \PY@tok{#1}\expandafter\PY@toks\fi} -\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% - \PY@it{\PY@bf{\PY@ff{#1}}}}}}} -\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} - -\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} -\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} -\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} -\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} -\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} -\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} -\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} -\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} -\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} -\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} -\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} -\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} -\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} -\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} -\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} -\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} -\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} -\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} -\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} -\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} -\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} -\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} -\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} -\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} - -\def\PYZbs{\char`\\} -\def\PYZus{\char`\_} -\def\PYZob{\char`\{} -\def\PYZcb{\char`\}} -\def\PYZca{\char`\^} -\def\PYZam{\char`\&} -\def\PYZlt{\char`\<} -\def\PYZgt{\char`\>} -\def\PYZsh{\char`\#} -\def\PYZpc{\char`\%} -\def\PYZdl{\char`\$} -\def\PYZhy{\char`\-} -\def\PYZsq{\char`\'} -\def\PYZdq{\char`\"} -\def\PYZti{\char`\~} -% for compatibility with earlier versions -\def\PYZat{@} -\def\PYZlb{[} -\def\PYZrb{]} -\makeatother - - - % Exact colors from NB - \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} - \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} - - - - - % Prevent overflowing lines due to hard-to-break entities - \sloppy - % Setup hyperref package - \hypersetup{ - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - } - % Slightly bigger margins than the latex defaults - - - - \begin{document} - - - \maketitle - - - - - \section{Classes}\label{classes} - - Variables, Lists, Dictionaries etc in python is a object. Without -getting into the theory part of Object Oriented Programming, explanation -of the concepts will be done along this tutorial. - - A class is declared as follows - - class class\_name: - -\begin{verbatim} -Functions -\end{verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}1}]:} \PY{k}{class} \PY{n+nc}{FirstClass}\PY{p}{:} - \PY{k}{pass} -\end{Verbatim} - - \textbf{pass} in python means do nothing. - - Above, a class object named ``FirstClass'' is declared now consider a -``egclass'' which has all the characteristics of ``FirstClass''. So all -you have to do is, equate the ``egclass'' to ``FirstClass''. In python -jargon this is called as creating an instance. ``egclass'' is the -instance of ``FirstClass'' - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}2}]:} \PY{n}{egclass} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}3}]:} \PY{n+nb}{type}\PY{p}{(}\PY{n}{egclass}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}3}]:} instance -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}4}]:} \PY{n+nb}{type}\PY{p}{(}\PY{n}{FirstClass}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}4}]:} classobj -\end{Verbatim} - - Now let us add some ``functionality'' to the class. So that our -``FirstClass'' is defined in a better way. A function inside a class is -called as a ``Method'' of that class - - Most of the classes will have a function named ``\_\_init\_\_''. These -are called as magic methods. In this method you basically initialize the -variables of that class or any other initial algorithms which is -applicable to all methods is specified in this method. A variable inside -a class is called an attribute. - - These helps simplify the process of initializing a instance. For -example, - -Without the use of magic method or \_\_init\_\_ which is otherwise -called as constructors. One had to define a \textbf{init( )} method and -call the \textbf{init( )} function. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor} }]:} \PY{n}{eg0} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{p}{)} - \PY{n}{eg0}\PY{o}{.}\PY{n}{init}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - But when the constructor is defined the \_\_init\_\_ is called thus -intializing the instance created. - - We will make our ``FirstClass'' to accept two variables name and symbol. - -I will be explaining about the ``self'' in a while. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}6}]:} \PY{k}{class} \PY{n+nc}{FirstClass}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{name}\PY{p}{,}\PY{n}{symbol}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name} \PY{o}{=} \PY{n}{name} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} \PY{o}{=} \PY{n}{symbol} -\end{Verbatim} - - Now that we have defined a function and added the \_\_init\_\_ method. -We can create a instance of FirstClass which now accepts two arguments. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}7}]:} \PY{n}{eg1} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{one}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} - \PY{n}{eg2} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{two}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}8}]:} \PY{k}{print} \PY{n}{eg1}\PY{o}{.}\PY{n}{name}\PY{p}{,} \PY{n}{eg1}\PY{o}{.}\PY{n}{symbol} - \PY{k}{print} \PY{n}{eg2}\PY{o}{.}\PY{n}{name}\PY{p}{,} \PY{n}{eg2}\PY{o}{.}\PY{n}{symbol} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -one 1 -two 2 - \end{Verbatim} - - \textbf{dir( )} function comes very handy in looking into what the class -contains and what all method it offers - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}9}]:} \PY{n+nb}{dir}\PY{p}{(}\PY{n}{FirstClass}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}9}]:} ['\_\_doc\_\_', '\_\_init\_\_', '\_\_module\_\_'] -\end{Verbatim} - - \textbf{dir( )} of an instance also shows it's defined attributes. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}10}]:} \PY{n+nb}{dir}\PY{p}{(}\PY{n}{eg1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}10}]:} ['\_\_doc\_\_', '\_\_init\_\_', '\_\_module\_\_', 'name', 'symbol'] -\end{Verbatim} - - Changing the FirstClass function a bit, - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}11}]:} \PY{k}{class} \PY{n+nc}{FirstClass}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{name}\PY{p}{,}\PY{n}{symbol}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{n} \PY{o}{=} \PY{n}{name} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{s} \PY{o}{=} \PY{n}{symbol} -\end{Verbatim} - - Changing self.name and self.symbol to self.n and self.s respectively -will yield, - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}12}]:} \PY{n}{eg1} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{one}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} - \PY{n}{eg2} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{two}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}13}]:} \PY{k}{print} \PY{n}{eg1}\PY{o}{.}\PY{n}{name}\PY{p}{,} \PY{n}{eg1}\PY{o}{.}\PY{n}{symbol} - \PY{k}{print} \PY{n}{eg2}\PY{o}{.}\PY{n}{name}\PY{p}{,} \PY{n}{eg2}\PY{o}{.}\PY{n}{symbol} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] - - --------------------------------------------------------------------------- - - AttributeError Traceback (most recent call last) - - in () - ----> 1 print eg1.name, eg1.symbol - 2 print eg2.name, eg2.symbol - - - AttributeError: FirstClass instance has no attribute 'name' - - \end{Verbatim} - - AttributeError, Remember variables are nothing but attributes inside a -class? So this means we have not given the correct attribute for the -instance. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}14}]:} \PY{n+nb}{dir}\PY{p}{(}\PY{n}{eg1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}14}]:} ['\_\_doc\_\_', '\_\_init\_\_', '\_\_module\_\_', 'n', 's'] -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}15}]:} \PY{k}{print} \PY{n}{eg1}\PY{o}{.}\PY{n}{n}\PY{p}{,} \PY{n}{eg1}\PY{o}{.}\PY{n}{s} - \PY{k}{print} \PY{n}{eg2}\PY{o}{.}\PY{n}{n}\PY{p}{,} \PY{n}{eg2}\PY{o}{.}\PY{n}{s} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -one 1 -two 2 - \end{Verbatim} - - So now we have solved the error. Now let us compare the two examples -that we saw. - -When I declared self.name and self.symbol, there was no attribute error -for eg1.name and eg1.symbol and when I declared self.n and self.s, there -was no attribute error for eg1.n and eg1.s - -From the above we can conclude that self is nothing but the instance -itself. - -Remember, self is not predefined it is userdefined. You can make use of -anything you are comfortable with. But it has become a common practice -to use self. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}16}]:} \PY{k}{class} \PY{n+nc}{FirstClass}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n}{asdf1234}\PY{p}{,}\PY{n}{name}\PY{p}{,}\PY{n}{symbol}\PY{p}{)}\PY{p}{:} - \PY{n}{asdf1234}\PY{o}{.}\PY{n}{n} \PY{o}{=} \PY{n}{name} - \PY{n}{asdf1234}\PY{o}{.}\PY{n}{s} \PY{o}{=} \PY{n}{symbol} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}17}]:} \PY{n}{eg1} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{one}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} - \PY{n}{eg2} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{two}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}18}]:} \PY{k}{print} \PY{n}{eg1}\PY{o}{.}\PY{n}{n}\PY{p}{,} \PY{n}{eg1}\PY{o}{.}\PY{n}{s} - \PY{k}{print} \PY{n}{eg2}\PY{o}{.}\PY{n}{n}\PY{p}{,} \PY{n}{eg2}\PY{o}{.}\PY{n}{s} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -one 1 -two 2 - \end{Verbatim} - - Since eg1 and eg2 are instances of FirstClass it need not necessarily be -limited to FirstClass itself. It might extend itself by declaring other -attributes without having the attribute to be declared inside the -FirstClass. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}19}]:} \PY{n}{eg1}\PY{o}{.}\PY{n}{cube} \PY{o}{=} \PY{l+m+mi}{1} - \PY{n}{eg2}\PY{o}{.}\PY{n}{cube} \PY{o}{=} \PY{l+m+mi}{8} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}20}]:} \PY{n+nb}{dir}\PY{p}{(}\PY{n}{eg1}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}20}]:} ['\_\_doc\_\_', '\_\_init\_\_', '\_\_module\_\_', 'cube', 'n', 's'] -\end{Verbatim} - - Just like global and local variables as we saw earlier, even classes -have it's own types of variables. - -Class Attribute : attributes defined outside the method and is -applicable to all the instances. - -Instance Attribute : attributes defined inside a method and is -applicable to only that method and is unique to each instance. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}21}]:} \PY{k}{class} \PY{n+nc}{FirstClass}\PY{p}{:} - \PY{n}{test} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{test}\PY{l+s}{\PYZsq{}} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{name}\PY{p}{,}\PY{n}{symbol}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name} \PY{o}{=} \PY{n}{name} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} \PY{o}{=} \PY{n}{symbol} -\end{Verbatim} - - Here test is a class attribute and name is a instance attribute. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}22}]:} \PY{n}{eg3} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Three}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}23}]:} \PY{k}{print} \PY{n}{eg3}\PY{o}{.}\PY{n}{test}\PY{p}{,} \PY{n}{eg3}\PY{o}{.}\PY{n}{name} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -test Three - \end{Verbatim} - - Let us add some more methods to FirstClass. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}24}]:} \PY{k}{class} \PY{n+nc}{FirstClass}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{name}\PY{p}{,}\PY{n}{symbol}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name} \PY{o}{=} \PY{n}{name} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} \PY{o}{=} \PY{n}{symbol} - \PY{k}{def} \PY{n+nf}{square}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{)}\PY{p}{:} - \PY{k}{return} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} \PY{o}{*} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} - \PY{k}{def} \PY{n+nf}{cube}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{)}\PY{p}{:} - \PY{k}{return} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} \PY{o}{*} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} \PY{o}{*} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} - \PY{k}{def} \PY{n+nf}{multiply}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{x}\PY{p}{)}\PY{p}{:} - \PY{k}{return} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{symbol} \PY{o}{*} \PY{n}{x} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}25}]:} \PY{n}{eg4} \PY{o}{=} \PY{n}{FirstClass}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Five}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}26}]:} \PY{k}{print} \PY{n}{eg4}\PY{o}{.}\PY{n}{square}\PY{p}{(}\PY{p}{)} - \PY{k}{print} \PY{n}{eg4}\PY{o}{.}\PY{n}{cube}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -25 -125 - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}27}]:} \PY{n}{eg4}\PY{o}{.}\PY{n}{multiply}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}27}]:} 10 -\end{Verbatim} - - The above can also be written as, - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}28}]:} \PY{n}{FirstClass}\PY{o}{.}\PY{n}{multiply}\PY{p}{(}\PY{n}{eg4}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}28}]:} 10 -\end{Verbatim} - - \subsection{Inheritance}\label{inheritance} - - There might be cases where a new class would have all the previous -characteristics of an already defined class. So the new class can -``inherit'' the previous class and add it's own methods to it. This is -called as inheritance. - - Consider class SoftwareEngineer which has a method salary. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}29}]:} \PY{k}{class} \PY{n+nc}{SoftwareEngineer}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{name}\PY{p}{,}\PY{n}{age}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name} \PY{o}{=} \PY{n}{name} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{age} \PY{o}{=} \PY{n}{age} - \PY{k}{def} \PY{n+nf}{salary}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{value}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{money} \PY{o}{=} \PY{n}{value} - \PY{k}{print} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name}\PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{earns}\PY{l+s}{\PYZdq{}}\PY{p}{,}\PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{money} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}30}]:} \PY{n}{a} \PY{o}{=} \PY{n}{SoftwareEngineer}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Kartik}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{26}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}31}]:} \PY{n}{a}\PY{o}{.}\PY{n}{salary}\PY{p}{(}\PY{l+m+mi}{40000}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Kartik earns 40000 - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}32}]:} \PY{n+nb}{dir}\PY{p}{(}\PY{n}{SoftwareEngineer}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}32}]:} ['\_\_doc\_\_', '\_\_init\_\_', '\_\_module\_\_', 'salary'] -\end{Verbatim} - - Now consider another class Artist which tells us about the amount of -money an artist earns and his artform. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}33}]:} \PY{k}{class} \PY{n+nc}{Artist}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{name}\PY{p}{,}\PY{n}{age}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name} \PY{o}{=} \PY{n}{name} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{age} \PY{o}{=} \PY{n}{age} - \PY{k}{def} \PY{n+nf}{money}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{value}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{money} \PY{o}{=} \PY{n}{value} - \PY{k}{print} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name}\PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{earns}\PY{l+s}{\PYZdq{}}\PY{p}{,}\PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{money} - \PY{k}{def} \PY{n+nf}{artform}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{job}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{job} \PY{o}{=} \PY{n}{job} - \PY{k}{print} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name}\PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{is a}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{job} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}34}]:} \PY{n}{b} \PY{o}{=} \PY{n}{Artist}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Nitin}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{20}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}35}]:} \PY{n}{b}\PY{o}{.}\PY{n}{money}\PY{p}{(}\PY{l+m+mi}{50000}\PY{p}{)} - \PY{n}{b}\PY{o}{.}\PY{n}{artform}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Musician}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Nitin earns 50000 -Nitin is a Musician - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}36}]:} \PY{n+nb}{dir}\PY{p}{(}\PY{n}{Artist}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}36}]:} ['\_\_doc\_\_', '\_\_init\_\_', '\_\_module\_\_', 'artform', 'money'] -\end{Verbatim} - - money method and salary method are the same. So we can generalize the -method to salary and inherit the SoftwareEngineer class to Artist class. -Now the artist class becomes, - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}37}]:} \PY{k}{class} \PY{n+nc}{Artist}\PY{p}{(}\PY{n}{SoftwareEngineer}\PY{p}{)}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{artform}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{job}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{job} \PY{o}{=} \PY{n}{job} - \PY{k}{print} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name}\PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{is a}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{job} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}38}]:} \PY{n}{c} \PY{o}{=} \PY{n}{Artist}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Nishanth}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{21}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}39}]:} \PY{n+nb}{dir}\PY{p}{(}\PY{n}{Artist}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}39}]:} ['\_\_doc\_\_', '\_\_init\_\_', '\_\_module\_\_', 'artform', 'salary'] -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}40}]:} \PY{n}{c}\PY{o}{.}\PY{n}{salary}\PY{p}{(}\PY{l+m+mi}{60000}\PY{p}{)} - \PY{n}{c}\PY{o}{.}\PY{n}{artform}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Dancer}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Nishanth earns 60000 -Nishanth is a Dancer - \end{Verbatim} - - Suppose say while inheriting a particular method is not suitable for the -new class. One can override this method by defining again that method -with the same name inside the new class. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}41}]:} \PY{k}{class} \PY{n+nc}{Artist}\PY{p}{(}\PY{n}{SoftwareEngineer}\PY{p}{)}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{artform}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{job}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{job} \PY{o}{=} \PY{n}{job} - \PY{k}{print} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name}\PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{is a}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{job} - \PY{k}{def} \PY{n+nf}{salary}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{value}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{money} \PY{o}{=} \PY{n}{value} - \PY{k}{print} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{name}\PY{p}{,}\PY{l+s}{\PYZdq{}}\PY{l+s}{earns}\PY{l+s}{\PYZdq{}}\PY{p}{,}\PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{money} - \PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{I am overriding the SoftwareEngineer class}\PY{l+s}{\PYZsq{}}\PY{l+s}{s salary method}\PY{l+s}{\PYZdq{}} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}42}]:} \PY{n}{c} \PY{o}{=} \PY{n}{Artist}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Nishanth}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+m+mi}{21}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}43}]:} \PY{n}{c}\PY{o}{.}\PY{n}{salary}\PY{p}{(}\PY{l+m+mi}{60000}\PY{p}{)} - \PY{n}{c}\PY{o}{.}\PY{n}{artform}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{Dancer}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -Nishanth earns 60000 -I am overriding the SoftwareEngineer class's salary method -Nishanth is a Dancer - \end{Verbatim} - - If not sure how many times methods will be called it will become -difficult to declare so many variables to carry each result hence it is -better to declare a list and append the result. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}44}]:} \PY{k}{class} \PY{n+nc}{emptylist}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{data} \PY{o}{=} \PY{p}{[}\PY{p}{]} - \PY{k}{def} \PY{n+nf}{one}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,}\PY{n}{x}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{data}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{n}{x}\PY{p}{)} - \PY{k}{def} \PY{n+nf}{two}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{x} \PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{data}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{n}{x}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)} - \PY{k}{def} \PY{n+nf}{three}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{x}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{data}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{n}{x}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{3}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}45}]:} \PY{n}{xc} \PY{o}{=} \PY{n}{emptylist}\PY{p}{(}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}46}]:} \PY{n}{xc}\PY{o}{.}\PY{n}{one}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)} - \PY{k}{print} \PY{n}{xc}\PY{o}{.}\PY{n}{data} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1] - \end{Verbatim} - - Since xc.data is a list direct list operations can also be performed. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}47}]:} \PY{n}{xc}\PY{o}{.}\PY{n}{data}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{l+m+mi}{8}\PY{p}{)} - \PY{k}{print} \PY{n}{xc}\PY{o}{.}\PY{n}{data} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 8] - \end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}48}]:} \PY{n}{xc}\PY{o}{.}\PY{n}{two}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)} - \PY{k}{print} \PY{n}{xc}\PY{o}{.}\PY{n}{data} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -[1, 8, 9] - \end{Verbatim} - - If the number of input arguments varies from instance to instance -asterisk can be used as shown. - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}49}]:} \PY{k}{class} \PY{n+nc}{NotSure}\PY{p}{:} - \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{o}{*}\PY{n}{args}\PY{p}{)}\PY{p}{:} - \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{data} \PY{o}{=} \PY{l+s}{\PYZsq{}}\PY{l+s}{\PYZsq{}}\PY{o}{.}\PY{n}{join}\PY{p}{(}\PY{n+nb}{list}\PY{p}{(}\PY{n}{args}\PY{p}{)}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}50}]:} \PY{n}{yz} \PY{o}{=} \PY{n}{NotSure}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{I}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{Do}\PY{l+s}{\PYZsq{}} \PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{Not}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{Know}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{What}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{To}\PY{l+s}{\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Type}\PY{l+s}{\PYZsq{}}\PY{p}{)} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}51}]:} \PY{n}{yz}\PY{o}{.}\PY{n}{data} -\end{Verbatim} - - \begin{Verbatim}[commandchars=\\\{\}] -{\color{outcolor}Out[{\color{outcolor}51}]:} 'IDoNotKnowWhatToType' -\end{Verbatim} - - \section{Where to go from here?}\label{where-to-go-from-here} - - Practice alone can help you get the hang of python. Give your self -problem statements and solve them. You can also sign up to any -competitive coding platform for problem statements. The more you code -the more you discover and the more you start appreciating the language. - -Now that you have been introduced to python, You can try out the -different python libraries in the field of your interest. I highly -recommend you to check out this curated list of Python frameworks, -libraries and software http://awesome-python.com - -The official python documentation : https://docs.python.org/2/ - -Enjoy solving problem statements because life is short, you need python! - -Peace. - -Rajath Kumar M.P ( rajathkumar dot exe at gmail dot com) - - - % Add a bibliography block to the postdoc - - - - \end{document} From a22690af67b23b7d73f477878982a3c874b6b3b7 Mon Sep 17 00:00:00 2001 From: Austin Bingham Date: Thu, 19 Apr 2018 22:51:11 +0200 Subject: [PATCH 10/10] Updated the README. --- README.md | 93 +------------------------------------------------------ 1 file changed, 1 insertion(+), 92 deletions(-) diff --git a/README.md b/README.md index 169e342..0bb8a3c 100644 --- a/README.md +++ b/README.md @@ -1,92 +1 @@ - -# Python-Lectures - - - - -Note: [Andreas Ernst](http://users.monash.edu/~andrease/) has improvised and updated the repo to python 3, [Link](https://gitlab.erc.monash.edu.au/andrease/Python4Maths/tree/master) - -## Introduction - -Python is a modern, robust, high level programming language. It is very easy to pick up even if you are completely new to programming. - -## Installation - -Mac OS X and Linux comes pre installed with python. Windows users can download python from https://www.python.org/downloads/ . - -To install IPython run, - - $ pip install ipython[all] - -This will install all the necessary dependencies for the notebook, qtconsole, tests etc. - -### Installation from unofficial distributions - -Installing all the necessary libraries might prove troublesome. Anaconda and Canopy comes pre packaged with all the necessary python libraries and also IPython. - -#### Anaconda - -Download Anaconda from https://www.continuum.io/downloads - -Anaconda is completely free and includes more than 300 python packages. Both python 2.7 and 3.4 options are available. - -#### Canopy - -Download Canopy from https://store.enthought.com/downloads/#default - -Canopy has a premium version which offers 300+ python packages. But the free version works just fine. Canopy as of now supports only 2.7 but it comes with its own text editor and IPython environment. - -## Launching IPython Notebook - -From the terminal - - ipython notebook - -In Canopy and Anaconda, Open the respective terminals and execute the above. - -## How to learn from this resource? - -You can download the pdf copy from here : [Get Started with Python](https://github.com/rajathkumarmp/Python-Lectures/blob/master/Python.pdf) - -It is better to download all the ipython notebooks from this repository https://github.com/rajathkumarmp/Python-Lectures and learn it on the notebook itself rather than having to refer to a pdf. - -Launch ipython notebook from the folder which contains the notebooks. Open each one of them - - Cell > All Output > Clear - -This will clear all the outputs and now you can understand each statement and learn interactively. - -## Table of contents - - - -[00 - Introduction and Installation](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/00.ipynb) - - -[01 - Variable, Operators and Built-in Functions](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/01.ipynb) - - -[02 - Print Statement, Precision and FieldWidth](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/02.ipynb) - - -[03 - Lists, Tuples and Sets](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/03.ipynb) - - -[04 - Strings and Dictionaries](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/04.ipynb) - - -[05 - Control Flow Statements](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/05.ipynb) - - -[06 - Functions](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/06.ipynb) - - -[07 - Classes](http://nbviewer.ipython.org/github/rajathkumarmp/Python-Lectures/blob/master/07.ipynb) - - - -These are online read-only versions. - -## License - -This work is licensed under the Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/ +Jupyter notebooks covering the very basics of Python 3.