{ "metadata": { "celltoolbar": "Slideshow", "name": "", "signature": "sha256:f9395e242eb69c9742fbe741d89f307c75641c7604b3072170a58ae3c93b42b6" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "This notebook was put together by [Jake Vanderplas](http://www.vanderplas.com) for UW's [Astro 599](http://www.astro.washington.edu/users/vanderplas/Astr599_2014/) course. Source and licensing info is on [GitHub](https://github.com/jakevdp/2014_fall_ASTR599/)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%run talktools.py" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 122 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Basic Training\n", "=============\n", "\n", "\n", "\n", "Much of this material thanks to http://www.pythonbootcamp.info/\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Outline\n", "\n", "- ### Python is easy! Hello world revisited\n", "- ### Calculator / basic math\n", "- ### Strings\n", "- ### Variables\n", "- ### Basic control statements (indentation!)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Hello World!\n", "\n", "We saw before how easy a hello world script is to create in Python:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"Hello World!\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Hello World!\n" ] } ], "prompt_number": 123 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Some other languages...\n", "[http://www.roesler-ac.de/wolfram/hello.htm](http://www.roesler-ac.de/wolfram/hello.htm)\n", "\n", "### Python\n", "file: ``hello.py``\n", "```\n", "print \"Hello World!\"\n", "```\n", "
\n", "```\n", "[~]> python hello.py\n", "```\n", "
\n", "\n", "### Java\n", "file: ``hello.java``\n", "```\n", "class HelloWorld {\n", " static public void main( String args[] ) {\n", " System.out.println( \"Hello World!\" );\n", " }\n", "}\n", "```\n", "
\n", "```\n", "[~]> javac hello.java\n", "[~]> java HelloWorld\n", "Hello World!\n", "```\n", "
\n", "\n", "### C++\n", "file: ``hello.cpp``\n", "```\n", "#include \n", "int main()\n", "{\n", " std::cout << \"Hello World!\" << std::endl;\n", "}\n", "```\n", "
\n", "```\n", "[~]> g++ -o hello hello.cpp\n", "[~]> ./hello\n", "Hello World!\n", "```\n", "
\n", "\n", "### Fortran\n", "file: ``hello.f``\n", "```\n", " PROGRAM HELLO\n", " WRITE (*,100)\n", " STOP\n", "100 FORMAT (' Hello World! ' /)\n", " END\n", "```\n", "
\n", "```\n", "[~]> g77 -o hello hello.f\n", "[~]> ./hello\n", "Hello World!\n", "```\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Two Points\n", "- Python provides interaction in both development and execution\n", "- Executing interactively is basically the same thing as executing a script, line-by-line" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Types and Operations: Python as a Calculator\n", "\n", "### We'll talk about a few types here:\n", "\n", "- ``int``: integer\n", "- ``float``: floating point (decimal)\n", "- ``long``: long integer\n", "- ``complex``: complex number (decimal, not integer)\n", "\n", "### We'll also introduce the basic arithmetic operations\n", "\n", "- ``+`` : addition\n", "- ``-``: subtraction\n", "- ``/``: division\n", "- ``*``: multiplication\n", "- ``%``: modulus (remainder)\n", "- ``**``: exponentiation\n", "\n", "As we go through this, note carefully how these operations interact with various types" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(2 + 2)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4\n" ] } ], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "2 + 2" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ "4" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "print(2.1 + 2)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4.1\n" ] } ], "prompt_number": 126 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Careful: floats are limited by their 16-bit representation (same as in other languages)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(4.0999999999999995)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4.1\n" ] } ], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "2.1 + 2 == 4.0999999999999995" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 128, "text": [ "True" ] } ], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "4 * 2" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 129, "text": [ "8" ] } ], "prompt_number": 129 }, { "cell_type": "code", "collapsed": false, "input": [ "4 / 2" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 130, "text": [ "2.0" ] } ], "prompt_number": 130 }, { "cell_type": "code", "collapsed": false, "input": [ "5 / 2 # Note this is different in Python 2.x!!" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 131, "text": [ "2.5" ] } ], "prompt_number": 131 }, { "cell_type": "code", "collapsed": false, "input": [ "5 // 2" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 132, "text": [ "2" ] } ], "prompt_number": 132 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Integer operations result in integers in Python 2.x, but floats in Python 3.x." ] }, { "cell_type": "code", "collapsed": false, "input": [ "5 % 2 # modulus (remainder after division)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 133, "text": [ "1" ] } ], "prompt_number": 133 }, { "cell_type": "code", "collapsed": false, "input": [ "5 ** 2" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 134, "text": [ "25" ] } ], "prompt_number": 134 }, { "cell_type": "code", "collapsed": false, "input": [ "# or you can use the pow() function\n", "pow(5, 2)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 135, "text": [ "25" ] } ], "prompt_number": 135 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Indentation Matters!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(2 + 2)\n", " 3 + 3" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "ename": "IndentationError", "evalue": "unexpected indent (, line 2)", "output_type": "pyerr", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m 3 + 3\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m unexpected indent\n" ] } ], "prompt_number": 136 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Use ``#`` for comments\n", "\n", "- Everything after the ``#`` will be ignored" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(1 + 1) # easy arithmetic" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n" ] } ], "prompt_number": 137 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Complex types ###" ] }, { "cell_type": "code", "collapsed": false, "input": [ "complex(1,2)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 138, "text": [ "(1+2j)" ] } ], "prompt_number": 138 }, { "cell_type": "code", "collapsed": false, "input": [ "1+2j" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 139, "text": [ "(1+2j)" ] } ], "prompt_number": 139 }, { "cell_type": "code", "collapsed": false, "input": [ "1 + 2j - 2j" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 140, "text": [ "(1+0j)" ] } ], "prompt_number": 140 }, { "cell_type": "code", "collapsed": false, "input": [ "(3.0*10.0 - 25.0)/5.0" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 141, "text": [ "1.0" ] } ], "prompt_number": 141 }, { "cell_type": "code", "collapsed": false, "input": [ "print(3.085e18 * 1e6) # this is a Megaparsec in units of cm!" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3.085e+24\n" ] } ], "prompt_number": 142 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Assigning variables" ] }, { "cell_type": "code", "collapsed": false, "input": [ "t = 1.0 # declare a variable t (time)\n", "accel = 9.8 # acceleration in units of m/s^2\n", "\n", "# distance travelled in time t seconds is 1/2 a*t**2\n", "dist = 0.5*accel*t*t\n", "print(dist) # this is the distance in meters" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4.9\n" ] } ], "prompt_number": 143 }, { "cell_type": "code", "collapsed": false, "input": [ "dist1 = accel*(t**2)/2\n", "print(dist1)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4.9\n" ] } ], "prompt_number": 144 }, { "cell_type": "code", "collapsed": false, "input": [ "dist2 = 0.5*accel*pow(t,2)\n", "print(dist2)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4.9\n" ] } ], "prompt_number": 145 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "A nice trick that other languages can't do:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x, y = 4, 50\n", "print(x)\n", "print(y)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4\n", "50\n" ] } ], "prompt_number": 146 }, { "cell_type": "code", "collapsed": false, "input": [ "x, y = y, x # easy swap!\n", "print(x)\n", "print(y)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "50\n", "4\n" ] } ], "prompt_number": 147 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Each operator has an operate-and-assign version" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = 4\n", "x += 8 # same as x = x + 8\n", "print(x)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "12\n" ] } ], "prompt_number": 148 }, { "cell_type": "code", "collapsed": false, "input": [ "x *= 0.2 # x is upgraded to a float!\n", "print(x)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2.4000000000000004\n" ] } ], "prompt_number": 149 }, { "cell_type": "code", "collapsed": false, "input": [ "x %= 1\n", "print(x)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.40000000000000036\n" ] } ], "prompt_number": 150 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Bitwise Operators\n", "\n", "You might also come across bitwise operators:\n", "\n", "- ``&``: bitwise and\n", "- ``|``: bitwise or\n", "- ``^``: bitwise xor\n", "- ``<<``: bit-shift left\n", "- ``>>``: bit-shift right\n", "\n", "All these make more sense if you think about binary representations:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "bin(14) # print binary representation" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 151, "text": [ "'0b1110'" ] } ], "prompt_number": 151 }, { "cell_type": "code", "collapsed": false, "input": [ "bin(13)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 152, "text": [ "'0b1101'" ] } ], "prompt_number": 152 }, { "cell_type": "code", "collapsed": false, "input": [ "14 & 13" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 153, "text": [ "12" ] } ], "prompt_number": 153 }, { "cell_type": "code", "collapsed": false, "input": [ "bin(14 & 13)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 154, "text": [ "'0b1100'" ] } ], "prompt_number": 154 }, { "cell_type": "code", "collapsed": false, "input": [ "14 | 13" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 155, "text": [ "15" ] } ], "prompt_number": 155 }, { "cell_type": "code", "collapsed": false, "input": [ "bin(14 | 13)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 156, "text": [ "'0b1111'" ] } ], "prompt_number": 156 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Comparison operators\n", "\n", "- ``==``, ``!=``: equal, not equal\n", "- ``<``, ``<=``: less than, less than or equal\n", "- ``>``, ``>=``: greater than, greater than or equal" ] }, { "cell_type": "code", "collapsed": false, "input": [ "2 < 4" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 157, "text": [ "True" ] } ], "prompt_number": 157 }, { "cell_type": "code", "collapsed": false, "input": [ "3 >= 3" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 158, "text": [ "True" ] } ], "prompt_number": 158 }, { "cell_type": "code", "collapsed": false, "input": [ "5 == 4" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 159, "text": [ "False" ] } ], "prompt_number": 159 }, { "cell_type": "code", "collapsed": false, "input": [ "5 != 4" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 160, "text": [ "True" ] } ], "prompt_number": 160 }, { "cell_type": "code", "collapsed": false, "input": [ "5 < 2 + 4j" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "ename": "TypeError", "evalue": "unorderable types: int() < complex()", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;36m5\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m2\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m4j\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unorderable types: int() < complex()" ] } ], "prompt_number": 161 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Comparisons can also be strung together and behave as expected:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = 4\n", "y = 6\n", "print(2 < x <= 4)\n", "print(2 < y <= 4)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n", "False\n" ] } ], "prompt_number": 162 }, { "cell_type": "code", "collapsed": false, "input": [ "# This allows strange/confusion expressions\n", "# don't do things like this!\n", "8 > x <= 5" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 163, "text": [ "True" ] } ], "prompt_number": 163 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Warning about Floating Point Equality\n", "Precision issues can lead to seemingly strange results (again, this is the same in any modern programming language)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "0.1 + 0.2 == 0.3" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 164, "text": [ "False" ] } ], "prompt_number": 164 }, { "cell_type": "code", "collapsed": false, "input": [ "# this is a string formatting command (we'll cover this later)\n", "# it says to print 20 places after the decimal\n", "print(\"{0:.20f}\".format(0.1 + 0.2))\n", "print(\"{0:.20f}\".format(0.3))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.30000000000000004441\n", "0.29999999999999998890\n" ] } ], "prompt_number": 165 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Moral of the story: in any language you use, be careful using equality comparisons on floating point!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Boolean variables and logical operations\n", "\n", "Python has two built-in boolean values, ``True`` and ``False`` which we've seen above.\n", "\n", "There are also built-in logical operations to test these\n", "\n", "- ``A or B`` : ``True`` if either ``A`` or ``B`` or both are ``True``\n", "- ``A and B`` : ``True`` only if both ``A`` and ``B`` are ``True``\n", "- ``not A``: ``True`` only if ``A`` is ``False``" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = 4\n", "(x > 2) and (x < 10)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 166, "text": [ "True" ] } ], "prompt_number": 166 }, { "cell_type": "code", "collapsed": false, "input": [ "(x <= 4) or not (x > 10)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 167, "text": [ "True" ] } ], "prompt_number": 167 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Built-in types can be coerced to booleans." ] }, { "cell_type": "code", "collapsed": false, "input": [ "0 == False" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 168, "text": [ "True" ] } ], "prompt_number": 168 }, { "cell_type": "code", "collapsed": false, "input": [ "not False" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 169, "text": [ "True" ] } ], "prompt_number": 169 }, { "cell_type": "code", "collapsed": false, "input": [ "not 0" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 170, "text": [ "True" ] } ], "prompt_number": 170 }, { "cell_type": "code", "collapsed": false, "input": [ "not -1" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 171, "text": [ "False" ] } ], "prompt_number": 171 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "zero is evaluated to ``False``, every other number to ``True``" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(None) # None is a special object" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "None\n" ] } ], "prompt_number": 172 }, { "cell_type": "code", "collapsed": false, "input": [ "print(None == True)\n", "print(None == False)\n", "print(None == None)\n", "print(bool(None))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "False\n", "False\n", "True\n", "False\n" ] } ], "prompt_number": 173 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Special comparators: ``is`` and ``is not``" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = 1\n", "y = 1\n", "x is y" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 174, "text": [ "True" ] } ], "prompt_number": 174 }, { "cell_type": "code", "collapsed": false, "input": [ "x = 1111\n", "y = 1111\n", "print(x is y)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "False\n" ] } ], "prompt_number": 175 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Takeaway: \"``is``\" and \"``is not``\" refer to the *memory* being used by the object.\n", "If ``x`` and ``y`` point to the same location in memory, then ``x is y`` will be True.\n", "\n", "Probably their most common use is in comparisons to ``None``. All variables equal to ``None``\n", "are guaranteed to point to the same memory location (i.e. it acts as a Singleton)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = None\n", "print(x is None)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n" ] } ], "prompt_number": 176 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "You don't need to fully understand this, but just be aware that the ``is`` and ``is not`` operators should generally not be used unless you do!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## More on Variables & Types" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(type(1))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 177 }, { "cell_type": "code", "collapsed": false, "input": [ "x = 2\n", "print(type(x))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 178 }, { "cell_type": "code", "collapsed": false, "input": [ "type(2) == type(1)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 179, "text": [ "True" ] } ], "prompt_number": 179 }, { "cell_type": "code", "collapsed": false, "input": [ "print(type(True))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 180 }, { "cell_type": "code", "collapsed": false, "input": [ "print(type(None))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 181 }, { "cell_type": "code", "collapsed": false, "input": [ "print(type(type(1)))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 182 }, { "cell_type": "code", "collapsed": false, "input": [ "print(type(pow))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 183 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "we can test whether something is a certain type with `isinstance()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(isinstance(1, int))\n", "print(isinstance(\"spam\", str))\n", "print(isinstance(1.212, int))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n", "True\n", "False\n" ] } ], "prompt_number": 184 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "builtin-types: `int`, `bool`, `str`, `float`, `complex`, `long`...." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Strings" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = \"spam\" ; type(x)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 185, "text": [ "str" ] } ], "prompt_number": 185 }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"hello!\\n...my sire.\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "hello!\n", "...my sire.\n" ] } ], "prompt_number": 186 }, { "cell_type": "code", "collapsed": false, "input": [ "\"hello!\\n...my sire.\"" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 187, "text": [ "'hello!\\n...my sire.'" ] } ], "prompt_number": 187 }, { "cell_type": "code", "collapsed": false, "input": [ "\"wah?!\" == 'wah?!'" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 188, "text": [ "True" ] } ], "prompt_number": 188 }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"'wah?!' said the student\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "'wah?!' said the student\n" ] } ], "prompt_number": 189 }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"\\\"wah?!\\\" said the student\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\"wah?!\" said the student\n" ] } ], "prompt_number": 190 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "backslashes (`\\`) start special (escape) characters:\n", "\n", " \\n = newline (\\r = return)\n", " \\t = tab\n", " \\a = bell\n", "\n", "string literals are defined with double quotes or quotes.\n", "the outermost quote type cannot be used inside the string (unless it's escaped with a backslash)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# raw strings (marked with r) don't escape characters\n", "print(r'This is a raw string...newlines \\r\\n are ignored.')" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "This is a raw string...newlines \\r\\n are ignored.\n" ] } ], "prompt_number": 191 }, { "cell_type": "code", "collapsed": false, "input": [ "# Triple quotes are real useful for multiple line strings\n", "y = \"\"\"For score and seven minutes ago,\n", " you folks all learned some basic mathy stuff with Python\n", " and boy were you blown away!\"\"\"\n", "print(y)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "For score and seven minutes ago,\n", " you folks all learned some basic mathy stuff with Python\n", " and boy were you blown away!\n" ] } ], "prompt_number": 192 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* prepending `r` makes that string \"raw\"\n", "* triple quotes allow you to compose long strings\n", "* prepending `u` makes that string \"unicode\"\n", "\n", "http://docs.python.org/reference/lexical_analysis.html#string-literals" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Arithmetic with Strings" ] }, { "cell_type": "code", "collapsed": false, "input": [ "s = \"spam\" ; e = \"eggs\"\n", "print(s + e)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "spameggs\n" ] } ], "prompt_number": 193 }, { "cell_type": "code", "collapsed": false, "input": [ "print(s + \" and \" + e)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "spam and eggs\n" ] } ], "prompt_number": 194 }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"green \" + e + \" and\\n \" + s)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "green eggs and\n", " spam\n" ] } ], "prompt_number": 195 }, { "cell_type": "code", "collapsed": false, "input": [ "print(s*3 + e)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "spamspamspameggs\n" ] } ], "prompt_number": 196 }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"*\" * 50)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "**************************************************\n" ] } ], "prompt_number": 197 }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"spam\" == \"good\"); print(\"spam\" == \"spam\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "False\n", "True\n" ] } ], "prompt_number": 198 }, { "cell_type": "code", "collapsed": false, "input": [ "\"spam\" < \"zoo\"" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 199, "text": [ "True" ] } ], "prompt_number": 199 }, { "cell_type": "code", "collapsed": false, "input": [ "\"s\" < \"spam\"" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 200, "text": [ "True" ] } ], "prompt_number": 200 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "* you can concatenate strings with `+` sign\n", "* you can do multiple concatenations with the `*` sign\n", "* strings can be compared" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But you can't add strings and integers:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print('I want' + 3 + ' eggs and no ' + s)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "ename": "TypeError", "evalue": "Can't convert 'int' object to str implicitly", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'I want'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m3\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m' eggs and no '\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: Can't convert 'int' object to str implicitly" ] } ], "prompt_number": 201 }, { "cell_type": "code", "collapsed": false, "input": [ "print('I want ' + str(3) + ' eggs and no ' + s)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "I want 3 eggs and no spam\n" ] } ], "prompt_number": 202 }, { "cell_type": "code", "collapsed": false, "input": [ "pi = 3.14159\n", "print('I want ' + str(pi) + ' eggs and no ' + s)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "I want 3.14159 eggs and no spam\n" ] } ], "prompt_number": 203 }, { "cell_type": "code", "collapsed": false, "input": [ "print(str(True) + \":\" + ' I want ' + str(pi) + ' eggs and no ' + s)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True: I want 3.14159 eggs and no spam\n" ] } ], "prompt_number": 204 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "you must concatenate only strings, coercing (\"casting\") \n", "other variable types to `str`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Getting input from the user" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Note that raw_input does not work in IPython notebook version < 1.0\n", "# You can always do this from a file or from the command line, though\n", "faren = input(\"enter a temperature (in Fahrenheit): \")\n", "print(faren)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "enter a temperature (in Fahrenheit): 280\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "280\n" ] } ], "prompt_number": 205 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "(Note that in Python 2.x you should use ``raw_input`` rather than ``input``\n", "\n", "Remember that the input comes as a string:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "cent = (faren - 32) / 1.8" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "ename": "TypeError", "evalue": "unsupported operand type(s) for -: 'str' and 'int'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcent\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfaren\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m32\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;36m1.8\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for -: 'str' and 'int'" ] } ], "prompt_number": 206 }, { "cell_type": "code", "collapsed": false, "input": [ "cent = (float(faren) - 32) / 1.8\n", "print(cent)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "137.77777777777777\n" ] } ], "prompt_number": 207 }, { "cell_type": "code", "collapsed": false, "input": [ "# Or in one line:\n", "faren = float(input(\"enter a temperature (in Fahrenheit): \"))\n", "(faren - 32) / 1.8" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "enter a temperature (in Fahrenheit): 232\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 208, "text": [ "111.11111111111111" ] } ], "prompt_number": 208 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Strings as arrays" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We can think of strings as arrays\n", "(although, unlike in C you never really need to deal with directly addressing character locations in memory)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "s = 'spam'\n", "len(s)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 209, "text": [ "4" ] } ], "prompt_number": 209 }, { "cell_type": "code", "collapsed": false, "input": [ "len(\"eggs\\n\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 210, "text": [ "5" ] } ], "prompt_number": 210 }, { "cell_type": "code", "collapsed": false, "input": [ "len(\"\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 211, "text": [ "0" ] } ], "prompt_number": 211 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Indexing in Python is zero-based\n", "\n", "" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(s[0])\n", "print(s[-1])" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "s\n", "m\n" ] } ], "prompt_number": 212 }, { "cell_type": "code", "collapsed": false, "input": [ "s[0:1]" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 213, "text": [ "'s'" ] } ], "prompt_number": 213 }, { "cell_type": "code", "collapsed": false, "input": [ "s[1:4]" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 214, "text": [ "'pam'" ] } ], "prompt_number": 214 }, { "cell_type": "code", "collapsed": false, "input": [ "s[-2:]" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 215, "text": [ "'am'" ] } ], "prompt_number": 215 }, { "cell_type": "code", "collapsed": false, "input": [ "s[0:100] # if the slice goes past the end, no complaints!" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 216, "text": [ "'spam'" ] } ], "prompt_number": 216 }, { "cell_type": "code", "collapsed": false, "input": [ "s[0:4:2]" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 217, "text": [ "'sa'" ] } ], "prompt_number": 217 }, { "cell_type": "code", "collapsed": false, "input": [ "s[::2]" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 218, "text": [ "'sa'" ] } ], "prompt_number": 218 }, { "cell_type": "code", "collapsed": false, "input": [ "s[::-1]" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 219, "text": [ "'maps'" ] } ], "prompt_number": 219 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* `len()` gives us the length of an array\n", "* strings are zero indexed\n", "* can also count backwards" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Flow control: conditionals and loops" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = 1\n", "if x > 0:\n", " print(\"yo\")\n", "else:\n", " print(\"dude\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "yo\n" ] } ], "prompt_number": 220 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "One liners" ] }, { "cell_type": "code", "collapsed": false, "input": [ "\"yo\" if x > 0 else \"dude\"" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 221, "text": [ "'yo'" ] } ], "prompt_number": 221 }, { "cell_type": "code", "collapsed": false, "input": [ "x = 1\n", "y = 0\n", "while y < 10:\n", " print(\"yo\" if x > 0 else \"dude\")\n", " x *= -1\n", " y += 1" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "yo\n", "dude\n", "yo\n", "dude\n", "yo\n", "dude\n", "yo\n", "dude\n", "yo\n", "dude\n" ] } ], "prompt_number": 222 }, { "cell_type": "code", "collapsed": false, "input": [ "# Could also do this with a break statement\n", "x = 1\n", "y = 0\n", "while True:\n", " print(\"yo\" if x > 0 else \"dude\")\n", " x *= -1\n", " y += 1\n", " if y >= 10:\n", " break" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "yo\n", "dude\n", "yo\n", "dude\n", "yo\n", "dude\n", "yo\n", "dude\n", "yo\n", "dude\n" ] } ], "prompt_number": 223 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "case statements can be constructed with \n", "just a bunch of `if`, `elif`,...`else`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "if x < 1:\n", " print(\"t\")\n", "elif x > 100:\n", " print(\"yo\")\n", "elif x == 42:\n", " print(\"bingo\")\n", "else:\n", " print(\"dude\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "dude\n" ] } ], "prompt_number": 224 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Note: ordering matters. The first block of `True` in an if/elif gets executed then everything else does not." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Blocks cannot be empty!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = \"fried goldfish\"\n", "if x == \"spam for dinner\":\n", " print(\"I will destroy the universe\")\n", "else:\n", " # I'm fine with that. I'll do nothing" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "ename": "SyntaxError", "evalue": "unexpected EOF while parsing (, line 5)", "output_type": "pyerr", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m5\u001b[0m\n\u001b[0;31m # I'm fine with that. I'll do nothing\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m unexpected EOF while parsing\n" ] } ], "prompt_number": 225 }, { "cell_type": "code", "collapsed": true, "input": [ "x = \"fried goldfish\"\n", "if x == \"spam for dinner\":\n", " print(\"I will destroy the universe\")\n", "else:\n", " # I'm fine with that. I'll do nothing\n", " pass" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 226 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "`pass` is a \"do nothing\"/NOP statement" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Example: putting it all together" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%file number_game.py\n", "# The above \"magic\" command saves the contents\n", "# of the current cell to file. We'll see more of these later\n", "\n", "x = 0\n", "max_tries = 10\n", "count = 0\n", "\n", "while True:\n", " x_new = int(input(\"Enter a new number: \"))\n", " if x_new > x:\n", " print(\" -> it's bigger than the last!\")\n", " elif x_new < x:\n", " print(\" -> it's smaller than the last!\")\n", " else:\n", " print(\" -> no change! I'll exit now\")\n", " break\n", " \n", " x = x_new\n", " \n", " count += 1\n", " if count > max_tries:\n", " print(\"too many tries...\")\n", " break" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Overwriting number_game.py\n" ] } ], "prompt_number": 227 }, { "cell_type": "code", "collapsed": false, "input": [ "%run number_game.py\n", "# this magic command runs the given file" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter a new number: 200\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " -> it's bigger than the last!\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter a new number: 200\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " -> no change! I'll exit now\n" ] } ], "prompt_number": 229 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Breakout #1: getting your code on\n", "\n", "Create a program (a .py file) which repeatedly asks the user for a word.\n", "The program should append all the words together. When the user types\n", "a \"!\", \"?\", or a \".\", the program should print the resulting sentence and exit.\n", "\n", "For example, a session might look like this:\n", "\n", " [~]$ python breakout01.py\n", " Enter a word (. ! or ? to end): My\n", " Enter a word (. ! or ? to end): name\n", " Enter a word (. ! or ? to end): is\n", " Enter a word (. ! or ? to end): Walter\n", " Enter a word (. ! or ? to end): White\n", " Enter a word (. ! or ? to end): !\n", " \n", " My name is Walter White!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Breakout #2: Fizz Buzz (a classic)\n", "\n", "Write a program that prints the numbers from 1 to 100. But for multiples of three print \u201cFizz\u201d instead of the number and for the multiples of five print \u201cBuzz\u201d. For numbers which are multiples of both three and five print \u201cFizzBuzz\u201d.\n", "\n", "If you finish quickly... see how **few** characters you can write this program in (this is known as \"code golf\": going for the fewest key strokes)." ] } ], "metadata": {} } ] }