From ad63d36c7e3e72881c48e32e444b44a863088a15 Mon Sep 17 00:00:00 2001 From: minhung Date: Thu, 8 Dec 2016 02:04:48 +0800 Subject: [PATCH 1/6] fix 3.x --- .../MyPythonNotebook-checkpoint.ipynb | 2386 ++++++++-------- MyPythonNotebook.ipynb | 2388 ++++++++--------- 2 files changed, 2362 insertions(+), 2412 deletions(-) diff --git a/.ipynb_checkpoints/MyPythonNotebook-checkpoint.ipynb b/.ipynb_checkpoints/MyPythonNotebook-checkpoint.ipynb index f1a83f1..912e577 100644 --- a/.ipynb_checkpoints/MyPythonNotebook-checkpoint.ipynb +++ b/.ipynb_checkpoints/MyPythonNotebook-checkpoint.ipynb @@ -1,1241 +1,1215 @@ { - "metadata": { - "name": "", - "signature": "sha256:7506a1fbe1cdad7bfb5190c7d03e2cfce486f54f4628f58a979af2452c822f71" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u524d\u8a00\uff1a\u57fa\u672c\u4e0a\u9019\u662fcodeacademy\u7684\u5b78\u7fd2\u7b46\u8a18\uff0c\n" - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Python Syntax" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "print \u6307\u4ee4\uff1aprint \u5b57\u4e32; print \u8b8a\u6578; print \u5b57\u4e32, \u8b8a\u6578, etc" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print \"Welcome to Python!\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Welcome to Python!\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u8b8a\u6578\u8ce6\u503c\uff1a\u8b8a\u6578 = \u503c\n", - "\n", - "\u8b8a\u6578\u578b\u614b\uff1a\u6574\u6578\uff08Integer), \u6d6e\u9ede\u6578(float), boolean(True/False)\n", - "\n", - "\u7a0b\u5f0f\u4e2d\u8b8a\u6578\u53ef\u4ee5\u96a8\u6642\u66f4\u6539\u5176\u503c, \u5728Python\u4e2d, \u751a\u81f3\u53ef\u4ee5\u66f4\u6539\u8b8a\u6578\u578b\u614b" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_int = 10\n", - "my_float = 0.123\n", - "my_bool = True\n", - "print \"my_int =\", my_int, \"my_float = \",my_float, \"my_bool =\",my_bool\n", - "my_var = 10\n", - "print \"my_var = \", my_var\n", - "my_var = False\n", - "print \"my_var = \", my_var" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_int = 10 my_float = 0.123 my_bool = True\n", - "my_var = 10\n", - "my_var = False\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7e2e\u6392\uff1aPython\u4e2d\u662f\u4ee5\u7e2e\u6392\u4f86\u5340\u5206\u5c64\u7d1a, \u4f8b\u5982\u51fd\u6578\u5b9a\u7fa9, \u8ff4\u5708\u7b49\u7b49\n", - "\n", - "\u5e95\u4e0b\u662f\u4e00\u500b\u7e2e\u6392\u7684\u4f8b\u5b50, def \u662f\u5728\u5b9a\u7fa9\u4e00\u500b\u51fd\u6578" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def spam():\n", - " eggs = 12\n", - " return eggs\n", - " \n", - "print spam()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "12\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u8a3b\u89e3\uff1a\u4e00\u822c\u55ae\u884c\u8a3b\u89e3\u6216\u662f\u5728\u884c\u5c3e\u8a3b\u89e3\u53ef\u4ee5\u4f7f\u7528#, \u82e5\u8981\u591a\u884c\u8a3b\u89e3\u5247\u4ee5\"\"\"\u958b\u982d,\"\"\"\u7d50\u5c3e" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6578\u5b78\uff1a\u52a0\u6e1b\u4e58\u9664\u56db\u5247\u904b\u7b97\u7b26\u865f\u662f\u4e00\u822c\u5e38\u7528\u7b26\u865f, \u6b21\u65b9\u5247\u6539\u70ba\\** \u800c\u4e0d\u662f^, \u540c\u9918\u5247\u662f %" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print \"1+2+3+4*5 = \", 1+2+3+4*5 \n", - "print \"2^3 = \", 2**3\n", - "print \"3 %2 =\", 3%2" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1+2+3+4*5 = 26\n", - "2^3 = 8\n", - "3 %2 = 1\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "STRINGS AND CONSOLE OUTPUT" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5b57\u4e32\u7684\u5b9a\u7fa9\u65b9\u5f0f\u662f\u4ee5\u96d9\u5f15\u865f\u6216\u662f\u55ae\u5f15\u865f\u593e\u8d77\u4f86" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "caesar = \"Graham\"\n", - "praline = 'John'\n", - "print caesar\n", - "print praline" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Graham\n", - "John\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Escaping characters\uff1a\u6709\u4e9b\u5b57\u5143\u6709\u7279\u6b8a\u7528\u9014, \u6240\u4ee5\u51fa\u73fe\u5728\u5b57\u4e32\u4e2d\u6642\u5fc5\u9808\u52a0\u5165\u53cd\u659c\u7dda\\" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'This isn\\'t flying, this is falling with style!'\n", - "print \"\\\" is another special character.\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This isn't flying, this is falling with style!\n", - "\" is another special character.\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5b57\u4e32\u53ef\u4ee5\u8996\u70ba\u4e00\u500barray, \u6240\u4ee5\u53ef\u4ee5\u4f7f\u7528index\u6311\u51fa\u5b57\u4e32\u4e2d\u7279\u5b9a\u5e7e\u500b\u5b57\u5143. \u6ce8\u610findex\u75310\u958b\u59cb" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_str = \"STRINGS\"\n", - "print \"The whole string is \",my_str,\" and the first character is \", my_str[0], \". The last characters are \",my_str[-3:]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "The whole string is STRINGS and the first character is S . The last characters are NGS\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\u8207\u5b57\u4e32\u76f8\u95dc\u7684\u5e7e\u500b\u51fd\u6578\uff1a\n", - "\n", - "len(mystr)\uff1a\u50b3\u56de\u5b57\u4e32mystr\u7684\u9577\u5ea6\n", - "\n", - "mystr.lower()\uff1a\u5c07\u5b57\u4e32mystr\u90fd\u6539\u70ba\u5c0f\u5beb\n", - "\n", - "mystr.upper()\uff1a\u5c07\u5b57\u4e32mystr\u90fd\u6539\u70ba\u5927\u5beb\n", - "\n", - "str(mynum)\uff1a\u5c07mynum\uff08\u6578\u503c\u6216\u662f\u6578\u503c\u8b8a\u6578\uff09\u8f49\u70ba\u5b57\u4e32" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_str = \"Mathematics\"\n", - "print \"The length of my_str is\", len(my_str)\n", - "print \"The effect of upper on my_str is\", my_str.upper()\n", - "print \"The effect of lower on my_str is\", my_str.lower()\n", - "print \"The third character of the 12345 is\", str(12345)[2]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "The length of my_str is 11\n", - "The effect of upper on my_str is MATHEMATICS\n", - "The effect of lower on my_str is mathematics\n", - "The third character of the 12345 is 3\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5b57\u4e32\u53ef\u4ee5\u7528+\u9019\u500b\u904b\u7b97\u9023\u63a5\u8d77\u4f86, \u6ce8\u610f\u9023\u8d77\u4f86\u5f8c\u7684\u5b57\u4e32\u5728\u539f\u5148\u7684\u5b57\u4e32\u9593\u6c92\u6709\u7a7a\u767d" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print \"Spam \"+\"and \"+\"eggs\"\n", - "str1 = \"Spam\"\n", - "str2 = \"and\"\n", - "str3 = \" eggs\"\n", - "print str1+str2+str3" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Spam and eggs\n", - "Spamand eggs\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "\u683c\u5f0f\u5316\u5b57\u4e32/\u8f38\u51fa" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6211\u5011\u7d93\u5e38\u6703\u78b0\u5230\u540c\u985e\u578b\u7684\u53e5\u5b50\uff08\u66f4\u63db\u90e8\u4efd\u540d\u8a5e\uff09\u4e00\u518d\u51fa\u73fe\u7684\u60c5\u5f62, \u53ef\u4ee5\u5728\u5b57\u4e32\u4e2d\u4ee5%s \u8868\u793a\u4e4b\u5f8c\u8981\u53d6\u4ee3\u7684\u4f4d\u7f6e, \u5b57\u4e32\u5f8c%\u5f8c\u7684\u5167\u5bb9\u8868\u793a\u8981\u53d6\u4ee3%s\u7684\u5167\u5bb9" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "string_1 = \"Camelot\"\n", - "string_2 = \"place\"\n", - "my_str = \"Let's not go to %s. 'Tis a silly %s.\"\n", - "print \"Let's not go to %s. 'Tis a silly %s.\" % (string_1, string_2)\n", - "print my_str % (string_1, string_2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Let's not go to Camelot. 'Tis a silly place.\n", - "Let's not go to Camelot. 'Tis a silly place.\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "\u8f38\u5165raw_input" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "my_str=raw_input(\"Display Message\") \u986f\u793a\"Display Message\"\u5f8c, \u8981\u6c42\u8f38\u5165\u8cc7\u8a0a, \u5c07\u7d50\u679c\u8ce6\u4e88my_str. \u6ce8\u610f\u4e2d\u6587\u8f38\u5165\u90e8\u4efd\u6709\u9ede\u8907\u96dc, \u7b49\u5230\u6211\u5011\u6709\u9ede\u57fa\u790e\u5f8c\u518d\u9032\u884c, \u53e6\u5916\u9019\u662fpython 2.7\u7684\u4f7f\u7528\u6cd5, python 3\u7684\u4f5c\u6cd5\u7a0d\u6709\u4e0d\u540c. \n", - "\n", - "\u53e6\u5916\u8acb\u6ce8\u610f\u5e95\u4e0b\u7684\u4f8b\u5b50, \u7531\u65bc\u592a\u9577\u6240\u4ee5\u4f7f\u7528\\\u65b7\u884c" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "name = raw_input(\"What is your name?\")\n", - "quest = raw_input(\"What is your quest?\")\n", - "color = raw_input(\"What is your favorite color?\")\n", - "\n", - "print \"Ah, so your name is %s, your quest is %s, \" \\\n", - "\"and your favorite color is %s.\" %(name, quest, color)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "What is your name?mhchen\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "What is your quest?grail\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "What is your favorite color?blue\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Ah, so your name is mhchen, your quest is grail, and your favorite color is blue.\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Date and Time" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "前言:基本上這是codeacademy的學習筆記,\n", + "https://www.codecademy.com/\n", + "\n", + "原始版本是2.7版,現改為3.x 版,主要差異請參考:\n", + "https://docs.python.org/3/whatsnew/3.0.html\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python Syntax" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "print 指令:print 字串; print 變數; print 字串, 變數, etc\n", + "注解:python 3.5版改為函數 print()" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Welcome to Python!\n" ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\u5982\u679c\u9700\u8981\u4f7f\u7528datetime\u529f\u80fd\u6642, \u9700\u5f15\u5165datetime\u6a21\u7d44\uff1afrom datetime import datetime\n", - "\n", - "datetime.now()\uff1a\u50b3\u56de\u7684\u662f\u73fe\u5728\u7684\u6642\u9593\u65e5\u671f, \u5982\u679c\u9700\u8981\u5176\u4e2d\u7684\u5e74\u6708\u65e5\u6642\u5206\u7b49\u8cc7\u8a0a\u53ef\u4ee5\u4f7f\u7528 .year, .month, .day, .hour, .minute, .second" + } + ], + "source": [ + "print(\"Welcome to Python!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "變數賦值:變數 = 值\n", + "\n", + "變數型態:整數(Integer), 浮點數(float), boolean(True/False)\n", + "\n", + "程式中變數可以隨時更改其值, 在Python中, 甚至可以更改變數型態" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my_int = 10 my_float = 0.123 my_bool = True\n", + "my_var = 10\n", + "my_var = False\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from datetime import datetime\n", - "now = datetime.now()\n", - "print now\n", - "print now.year\n", - "print now.month\n", - "print datetime.now().day\n", - "print '%s/%s/%s %s:%s:%s' % (now.month, now.day, now.year,now.hour, now.minute, now.second)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2014-05-26 01:56:22.124397\n", - "2014\n", - "5\n", - "26\n", - "5/26/2014 1:56:22\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Conditionals & Control Flow" + } + ], + "source": [ + "my_int = 10\n", + "my_float = 0.123\n", + "my_bool = True\n", + "print(\"my_int =\", my_int, \"my_float = \",my_float, \"my_bool =\",my_bool)\n", + "my_var = 10\n", + "print(\"my_var = \", my_var)\n", + "my_var = False\n", + "print(\"my_var = \", my_var)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "縮排:Python中是以縮排來區分層級, 例如函數定義, 迴圈等等\n", + "\n", + "底下是一個縮排的例子, def 是在定義一個函數" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u7684\u4f8b\u5b50\u4e2d\u5b9a\u4e00\u4e86\u4e00\u500b\u51fd\u6578clinic, \u6ce8\u610f\u51fd\u6578\u7d50\u675f\u7684\u4f4d\u7f6e, \u540c\u6642\u5728\u4e3b\u7a0b\u5f0f\u4e2d\u5982\u4f55\u547c\u53ebclinic, \u9084\u6709\u905e\u8ff4\u547c\u53eb\u51fd\u6578\u7684\u90e8\u4efd.\n", - "\u5728\u9019\u500b\u5c0f\u7bc0\u4e2d\uff0c\u91cd\u9ede\u662f\u5728control flow, \u4e5f\u5c31\u662fif-elif-else\u7684\u90e8\u4efd, \u6ce8\u610f\u7e2e\u6392\u4ee5\u53ca\u5192\u865f\u7684\u4f4d\u7f6e" + } + ], + "source": [ + "def spam():\n", + " eggs = 12\n", + " return eggs\n", + " \n", + "print(spam())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "註解:一般單行註解或是在行尾註解可以使用#, 若要多行註解則以\"\"\"開頭,\"\"\"結尾" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "數學:加減乘除四則運算符號是一般常用符號, 次方則改為\\** 而不是^, 同餘則是 %" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1+2+3+4*5 = 26\n", + "2^3 = 8\n", + "3 %2 = 1\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def clinic():\n", - " print \"You've just entered the clinic!\"\n", - " print \"Do you take the door on the left or the right?\"\n", - " answer = raw_input(\"Type left or right and hit 'Enter'.\").lower()\n", - " if answer == \"left\" or answer == \"l\":\n", - " print \"This is the Verbal Abuse Room, you heap of parrot droppings!\"\n", - " elif answer == \"right\" or answer == \"r\":\n", - " print \"Of course this is the Argument Room, I've told you that already!\"\n", - " else:\n", - " print \"You didn't pick left or right! Try again.\"\n", - " clinic()\n", - "\n", - "clinic()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "You've just entered the clinic!\n", - "Do you take the door on the left or the right?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "Type left or right and hit 'Enter'.l\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This is the Verbal Abuse Room, you heap of parrot droppings!\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u662f\u516d\u500b\u6bd4\u8f03\u7684\u904b\u7b97\n", - "\n", - "1.Equal to (==)\n", - "\n", - "2.Not equal to (!=)\n", - "\n", - "3.Less than (<)\n", - " \n", - "4.Less than or equal to (<=)\n", - "\n", - "5.Greater than (>)\n", - "\n", - "6.Greater than or equal to (>=)" + } + ], + "source": [ + "print(\"1+2+3+4*5 = \", 1+2+3+4*5 )\n", + "print(\"2^3 = \", 2**3)\n", + "print(\"3 %2 =\", 3%2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# STRINGS AND CONSOLE OUTPUT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字串的定義方式是以雙引號或是單引號夾起來" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graham\n", + "John\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u904b\u7b97\u5b50\u5148\u5f8c\u9806\u5e8f\u8acb\u53c3\u8003\uff1a\n", - "http://www.swaroopch.com/notes/python/#op_exp ,\n", - "\u4f46\u662f\u5efa\u8b70\u9069\u7576\u4f7f\u7528\u62ec\u865f\u8b93\u7a0b\u5f0f\u65b9\u4fbf\u95b1\u8b80\u540c\u6642\u907f\u514d\u932f\u8aa4" + } + ], + "source": [ + "caesar = \"Graham\"\n", + "praline = 'John'\n", + "print(caesar)\n", + "print(praline)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Escaping characters:有些字元有特殊用途, 所以出現在字串中時必須加入反斜線\\" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This isn't flying, this is falling with style!\n", + "\" is another special character.\n" ] - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "Control Flow" + } + ], + "source": [ + "print('This isn\\'t flying, this is falling with style!')\n", + "print(\"\\\" is another special character.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字串可以視為一個array, 所以可以使用index挑出字串中特定幾個字元. 注意index由0開始" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The whole string is STRINGS and the first character is S . The last characters are NGS\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "if-(elif)-else\u7684\u67b6\u69cb\u53ef\u4ee5\u53c3\u8003\u5e95\u4e0b\u9019\u500b\u4f8b\u5b50" + } + ], + "source": [ + "my_str = \"STRINGS\"\n", + "print(\"The whole string is \",my_str,\" and the first character is \", my_str[0], \". The last characters are \",my_str[-3:])" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "與字串相關的幾個函數:\n", + "\n", + "len(mystr):傳回字串mystr的長度\n", + "\n", + "mystr.lower():將字串mystr都改為小寫\n", + "\n", + "mystr.upper():將字串mystr都改為大寫\n", + "\n", + "str(mynum):將mynum(數值或是數值變數)轉為字串" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The length of my_str is 11\n", + "The effect of upper on my_str is MATHEMATICS\n", + "The effect of lower on my_str is mathematics\n", + "The third character of the 12345 is 3\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def greater_less_equal_5(answer):\n", - " if answer>5:\n", - " return 1\n", - " elif answer<5: \n", - " return -1\n", - " else:\n", - " return 0\n", - " \n", - "print greater_less_equal_5(4)\n", - "print greater_less_equal_5(5)\n", - "print greater_less_equal_5(6)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "-1\n", - "0\n", - "1\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "PygLatin" + } + ], + "source": [ + "my_str = \"Mathematics\"\n", + "print(\"The length of my_str is\", len(my_str))\n", + "print(\"The effect of upper on my_str is\", my_str.upper())\n", + "print(\"The effect of lower on my_str is\", my_str.lower())\n", + "print(\"The third character of the 12345 is\", str(12345)[2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字串可以用+這個運算連接起來, 注意連起來後的字串在原先的字串間沒有空白" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Spam and eggs\n", + "Spamand eggs\n" ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Pig Latin\u662f\u500b\u7c21\u55ae\u7684\u6587\u5b57\u904a\u6232\u6587\u5b57\u904a\u6232, \u57fa\u672c\u4e0a\u662f\u5c07\u4e00\u500b\u5b57\u7684\u5b57\u9996\u79fb\u5230\u5b57\u5c3e\u5f8c\u518d\u52a0\u4e0a\"ay\". \u7a0b\u5f0f\u9700\u8981\u8003\u616e\u8f38\u5165\u7684\u5b57\u662f\u5426\u6709\u8f38\u5165\uff08\u6aa2\u67e5\u5b57\u4e32\u9577\u5ea6len\uff09\u662f\u5426\u662f\u82f1\u6587(isalpha). \u5728\u5c07\u81ea\u9996\u79fb\u5230\u5b57\u5c3e\u540c\u6642\u52a0\u4e0a\"ay\"\u7684\u904e\u7a0b\u4e2d, \u662f\u7c21\u55ae\u5b57\u4e32\u64cd\u4f5c, \u9700\u6ce8\u610f\u7684\u662f\u5b57\u4e32\u7b2c\u4e00\u500b\u5b57\u5143\u7684\u7de8\u865f\u662f0, \u540c\u6642\u82e5\u5e0c\u671b\u8868\u793a\u5f9e\u7b2c\u4e8c\u500b\u5b57\u5143\u5230\u5b57\u5c3e\u7684\u6307\u5b9a\u65b9\u5f0f\u9664\u4e86[1:len(new_word)]\u5916, \u4e5f\u53ef\u4ee5\u7528[1:]. \u5e95\u4e0b\u662f\u4e00\u500b\u6709\u9ede\u8b8a\u5316\u7684\u4f8b\u5b50, \u5c07\u5b57\u4e32\u8f38\u5165\u53ca\u64cd\u4f5c\u904e\u7a0b\u5b9a\u7fa9\u70ba\u4e00\u51fd\u6578pyglatin, \u540c\u6642\u4f7f\u7528\u905e\u8ff4\u547c\u53eb\u7684\u6280\u5de7\u540c\u6642\u4f7f\u7528\u905e\u8ff4\u547c\u53eb\u7684\u6280\u5de7, \u5728\u6c92\u6709\u8f38\u5165\u6b63\u78ba\u6587\u5b57\u6642\u8981\u6c42\u91cd\u65b0\u8f38\u5165" + } + ], + "source": [ + "print( \"Spam \"+\"and \"+\"eggs\")\n", + "str1 = \"Spam\"\n", + "str2 = \"and\"\n", + "str3 = \" eggs\"\n", + "print(str1+str2+str3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 格式化字串/輸出" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "我們經常會碰到同類型的句子(更換部份名詞)一再出現的情形, 可以在字串中以%s 表示之後要取代的位置, 字串後%後的內容表示要取代%s的內容" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Let's not go to Camelot. 'Tis a silly place.\n", + "Let's not go to Camelot. 'Tis a silly place.\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "pyg = 'ay'\n", - "def pyglatin():\n", - " original = raw_input('Enter a word:') \n", - " if len(original) > 0 and original.isalpha():\n", - " print original\n", - " word = original.lower()\n", - " first = word[0]\n", - " new_word = word+first+pyg\n", - " new_word = new_word[1:]\n", - " print new_word\n", - " else:\n", - " print 'empty'\n", - " pyglatin()\n", - "pyglatin()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "Enter a word:python\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "python\n", - "ythonpay\n" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "FUNCTIONS" + } + ], + "source": [ + "string_1 = \"Camelot\"\n", + "string_2 = \"place\"\n", + "my_str = \"Let's not go to %s. 'Tis a silly %s.\"\n", + "print(\"Let's not go to %s. 'Tis a silly %s.\" % (string_1, string_2))\n", + "print(my_str % (string_1, string_2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 輸入input" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "my_str=input(\"Display Message\") 顯示\"Display Message\"後, 要求輸入資訊, 將結果賦予my_str. 注意中文輸入部份有點複雜, 等到我們有點基礎後再進行, (已改為 3.x版本,2.7版為raw_input) \n", + "\n", + "另外請注意底下的例子, 由於太長所以使用\\斷行" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "What is your name?mhchen\n", + "What is your quest?holy shit\n", + "What is your favorite color?blue\n", + "Ah, so your name is mhchen, your quest is holy shit, and your favorite color is blue.\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u4f8b\u5b50\u662f\u5b9a\u7fa9\u4e00\u500b\u8a08\u7b97\u5e73\u65b9\u7684\u51fd\u6578square, \u5b9a\u7fa9\u7684\u65b9\u5f0f\u662f\u4f7f\u7528def \u958b\u982d, \u82e5\u6709\u8f38\u5165\u53c3\u6578, \u5247\u5728\u62ec\u5f27\u4e2d\u653e\u5165\u53c3\u6578, \u82e5\u6c92\u6709\u8f38\u5165\u53c3\u6578\u5247\u62ec\u5f27\u5167\u662f\u7a7a\u7684. \u4ee5\u7e2e\u6392\u5340\u5225\u51fd\u6578\u548c\u4e3b\u7a0b\u5f0f, \u51fd\u6578\u82e5\u6709\u56de\u50b3\u503c\u6642 \u5c07\u56de\u50b3\u503c\u5beb\u5728return\u5f8c." + } + ], + "source": [ + "name = input(\"What is your name?\")\n", + "quest = input(\"What is your quest?\")\n", + "color = input(\"What is your favorite color?\")\n", + "\n", + "print(\"Ah, so your name is %s, your quest is %s, \" \\\n", + "\"and your favorite color is %s.\" %(name, quest, color))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Date and Time" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "如果需要使用datetime功能時, 需引入datetime模組:from datetime import datetime\n", + "\n", + "datetime.now():傳回的是現在的時間日期, 如果需要其中的年月日時分等資訊可以使用 .year, .month, .day, .hour, .minute, .second" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2016-12-08 01:52:34.702193\n", + "2016\n", + "12\n", + "8\n", + "12/8/2016 1:52:34\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def square(n):\n", - " \"\"\"Returns the square of a number.\"\"\"\n", - " squared = n**2\n", - " print \"%d squared is %d.\" % (n, squared)\n", - " return squared\n", - " \n", - "# Call the square function on line 9! Make sure to\n", - "# include the number 10 between the parentheses.\n", - "square(10)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "10 squared is 100.\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 16, - "text": [ - "100" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Importing a module" + } + ], + "source": [ + "from datetime import datetime\n", + "now = datetime.now()\n", + "print(now)\n", + "print( now.year)\n", + "print( now.month)\n", + "print( datetime.now().day)\n", + "print( '%s/%s/%s %s:%s:%s' % (now.month, now.day, now.year,now.hour, now.minute, now.second))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conditionals & Control Flow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子中定一了一個函數clinic, 注意函數結束的位置, 同時在主程式中如何呼叫clinic, 還有遞迴呼叫函數的部份.\n", + "在這個小節中,重點是在control flow, 也就是if-elif-else的部份, 注意縮排以及冒號的位置" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "You've just entered the clinic!\n", + "Do you take the door on the left or the right?\n", + "Type left or right and hit 'Enter'.R\n", + "Of course this is the Argument Room, I've told you that already!\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5728python\u4e2d\u6b32\u4f7f\u7528\u7279\u6b8a\u51fd\u5f0f\u5eab\u6642\u9700import\u7279\u5b9a\u6a21\u7d44, \u4ee5math module\u4f86\u8aaa, \u6b32\u4f7f\u7528\u5176\u4e2d\u7684sqrt\u51fd\u6578\u6642, \u6709\u5e7e\u7a2e\u65b9\u6cd5\n", - "1. import math \n", - "2. from math import sqrt\n", - "3. from math import *\n", - "\n", - "\u5e95\u4e0b\u662f\u7b2c\u4e00\u7a2e\u65b9\u6cd5, \u4f7f\u7528\u6642\u9700\u4ee5math.sqrt()\u547c\u53eb. \u53e6\u5916\u9019\u7a2e\u65b9\u6cd5\u6703\u5c07math\u6a21\u7d44\u5167\u5176\u4ed6\u7269\u4ef6\u4e5f\u4e00\u8d77\u5f15\u5165, \u9019\u53ef\u4ee5\u7528dir()\u51fd\u6578\u770b\u5230math\u88e1\u7684\u51fd\u6578 " + } + ], + "source": [ + "def clinic():\n", + " print( \"You've just entered the clinic!\")\n", + " print( \"Do you take the door on the left or the right?\")\n", + " answer = input(\"Type left or right and hit 'Enter'.\").lower()\n", + " if answer == \"left\" or answer == \"l\":\n", + " print (\"This is the Verbal Abuse Room, you heap of parrot droppings!\")\n", + " elif answer == \"right\" or answer == \"r\":\n", + " print (\"Of course this is the Argument Room, I've told you that already!\")\n", + " else:\n", + " print (\"You didn't pick left or right! Try again.\")\n", + " clinic()\n", + "\n", + "clinic()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是六個比較的運算\n", + "\n", + "1.Equal to (==)\n", + "\n", + "2.Not equal to (!=)\n", + "\n", + "3.Less than (<)\n", + " \n", + "4.Less than or equal to (<=)\n", + "\n", + "5.Greater than (>)\n", + "\n", + "6.Greater than or equal to (>=)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "運算子先後順序請參考:\n", + "http://www.swaroopch.com/notes/python/#op_exp ,\n", + "但是建議適當使用括號讓程式方便閱讀同時避免錯誤" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Control Flow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "if-(elif)-else的架構可以參考底下這個例子" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-1\n", + "0\n", + "1\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import math\n", - "print math.sqrt(25)\n", - "print dir(math)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "5.0\n", - "['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e8c\u7a2e\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u4ee5sqrt()\u547c\u53eb" + } + ], + "source": [ + "def greater_less_equal_5(answer):\n", + " if answer>5:\n", + " return 1\n", + " elif answer<5: \n", + " return -1\n", + " else:\n", + " return 0\n", + " \n", + "print (greater_less_equal_5(4))\n", + "print(greater_less_equal_5(5))\n", + "print(greater_less_equal_5(6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### PygLatin" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "Pig Latin是個簡單的文字遊戲文字遊戲, 基本上是將一個字的字首移到字尾後再加上\"ay\". 程式需要考慮輸入的字是否有輸入(檢查字串長度len)是否是英文(isalpha). 在將自首移到字尾同時加上\"ay\"的過程中, 是簡單字串操作, 需注意的是字串第一個字元的編號是0, 同時若希望表示從第二個字元到字尾的指定方式除了[1:len(new_word)]外, 也可以用[1:]. 底下是一個有點變化的例子, 將字串輸入及操作過程定義為一函數pyglatin, 同時使用遞迴呼叫的技巧同時使用遞迴呼叫的技巧, 在沒有輸入正確文字時要求重新輸入" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter a word:abcd\n", + "abcd\n", + "bcdaay\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from math import sqrt\n", - "print sqrt(25)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "5.0\n" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e09\u7a2e\u65b9\u5f0f\u540c\u6a23\u4e5f\u53ef\u4ee5\u76f4\u63a5\u4ee5sqrt()\u547c\u53eb, \u4f46\u662f\u548c\u7b2c\u4e8c\u7a2e\u4e0d\u4e00\u6a23\u7684\u5730\u65b9\u5728\u65bc\u524d\u4e00\u7a2e\u53ea\u6709\u5f15\u5165sqrt, \u4f46\u662f\u9019\u4e00\u7a2e\u65b9\u6cd5\u5c07math\u6a21\u7d44\u5168\u90e8\u5f15\u5165\u5168\u90e8\u5f15\u5165, \u7a0b\u5f0f\u64b0\u5beb\u904e\u7a0b\u4e2d\u5f88\u5bb9\u6613\u6df7\u6dc6." + } + ], + "source": [ + "pyg = 'ay'\n", + "def pyglatin():\n", + " original = input('Enter a word:') \n", + " if len(original) > 0 and original.isalpha():\n", + " print (original)\n", + " word = original.lower()\n", + " first = word[0]\n", + " new_word = word+first+pyg\n", + " new_word = new_word[1:]\n", + " print (new_word)\n", + " else:\n", + " print ('empty')\n", + " pyglatin()\n", + "pyglatin()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# FUNCTIONS" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下例子是定義一個計算平方的函數square, 定義的方式是使用def 開頭, 若有輸入參數, 則在括弧中放入參數, 若沒有輸入參數則括弧內是空的. 以縮排區別函數和主程式, 函數若有回傳值時 將回傳值寫在return後." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10 squared is 100.\n" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "from math import *\n", - "print sqrt(25)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "5.0\n" - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "heading", - "level": 2, + "data": { + "text/plain": [ + "100" + ] + }, + "execution_count": 22, "metadata": {}, - "source": [ - "LISTS & DICTIONARIES" + "output_type": "execute_result" + } + ], + "source": [ + "def square(n):\n", + " \"\"\"Returns the square of a number.\"\"\"\n", + " squared = n**2\n", + " print (\"%d squared is %d.\" % (n, squared))\n", + " return squared\n", + " \n", + "# Call the square function on line 9! Make sure to\n", + "# include the number 10 between the parentheses.\n", + "square(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Importing a module" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "在python中欲使用特殊函式庫時需import特定模組, 以math module來說, 欲使用其中的sqrt函數時, 有幾種方法\n", + "1. import math \n", + "2. from math import sqrt\n", + "3. from math import *\n", + "\n", + "底下是第一種方法, 使用時需以math.sqrt()呼叫. 另外這種方法會將math模組內其他物件也一起引入, 這可以用dir()函數看到math裡的函數 " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n", + "['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python\u4e2d\u7684dictionary\u4e00\u500b\u975e\u5e38\u7684\u67b6\u69cb\uff0c\u53ef\u4ee5\u8b93\u4f60\u65b9\u4fbf\u7684\u67e5\u8a62\u8cc7\u6599\uff0c\u5e95\u4e0b\u662f\u4e00\u500b\u7c21\u55ae\u7684dictionary" + } + ], + "source": [ + "import math\n", + "print (math.sqrt(25))\n", + "print (dir(math))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第二種方法可以直接以sqrt()呼叫" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "d = {'key1' : 1, 'key2' : 2, 'key3' : 3}\n", - "print d['key2']" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2\n" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6bd4\u65b9\u8aaa\uff0c\u5982\u679c\u60f3\u8981\u77e5\u9053d\u88e1\u9762\u7684key3\u5c0d\u61c9\u7684\u503c\u70ba\u4f55\uff0c\u53ef\u4ee5\u4f7f\u7528d['key3']\u67e5\u8a62" + } + ], + "source": [ + "from math import sqrt\n", + "print (sqrt(25))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第三種方式同樣也可以直接以sqrt()呼叫, 但是和第二種不一樣的地方在於前一種只有引入sqrt, 但是這一種方法將math模組全部引入全部引入, 程式撰寫過程中很容易混淆." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "start_list = [5, 3, 1, 2, 4]\n", - "square_list = []\n", - "\n", - "# Your code here!\n", - "\n", - "for x in start_list:\n", - " square_list.append(x**2)\n", - " print \"x = \",x,\", square_list = \",square_list\n", - "print square_list\n", - "square_list.sort()\n", - "print square_list" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "x = 5 , square_list = [25]\n", - "x = 3 , square_list = [25, 9]\n", - "x = 1 , square_list = [25, 9, 1]\n", - "x = 2 , square_list = [25, 9, 1, 4]\n", - "x = 4 , square_list = [25, 9, 1, 4, 16]\n", - "[25, 9, 1, 4, 16]\n", - "[1, 4, 9, 16, 25]\n" - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [1,9,3,8,5,7]\n", - "\n", - "for number in my_list:\n", - " # Your code here\n", - " print \"number =\",number,\"; 2*number =\",2*number" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "number = 1 ; 2*number = 2\n", - "number = 9 ; 2*number = 18\n", - "number = 3 ; 2*number = 6\n", - "number = 8 ; 2*number = 16\n", - "number = 5 ; 2*number = 10\n", - "number = 7 ; 2*number = 14\n" - ] - } - ], - "prompt_number": 22 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u662f\u4e00\u500b\u7c21\u55ae\u7684\u8ff4\u5708\uff0citem \u6703\u4f9d\u5e8f\u7531in\u4e4b\u5f8c\u7684list\u53d6\u503c\uff0c\u540c\u6642\u57f7\u884c\u8ff4\u5708\u5167\u90e8\u7684\u7a0b\u5f0f\uff0c\u5728\u9019\u500b\u4f8b\u5b50\u4e2d\u662f\u9010\u4e00\u5217\u51faitem" + } + ], + "source": [ + "from math import *\n", + "print (sqrt(25))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LISTS & DICTIONARIES" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "python中的dictionary一個非常的架構,可以讓你方便的查詢資料,底下是一個簡單的dictionary" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for item in [1, 3, 21]: \n", - " print item" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1\n", - "3\n", - "21\n" - ] - } - ], - "prompt_number": 23 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "prices = {\"banana\": 4,\"apple\": 2,\"orange\": 1.5,\"pear\": 3}\n", - "\n", - "stock = {\"banana\": 6,\"apple\": 0,\"orange\":32,\"pear\": 15}\n", - "\n", - "for item in prices:\n", - " print item\n", - " print \"price: %s\" % prices[item]\n", - " print \"stock: %s\" % stock[item]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "orange\n", - "price: 1.5\n", - "stock: 32\n", - "pear\n", - "price: 3\n", - "stock: 15\n", - "banana\n", - "price: 4\n", - "stock: 6\n", - "apple\n", - "price: 2\n", - "stock: 0\n" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def fizz_count(x):\n", - " count = 0\n", - " for item in x:\n", - " if item == \"fizz\":\n", - " count = count +1\n", - " return count\n", - " \n", - "\n", - "print fizz_count([\"fizz\",\"cat\",\"fizz\"])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "shopping_list = [\"banana\", \"orange\", \"apple\"]\n", - "\n", - "stock = {\n", - " \"banana\": 6,\n", - " \"apple\": 0,\n", - " \"orange\": 32,\n", - " \"pear\": 15\n", - "}\n", - " \n", - "prices = {\n", - " \"banana\": 4,\n", - " \"apple\": 2,\n", - " \"orange\": 1.5,\n", - " \"pear\": 3\n", - "}\n", - "\n", - "# Write your code below!\n", - "def compute_bill(food):\n", - " total = 0\n", - " for item in food:\n", - " print item\n", - " print \"price: %s\" % prices[item]\n", - " print \"stock: %s\" % stock[item]\n", - " total = total + prices[item]\n", - " return total\n", - "print compute_bill(shopping_list)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "banana\n", - "price: 4\n", - "stock: 6\n", - "orange\n", - "price: 1.5\n", - "stock: 32\n", - "apple\n", - "price: 2\n", - "stock: 0\n", - "7.5\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "Student Becomes the Teacher" + } + ], + "source": [ + "d = {'key1' : 1, 'key2' : 2, 'key3' : 3}\n", + "print (d['key2'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "比方說,如果想要知道d裡面的key3對應的值為何,可以使用d['key3']查詢" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x = 5 , square_list = [25]\n", + "x = 3 , square_list = [25, 9]\n", + "x = 1 , square_list = [25, 9, 1]\n", + "x = 2 , square_list = [25, 9, 1, 4]\n", + "x = 4 , square_list = [25, 9, 1, 4, 16]\n", + "[25, 9, 1, 4, 16]\n", + "[1, 4, 9, 16, 25]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u662f\u8a08\u7b97\u5b78\u751f\u6210\u7e3e\u7684\u4e00\u500b\u7a0b\u5f0f\uff0c\u9996\u5148\u662f\u5b78\u751f\u7684\u7d00\u9304\u3002\u6bcf\u500b\u5b78\u751f\u7684\u6210\u7e3e\u7d00\u9304\u662f\u4ee5dictionary\u5132\u5b58\uff0c\u5176\u4e2d\u5305\u542b\u4e86\"name\"\uff0c\"homework\"\uff0c\"quizzes\"\uff0c\"tests\"\u3002\u6ce8\u610fdictionary\u4e2d\u7684\u503c\u53ef\u4ee5\u662flist\u3002" + } + ], + "source": [ + "start_list = [5, 3, 1, 2, 4]\n", + "square_list = []\n", + "\n", + "# Your code here!\n", + "\n", + "for x in start_list:\n", + " square_list.append(x**2)\n", + " print (\"x = \",x,\", square_list = \",square_list)\n", + "print (square_list)\n", + "square_list.sort()\n", + "print (square_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number = 1 ; 2*number = 2\n", + "number = 9 ; 2*number = 18\n", + "number = 3 ; 2*number = 6\n", + "number = 8 ; 2*number = 16\n", + "number = 5 ; 2*number = 10\n", + "number = 7 ; 2*number = 14\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "lloyd = {\n", - " \"name\": \"Lloyd\",\n", - " \"homework\": [90.0, 97.0, 75.0, 92.0],\n", - " \"quizzes\": [88.0, 40.0, 94.0],\n", - " \"tests\": [75.0, 90.0]\n", - "}\n", - "alice = {\n", - " \"name\": \"Alice\",\n", - " \"homework\": [100.0, 92.0, 98.0, 100.0],\n", - " \"quizzes\": [82.0, 83.0, 91.0],\n", - " \"tests\": [89.0, 97.0]\n", - "}\n", - "tyler = {\n", - " \"name\": \"Tyler\",\n", - " \"homework\": [0.0, 87.0, 75.0, 22.0],\n", - " \"quizzes\": [0.0, 75.0, 78.0],\n", - " \"tests\": [100.0, 100.0]\n", - "}" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 8 - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\u63a5\u8457\u6211\u5011\u5b9a\u7fa9\u4e86\u5e7e\u500b\u51fd\u6578\uff0c\u9996\u5148\u662f\u8a08\u7b97\u5e73\u5747\u5206\u6578\u7684\u51fd\u6578average\uff0c\u4ed6\u6703\u628a\u50b3\u9032\u4f86\u7684\u4e00\u7d44(list)\u6578\u5b57(numbers)\u52a0\u7e3d(\u4f7f\u7528\u5167\u5efa\u7684sum\u51fd\u6578)\uff0c\u518d\u5c07total\u9664\u4ee5\u8cc7\u6599\u500b\u6578(len)\u8a08\u7b97\u5e73\u5747\u3002\u6ce8\u610f\u70ba\u4e86\u907f\u514d\u8cc7\u6599\u578b\u614b\u51fa\u554f\u984c\uff0c\u6211\u5011\u4f7f\u7528float\u51fd\u6578\u5c07total\u8f49\u70ba\u6d6e\u9ede\u6578" + } + ], + "source": [ + "my_list = [1,9,3,8,5,7]\n", + "\n", + "for number in my_list:\n", + " # Your code here\n", + " print (\"number =\",number,\"; 2*number =\",2*number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是一個簡單的迴圈,item 會依序由in之後的list取值,同時執行迴圈內部的程式,在這個例子中是逐一列出item" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "3\n", + "21\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Add your function below!\n", - "def average(numbers):\n", - " total = sum(numbers)\n", - " #print total\n", - " #print type(total)\n", - " total = float(total)\n", - " return total/len(numbers)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e8c\u500b\u51fd\u6578\u662f\u5c07\u50b3\u9032\u4f86\u7684\u5b78\u751f\u7d00\u9304(dictionary)\uff0c\u5206\u5225\u8a08\u7b97homework\u3001 quizzes\u3001 tests\u7684\u5e73\u5747\uff0c\u518d\u8a08\u7b97\u52a0\u6b0a\u548c\u4f5c\u70ba\u5b78\u751f\u7684\u5e73\u5747\u5206\u6578" + } + ], + "source": [ + "for item in [1, 3, 21]: \n", + " print (item)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pear\n", + "price: 3\n", + "stock: 15\n", + "orange\n", + "price: 1.5\n", + "stock: 32\n", + "apple\n", + "price: 2\n", + "stock: 0\n", + "banana\n", + "price: 4\n", + "stock: 6\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def get_average(student):\n", - " homework = average(student[\"homework\"])\n", - " quizzes = average(student[\"quizzes\"])\n", - " tests = average(student[\"tests\"])\n", - "\n", - " return homework*0.1+quizzes*0.3+tests*0.6\n", - " " - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e09\u500b\u51fd\u6578\u662f\u5224\u65b7\u6210\u7e3e(score)\u6240\u5c0d\u61c9\u7684\u7b49\u7b2c(letter grade)" + } + ], + "source": [ + "prices = {\"banana\": 4,\"apple\": 2,\"orange\": 1.5,\"pear\": 3}\n", + "\n", + "stock = {\"banana\": 6,\"apple\": 0,\"orange\":32,\"pear\": 15}\n", + "\n", + "for item in prices:\n", + " print (item)\n", + " print (\"price: %s\" % prices[item])\n", + " print (\"stock: %s\" % stock[item])" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def get_letter_grade(score):\n", - " if score >= 90: \n", - " return \"A\"\n", - " elif score >= 80:\n", - " return \"B\"\n", - " elif score >= 70:\n", - " return \"C\"\n", - " elif score >= 60:\n", - " return \"D\"\n", - " else: \n", - " return \"F\"" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6700\u5f8c\u4e00\u500b\u51fd\u6578\u662f\u8a08\u7b97\u6574\u73ed(students-list)\u7684\u5e73\u5747\u5206\u6578\uff0c\u6211\u5011\u5148\u5efa\u7acb\u4e00\u500b\u7a7a\u7684results list\uff0c\u4ee5\u65b9\u5f0f\uff0c\u4f9d\u5e8f\u8a08\u7b97\u6bcf\u500b\u5b78\u751f\u7684\u5e73\u5747\u5206\u6578\uff0c\u518d\u52a0\u5165results\u4e2d\uff0c\u6700\u5f8c\u518d\u8a08\u7b97\u5e73\u5747\u3002" + } + ], + "source": [ + "def fizz_count(x):\n", + " count = 0\n", + " for item in x:\n", + " if item == \"fizz\":\n", + " count = count +1\n", + " return count\n", + " \n", + "\n", + "print (fizz_count([\"fizz\",\"cat\",\"fizz\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "banana\n", + "price: 4\n", + "stock: 6\n", + "orange\n", + "price: 1.5\n", + "stock: 32\n", + "apple\n", + "price: 2\n", + "stock: 0\n", + "7.5\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def get_class_average(students):\n", - " results = []\n", - " for student in students:\n", - " results.append(get_average(student))\n", - " return average(results)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6700\u5e95\u4e0b\u7684\u90e8\u4efd\u5247\u662f\u5148\u5efa\u7acb\u4e00\u500b\u73ed\u7d1a\u7684list\uff0c\u4f7f\u7528\u524d\u9762\u5b9a\u7fa9\u7684\u51fd\u6578\u8a08\u7b97\u5e73\u5747\u6210\u7e3e" + } + ], + "source": [ + "shopping_list = [\"banana\", \"orange\", \"apple\"]\n", + "\n", + "stock = {\n", + " \"banana\": 6,\n", + " \"apple\": 0,\n", + " \"orange\": 32,\n", + " \"pear\": 15\n", + "}\n", + " \n", + "prices = {\n", + " \"banana\": 4,\n", + " \"apple\": 2,\n", + " \"orange\": 1.5,\n", + " \"pear\": 3\n", + "}\n", + "\n", + "# Write your code below!\n", + "def compute_bill(food):\n", + " total = 0\n", + " for item in food:\n", + " print (item)\n", + " print (\"price: %s\" % prices[item])\n", + " print (\"stock: %s\" % stock[item])\n", + " total = total + prices[item]\n", + " return total\n", + "print (compute_bill(shopping_list))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Student Becomes the Teacher" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是計算學生成績的一個程式,首先是學生的紀錄。每個學生的成績紀錄是以dictionary儲存,其中包含了\"name\",\"homework\",\"quizzes\",\"tests\"。注意dictionary中的值可以是list。" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "lloyd = {\n", + " \"name\": \"Lloyd\",\n", + " \"homework\": [90.0, 97.0, 75.0, 92.0],\n", + " \"quizzes\": [88.0, 40.0, 94.0],\n", + " \"tests\": [75.0, 90.0]\n", + "}\n", + "alice = {\n", + " \"name\": \"Alice\",\n", + " \"homework\": [100.0, 92.0, 98.0, 100.0],\n", + " \"quizzes\": [82.0, 83.0, 91.0],\n", + " \"tests\": [89.0, 97.0]\n", + "}\n", + "tyler = {\n", + " \"name\": \"Tyler\",\n", + " \"homework\": [0.0, 87.0, 75.0, 22.0],\n", + " \"quizzes\": [0.0, 75.0, 78.0],\n", + " \"tests\": [100.0, 100.0]\n", + "}" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "接著我們定義了幾個函數,首先是計算平均分數的函數average,他會把傳進來的一組(list)數字(numbers)加總(使用內建的sum函數),再將total除以資料個數(len)計算平均。注意為了避免資料型態出問題,我們使用float函數將total轉為浮點數" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Add your function below!\n", + "def average(numbers):\n", + " total = sum(numbers)\n", + " #print total\n", + " #print type(total)\n", + " total = float(total)\n", + " return total/len(numbers)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第二個函數是將傳進來的學生紀錄(dictionary),分別計算homework、 quizzes、 tests的平均,再計算加權和作為學生的平均分數" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_average(student):\n", + " homework = average(student[\"homework\"])\n", + " quizzes = average(student[\"quizzes\"])\n", + " tests = average(student[\"tests\"])\n", + "\n", + " return homework*0.1+quizzes*0.3+tests*0.6\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第三個函數是判斷成績(score)所對應的等第(letter grade)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_letter_grade(score):\n", + " if score >= 90: \n", + " return \"A\"\n", + " elif score >= 80:\n", + " return \"B\"\n", + " elif score >= 70:\n", + " return \"C\"\n", + " elif score >= 60:\n", + " return \"D\"\n", + " else: \n", + " return \"F\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後一個函數是計算整班(students-list)的平均分數,我們先建立一個空的results list,以方式,依序計算每個學生的平均分數,再加入results中,最後再計算平均。" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_class_average(students):\n", + " results = []\n", + " for student in students:\n", + " results.append(get_average(student))\n", + " return average(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最底下的部份則是先建立一個班級的list,使用前面定義的函數計算平均成績" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "83.86666666666666\n", + "B\n" ] - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - " \n", - "students = [lloyd, alice, tyler]\n", - "class_avg = get_class_average(students)\n", - "print class_avg\n", - "print get_letter_grade(class_avg)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "83.8666666667\n", - "B\n" - ] - } - ], - "prompt_number": 13 } ], - "metadata": {} + "source": [ + " \n", + "students = [lloyd, alice, tyler]\n", + "class_avg = get_class_average(students)\n", + "print (class_avg)\n", + "print (get_letter_grade(class_avg))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/MyPythonNotebook.ipynb b/MyPythonNotebook.ipynb index f1a83f1..39decf8 100644 --- a/MyPythonNotebook.ipynb +++ b/MyPythonNotebook.ipynb @@ -1,1241 +1,1217 @@ { - "metadata": { - "name": "", - "signature": "sha256:7506a1fbe1cdad7bfb5190c7d03e2cfce486f54f4628f58a979af2452c822f71" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u524d\u8a00\uff1a\u57fa\u672c\u4e0a\u9019\u662fcodeacademy\u7684\u5b78\u7fd2\u7b46\u8a18\uff0c\n" - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Python Syntax" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "print \u6307\u4ee4\uff1aprint \u5b57\u4e32; print \u8b8a\u6578; print \u5b57\u4e32, \u8b8a\u6578, etc" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print \"Welcome to Python!\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Welcome to Python!\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u8b8a\u6578\u8ce6\u503c\uff1a\u8b8a\u6578 = \u503c\n", - "\n", - "\u8b8a\u6578\u578b\u614b\uff1a\u6574\u6578\uff08Integer), \u6d6e\u9ede\u6578(float), boolean(True/False)\n", - "\n", - "\u7a0b\u5f0f\u4e2d\u8b8a\u6578\u53ef\u4ee5\u96a8\u6642\u66f4\u6539\u5176\u503c, \u5728Python\u4e2d, \u751a\u81f3\u53ef\u4ee5\u66f4\u6539\u8b8a\u6578\u578b\u614b" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_int = 10\n", - "my_float = 0.123\n", - "my_bool = True\n", - "print \"my_int =\", my_int, \"my_float = \",my_float, \"my_bool =\",my_bool\n", - "my_var = 10\n", - "print \"my_var = \", my_var\n", - "my_var = False\n", - "print \"my_var = \", my_var" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_int = 10 my_float = 0.123 my_bool = True\n", - "my_var = 10\n", - "my_var = False\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7e2e\u6392\uff1aPython\u4e2d\u662f\u4ee5\u7e2e\u6392\u4f86\u5340\u5206\u5c64\u7d1a, \u4f8b\u5982\u51fd\u6578\u5b9a\u7fa9, \u8ff4\u5708\u7b49\u7b49\n", - "\n", - "\u5e95\u4e0b\u662f\u4e00\u500b\u7e2e\u6392\u7684\u4f8b\u5b50, def \u662f\u5728\u5b9a\u7fa9\u4e00\u500b\u51fd\u6578" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def spam():\n", - " eggs = 12\n", - " return eggs\n", - " \n", - "print spam()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "12\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u8a3b\u89e3\uff1a\u4e00\u822c\u55ae\u884c\u8a3b\u89e3\u6216\u662f\u5728\u884c\u5c3e\u8a3b\u89e3\u53ef\u4ee5\u4f7f\u7528#, \u82e5\u8981\u591a\u884c\u8a3b\u89e3\u5247\u4ee5\"\"\"\u958b\u982d,\"\"\"\u7d50\u5c3e" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6578\u5b78\uff1a\u52a0\u6e1b\u4e58\u9664\u56db\u5247\u904b\u7b97\u7b26\u865f\u662f\u4e00\u822c\u5e38\u7528\u7b26\u865f, \u6b21\u65b9\u5247\u6539\u70ba\\** \u800c\u4e0d\u662f^, \u540c\u9918\u5247\u662f %" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print \"1+2+3+4*5 = \", 1+2+3+4*5 \n", - "print \"2^3 = \", 2**3\n", - "print \"3 %2 =\", 3%2" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1+2+3+4*5 = 26\n", - "2^3 = 8\n", - "3 %2 = 1\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "STRINGS AND CONSOLE OUTPUT" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5b57\u4e32\u7684\u5b9a\u7fa9\u65b9\u5f0f\u662f\u4ee5\u96d9\u5f15\u865f\u6216\u662f\u55ae\u5f15\u865f\u593e\u8d77\u4f86" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "caesar = \"Graham\"\n", - "praline = 'John'\n", - "print caesar\n", - "print praline" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Graham\n", - "John\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Escaping characters\uff1a\u6709\u4e9b\u5b57\u5143\u6709\u7279\u6b8a\u7528\u9014, \u6240\u4ee5\u51fa\u73fe\u5728\u5b57\u4e32\u4e2d\u6642\u5fc5\u9808\u52a0\u5165\u53cd\u659c\u7dda\\" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'This isn\\'t flying, this is falling with style!'\n", - "print \"\\\" is another special character.\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This isn't flying, this is falling with style!\n", - "\" is another special character.\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5b57\u4e32\u53ef\u4ee5\u8996\u70ba\u4e00\u500barray, \u6240\u4ee5\u53ef\u4ee5\u4f7f\u7528index\u6311\u51fa\u5b57\u4e32\u4e2d\u7279\u5b9a\u5e7e\u500b\u5b57\u5143. \u6ce8\u610findex\u75310\u958b\u59cb" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_str = \"STRINGS\"\n", - "print \"The whole string is \",my_str,\" and the first character is \", my_str[0], \". The last characters are \",my_str[-3:]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "The whole string is STRINGS and the first character is S . The last characters are NGS\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\u8207\u5b57\u4e32\u76f8\u95dc\u7684\u5e7e\u500b\u51fd\u6578\uff1a\n", - "\n", - "len(mystr)\uff1a\u50b3\u56de\u5b57\u4e32mystr\u7684\u9577\u5ea6\n", - "\n", - "mystr.lower()\uff1a\u5c07\u5b57\u4e32mystr\u90fd\u6539\u70ba\u5c0f\u5beb\n", - "\n", - "mystr.upper()\uff1a\u5c07\u5b57\u4e32mystr\u90fd\u6539\u70ba\u5927\u5beb\n", - "\n", - "str(mynum)\uff1a\u5c07mynum\uff08\u6578\u503c\u6216\u662f\u6578\u503c\u8b8a\u6578\uff09\u8f49\u70ba\u5b57\u4e32" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_str = \"Mathematics\"\n", - "print \"The length of my_str is\", len(my_str)\n", - "print \"The effect of upper on my_str is\", my_str.upper()\n", - "print \"The effect of lower on my_str is\", my_str.lower()\n", - "print \"The third character of the 12345 is\", str(12345)[2]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "The length of my_str is 11\n", - "The effect of upper on my_str is MATHEMATICS\n", - "The effect of lower on my_str is mathematics\n", - "The third character of the 12345 is 3\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5b57\u4e32\u53ef\u4ee5\u7528+\u9019\u500b\u904b\u7b97\u9023\u63a5\u8d77\u4f86, \u6ce8\u610f\u9023\u8d77\u4f86\u5f8c\u7684\u5b57\u4e32\u5728\u539f\u5148\u7684\u5b57\u4e32\u9593\u6c92\u6709\u7a7a\u767d" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print \"Spam \"+\"and \"+\"eggs\"\n", - "str1 = \"Spam\"\n", - "str2 = \"and\"\n", - "str3 = \" eggs\"\n", - "print str1+str2+str3" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Spam and eggs\n", - "Spamand eggs\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "\u683c\u5f0f\u5316\u5b57\u4e32/\u8f38\u51fa" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6211\u5011\u7d93\u5e38\u6703\u78b0\u5230\u540c\u985e\u578b\u7684\u53e5\u5b50\uff08\u66f4\u63db\u90e8\u4efd\u540d\u8a5e\uff09\u4e00\u518d\u51fa\u73fe\u7684\u60c5\u5f62, \u53ef\u4ee5\u5728\u5b57\u4e32\u4e2d\u4ee5%s \u8868\u793a\u4e4b\u5f8c\u8981\u53d6\u4ee3\u7684\u4f4d\u7f6e, \u5b57\u4e32\u5f8c%\u5f8c\u7684\u5167\u5bb9\u8868\u793a\u8981\u53d6\u4ee3%s\u7684\u5167\u5bb9" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "string_1 = \"Camelot\"\n", - "string_2 = \"place\"\n", - "my_str = \"Let's not go to %s. 'Tis a silly %s.\"\n", - "print \"Let's not go to %s. 'Tis a silly %s.\" % (string_1, string_2)\n", - "print my_str % (string_1, string_2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Let's not go to Camelot. 'Tis a silly place.\n", - "Let's not go to Camelot. 'Tis a silly place.\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "\u8f38\u5165raw_input" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "my_str=raw_input(\"Display Message\") \u986f\u793a\"Display Message\"\u5f8c, \u8981\u6c42\u8f38\u5165\u8cc7\u8a0a, \u5c07\u7d50\u679c\u8ce6\u4e88my_str. \u6ce8\u610f\u4e2d\u6587\u8f38\u5165\u90e8\u4efd\u6709\u9ede\u8907\u96dc, \u7b49\u5230\u6211\u5011\u6709\u9ede\u57fa\u790e\u5f8c\u518d\u9032\u884c, \u53e6\u5916\u9019\u662fpython 2.7\u7684\u4f7f\u7528\u6cd5, python 3\u7684\u4f5c\u6cd5\u7a0d\u6709\u4e0d\u540c. \n", - "\n", - "\u53e6\u5916\u8acb\u6ce8\u610f\u5e95\u4e0b\u7684\u4f8b\u5b50, \u7531\u65bc\u592a\u9577\u6240\u4ee5\u4f7f\u7528\\\u65b7\u884c" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "name = raw_input(\"What is your name?\")\n", - "quest = raw_input(\"What is your quest?\")\n", - "color = raw_input(\"What is your favorite color?\")\n", - "\n", - "print \"Ah, so your name is %s, your quest is %s, \" \\\n", - "\"and your favorite color is %s.\" %(name, quest, color)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "What is your name?mhchen\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "What is your quest?grail\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "What is your favorite color?blue\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Ah, so your name is mhchen, your quest is grail, and your favorite color is blue.\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Date and Time" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "前言:基本上這是codeacademy的學習筆記,\n", + "https://www.codecademy.com/\n", + "\n", + "原始版本是2.7版,現改為3.x 版,主要差異請參考:\n", + "https://docs.python.org/3/whatsnew/3.0.html\n", + "\n", + "[Python/第一次用就上手](http://wiki.python.org.tw/Python/%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%94%A8%E5%B0%B1%E4%B8%8A%E6%89%8B)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python Syntax" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "print 指令:print 字串; print 變數; print 字串, 變數, etc\n", + "注解:python 3.5版改為函數 print()" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Welcome to Python!\n" ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\u5982\u679c\u9700\u8981\u4f7f\u7528datetime\u529f\u80fd\u6642, \u9700\u5f15\u5165datetime\u6a21\u7d44\uff1afrom datetime import datetime\n", - "\n", - "datetime.now()\uff1a\u50b3\u56de\u7684\u662f\u73fe\u5728\u7684\u6642\u9593\u65e5\u671f, \u5982\u679c\u9700\u8981\u5176\u4e2d\u7684\u5e74\u6708\u65e5\u6642\u5206\u7b49\u8cc7\u8a0a\u53ef\u4ee5\u4f7f\u7528 .year, .month, .day, .hour, .minute, .second" + } + ], + "source": [ + "print(\"Welcome to Python!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "變數賦值:變數 = 值\n", + "\n", + "變數型態:整數(Integer), 浮點數(float), boolean(True/False)\n", + "\n", + "程式中變數可以隨時更改其值, 在Python中, 甚至可以更改變數型態" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my_int = 10 my_float = 0.123 my_bool = True\n", + "my_var = 10\n", + "my_var = False\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from datetime import datetime\n", - "now = datetime.now()\n", - "print now\n", - "print now.year\n", - "print now.month\n", - "print datetime.now().day\n", - "print '%s/%s/%s %s:%s:%s' % (now.month, now.day, now.year,now.hour, now.minute, now.second)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2014-05-26 01:56:22.124397\n", - "2014\n", - "5\n", - "26\n", - "5/26/2014 1:56:22\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Conditionals & Control Flow" + } + ], + "source": [ + "my_int = 10\n", + "my_float = 0.123\n", + "my_bool = True\n", + "print(\"my_int =\", my_int, \"my_float = \",my_float, \"my_bool =\",my_bool)\n", + "my_var = 10\n", + "print(\"my_var = \", my_var)\n", + "my_var = False\n", + "print(\"my_var = \", my_var)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "縮排:Python中是以縮排來區分層級, 例如函數定義, 迴圈等等\n", + "\n", + "底下是一個縮排的例子, def 是在定義一個函數" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u7684\u4f8b\u5b50\u4e2d\u5b9a\u4e00\u4e86\u4e00\u500b\u51fd\u6578clinic, \u6ce8\u610f\u51fd\u6578\u7d50\u675f\u7684\u4f4d\u7f6e, \u540c\u6642\u5728\u4e3b\u7a0b\u5f0f\u4e2d\u5982\u4f55\u547c\u53ebclinic, \u9084\u6709\u905e\u8ff4\u547c\u53eb\u51fd\u6578\u7684\u90e8\u4efd.\n", - "\u5728\u9019\u500b\u5c0f\u7bc0\u4e2d\uff0c\u91cd\u9ede\u662f\u5728control flow, \u4e5f\u5c31\u662fif-elif-else\u7684\u90e8\u4efd, \u6ce8\u610f\u7e2e\u6392\u4ee5\u53ca\u5192\u865f\u7684\u4f4d\u7f6e" + } + ], + "source": [ + "def spam():\n", + " eggs = 12\n", + " return eggs\n", + " \n", + "print(spam())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "註解:一般單行註解或是在行尾註解可以使用#, 若要多行註解則以\"\"\"開頭,\"\"\"結尾" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "數學:加減乘除四則運算符號是一般常用符號, 次方則改為\\** 而不是^, 同餘則是 %" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1+2+3+4*5 = 26\n", + "2^3 = 8\n", + "3 %2 = 1\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def clinic():\n", - " print \"You've just entered the clinic!\"\n", - " print \"Do you take the door on the left or the right?\"\n", - " answer = raw_input(\"Type left or right and hit 'Enter'.\").lower()\n", - " if answer == \"left\" or answer == \"l\":\n", - " print \"This is the Verbal Abuse Room, you heap of parrot droppings!\"\n", - " elif answer == \"right\" or answer == \"r\":\n", - " print \"Of course this is the Argument Room, I've told you that already!\"\n", - " else:\n", - " print \"You didn't pick left or right! Try again.\"\n", - " clinic()\n", - "\n", - "clinic()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "You've just entered the clinic!\n", - "Do you take the door on the left or the right?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "Type left or right and hit 'Enter'.l\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This is the Verbal Abuse Room, you heap of parrot droppings!\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u662f\u516d\u500b\u6bd4\u8f03\u7684\u904b\u7b97\n", - "\n", - "1.Equal to (==)\n", - "\n", - "2.Not equal to (!=)\n", - "\n", - "3.Less than (<)\n", - " \n", - "4.Less than or equal to (<=)\n", - "\n", - "5.Greater than (>)\n", - "\n", - "6.Greater than or equal to (>=)" + } + ], + "source": [ + "print(\"1+2+3+4*5 = \", 1+2+3+4*5 )\n", + "print(\"2^3 = \", 2**3)\n", + "print(\"3 %2 =\", 3%2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# STRINGS AND CONSOLE OUTPUT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字串的定義方式是以雙引號或是單引號夾起來" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graham\n", + "John\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u904b\u7b97\u5b50\u5148\u5f8c\u9806\u5e8f\u8acb\u53c3\u8003\uff1a\n", - "http://www.swaroopch.com/notes/python/#op_exp ,\n", - "\u4f46\u662f\u5efa\u8b70\u9069\u7576\u4f7f\u7528\u62ec\u865f\u8b93\u7a0b\u5f0f\u65b9\u4fbf\u95b1\u8b80\u540c\u6642\u907f\u514d\u932f\u8aa4" + } + ], + "source": [ + "caesar = \"Graham\"\n", + "praline = 'John'\n", + "print(caesar)\n", + "print(praline)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Escaping characters:有些字元有特殊用途, 所以出現在字串中時必須加入反斜線\\" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This isn't flying, this is falling with style!\n", + "\" is another special character.\n" ] - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "Control Flow" + } + ], + "source": [ + "print('This isn\\'t flying, this is falling with style!')\n", + "print(\"\\\" is another special character.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字串可以視為一個array, 所以可以使用index挑出字串中特定幾個字元. 注意index由0開始" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The whole string is STRINGS and the first character is S . The last characters are NGS\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "if-(elif)-else\u7684\u67b6\u69cb\u53ef\u4ee5\u53c3\u8003\u5e95\u4e0b\u9019\u500b\u4f8b\u5b50" + } + ], + "source": [ + "my_str = \"STRINGS\"\n", + "print(\"The whole string is \",my_str,\" and the first character is \", my_str[0], \". The last characters are \",my_str[-3:])" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "與字串相關的幾個函數:\n", + "\n", + "len(mystr):傳回字串mystr的長度\n", + "\n", + "mystr.lower():將字串mystr都改為小寫\n", + "\n", + "mystr.upper():將字串mystr都改為大寫\n", + "\n", + "str(mynum):將mynum(數值或是數值變數)轉為字串" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The length of my_str is 11\n", + "The effect of upper on my_str is MATHEMATICS\n", + "The effect of lower on my_str is mathematics\n", + "The third character of the 12345 is 3\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def greater_less_equal_5(answer):\n", - " if answer>5:\n", - " return 1\n", - " elif answer<5: \n", - " return -1\n", - " else:\n", - " return 0\n", - " \n", - "print greater_less_equal_5(4)\n", - "print greater_less_equal_5(5)\n", - "print greater_less_equal_5(6)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "-1\n", - "0\n", - "1\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "PygLatin" + } + ], + "source": [ + "my_str = \"Mathematics\"\n", + "print(\"The length of my_str is\", len(my_str))\n", + "print(\"The effect of upper on my_str is\", my_str.upper())\n", + "print(\"The effect of lower on my_str is\", my_str.lower())\n", + "print(\"The third character of the 12345 is\", str(12345)[2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字串可以用+這個運算連接起來, 注意連起來後的字串在原先的字串間沒有空白" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Spam and eggs\n", + "Spamand eggs\n" ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Pig Latin\u662f\u500b\u7c21\u55ae\u7684\u6587\u5b57\u904a\u6232\u6587\u5b57\u904a\u6232, \u57fa\u672c\u4e0a\u662f\u5c07\u4e00\u500b\u5b57\u7684\u5b57\u9996\u79fb\u5230\u5b57\u5c3e\u5f8c\u518d\u52a0\u4e0a\"ay\". \u7a0b\u5f0f\u9700\u8981\u8003\u616e\u8f38\u5165\u7684\u5b57\u662f\u5426\u6709\u8f38\u5165\uff08\u6aa2\u67e5\u5b57\u4e32\u9577\u5ea6len\uff09\u662f\u5426\u662f\u82f1\u6587(isalpha). \u5728\u5c07\u81ea\u9996\u79fb\u5230\u5b57\u5c3e\u540c\u6642\u52a0\u4e0a\"ay\"\u7684\u904e\u7a0b\u4e2d, \u662f\u7c21\u55ae\u5b57\u4e32\u64cd\u4f5c, \u9700\u6ce8\u610f\u7684\u662f\u5b57\u4e32\u7b2c\u4e00\u500b\u5b57\u5143\u7684\u7de8\u865f\u662f0, \u540c\u6642\u82e5\u5e0c\u671b\u8868\u793a\u5f9e\u7b2c\u4e8c\u500b\u5b57\u5143\u5230\u5b57\u5c3e\u7684\u6307\u5b9a\u65b9\u5f0f\u9664\u4e86[1:len(new_word)]\u5916, \u4e5f\u53ef\u4ee5\u7528[1:]. \u5e95\u4e0b\u662f\u4e00\u500b\u6709\u9ede\u8b8a\u5316\u7684\u4f8b\u5b50, \u5c07\u5b57\u4e32\u8f38\u5165\u53ca\u64cd\u4f5c\u904e\u7a0b\u5b9a\u7fa9\u70ba\u4e00\u51fd\u6578pyglatin, \u540c\u6642\u4f7f\u7528\u905e\u8ff4\u547c\u53eb\u7684\u6280\u5de7\u540c\u6642\u4f7f\u7528\u905e\u8ff4\u547c\u53eb\u7684\u6280\u5de7, \u5728\u6c92\u6709\u8f38\u5165\u6b63\u78ba\u6587\u5b57\u6642\u8981\u6c42\u91cd\u65b0\u8f38\u5165" + } + ], + "source": [ + "print( \"Spam \"+\"and \"+\"eggs\")\n", + "str1 = \"Spam\"\n", + "str2 = \"and\"\n", + "str3 = \" eggs\"\n", + "print(str1+str2+str3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 格式化字串/輸出" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "我們經常會碰到同類型的句子(更換部份名詞)一再出現的情形, 可以在字串中以%s 表示之後要取代的位置, 字串後%後的內容表示要取代%s的內容" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Let's not go to Camelot. 'Tis a silly place.\n", + "Let's not go to Camelot. 'Tis a silly place.\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "pyg = 'ay'\n", - "def pyglatin():\n", - " original = raw_input('Enter a word:') \n", - " if len(original) > 0 and original.isalpha():\n", - " print original\n", - " word = original.lower()\n", - " first = word[0]\n", - " new_word = word+first+pyg\n", - " new_word = new_word[1:]\n", - " print new_word\n", - " else:\n", - " print 'empty'\n", - " pyglatin()\n", - "pyglatin()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "stream": "stdout", - "text": [ - "Enter a word:python\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "python\n", - "ythonpay\n" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "FUNCTIONS" + } + ], + "source": [ + "string_1 = \"Camelot\"\n", + "string_2 = \"place\"\n", + "my_str = \"Let's not go to %s. 'Tis a silly %s.\"\n", + "print(\"Let's not go to %s. 'Tis a silly %s.\" % (string_1, string_2))\n", + "print(my_str % (string_1, string_2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 輸入input" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "my_str=input(\"Display Message\") 顯示\"Display Message\"後, 要求輸入資訊, 將結果賦予my_str. 注意中文輸入部份有點複雜, 等到我們有點基礎後再進行, (已改為 3.x版本,2.7版為raw_input) \n", + "\n", + "另外請注意底下的例子, 由於太長所以使用\\斷行" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "What is your name?mhchen\n", + "What is your quest?holy shit\n", + "What is your favorite color?blue\n", + "Ah, so your name is mhchen, your quest is holy shit, and your favorite color is blue.\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u4f8b\u5b50\u662f\u5b9a\u7fa9\u4e00\u500b\u8a08\u7b97\u5e73\u65b9\u7684\u51fd\u6578square, \u5b9a\u7fa9\u7684\u65b9\u5f0f\u662f\u4f7f\u7528def \u958b\u982d, \u82e5\u6709\u8f38\u5165\u53c3\u6578, \u5247\u5728\u62ec\u5f27\u4e2d\u653e\u5165\u53c3\u6578, \u82e5\u6c92\u6709\u8f38\u5165\u53c3\u6578\u5247\u62ec\u5f27\u5167\u662f\u7a7a\u7684. \u4ee5\u7e2e\u6392\u5340\u5225\u51fd\u6578\u548c\u4e3b\u7a0b\u5f0f, \u51fd\u6578\u82e5\u6709\u56de\u50b3\u503c\u6642 \u5c07\u56de\u50b3\u503c\u5beb\u5728return\u5f8c." + } + ], + "source": [ + "name = input(\"What is your name?\")\n", + "quest = input(\"What is your quest?\")\n", + "color = input(\"What is your favorite color?\")\n", + "\n", + "print(\"Ah, so your name is %s, your quest is %s, \" \\\n", + "\"and your favorite color is %s.\" %(name, quest, color))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Date and Time" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "如果需要使用datetime功能時, 需引入datetime模組:from datetime import datetime\n", + "\n", + "datetime.now():傳回的是現在的時間日期, 如果需要其中的年月日時分等資訊可以使用 .year, .month, .day, .hour, .minute, .second" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2016-12-08 01:52:34.702193\n", + "2016\n", + "12\n", + "8\n", + "12/8/2016 1:52:34\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def square(n):\n", - " \"\"\"Returns the square of a number.\"\"\"\n", - " squared = n**2\n", - " print \"%d squared is %d.\" % (n, squared)\n", - " return squared\n", - " \n", - "# Call the square function on line 9! Make sure to\n", - "# include the number 10 between the parentheses.\n", - "square(10)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "10 squared is 100.\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 16, - "text": [ - "100" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Importing a module" + } + ], + "source": [ + "from datetime import datetime\n", + "now = datetime.now()\n", + "print(now)\n", + "print( now.year)\n", + "print( now.month)\n", + "print( datetime.now().day)\n", + "print( '%s/%s/%s %s:%s:%s' % (now.month, now.day, now.year,now.hour, now.minute, now.second))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conditionals & Control Flow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子中定一了一個函數clinic, 注意函數結束的位置, 同時在主程式中如何呼叫clinic, 還有遞迴呼叫函數的部份.\n", + "在這個小節中,重點是在control flow, 也就是if-elif-else的部份, 注意縮排以及冒號的位置" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "You've just entered the clinic!\n", + "Do you take the door on the left or the right?\n", + "Type left or right and hit 'Enter'.R\n", + "Of course this is the Argument Room, I've told you that already!\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5728python\u4e2d\u6b32\u4f7f\u7528\u7279\u6b8a\u51fd\u5f0f\u5eab\u6642\u9700import\u7279\u5b9a\u6a21\u7d44, \u4ee5math module\u4f86\u8aaa, \u6b32\u4f7f\u7528\u5176\u4e2d\u7684sqrt\u51fd\u6578\u6642, \u6709\u5e7e\u7a2e\u65b9\u6cd5\n", - "1. import math \n", - "2. from math import sqrt\n", - "3. from math import *\n", - "\n", - "\u5e95\u4e0b\u662f\u7b2c\u4e00\u7a2e\u65b9\u6cd5, \u4f7f\u7528\u6642\u9700\u4ee5math.sqrt()\u547c\u53eb. \u53e6\u5916\u9019\u7a2e\u65b9\u6cd5\u6703\u5c07math\u6a21\u7d44\u5167\u5176\u4ed6\u7269\u4ef6\u4e5f\u4e00\u8d77\u5f15\u5165, \u9019\u53ef\u4ee5\u7528dir()\u51fd\u6578\u770b\u5230math\u88e1\u7684\u51fd\u6578 " + } + ], + "source": [ + "def clinic():\n", + " print( \"You've just entered the clinic!\")\n", + " print( \"Do you take the door on the left or the right?\")\n", + " answer = input(\"Type left or right and hit 'Enter'.\").lower()\n", + " if answer == \"left\" or answer == \"l\":\n", + " print (\"This is the Verbal Abuse Room, you heap of parrot droppings!\")\n", + " elif answer == \"right\" or answer == \"r\":\n", + " print (\"Of course this is the Argument Room, I've told you that already!\")\n", + " else:\n", + " print (\"You didn't pick left or right! Try again.\")\n", + " clinic()\n", + "\n", + "clinic()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是六個比較的運算\n", + "\n", + "1.Equal to (==)\n", + "\n", + "2.Not equal to (!=)\n", + "\n", + "3.Less than (<)\n", + " \n", + "4.Less than or equal to (<=)\n", + "\n", + "5.Greater than (>)\n", + "\n", + "6.Greater than or equal to (>=)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "運算子先後順序請參考:\n", + "http://www.swaroopch.com/notes/python/#op_exp ,\n", + "但是建議適當使用括號讓程式方便閱讀同時避免錯誤" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Control Flow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "if-(elif)-else的架構可以參考底下這個例子" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-1\n", + "0\n", + "1\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import math\n", - "print math.sqrt(25)\n", - "print dir(math)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "5.0\n", - "['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e8c\u7a2e\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u4ee5sqrt()\u547c\u53eb" + } + ], + "source": [ + "def greater_less_equal_5(answer):\n", + " if answer>5:\n", + " return 1\n", + " elif answer<5: \n", + " return -1\n", + " else:\n", + " return 0\n", + " \n", + "print (greater_less_equal_5(4))\n", + "print(greater_less_equal_5(5))\n", + "print(greater_less_equal_5(6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### PygLatin" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "Pig Latin是個簡單的文字遊戲文字遊戲, 基本上是將一個字的字首移到字尾後再加上\"ay\". 程式需要考慮輸入的字是否有輸入(檢查字串長度len)是否是英文(isalpha). 在將自首移到字尾同時加上\"ay\"的過程中, 是簡單字串操作, 需注意的是字串第一個字元的編號是0, 同時若希望表示從第二個字元到字尾的指定方式除了[1:len(new_word)]外, 也可以用[1:]. 底下是一個有點變化的例子, 將字串輸入及操作過程定義為一函數pyglatin, 同時使用遞迴呼叫的技巧同時使用遞迴呼叫的技巧, 在沒有輸入正確文字時要求重新輸入" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter a word:abcd\n", + "abcd\n", + "bcdaay\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from math import sqrt\n", - "print sqrt(25)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "5.0\n" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e09\u7a2e\u65b9\u5f0f\u540c\u6a23\u4e5f\u53ef\u4ee5\u76f4\u63a5\u4ee5sqrt()\u547c\u53eb, \u4f46\u662f\u548c\u7b2c\u4e8c\u7a2e\u4e0d\u4e00\u6a23\u7684\u5730\u65b9\u5728\u65bc\u524d\u4e00\u7a2e\u53ea\u6709\u5f15\u5165sqrt, \u4f46\u662f\u9019\u4e00\u7a2e\u65b9\u6cd5\u5c07math\u6a21\u7d44\u5168\u90e8\u5f15\u5165\u5168\u90e8\u5f15\u5165, \u7a0b\u5f0f\u64b0\u5beb\u904e\u7a0b\u4e2d\u5f88\u5bb9\u6613\u6df7\u6dc6." + } + ], + "source": [ + "pyg = 'ay'\n", + "def pyglatin():\n", + " original = input('Enter a word:') \n", + " if len(original) > 0 and original.isalpha():\n", + " print (original)\n", + " word = original.lower()\n", + " first = word[0]\n", + " new_word = word+first+pyg\n", + " new_word = new_word[1:]\n", + " print (new_word)\n", + " else:\n", + " print ('empty')\n", + " pyglatin()\n", + "pyglatin()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# FUNCTIONS" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下例子是定義一個計算平方的函數square, 定義的方式是使用def 開頭, 若有輸入參數, 則在括弧中放入參數, 若沒有輸入參數則括弧內是空的. 以縮排區別函數和主程式, 函數若有回傳值時 將回傳值寫在return後." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10 squared is 100.\n" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "from math import *\n", - "print sqrt(25)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "5.0\n" - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "heading", - "level": 2, + "data": { + "text/plain": [ + "100" + ] + }, + "execution_count": 22, "metadata": {}, - "source": [ - "LISTS & DICTIONARIES" + "output_type": "execute_result" + } + ], + "source": [ + "def square(n):\n", + " \"\"\"Returns the square of a number.\"\"\"\n", + " squared = n**2\n", + " print (\"%d squared is %d.\" % (n, squared))\n", + " return squared\n", + " \n", + "# Call the square function on line 9! Make sure to\n", + "# include the number 10 between the parentheses.\n", + "square(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Importing a module" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "在python中欲使用特殊函式庫時需import特定模組, 以math module來說, 欲使用其中的sqrt函數時, 有幾種方法\n", + "1. import math \n", + "2. from math import sqrt\n", + "3. from math import *\n", + "\n", + "底下是第一種方法, 使用時需以math.sqrt()呼叫. 另外這種方法會將math模組內其他物件也一起引入, 這可以用dir()函數看到math裡的函數 " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n", + "['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python\u4e2d\u7684dictionary\u4e00\u500b\u975e\u5e38\u7684\u67b6\u69cb\uff0c\u53ef\u4ee5\u8b93\u4f60\u65b9\u4fbf\u7684\u67e5\u8a62\u8cc7\u6599\uff0c\u5e95\u4e0b\u662f\u4e00\u500b\u7c21\u55ae\u7684dictionary" + } + ], + "source": [ + "import math\n", + "print (math.sqrt(25))\n", + "print (dir(math))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第二種方法可以直接以sqrt()呼叫" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "d = {'key1' : 1, 'key2' : 2, 'key3' : 3}\n", - "print d['key2']" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2\n" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6bd4\u65b9\u8aaa\uff0c\u5982\u679c\u60f3\u8981\u77e5\u9053d\u88e1\u9762\u7684key3\u5c0d\u61c9\u7684\u503c\u70ba\u4f55\uff0c\u53ef\u4ee5\u4f7f\u7528d['key3']\u67e5\u8a62" + } + ], + "source": [ + "from math import sqrt\n", + "print (sqrt(25))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第三種方式同樣也可以直接以sqrt()呼叫, 但是和第二種不一樣的地方在於前一種只有引入sqrt, 但是這一種方法將math模組全部引入全部引入, 程式撰寫過程中很容易混淆." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "start_list = [5, 3, 1, 2, 4]\n", - "square_list = []\n", - "\n", - "# Your code here!\n", - "\n", - "for x in start_list:\n", - " square_list.append(x**2)\n", - " print \"x = \",x,\", square_list = \",square_list\n", - "print square_list\n", - "square_list.sort()\n", - "print square_list" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "x = 5 , square_list = [25]\n", - "x = 3 , square_list = [25, 9]\n", - "x = 1 , square_list = [25, 9, 1]\n", - "x = 2 , square_list = [25, 9, 1, 4]\n", - "x = 4 , square_list = [25, 9, 1, 4, 16]\n", - "[25, 9, 1, 4, 16]\n", - "[1, 4, 9, 16, 25]\n" - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [1,9,3,8,5,7]\n", - "\n", - "for number in my_list:\n", - " # Your code here\n", - " print \"number =\",number,\"; 2*number =\",2*number" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "number = 1 ; 2*number = 2\n", - "number = 9 ; 2*number = 18\n", - "number = 3 ; 2*number = 6\n", - "number = 8 ; 2*number = 16\n", - "number = 5 ; 2*number = 10\n", - "number = 7 ; 2*number = 14\n" - ] - } - ], - "prompt_number": 22 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u662f\u4e00\u500b\u7c21\u55ae\u7684\u8ff4\u5708\uff0citem \u6703\u4f9d\u5e8f\u7531in\u4e4b\u5f8c\u7684list\u53d6\u503c\uff0c\u540c\u6642\u57f7\u884c\u8ff4\u5708\u5167\u90e8\u7684\u7a0b\u5f0f\uff0c\u5728\u9019\u500b\u4f8b\u5b50\u4e2d\u662f\u9010\u4e00\u5217\u51faitem" + } + ], + "source": [ + "from math import *\n", + "print (sqrt(25))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LISTS & DICTIONARIES" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "python中的dictionary一個非常的架構,可以讓你方便的查詢資料,底下是一個簡單的dictionary" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for item in [1, 3, 21]: \n", - " print item" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1\n", - "3\n", - "21\n" - ] - } - ], - "prompt_number": 23 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "prices = {\"banana\": 4,\"apple\": 2,\"orange\": 1.5,\"pear\": 3}\n", - "\n", - "stock = {\"banana\": 6,\"apple\": 0,\"orange\":32,\"pear\": 15}\n", - "\n", - "for item in prices:\n", - " print item\n", - " print \"price: %s\" % prices[item]\n", - " print \"stock: %s\" % stock[item]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "orange\n", - "price: 1.5\n", - "stock: 32\n", - "pear\n", - "price: 3\n", - "stock: 15\n", - "banana\n", - "price: 4\n", - "stock: 6\n", - "apple\n", - "price: 2\n", - "stock: 0\n" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def fizz_count(x):\n", - " count = 0\n", - " for item in x:\n", - " if item == \"fizz\":\n", - " count = count +1\n", - " return count\n", - " \n", - "\n", - "print fizz_count([\"fizz\",\"cat\",\"fizz\"])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "shopping_list = [\"banana\", \"orange\", \"apple\"]\n", - "\n", - "stock = {\n", - " \"banana\": 6,\n", - " \"apple\": 0,\n", - " \"orange\": 32,\n", - " \"pear\": 15\n", - "}\n", - " \n", - "prices = {\n", - " \"banana\": 4,\n", - " \"apple\": 2,\n", - " \"orange\": 1.5,\n", - " \"pear\": 3\n", - "}\n", - "\n", - "# Write your code below!\n", - "def compute_bill(food):\n", - " total = 0\n", - " for item in food:\n", - " print item\n", - " print \"price: %s\" % prices[item]\n", - " print \"stock: %s\" % stock[item]\n", - " total = total + prices[item]\n", - " return total\n", - "print compute_bill(shopping_list)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "banana\n", - "price: 4\n", - "stock: 6\n", - "orange\n", - "price: 1.5\n", - "stock: 32\n", - "apple\n", - "price: 2\n", - "stock: 0\n", - "7.5\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "Student Becomes the Teacher" + } + ], + "source": [ + "d = {'key1' : 1, 'key2' : 2, 'key3' : 3}\n", + "print (d['key2'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "比方說,如果想要知道d裡面的key3對應的值為何,可以使用d['key3']查詢" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x = 5 , square_list = [25]\n", + "x = 3 , square_list = [25, 9]\n", + "x = 1 , square_list = [25, 9, 1]\n", + "x = 2 , square_list = [25, 9, 1, 4]\n", + "x = 4 , square_list = [25, 9, 1, 4, 16]\n", + "[25, 9, 1, 4, 16]\n", + "[1, 4, 9, 16, 25]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u662f\u8a08\u7b97\u5b78\u751f\u6210\u7e3e\u7684\u4e00\u500b\u7a0b\u5f0f\uff0c\u9996\u5148\u662f\u5b78\u751f\u7684\u7d00\u9304\u3002\u6bcf\u500b\u5b78\u751f\u7684\u6210\u7e3e\u7d00\u9304\u662f\u4ee5dictionary\u5132\u5b58\uff0c\u5176\u4e2d\u5305\u542b\u4e86\"name\"\uff0c\"homework\"\uff0c\"quizzes\"\uff0c\"tests\"\u3002\u6ce8\u610fdictionary\u4e2d\u7684\u503c\u53ef\u4ee5\u662flist\u3002" + } + ], + "source": [ + "start_list = [5, 3, 1, 2, 4]\n", + "square_list = []\n", + "\n", + "# Your code here!\n", + "\n", + "for x in start_list:\n", + " square_list.append(x**2)\n", + " print (\"x = \",x,\", square_list = \",square_list)\n", + "print (square_list)\n", + "square_list.sort()\n", + "print (square_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number = 1 ; 2*number = 2\n", + "number = 9 ; 2*number = 18\n", + "number = 3 ; 2*number = 6\n", + "number = 8 ; 2*number = 16\n", + "number = 5 ; 2*number = 10\n", + "number = 7 ; 2*number = 14\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "lloyd = {\n", - " \"name\": \"Lloyd\",\n", - " \"homework\": [90.0, 97.0, 75.0, 92.0],\n", - " \"quizzes\": [88.0, 40.0, 94.0],\n", - " \"tests\": [75.0, 90.0]\n", - "}\n", - "alice = {\n", - " \"name\": \"Alice\",\n", - " \"homework\": [100.0, 92.0, 98.0, 100.0],\n", - " \"quizzes\": [82.0, 83.0, 91.0],\n", - " \"tests\": [89.0, 97.0]\n", - "}\n", - "tyler = {\n", - " \"name\": \"Tyler\",\n", - " \"homework\": [0.0, 87.0, 75.0, 22.0],\n", - " \"quizzes\": [0.0, 75.0, 78.0],\n", - " \"tests\": [100.0, 100.0]\n", - "}" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 8 - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\u63a5\u8457\u6211\u5011\u5b9a\u7fa9\u4e86\u5e7e\u500b\u51fd\u6578\uff0c\u9996\u5148\u662f\u8a08\u7b97\u5e73\u5747\u5206\u6578\u7684\u51fd\u6578average\uff0c\u4ed6\u6703\u628a\u50b3\u9032\u4f86\u7684\u4e00\u7d44(list)\u6578\u5b57(numbers)\u52a0\u7e3d(\u4f7f\u7528\u5167\u5efa\u7684sum\u51fd\u6578)\uff0c\u518d\u5c07total\u9664\u4ee5\u8cc7\u6599\u500b\u6578(len)\u8a08\u7b97\u5e73\u5747\u3002\u6ce8\u610f\u70ba\u4e86\u907f\u514d\u8cc7\u6599\u578b\u614b\u51fa\u554f\u984c\uff0c\u6211\u5011\u4f7f\u7528float\u51fd\u6578\u5c07total\u8f49\u70ba\u6d6e\u9ede\u6578" + } + ], + "source": [ + "my_list = [1,9,3,8,5,7]\n", + "\n", + "for number in my_list:\n", + " # Your code here\n", + " print (\"number =\",number,\"; 2*number =\",2*number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是一個簡單的迴圈,item 會依序由in之後的list取值,同時執行迴圈內部的程式,在這個例子中是逐一列出item" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "3\n", + "21\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Add your function below!\n", - "def average(numbers):\n", - " total = sum(numbers)\n", - " #print total\n", - " #print type(total)\n", - " total = float(total)\n", - " return total/len(numbers)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e8c\u500b\u51fd\u6578\u662f\u5c07\u50b3\u9032\u4f86\u7684\u5b78\u751f\u7d00\u9304(dictionary)\uff0c\u5206\u5225\u8a08\u7b97homework\u3001 quizzes\u3001 tests\u7684\u5e73\u5747\uff0c\u518d\u8a08\u7b97\u52a0\u6b0a\u548c\u4f5c\u70ba\u5b78\u751f\u7684\u5e73\u5747\u5206\u6578" + } + ], + "source": [ + "for item in [1, 3, 21]: \n", + " print (item)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pear\n", + "price: 3\n", + "stock: 15\n", + "orange\n", + "price: 1.5\n", + "stock: 32\n", + "apple\n", + "price: 2\n", + "stock: 0\n", + "banana\n", + "price: 4\n", + "stock: 6\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def get_average(student):\n", - " homework = average(student[\"homework\"])\n", - " quizzes = average(student[\"quizzes\"])\n", - " tests = average(student[\"tests\"])\n", - "\n", - " return homework*0.1+quizzes*0.3+tests*0.6\n", - " " - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u7b2c\u4e09\u500b\u51fd\u6578\u662f\u5224\u65b7\u6210\u7e3e(score)\u6240\u5c0d\u61c9\u7684\u7b49\u7b2c(letter grade)" + } + ], + "source": [ + "prices = {\"banana\": 4,\"apple\": 2,\"orange\": 1.5,\"pear\": 3}\n", + "\n", + "stock = {\"banana\": 6,\"apple\": 0,\"orange\":32,\"pear\": 15}\n", + "\n", + "for item in prices:\n", + " print (item)\n", + " print (\"price: %s\" % prices[item])\n", + " print (\"stock: %s\" % stock[item])" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def get_letter_grade(score):\n", - " if score >= 90: \n", - " return \"A\"\n", - " elif score >= 80:\n", - " return \"B\"\n", - " elif score >= 70:\n", - " return \"C\"\n", - " elif score >= 60:\n", - " return \"D\"\n", - " else: \n", - " return \"F\"" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6700\u5f8c\u4e00\u500b\u51fd\u6578\u662f\u8a08\u7b97\u6574\u73ed(students-list)\u7684\u5e73\u5747\u5206\u6578\uff0c\u6211\u5011\u5148\u5efa\u7acb\u4e00\u500b\u7a7a\u7684results list\uff0c\u4ee5\u65b9\u5f0f\uff0c\u4f9d\u5e8f\u8a08\u7b97\u6bcf\u500b\u5b78\u751f\u7684\u5e73\u5747\u5206\u6578\uff0c\u518d\u52a0\u5165results\u4e2d\uff0c\u6700\u5f8c\u518d\u8a08\u7b97\u5e73\u5747\u3002" + } + ], + "source": [ + "def fizz_count(x):\n", + " count = 0\n", + " for item in x:\n", + " if item == \"fizz\":\n", + " count = count +1\n", + " return count\n", + " \n", + "\n", + "print (fizz_count([\"fizz\",\"cat\",\"fizz\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "banana\n", + "price: 4\n", + "stock: 6\n", + "orange\n", + "price: 1.5\n", + "stock: 32\n", + "apple\n", + "price: 2\n", + "stock: 0\n", + "7.5\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def get_class_average(students):\n", - " results = []\n", - " for student in students:\n", - " results.append(get_average(student))\n", - " return average(results)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6700\u5e95\u4e0b\u7684\u90e8\u4efd\u5247\u662f\u5148\u5efa\u7acb\u4e00\u500b\u73ed\u7d1a\u7684list\uff0c\u4f7f\u7528\u524d\u9762\u5b9a\u7fa9\u7684\u51fd\u6578\u8a08\u7b97\u5e73\u5747\u6210\u7e3e" + } + ], + "source": [ + "shopping_list = [\"banana\", \"orange\", \"apple\"]\n", + "\n", + "stock = {\n", + " \"banana\": 6,\n", + " \"apple\": 0,\n", + " \"orange\": 32,\n", + " \"pear\": 15\n", + "}\n", + " \n", + "prices = {\n", + " \"banana\": 4,\n", + " \"apple\": 2,\n", + " \"orange\": 1.5,\n", + " \"pear\": 3\n", + "}\n", + "\n", + "# Write your code below!\n", + "def compute_bill(food):\n", + " total = 0\n", + " for item in food:\n", + " print (item)\n", + " print (\"price: %s\" % prices[item])\n", + " print (\"stock: %s\" % stock[item])\n", + " total = total + prices[item]\n", + " return total\n", + "print (compute_bill(shopping_list))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Student Becomes the Teacher" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是計算學生成績的一個程式,首先是學生的紀錄。每個學生的成績紀錄是以dictionary儲存,其中包含了\"name\",\"homework\",\"quizzes\",\"tests\"。注意dictionary中的值可以是list。" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "lloyd = {\n", + " \"name\": \"Lloyd\",\n", + " \"homework\": [90.0, 97.0, 75.0, 92.0],\n", + " \"quizzes\": [88.0, 40.0, 94.0],\n", + " \"tests\": [75.0, 90.0]\n", + "}\n", + "alice = {\n", + " \"name\": \"Alice\",\n", + " \"homework\": [100.0, 92.0, 98.0, 100.0],\n", + " \"quizzes\": [82.0, 83.0, 91.0],\n", + " \"tests\": [89.0, 97.0]\n", + "}\n", + "tyler = {\n", + " \"name\": \"Tyler\",\n", + " \"homework\": [0.0, 87.0, 75.0, 22.0],\n", + " \"quizzes\": [0.0, 75.0, 78.0],\n", + " \"tests\": [100.0, 100.0]\n", + "}" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "接著我們定義了幾個函數,首先是計算平均分數的函數average,他會把傳進來的一組(list)數字(numbers)加總(使用內建的sum函數),再將total除以資料個數(len)計算平均。注意為了避免資料型態出問題,我們使用float函數將total轉為浮點數" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Add your function below!\n", + "def average(numbers):\n", + " total = sum(numbers)\n", + " #print total\n", + " #print type(total)\n", + " total = float(total)\n", + " return total/len(numbers)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第二個函數是將傳進來的學生紀錄(dictionary),分別計算homework、 quizzes、 tests的平均,再計算加權和作為學生的平均分數" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_average(student):\n", + " homework = average(student[\"homework\"])\n", + " quizzes = average(student[\"quizzes\"])\n", + " tests = average(student[\"tests\"])\n", + "\n", + " return homework*0.1+quizzes*0.3+tests*0.6\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第三個函數是判斷成績(score)所對應的等第(letter grade)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_letter_grade(score):\n", + " if score >= 90: \n", + " return \"A\"\n", + " elif score >= 80:\n", + " return \"B\"\n", + " elif score >= 70:\n", + " return \"C\"\n", + " elif score >= 60:\n", + " return \"D\"\n", + " else: \n", + " return \"F\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後一個函數是計算整班(students-list)的平均分數,我們先建立一個空的results list,以方式,依序計算每個學生的平均分數,再加入results中,最後再計算平均。" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_class_average(students):\n", + " results = []\n", + " for student in students:\n", + " results.append(get_average(student))\n", + " return average(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最底下的部份則是先建立一個班級的list,使用前面定義的函數計算平均成績" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "83.86666666666666\n", + "B\n" ] - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - " \n", - "students = [lloyd, alice, tyler]\n", - "class_avg = get_class_average(students)\n", - "print class_avg\n", - "print get_letter_grade(class_avg)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "83.8666666667\n", - "B\n" - ] - } - ], - "prompt_number": 13 } ], - "metadata": {} + "source": [ + " \n", + "students = [lloyd, alice, tyler]\n", + "class_avg = get_class_average(students)\n", + "print (class_avg)\n", + "print (get_letter_grade(class_avg))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 06f7faea70e1e53cb8407f22cdfc477fce2057e6 Mon Sep 17 00:00:00 2001 From: minhung Date: Thu, 8 Dec 2016 18:10:49 +0800 Subject: [PATCH 2/6] fix range --- .ipynb_checkpoints/mysympy-checkpoint.ipynb | 485 ++++++++++ mysympy.ipynb | 929 ++++++++++---------- 2 files changed, 957 insertions(+), 457 deletions(-) create mode 100644 .ipynb_checkpoints/mysympy-checkpoint.ipynb diff --git a/.ipynb_checkpoints/mysympy-checkpoint.ipynb b/.ipynb_checkpoints/mysympy-checkpoint.ipynb new file mode 100644 index 0000000..1ff68e7 --- /dev/null +++ b/.ipynb_checkpoints/mysympy-checkpoint.ipynb @@ -0,0 +1,485 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 計算機概論期末報告範本- 2014/06/18 增訂\n", + "(2016/12/08 修正 python 3 range 函數部分)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 成功大學數學系 xxx 學號" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![成功大學數學系xxx學號](MagicConch.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "為了方便我打平時分數請附上你的個人相片(這樣我比較有印象),貼圖的方法可以把上一個cell改成 Raw NBConvert 就可以了解貼圖語法。\n", + "\n", + "上個cell裡的程式碼是 ![成功大學數學系xxx學號] (MagicConch.jpg) (注意前面的中括弧和小括弧間沒有空白)。\n", + "\n", + "圖必須和你的 ipython notebook檔 放在(以我這個檔為例,ipython notebook檔名是mysympy.ipynb,圖檔是MagicConch.jpg)放在同一個目錄,MagicConch.jpg是圖的檔名,除了jpg檔外,也可以用其他常見的圖檔。。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "目前markdown(也就是你現在在notebook裡,除了code或是heading你會看到的部份)無法自由調整圖片大小,所以如果圖太大的話,可以在終端裡使用convert程式轉換\n", + "\n", + "convert -resize 50% sourceimg destimg\n", + "\n", + "上面的指令會把 sourceimg縮小成50% 存成 destimg\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "報告中的程式碼或是說明不需要鉅細靡遺,原則上能作到日後需要使用這些功能時看這篇說明就可以使用,或是類似網路上一堆使用教學的網誌那就夠了。報告繳交時,除了相關檔案外(ipynb、圖檔),請將你的ipynb檔轉換為pdf檔繳交(如何轉換,我另外說明)。如果你有個人網誌,也可以轉換乘html檔,貼在你的網誌。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用matplotlib畫圖" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "首先載入需要的相關模組" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from numpy import sin, exp\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "準備數據 ... 假設我要畫 $\\sin{e^x}$,$x_a \\le x \\le x_b$, \n", + "註:上式的數學式子是使用latex語法打的,可以選Raw NBConvert就可以看到語法,底下可以看到其他類似例子\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "NumP = 1000\n", + "x = list(range(0,NumP+1))\n", + "y = list(range(0,NumP+1))\n", + "xa = 0.0\n", + "xb = 10.0\n", + "dx = (xb-xa)/float(NumP)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "注意底下的x[i]、y[i]的寫法,為了畫圖,我們在[xa,xb]取了NumP+1個點(包含兩個端點),在上面的cell裡,我們計算了分割大小(dx),然後在底下以loop的方式產生x[i]以及函數在該點的值y[i]。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n/1NdlkhSJgs/AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for i in list(range(NumP+1)):\n", + " x[i] = xa+dx*float(i)\n", + " y[i]=sin(exp(x[i]))\n", + "\n", + "# 開始畫圖\n", + "\n", + " # 設定要畫的的x,y數據list....\n", + "\n", + "plt.plot(x,y) \n", + " # 設定圖的範圍, 不設的話,系統會自行決定\n", + "plt.xlim(0,10)\n", + "plt.ylim(-1.5,1.5)\n", + " # 照需要寫入x 軸和y軸的 label 以及title\n", + "\n", + "plt.xlabel(\"x-axis\") \n", + "plt.ylabel(\"y-axis\") \n", + "plt.title(\"The Title\") \n", + " # 在這個指令之前,都還在做畫圖的動作 \n", + " # 這個指令算是 \"秀圖\" \n", + "plt.show() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用sympy計算極限" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下我們將是著引入可以讓結果比較漂亮的模組(printing),由於每一台電腦安裝的程式都有些許不同,所以不見得可以引入" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pkg_resources\n", + "if pkg_resources.get_distribution(\"sympy\").version > \"0.7.4\":\n", + " from sympy.interactive import printing\n", + " printing.init_printing(use_latex=True)\n", + "\n", + "from IPython.display import display" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子是計算$\\lim_{x \\to 0} \\frac{\\sin{x}}{x}$\n", + "由於我們要計算limit、sin所以我們需要由sympy(符號計算)引入相關函數,同時需要宣告x是一個符號變數" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAJFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADHJj5lAAAAC3RSTlMAzRAiu5mrdu/dZmiL4QAAAAAjSURBVAgd\nY2BgEGJgYDDZxMCgEgYkGNhJJVgzdmYB9TEwAACPpQrvlUCHcAAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$1$$" + ], + "text/plain": [ + "1" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sympy import limit, Symbol, sin, oo\n", + "x = Symbol('x')\n", + "limit(sin(x)/x, x, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\lim_{x \\to \\infty} \\frac{\\sin{x}}{x}$" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJdjLNVN0iZu+7\nq0QgoRR7AAAAVklEQVQIHWNgEDJRZWBgSGeQmMDAtYGBOYGB5wID+0cG/gsMfN8Z5BUY+L4wzDdg\nYP0MJeUNQCL8Cgzs3xk4DjBwfWRg2cDAlMDA0M4gHcDAIOxylQEA9FISlFfRJtkAAAAASUVORK5C\nYII=\n", + "text/latex": [ + "$$0$$" + ], + "text/plain": [ + "0" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "limit(sin(x)/x, x, oo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用sympy計算積分" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子是計算$\\int \\sin{x}\\, dx$,由於前面已經引入 sin 同時也將x 宣告為一個symbol,所以我們這邊只需要再引入integrate" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGYAAAAqBAMAAACzazNGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMiK7mat272aJ\nRFQidGHIAAACPElEQVRIDe1STWsTURQ9ycwY5yPpo4vSgmAsLlxZRUVcmT8gGRArKGJcWJeOLvwA\nF4rQgqLORjRSNKBuXGWp4mIQJAsjZOFCpNDZCSLV0toitI73zcebl9aEzMKdF/LuOfecM2/y5gFp\n7UjhoGhycVCn8I1cyZ6B/j/zj86gdY6JTxOB3md9JDJY9tYy3K5Uz4xai3yKrf7Ep8Ey+fiNjI62\nDqsphQq3lm5LVIJXBS7RVdkrWB+gpXdKoX/zoI9VSJYjYIvQacH6AMNPRJOnFfkPJcrGXmXJZA4f\ngUItoX3660RTdy+cAfRGwtOeu9b2sa3+AerjepmPL9Jv7OGpWdcIgh9AMT0SroZ1wlefqwewxR0B\n9vDJFJDzzENKOZShLkddXsdRWlY8kj4zeFzYBVjMWizZkYu+6/A+XjsxFPCiR66SVPWBNWXlfug6\nSEPkayGmRfudINGLvwh+7wArubeBw8e0DzDk8pUX7bOxxD6rx2CGcpipVsAiK93TTTUOlAwHxfVv\nQHgBp2nAnkCPM389tybeqc+Q974ynOVPfATM++dxMn662YiB1HIzszaOt+9g7tWbDp/PM4zWx943\nY498D7TLU5V43N2MMClmeVdAjMLafCJcLnipidB2ltIbwIuUSUhtSAR4KbGnwL2KxFN4N4WE9kts\ngvXKDEsumJ7MgMPSq0pKyZHIpIQJFte6uWALAgEXJExQqdGSsS5l9JNdv5498wWanTGlOtCzZo62\nWzczboOJIFgaLPMHgT+FzBSDxnYAAAAASUVORK5CYII=\n", + "text/latex": [ + "$$- \\frac{1}{2} \\cos{\\left (x^{2} \\right )}$$" + ], + "text/plain": [ + " ⎛ 2⎞ \n", + "-cos⎝x ⎠ \n", + "─────────\n", + " 2 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " from sympy import integrate\n", + " integrate(x*sin(x**2), x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用sympy計算微分" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子是計算$\\frac{d}{dx} \\sin{x}$,由於前面已經引入 sin 同時也將x 宣告為一個symbol,所以我們這邊只需要再引入diff" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAADkAAAAVBAMAAAAOWFv7AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJVCLvMs1Edmar\n3bti/yyrAAABP0lEQVQoFZWRL0gDURzHP+ft3J1uczgwCQ7EYpqoYVNwBovFSxbTRJNlaaAiHtj1\ngsmyjRXRIoIYRLRYTAMRbF5eGjIQTf52vL0NXfEX3vu83/f3770H/7R9FX/bL88KlDdW7CPbyY7T\n60DPXtPcJe1iW+OYJg1OXaOdh9HZOYxczWdv9VwEMw3GxdNZLkRri5J74NIwAuKiJq4gxX3lDYY9\nbI+14gsc7hYwRY3nYYal5ApE6kxIpWgLRjLvDVfUQR+SHAsRbVKuSNCXqEHq5EOp8K1UnTvl8iB5\n7cpEPzFAxpe+5DehfJohJhO1p1oealINp7J2MN1SkaNIgYQr13jEaSWalgQNpGF8eh5rctF3Fi6z\nUlTKGc/V2p2g7cvyy171eV1TF641ynP9sXbz0AxPQe+mf1+H9apsqNMN/AAQ00PuNbV4pAAAAABJ\nRU5ErkJggg==\n", + "text/latex": [ + "$$\\cos{\\left (x \\right )}$$" + ], + "text/plain": [ + "cos(x)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sympy import diff\n", + "diff(sin(x), x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\frac{d^2}{dx^2} \\sin{x}$" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAVBAMAAAATJmVgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnZUu0TviSKZ\nZquXRLrEAAABSklEQVQoFaWSPUvDYBSFTz6a1ITYUOziIBVEdHIQXc2i4NQidBH8AHHP0kkkgj/A\ndHOSjA62vIOgi+jg6BD8A2bQubhL8b4mNwmazQvJeXI4OfcNBPjn6HFa4Hi/i7a7hXPH+M7A2omY\ngHlGlaFCaxGbBbFT6JRgVkKmTG+93DjPCYsFYvN4xw4Sffm59yHdG7pa+/e79D0Ss1F8aDATqH08\nymWngBI5a1obeKXHbOoDWDATmCEaMXnrgOVanwa9cYTmqpwFsjf64ifVRoO24JK6oPpE6MhbNrMr\nXzCpy89TSKmcsgXezkop2kgtHlyg9LlGhOm4lKLTG+4BapQqnd4YwBS0jjeOgIvDAA/U+CJr06kP\n96718WRmPNkKrsiiNXO91jAmXMoiFaIJNu2Q6a86T+xZXaYKPWGvyVCl+V+Yx6tStjw4jSPwDWX2\nRQ0oD4CmAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$- \\sin{\\left (x \\right )}$$" + ], + "text/plain": [ + "-sin(x)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diff(sin(x), x,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAVBAMAAAATJmVgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnZUu0TviSKZ\nZquXRLrEAAABSklEQVQoFaWSPUvDYBSFTz6a1ITYUOziIBVEdHIQXc2i4NQidBH8AHHP0kkkgj/A\ndHOSjA62vIOgi+jg6BD8A2bQubhL8b4mNwmazQvJeXI4OfcNBPjn6HFa4Hi/i7a7hXPH+M7A2omY\ngHlGlaFCaxGbBbFT6JRgVkKmTG+93DjPCYsFYvN4xw4Sffm59yHdG7pa+/e79D0Ss1F8aDATqH08\nymWngBI5a1obeKXHbOoDWDATmCEaMXnrgOVanwa9cYTmqpwFsjf64ifVRoO24JK6oPpE6MhbNrMr\nXzCpy89TSKmcsgXezkop2kgtHlyg9LlGhOm4lKLTG+4BapQqnd4YwBS0jjeOgIvDAA/U+CJr06kP\n96718WRmPNkKrsiiNXO91jAmXMoiFaIJNu2Q6a86T+xZXaYKPWGvyVCl+V+Yx6tStjw4jSPwDWX2\nRQ0oD4CmAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$- \\sin{\\left (x \\right )}$$" + ], + "text/plain": [ + "-sin(x)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diff(sin(x), x,x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 補充資料:Latex" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面內容中,除了ipython的輸出外,有時候你會看到數學式混雜在文字敘述中,如果你把該cell改成 Raw NBConvert 會發現有些式子在$ $中,那些式子是latex的寫法。latex是常用來打數學方程是的一種軟體,但是要整篇文章都用latex打,需要時間熟悉用法。在ipython notebook或是markdown裡,允許我們在文字中使用latex語法打數學式,比方說(\"$\" 前的\"*\"是讓markdown以條列式方式表示)\n", + "\n", + "* $\\sum_{i=1}^n a_i=0$\n", + "\n", + "* $f(x)=x^{x^x}$\n", + "\n", + "* $\\frac{du}{dt} and \\frac{d^2 u}{dx^2}$\n", + "\n", + "* $\\lim_{x \\to 0} \\frac{3x^2 +7x^3}{x^2 +5x^4} = 3.$\n", + "\n", + "* $\\int_a^b f(x)\\,dx.$\n", + "\n", + "* $\\int_0^{+\\infty} x^n e^{-x} \\,dx = n!.$ \n", + "\n", + "* $\\int \\cos \\theta \\,d\\theta = \\sin \\theta.$\n", + "\n", + "* $\\int_{x^2 + y^2 \\leq R^2} f(x,y)\\,dx\\,dy = \\int_{\\theta=0}^{2\\pi} \\int_{r=0} ^R f(r\\cos\\theta,r\\sin\\theta) r\\,dr\\,d\\theta.$\n", + "\n", + "* $$ \\int_{x^2 + y^2 \\leq R^2} f(x,y)\\,dx\\,dy = \\int_{\\theta=0}^{2\\pi} \\int_{r=0} ^R f(r\\cos\\theta,r\\sin\\theta) r\\,dr\\,d\\theta.$$\n", + "\n", + "最後一個例子我是用\"$$\"夾起整個式子,這在latex裡是表示這個式子要獨占一行置中,同時顯示的格式會比較漂亮。\n", + "\n", + "請注意\"$\"和你的式子間不要有空白\n", + "\n", + "如果你想把報告打漂亮一點,可以試著使用latex" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 參考資料:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是一些參考資料,網路上還有非常多資料可以使用(用星號可以條列式顯示,各項間請空一行之後在轉換成pdf檔時才不會擠在一起)\n", + "\n", + "* [LaTeX技巧10:LaTeX數學公式輸入初級入門](http://blog.sina.com.cn/s/blog_5e16f1770100fs38.html)\n", + "\n", + "* [Markdown的用法](http://markdown.tw/)\n", + "\n", + "* [炎龍老師的blogIPython 的 Notebook 界面](http://yenlungblog.wordpress.com/2013/11/21/python-ipython-%E7%9A%84-notebook-%E7%95%8C%E9%9D%A2/)\n", + "\n", + "* [用python 畫圖 -- matplotlib -- 騙錢教學](http://onionys.blogspot.tw/2012/01/python-matplotlib.html)\n", + "\n", + "* [SymPy -- 使用 Python 幫你導煩人的數學公式(三)](http://www.gtwang.org/2012/12/sympy3.html)" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/mysympy.ipynb b/mysympy.ipynb index 7f2867b..1ff68e7 100644 --- a/mysympy.ipynb +++ b/mysympy.ipynb @@ -1,470 +1,485 @@ { - "metadata": { - "name": "", - "signature": "sha256:f8521836c0d954994b3785f9ec6d8dd065b680e1e298564470bbdfcd687d0178" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "\u671f\u672b\u5831\u544a\u7bc4\u672c- 2014/06/18 \u589e\u8a02" - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "\u6210\u529f\u5927\u5b78\u6578\u5b78\u7cfb\n", - "xxx\n", - "\u5b78\u865f" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![\u6210\u529f\u5927\u5b78\u6578\u5b78\u7cfbxxx\u5b78\u865f](MagicConch.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u70ba\u4e86\u65b9\u4fbf\u6211\u6253\u5e73\u6642\u5206\u6578\u8acb\u9644\u4e0a\u4f60\u7684\u500b\u4eba\u76f8\u7247\uff08\u9019\u6a23\u6211\u6bd4\u8f03\u6709\u5370\u8c61\uff09\uff0c\u8cbc\u5716\u7684\u65b9\u6cd5\u53ef\u4ee5\u628a\u4e0a\u4e00\u500bcell\u6539\u6210 Raw NBConvert \u5c31\u53ef\u4ee5\u4e86\u89e3\u8cbc\u5716\u8a9e\u6cd5\u3002\n", - "\n", - "\u4e0a\u500bcell\u88e1\u7684\u7a0b\u5f0f\u78bc\u662f ![\u6210\u529f\u5927\u5b78\u6578\u5b78\u7cfbxxx\u5b78\u865f] (MagicConch.jpg) (\u6ce8\u610f\u524d\u9762\u7684\u4e2d\u62ec\u5f27\u548c\u5c0f\u62ec\u5f27\u9593\u6c92\u6709\u7a7a\u767d)\u3002\n", - "\n", - "\u5716\u5fc5\u9808\u548c\u4f60\u7684 ipython notebook\u6a94 \u653e\u5728(\u4ee5\u6211\u9019\u500b\u6a94\u70ba\u4f8b\uff0cipython notebook\u6a94\u540d\u662fmysympy.ipynb\uff0c\u5716\u6a94\u662fMagicConch.jpg)\u653e\u5728\u540c\u4e00\u500b\u76ee\u9304\uff0cMagicConch.jpg\u662f\u5716\u7684\u6a94\u540d\uff0c\u9664\u4e86jpg\u6a94\u5916\uff0c\u4e5f\u53ef\u4ee5\u7528\u5176\u4ed6\u5e38\u898b\u7684\u5716\u6a94\u3002\u3002" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u76ee\u524dmarkdown(\u4e5f\u5c31\u662f\u4f60\u73fe\u5728\u5728notebook\u88e1\uff0c\u9664\u4e86code\u6216\u662fheading\u4f60\u6703\u770b\u5230\u7684\u90e8\u4efd)\u7121\u6cd5\u81ea\u7531\u8abf\u6574\u5716\u7247\u5927\u5c0f\uff0c\u6240\u4ee5\u5982\u679c\u5716\u592a\u5927\u7684\u8a71\uff0c\u53ef\u4ee5\u5728\u7d42\u7aef\u88e1\u4f7f\u7528convert\u7a0b\u5f0f\u8f49\u63db\n", - "\n", - "convert -resize 50% sourceimg destimg\n", - "\n", - "\u4e0a\u9762\u7684\u6307\u4ee4\u6703\u628a sourceimg\u7e2e\u5c0f\u621050% \u5b58\u6210 destimg\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5831\u544a\u4e2d\u7684\u7a0b\u5f0f\u78bc\u6216\u662f\u8aaa\u660e\u4e0d\u9700\u8981\u9245\u7d30\u9761\u907a\uff0c\u539f\u5247\u4e0a\u80fd\u4f5c\u5230\u65e5\u5f8c\u9700\u8981\u4f7f\u7528\u9019\u4e9b\u529f\u80fd\u6642\u770b\u9019\u7bc7\u8aaa\u660e\u5c31\u53ef\u4ee5\u4f7f\u7528\uff0c\u6216\u662f\u985e\u4f3c\u7db2\u8def\u4e0a\u4e00\u5806\u4f7f\u7528\u6559\u5b78\u7684\u7db2\u8a8c\u90a3\u5c31\u5920\u4e86\u3002\u5831\u544a\u7e73\u4ea4\u6642\uff0c\u9664\u4e86\u76f8\u95dc\u6a94\u6848\u5916(ipynb\u3001\u5716\u6a94)\uff0c\u8acb\u5c07\u4f60\u7684ipynb\u6a94\u8f49\u63db\u70bapdf\u6a94\u7e73\u4ea4(\u5982\u4f55\u8f49\u63db\uff0c\u6211\u53e6\u5916\u8aaa\u660e)\u3002\u5982\u679c\u4f60\u6709\u500b\u4eba\u7db2\u8a8c\uff0c\u4e5f\u53ef\u4ee5\u8f49\u63db\u4e58html\u6a94\uff0c\u8cbc\u5728\u4f60\u7684\u7db2\u8a8c\u3002" - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "\u4f7f\u7528matplotlib\u756b\u5716" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u9996\u5148\u8f09\u5165\u9700\u8981\u7684\u76f8\u95dc\u6a21\u7d44" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from numpy import sin, exp\n", - "%matplotlib inline" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6e96\u5099\u6578\u64da ... \u5047\u8a2d\u6211\u8981\u756b $\\sin{e^x}$\uff0c$x_a \\le x \\le x_b$\uff0c \n", - "\u8a3b\uff1a\u4e0a\u5f0f\u7684\u6578\u5b78\u5f0f\u5b50\u662f\u4f7f\u7528latex\u8a9e\u6cd5\u6253\u7684\uff0c\u53ef\u4ee5\u9078Raw NBConvert\u5c31\u53ef\u4ee5\u770b\u5230\u8a9e\u6cd5\uff0c\u5e95\u4e0b\u53ef\u4ee5\u770b\u5230\u5176\u4ed6\u985e\u4f3c\u4f8b\u5b50\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "NumP = 1000\n", - "x = range(0,NumP+1)\n", - "y = range(0,NumP+1)\n", - "xa = 0.0\n", - "xb = 10.0\n", - "dx = (xb-xa)/float(NumP)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u6ce8\u610f\u5e95\u4e0b\u7684x[i]\u3001y[i]\u7684\u5beb\u6cd5\uff0c\u70ba\u4e86\u756b\u5716\uff0c\u6211\u5011\u5728[xa,xb]\u53d6\u4e86NumP+1\u500b\u9ede(\u5305\u542b\u5169\u500b\u7aef\u9ede)\uff0c\u5728\u4e0a\u9762\u7684cell\u88e1\uff0c\u6211\u5011\u8a08\u7b97\u4e86\u5206\u5272\u5927\u5c0f(dx)\uff0c\u7136\u5f8c\u5728\u5e95\u4e0b\u4ee5loop\u7684\u65b9\u5f0f\u7522\u751fx[i]\u4ee5\u53ca\u51fd\u6578\u5728\u8a72\u9ede\u7684\u503cy[i]\u3002" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(NumP+1):\n", - " x[i] = xa+dx*float(i)\n", - " y[i]=sin(exp(x[i]))\n", - "\n", - "# \u958b\u59cb\u756b\u5716\n", - "\n", - " # \u8a2d\u5b9a\u8981\u756b\u7684\u7684x,y\u6578\u64dalist....\n", - "\n", - "plt.plot(x,y) \n", - " # \u8a2d\u5b9a\u5716\u7684\u7bc4\u570d, \u4e0d\u8a2d\u7684\u8a71\uff0c\u7cfb\u7d71\u6703\u81ea\u884c\u6c7a\u5b9a\n", - "plt.xlim(0,10)\n", - "plt.ylim(-1.5,1.5)\n", - " # \u7167\u9700\u8981\u5beb\u5165x \u8ef8\u548cy\u8ef8\u7684 label \u4ee5\u53catitle\n", - "\n", - "plt.xlabel(\"x-axis\") \n", - "plt.ylabel(\"y-axis\") \n", - "plt.title(\"The Title\") \n", - " # \u5728\u9019\u500b\u6307\u4ee4\u4e4b\u524d\uff0c\u90fd\u9084\u5728\u505a\u756b\u5716\u7684\u52d5\u4f5c \n", - " # \u9019\u500b\u6307\u4ee4\u7b97\u662f \"\u79c0\u5716\" \n", - "plt.show() " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEVCAYAAADzUNLBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXd4VFXex79DEkoIVSFAEqVqCCAEKTY0guiiyGJbwVUR\nG68rtt3Xdfd93V2w8GJb+/oiq7uWXXWtgAJieYMFEQW7uGABQwu9hFBS7vvH8TBnzpxz7rll5k7C\n7/M8eTJz2zn3zsz53l87N+Y4jgOCIAiCcKFJ1B0gCIIgGgYkGARBEIQVJBgEQRCEFSQYBEEQhBUk\nGARBEIQVJBgEQRCEFSQYBKFgypQpuOiii1LezlVXXYXbbrst8n4QhA3ZUXeAIKIgLy8PsVgMALB7\n9240b94cWVlZAIAZM2YcWBeUUaNG4b333gMA7Nu3D7FYDE2bNgUAXHTRRXjkkUcObFteXo6LLroI\nFRUVB5aF1Q+CCAMSDOKgpKqq6sDrbt264bHHHsPw4cMPLJsyZUoo7cybN+/A64kTJ6KoqAi33HKL\n9f5UV0tkEuSSIggFsVgM+/fvx4QJE9C6dWv07dsXS5cuPbB+3bp1OOecc9CxY0d0794dDz74oNVx\nZQG45JJL8Ic//AHV1dUYNWoU1q1bh1atWqF169ZYv3590v6LFy/Gcccdh3bt2mHAgAFYuHBhsBMl\nCA+QYBCEAsdxMHv2bIwfPx47duzAmDFjMHnyZABAfX09zjzzTJSWlmLdunV46623cN9992HBggWe\n24nFYojFYsjNzcX8+fPRpUsX7Nq1Czt37kTnzp0Ttl27di1Gjx6NP/7xj9i2bRvuvvtunHPOOdi8\neXMo50wQbpBgEISGYcOG4Wc/+xlisRguvPBCfPbZZwCAjz76CJs3b8bNN9+M7OxsdOvWDZdffjme\nffZZX+1wq8PN/fT000/j9NNPx89+9jMAwCmnnIJBgwZh7ty5vtolCK9QDIMgNOTn5x94nZubi717\n96K+vh6rV6/GunXr0K5duwPr6+rqcOKJJ6a0P6tXr8bzzz+POXPmHFhWW1ubEHshiFRCgkEQCkzZ\nSUVFRejWrRtWrFgRaltuGVGHHXYYLrroIjz66KOhtEsQXiGXFEEoMLmHhgwZglatWuHOO+/Enj17\nUFdXhy+//BIff/yx52M6jnNgeX5+PrZs2YKdO3cq97/wwgsxZ84cLFiwAHV1ddi7dy/Ky8uxdu1a\nD2dGEP4hwSAIBTwYLS8DgKysLLz66qv49NNP0b17d3To0AFXXnmldqB3OyZfVlxcjPHjx6N79+5o\n37491q9fn7C+sLAQs2bNwrRp09CxY0ccdthhuOeee1BfXx/WaROEkRg9QIkgCIKwITIL49JLL0V+\nfj769eunXF9eXo42bdqgtLQUpaWlxukTCIIgiNQTWdB74sSJuOaaa3DxxRdrtznppJMwe/bsNPaK\nIAiC0BGZhTFs2LCEtEQV5C0jCILIHDI2rTYWi2HRokXo378/CgoKcPfdd6OkpES5HUEQBOEdrzfl\nGZslNXDgQFRUVOCzzz7DNddcg7Fjx2q35amJB/vfn/70p8j7kCl/dC3oWtC1MP/5IWMFo1WrVsjN\nzQXApoiuqanB1q1bI+4VQRDEwUvGCkZlZeUBFVyyZAkcx0H79u0j7hVBEMTBS2QxjPHjx2PhwoXY\nvHkzioqKMHXqVNTU1AAAJk2ahBdeeAGPPPIIsrOzkZub63tit4OJsrKyqLuQMdC1iEPXIg5di2A0\n+MK9WCzm2x9HEARxsOJn7MxYlxRBEASRWZBgEARBEFaQYBAEQRBWkGAQBEEQVpBgEARBEFaQYBAE\nQRBWkGAQBEEQVpBgEARBEFaQYBAEQRBWkGAQBEEQVpBgEARBEFaQYBAEQRBWkGAQBEEQVpBgEARB\nEFaQYBAEQRBWkGAQBEEQVpBgEARBEFaQYBAEQRBWkGAQBEEQVpBgEARBEFaQYBAEQRBWkGAQBEEQ\nVpBgEARBEFaQYBAEQRBWkGAQBEEQVpBgEARBEFaQYBAEQRBWkGAQBEEQVkQmGJdeeiny8/PRr18/\n7TbXXnstevXqhf79++OTTz5JY+8IgiAImcgEY+LEiZg/f752/dy5c/Htt99i5cqVePTRR3HVVVel\nsXcEQRCETGSCMWzYMLRr1067fvbs2ZgwYQIAYOjQodi+fTsqKyvT1T2CIAhCImNjGGvXrkVRUdGB\n94WFhVizZo1y2ylTphz4Ky8vNx63thZ47TXgxhuB888HfvlL4M47gdWrw+x9dOzbB/znfwKLFoVz\nvB07gP/+b8Bx7PdZsADYuNG8zf79+nW1ter2LrwQqK5OXHbbbcCePfH369YBmzfb9VPcL0zKy4FH\nHrHbtr4e+PnPE5e98op5n3vvZW2oeOcd82c1cSKwa5dd32ypqAC++4693rGD/a7uuQfwc3/3+98D\nn3+evPz22wEvXumlS4ENG7y3L7JqFfCb3wQ7RpjMmwds28Zer1pl/g3J1NcDCxaUJ4yVvnAi5Icf\nfnD69u2rXDd69GjnvffeO/B+xIgRztKlS5O2sz2F2lrHmTnTcQoKHOfYYx3n1lsd59lnHeeJJxzn\nP/7DcQ45xHF+/WvH2bvX37lkCn/9q+O0bu04/fuHc7wHH3QcwHE++shu+3372Pb33qvfpr6ebfPa\na+r1ubmOc8stycsBx/nss+RlS5bE38dijtOvX+L6FSuSj/Xee2ydzPHHO8433+j7bsOgQepjczZs\ncJyPP2av9+xJ3hZwnJoa/f6A45x4on7dypWOU1LiOL/6lXr94sWJy5YscZysLH17pn68+y77TfFz\neOcd9hpwnD//2d8xr72Wvf7uO3Z9+PIJExK3XbnSfJwLLvDevsidd5o/xyBUVTnOn/7ExqV58+z2\nARznv/4r/nr0aMfZtSu+vrracbKz1fv+z/+ovmfeTy5jLYyCggJUVFQceL9mzRoUFBT4OtbKlcAx\nxwBPPsnu3hYtAm6+md0JXXwxuxtcvpyp9sknA9u3h3QSEfDaa8DDDwPr17PzCcqXX7L/qrs+Ffyu\nbtMm/Ta7d7P//K5Upro62ZKoq2P/a2riy/iddE5O4rIdOxL3/eyz5DaErxb27mV/APD++8DChfF1\nu3YBV1+t7uPFF6v778allwKDBpm3icX8HRtg1+Drr4H/+z/2nl87cT3nr38FPvwwvk11dfxayLz/\nPvsTWbEi/nmaqKsDnn3Wrv91dcxy7NEDmDpVvY3jAL16ma2p6mrgzTeB0083t9ejB7Bzp33fvvrK\nblsTS5awc1u0CBg1yt8xXn0VaNUq/n71amadq7D5jGzIWMEYM2YMnnzySQDA4sWL0bZtW+Tn53s+\nzksvAccdx0zxhQv1P9QOHYAXXmDrzzhD/6PJZOrr2TmefDITyKVLgx9zxQrghBP0g7sMFwyTi4+b\n1fLADqhFAIi7UUQx56Ii/0iaN098L/5Y6uuT9zn1VGDAgPh7cd1nnwF/+UtyP7/9FnjqqeTlgPtg\nL4oe35YnC/Lz9+ICdCM7G/jxR/W6K65ggsHp2xcYPVq97QknAGVlicu2b49/Jpddpu/Dl18C48fb\n9XfzZuAPf4gfnyNeE/45ytfphRfi17e6mr2fNw+YORP44AP2fRZdllVVwPffsxusLVsSj6X6HP/x\nD3aNbPjuO/Y9MSGLeRDWrVMvf+QRJsAiN97or43IBGP8+PE47rjj8O9//xtFRUV4/PHHMWPGDMyY\nMQMAcPrpp6N79+7o2bMnJk2ahL+ofrUu3HcfcO21wOuvA7/6lfsPORZj+3TuDNxwg5+zipZ//xto\n2xYoKACOOsreKjBRWQkMHaofcGTWr2f/t27Vb8MFQ2XJcb+sLNj8DlDchwuOHIvQCcbDDwNZWey1\n+ENdvpxdO464LjtbfQ5NQv7lcEtu5szwjil+3/k1l5cDiefyww/A2rX6Y7Zpk/he9PE//rhdX7zy\n8cfsvygO/DUXDs5558W/e/v2xZdfeSXw298CRx4JjBsXX37IIfHXhx6a+D1Q9dnLnXq/fqw9Fbr+\nu2G6jjrBEGM/vN277/bWLkfzc0g9zzzzjOs2Dz30kK9jOw67Q3npJWZCH364/b5NmrAvfv/+zJw9\n5RRfXYiEr76K36kedRTwz38GP+amTeyOig9obmzdCnTvrrYeOCbB4FZDVVXici4Y4sDnVTDeeiu+\nTLQicnMTtxfXcYGRCUsw5EFw0iT2euVKoHfv4MeeO9d9O/kcu3TRbysLhlv7HD7QOQ77HGx/V7t2\nAYMH64+tssT4zYYoGCLioC8Hjp96CvjiC2DWLLv+mdi3jwnCli3sjl4lqGFaGPJvhiM6ZhwnmHhn\nrEsqCLfcwmIVCxd6EwtO69bAgw8yq6Qhuaa++QYoLmavvQzyOurq2ADdu7d71hNn506gqMgsGHyd\nOPhz3ARD/LHzZXK8o1mzxPf8WOIPxU0wKirYoC1aGG+/HW8rFYIhuktLShJdVwDrv3yubpxxhvs2\nsmAYst09CYYIv/ZLlwIjR9ptC6itCvG16g6d30Ds26cWFNOAefvtwOzZ7n176il7UVm0CPjb3xKX\n+bUwTPDvy5Ahics7dYq/DtpeoxOM//kfFlx76y0Wl/DL6NFs8PXhCYuM5cvjd6Vdu7JBL8gXZMsW\nNkB07mwvGLt2uQvGnj1AXp568NMJBh8ExEGU3x3KFobsRuIioxOMli0Tt6+tBcaOBY44InEwHTEi\nfpeYCsFYtsx9+yA3MDqXhc6KUiEGWd0Qrzd/zV2WIq+8YueKU8UwwhYMWy6+GLj88uDHCTNWxb/T\nH33EPCt33cXet24dXnuNSjBmzgQee4yJhY/4eBK33souute7uqj45pu4z7RFC/ZFsR3oVWzaBHTs\nyPy8ckBQh42FsW8fEyJVHYROMLhQiILBzXn5OPIgojL7TYJRV8f82UB8MOU/tObNgeuuY75+HW4D\nku2P1nG85dq7oUsylMXPdJMhJyPYwq+JqjbirLNYrJGjcmXJqO7Qeexlzx72mepcUraCodpOXOb3\nWojHka91LMaC9H4Qfxu33spiNnJNElkYPzF/PotbzJtn9sF6oX9/lm306KPhHC/VrF7N4gecww6z\nD1ar2LiRWWm5uWzgkl0kKnbuZANTVZX+y8kFQ3W3zAVDHij5e3E5H/RlwdD5hcUfu7iNysIQakYT\ntm/ZEnjgAZa+LLJpk3tGDAC8+GL8M+GxNh133ZXsXjMNdl98oV+nc/MA3gQDYOf5zTfmbXTt65Ih\nbG7wVC6pIUOAJ55grwsL2f89e1jyh5tgqKwdHccck5xG3bSp3b6qz4z3X/Vdtf0cZVQp5x06qC0z\nvzQKwfjsM/Zhvvgiy80Ok9//Hrj//nB9jamgupoN0qIb7vDDg1Wwb9zILIxYjFkrNhXCO3eyH2vT\npvof7N69bBudYDRtmiwYJgtDPo6cZst/MDqXlDwo19XFB1H+ufN2ebyD+/L5sX/+c/13r6aGpToD\nwLnnstROgA1sf/6zeh8gHoMSBzaTdXLUUe7bqJBdUm7f9WOP1QfkTzxRvVwMepvWy69FVAPf11+z\negSR6mqzYHDcbizFfnz4IUuCEbG1MEw1Hm7X2lTPJGNzQ0cuKQBnnslSJo8/PvxjDx4MtG/PUnMz\nmYoKdoclfsmDWhhbtsTTDlu3tituqqpid+HNm+v97fv26QVj3z7WlhfBkO/SbCwMUTDkAUpcx3/Q\nvD/cGuG+/NpaVoTFTX8586u+nv3oVVN52P54VQOb12kv+vfXr5MFw9Qvx/EW8+Dwaxy0IFH1Wj5m\ndTUTdDmGobpxMKFKP5ZdUmeeqS/g5Nv+8pfJ60xBb77f99+zGzaZ3/9e3Z6qaK9Zs2Sh/d//Ve9v\nQ6MQjGuuYfnXqSAWA666yn5uoKioqEh2oxQWAprpt6zYuTN+J20rGHv2sPhJixb6uZpMLqn9+9mg\nbOOS4sIg/1C8CoaMuD//QXPrilseeXns/7JlrE6F96tdu8R2rr9eHzsIcre3YoW51sULskvKLdVT\nduHZ4CYYXoXEdO3272eCvndvuEFlWSibNmXWzcsvs/iJFxcXRyUYvM+6mo+331YvV7mk9u1jGZ9i\ne+JMBl5pFILxn/+Z2uOPHw+8+27wycxSSUUFsyhEOnYMFvTeuTOeYWErGHv3MrEwWRjcJaUSlJoa\nNhjL5rXJwpAHf51LSoTvq/rBqiwMngLMg/F8kOWBVpX7Y8UKlrGiI+hgZuOCsMFrDCMqwdD54mOx\nxHW1tew7uH+/2hLxa+XEYon78hhGLMZcdAMHejsWwFyUbtvI6DL0VIIBJM74UF9PdRihpMmZaNmS\nmZ7PP5/adoLw44/JFkZ+vr8ZQzl+BCMMCyMvL5hLSmc9qAK/qplxa2uTs1i4hcGvAV/ObyJUls+R\nR5rv1v0IhnjXaRMP0PHLX8ZdG14FQ65bscHvb1R3jrIQiO/r6lhqdU6OOstM1Zcrr3Tvi3ydxBjG\nrl32mYSA3Wevy9LSuQR1giG3e9ALRjoYNw6wKE6PDJVLKgwLg/vqvQqG3xiGziVVUxPP1uLoLAyO\nXA0s/lD4oOiWcivHMPg6vh93Q4j9Es/L5PpyQ/zR86C5zazUNoPRP/8Zr32Q61bcYhi2FoZNXQnH\nJtCtey1TW8sG1exs++v/zjvufZIFQ7Qw3Prkxv798Rusm25iWXi6axJEMMjCSBMjRzIXQxgzwKYC\nlWDk5wcTjF27UmNh7N3LjldTk3w3y11SqhhGy5Z2LimOLAoqwVDtW1eXbGHw/shWDbc8xP6K522q\no/AywPCguVifEvSunV/LVLmknn46uU1dwZ14LuKstjqRMLmkeJZbkybmoLKJ1avZjNYi8nUKc1br\ns89ms+ZyvvjC3iXFn59iU7NDgpEmcnJYgdFLL0XdEzVr1iQLRocOzEz2O1+N6JJq08ZeMJo3Z4Jh\nsjCaN2d3aPI2JpeUzsKQz4//IHTrAbNgqCwMHqOQBzx+bJ1gmCar++//1q/TYXuXbYN8jW2nq7Ct\nP1AdWxc7isWAo4+2O4b8WhXDyMpiA6vf7/6zzyYXj8pZUp9+Gm9f7pNXPv88OWhuKxhnncVuDn+a\n3NvYF3JJpZHRo5MLtjKFDRsS54wBmEnepo3/bJqgQW9TDIMLhhy4Nbmk3CwMecprWTBsXVKqWAcX\nDPmYqv1FETTNEvDww/p1Yh9Fwsj64eenO6dU1By5CQbgzYUlXwedheH2+XpBFgy3PplwK540HUvl\nktq40U4cqXAvjYwYwXLuTdNeREFNDRvMxamaOUEC37t2JcYwbAr3bF1SzZoxq02VDaVLq5UFgwuF\nHFeQByX5R+I4ZgtDJSxeBEM8b1EwvDxiNAi2A6JsUfBr4Tbw+REtGwvDS1uqz5RTV8cG1aysxM/H\ntg5DFyPwkuH1xhverBtV5pMu6G0zjxnFMDKAvDz2EJkFC6LuSSIbN7K5j1RfJC/zQMmIFkarVu4W\nRn09G9ibN3cPeusEgwuDnL1kE/TWuYv4f3HQMlkYQHIMQydCpsnvgESXlJe0yyDYPIRJHBS9WBhe\nxaKyks27JWaliW1xggS9TS4pPzEMr89AUbmkTj3V3IbbsTdujM88bdsPEXJJZQiZ6JaqrNTPxdOu\nnXoacRtEwcjNdZ+EkVsOsZi7hdG8uV4wmjZNXqdzSYluBy//TRaGiJsIud1Fhlk4FubxxJRQeRAP\n0yV12mlsfjMbl5QbtoKhC3rb1mGk66FZInKfTE+4tKm01xXnkYWRZkaOZLPhhj0QBMEkGO3b+4th\n1NXFZ/0E7ASDB7wB/xZGTQ0TDHk+qf37WR9kwWjWTD/g6ayDujpzHYaIm1CE+QAcG7x870wDgygY\nXmMYXvrArVL+XHWvLql//UvdrlvhnsnCcCMnR90fXQxDtjD8ZE/JYmRKlvAzNQuHBCPN9OrFLrrt\nM67TQSosDD4nFP8i21oYLVqw126FeyaXFLcw5JlpmzVLHKB1gqH7Lw7+tkFvN5dUkDoLN1QDc5DA\nKmf69MR4lOzaC/NmiH9/LrggsQ1bwRAxZYjpLAy3GJVMjx7q+ZsAdjyba2N6ABVHPo7cJ93T84IW\nKZNLKs3EYqyI6v/+L+qexHGzMPwIxu7d8fmSAHsLgwuG29QgJpdUTg5zC4iDuU4wmjY1C4NueVCX\nlCmGkUpsBizdc6Q58pPidNdL176XAUfeNiy3l2nyQW5h6ILeOmKx5JlvRXSCIbbv99k5XiyMIFCW\nVAScfLJ+ArAocLMw/Likdu9OnAIiN1dvMXBEwbCxMHTTmDdtmlyly60JLxaGyZ0kCoY84IhzBmWy\nSyosS8DmnMRAupd25WeEuNXO2OIW9PZTuMczkHSiaOPi8vs4AS+CEeRzJ5dUBHALI1PiGKmwMKqr\nEwWjRQtvFoZb4Z4phpGdrRYM0Zrgy2TBiMW8WRhun2GUghHUJWULv378s1ANimFZVGG5pGzSauU6\nDLegN49R6M7RRoD8TgjpRTCCfAYkGBHQrRsbqLw+dSxVpMLCkAXDT9DbT5ZUbS1bnpWVKBi2LimV\ni8qrYIg/KLfajnRbGCJhTbopV6urziksgdS5pGyOaxvD0AW9bVxSsrUiYrIwbKu9ddOLq57pwZGP\nGeTRsBTDiIBYDCgrCzavfJhs3Bh+0NuPYMhBbz8WRm1tMAsjJ8cuS0p1xyy6XeQYh06EUhn0VpFK\nl5SuRgJQZ5j5QWdhuD0dD/CXVuuW1CAvdxMMt+O5jQnl5WzscAt66yYSjMWSZ3TwAsUwIuLYY9lj\nGzOBzZtZ4Z4Kv2m11dWJk8z5CXr7yZISBcMkDnxbWTC8WhgqwaivTy4007mmohSMsNAJq0hYweqw\nLAybtFo56C1ur0IUDK8xDL79ddeZz0H3fTHVeMifeRArj1xSEXHMMcDixVH3gn2ZtmxhwqAiLAuD\nZz2ZBgzRJaWaJ4qjK84D9BaGKa1WHMRNFob4XyUOfL1oYbi5pDIxS8orNhZG2C6poMdJxVxSYtBb\nt14Xw/A6HYvbXFIifsTV1D4JRgT07ctmiPVbRR0Wu3ezOyl+Zy/Tti2b+8rrwCZnSTVpYk6VBeLT\nggD6h9fwL3tWll4wVM8ysHVJ+YlhyO4nlYi4CUcqcAt6hyUeOrebSFgxm1Sl1drEMFIV9Pbbb/nY\ntvuQhdEAyc4GBg1ikxFGyZYt6kkHOdnZzLVkM9OsiGxhAO5uqX374lNfq1JmASYQPGin2oZbGHLQ\n208Mw9YlJW+vExHTMVOBF8Ew1Q+4IVsYJpdU0BiG7rrZHNPkkpLbSGfQ24uFoeuzaf8wLYx33w32\njBwSjABkgltq61azYAD+UmtVguGWWrt/PxvAAb1LShQMlYVRV6eOYZiypHQWhqnYTvVaHDB1QW8b\nf38qEQczcbaBd9/1f0ybwr2wLKqwBMPPXFLi9ir8Br29YOuSEte3bAnMnRvvY5DPYPLkYM/0iVQw\n5s+fj+LiYvTq1Qt33HFH0vry8nK0adMGpaWlKC0txW233RZBL/VkgmC4WRiAv9TadFgYYWRJNW2a\nOOCZLAxxsDIJhlic5nXq9DBxG0RPOimcdrxaGEEwteGGn7RaL0kJboLx4Yfx56Cr9g2Cm4XxwQfx\n91GmcmvmZUw9dXV1mDx5Mt58800UFBRg8ODBGDNmDHr37p2w3UknnYTZs2dH1EszQ4cCl1zCPtBU\nzmRpwhTw5tg+LU+kujo588pNMHgwG9DHMIIIhk0dRnZ2PAZRV8d+iCYLQ+d+4j9gt7TaTAl6h5Hq\namNheK30lgkiPF4K95o0Sc6S4vNn+Q16635DXsTCT9Bb3j5KwYjMwliyZAl69uyJrl27IicnB+PG\njcMseZIbAE6mlFMr6NSJPSfihx+i64ONhWH78CMRnYVhmh5EdkkFEQxd4Z4sIrJFkZ0dv0usr2fr\nvbqkTBZG1C4pXXthDuKmLKlUuaS84ifo/fnn5mO6Bb11+MmSUrVtu99BaWGsXbsWRcJDqAsLC/Gh\nVNgQi8WwaNEi9O/fHwUFBbj77rtRUlKSdKwpU6YceF1WVoaysrJUdTuJ0lL2aEnxAe7pxCaGYfPw\nIxk5Swpg701TFuzbF6/d8BvD8OOSEgc6cUoILiBiCi3/bwp6ixZGlFlS772XvCyVabWihSZjqoz3\nQhCXlEiqYxheJ1gMGvQ2udiAxPPwLxjlP/35JzLBiFlc4YEDB6KiogK5ubmYN28exo4dixUrViRt\nJwpGuiktZY/ePO+8aNrfsgUQdFeJ7fO4RVQWhk1aLXePhRHDMNVc8GUtWyYLRlYW+4Hp6jJEC0Jn\nYYj94ccW/6dDMDZvTl7mZcC23Va20NwsjFRkSdmgc0nNnAlMnRp/L1oYXuswuGDMmeOtb0HrMEwC\nIa4XXazeKfvpjzNVvZmByFxSBQUFqKioOPC+oqIChYWFCdu0atUKuT+NWqNGjUJNTQ22+ilbTiED\nB6bvWc0qbF1S6RAMMehtE8MwpdWqCvdkC4MvEwc8caDgLil5vU0MQ5dWa5NRlEpSXbgnuvBE6uvZ\ntQvafliCYapNcBMMHaJgeJn2x4t1sWyZerlb1pi4Pt1uUJHIBGPQoEFYuXIlVq1ahf379+O5557D\nmDFjEraprKw8EMNYsmQJHMdBe7cIb5rhLqmoQi02QW+/giFODQIwwTDN+SMGvdOZJaVySXELQ3Sx\n1NfH37u5pNyypDIt6K3i3/+2205XxyJicld5QVdNHiStVj6eLujN8Rv0NmErGn/6k3q5m8Vx0Mcw\nsrOz8dBDD+G0005DXV0dLrvsMvTu3RszZswAAEyaNAkvvPACHnnkEWRnZyM3NxfPPvtsVN3VUljI\nPsD164EuXdLfvq2FsW6dt+P6dUl5rcOQg+jiPEC6LCnuY9YJBh8oVHUZfEAUBUMWB9PUIOl0SXkh\nDDcRF2udhSFmoAVtK0yXlPze7RGtutTZdAS9dbi1GU4MIziRCQbA3EyjRo1KWDZp0qQDr6+++mpc\nffXV6e6WJ2KxeBwjCsGwCXr7sTBUQW8vLimThZH907cuJye5X/xOVlW4xzOguHtEVYchDhSyS8rN\nwhDdTzyZQBvMAAAgAElEQVRrJdOypFId9Na5pOQEgqBthRn0Fo/LX7vNJaU6D7c6jFTiNmPEQe+S\nakxEGcfIpBiGaGGkog6Dp9vqBjhV0Ft0o4jvuXioYhgqC0NncTQmweAxDF2WVJguKTnryut52cYw\nvFgYXDDSYWH4Pd+oBI1DghEC3MJIN3V1bGLBtm3N20UV9K6tTf5yBxEMecpqm7Rak4UhWxuiCMgi\nkikuqVS0J18/VXGeaGEEGbDkay2nPJvwGsMwBb1NgmHzbI50I14fEowGTr9+wJdfpr/d7dtZjUW2\ni2MxLMFo1szdwuCCEYuZn6gHeJ/eXGVhqFxSYiaULBhiDEPOmPJSuCcPfFETVgxDl11kCoj7aUu+\njl4FQ95etjBMQW9de34FI4wYhhsPPhh/TYLRwOnVC/jxR3MVdCqwcUcB4WZJ2bqkAHUcI8hstSoL\nQ+WSkgv3xEFJFAl+N22TVtsQs6RsEc8pFotfI5FUuaRk15QJWwuDx6C8Whh8H5tto4QEo4HTtCmr\n9E73M75tAt6Ad8GoqYnfjYt4cUkB6jiG38I91VPUTFlSPIahcklxC0J2SXmZfLAxCYZoLekG2rBc\nUkEsNS+CwVNkVZ+P7hx0loLb+aYjhhHWvkEhwQiJvn2Br75Kb5s2NRiAd8Hg7ij5R+DHwpAFIWjQ\nW1xuypKqq0t2SamC3rosKV3Q248rJR2ENZeUzpUTloURxCUlfh9NLinRwtAdN0zBSCf33hvt3HWR\nptU2Jvr2TX8cw9Yl1aIFG8z5YOyGKn4BuBfuyRaGm0sqaNBbrv7mbiZdlpQsEnIMQw7Eissas4Uh\nCjAXDNWAHEZarZsQ2+JWCZ1OC4Pvmw62bvX+qIIwIQsjJPr0yVzBiMW8zVhrEgzboDfgXzBUhXte\nXFKmLCkx6K1Lq1WJSKYIRiraE89f55ISr10YWVJy7MJr8oBtlpRuXy+C4XbNgwS9b73V335RQYIR\nElG4pGxjGIA3t5Qq4A14d0nZxDBEUXCc+KCvmnzQT5aUycKwiWFkmksqHTEMlUtKttb8EsQlJeLm\nkuLBe9v9gWBBb7+CkS7LJCxIMEKie3egstL7cyeCYGthAN6mOPdrYahcUqYYRnZ24nrR92xbh+GW\nJWUbwxAFykuWVLrTalNduKdzSYkWWRDCEl65H/J3hbukdPtmStCbBOMgJSsLKC4Gvv46fW3aBr0B\n7xaGX5eUl7Ra2cIQYyxe6jB0WVJy0NsUwxDbE90umeaS0rFokf99vWRJhe2SCkswdEFv2/2BYIJh\ng67NhgQJRoik2y3lxcLwIhiqeaQAb4V7gLtgyBaGSTBUrirRguDuLHHAUwW95cI9HsMQ2xPjGrbZ\nUulCHnRee439l5495gk5hmHKkgprLqmgQW8bl5RpMI4ihpFJ2VZ+IcEIkXRnSqVKMMJySbnFMHRW\nBJAY9BYHAHE5FwQ+v45NHQZfJ9dhyO25Bb0zRTBuvz34MVUxDF2WVEOwMMIOeoc10KseBNrQYh8k\nGCHSp096LYxUBr29CobjqC0MtzoMk0tK9K2LQmKKWZjqMOTMKJ1gqAr3dAKSbsH4+OPE92EMZnIM\nQ5clFZZgiOmucraULTaFe7pBVbQgRfwGvW0tjHffVe/rBxKMRsCRR9o/tCYMoohh6Oow+LTl4g8u\nLJcUFwJALRji8y+8zFYrWxuqoHemxzDCFAweLDZlSYVR6S27Cf1gcklxC8MkGGG6pPwQ9HMjwWgE\ndO0KbNiQnjml9u1jg3GrVnbbp9rCkAPegPe0Wj+CwQPhXCBUWVLi4K6b3lyOYeiC3lHHMGTCEAwb\nl5QqDdlvW+Lx/R7LtnDPdn/ALDAmosiSIsFoBGRns/TalStT3xa3Lmy/OF7SavfsYdXhMm6CIbqj\ngGAWhugi0rmk5NlVbbKk5MI9Oa2WPw+Bu05koWiMFoaXLKmgbapSmP0QxCWl2h/wLxh+IAuDAJA+\nt5SXgDfABCOVld5ywBuwq8NQVXPL60QLQ86SUrmk5CwpQB23kF9zYeIWhmzNqP5ngmCEVRvhliXF\nP4MgtSfidRfb9op8zrNmxV8HcUnZtKXaL90DOAlGI6G4OD2z1m7dah+/AJhgVFXZbauzMPgPXRzk\nOSqXlNc6DHGAVwkDkJwlJccsVO+5gHARMNVhyOsz3SUFhDu/kylLym3KcNu2ZJeUqSLbrc+cf/4z\ncZ1b4Z4u6G3TVhiQhUEAaBwWhk4wYjEmCqrAt8rCsEmrtQl6B8mS4u9raxOf9aCrw5CnP8+0tFoZ\nnk4cBNnC0LmkdA9X8oIq6G2KNegwDbj8mOmyMEz76mi0gnHjjTdi586dqKmpwYgRI3DooYfiqaee\nSkffGiSNQTB0LilA75byE8MII+jtliXFB0D5Oc9yHYYoGKpU20x2SYXVB9HCULmk+CAcVKBkC8Nm\nBmUZN8EwuYl0qcFRBL39krGCsWDBArRu3Rqvvvoqunbtiu+++w533XVXOvrWIOGCkeqqTq+CkZcX\n3MIAzIKhckl5jWGogt6iq0onGLosKdHC4AOeyiXF29Ol2uqC31EThoXBcXNJhWFhAMlB7zBcUvI6\nv3NJeW3Lbd9UkbGCUfvTr/bVV1/FueeeizZt2iDW0CZASSPt27OBc8OG1LaTapeUVwtDF/QO4pKS\ns6EAbxaG7JLi1obohpJdUrKbig+imWZZcMIUDLfCvaysuOAGQfXYXK+Ybsjcgt6ZZGE0urTaM888\nE8XFxVi6dClGjBiBjRs3onnz5unoW4MlHW4pP0FvLy4pk4WhimGkqw5DFQxXxSy4gPABsKYm8Sls\nurRaVdBbrEyWhSNq0uWSCivoDfgPeosDd5BBXGdhmCySsOHH9HvsjBWM6dOn4/3338fSpUvRtGlT\ntGzZErPEHDYiiXQIhh8LI2iWFBDcwqit9VfprXNVqWIWKheVePdsEgxVWq04gGaaS2r9+vC+a27T\nm4vXMghhxDDcRNJtLinV/g0phuEnUcDPdU46hm7FW2+9hREjRuDFF1884IJyfjrLWCyGs88+O3jr\njZRMFIzcXDaoi3frOsIMesvFgnwKESDeDx5QNRXuuVV6qywMeZATg95uabXiFBmm9Nqo2bgRGDo0\nnGOZ4hSimycMl5SfGIY4KAcZxL26pLyer8pCk4nCJeVHZGS0gvHOO+9gxIgRmDNnjjJmQYKh58gj\ngYULU9uGV8GIxdhT9KqqgDZtzNuGGfQ2uaSA+EDdtGly4Z6uDsNU6S1bGGKWlMrC0KXVin0wFfA1\nJurq2GdjKtwLK+idiS6psCwMG8EIih/BCMONpRWMqVOnAgD+/ve/B2/lICMTYxhAPFPKRjBMFoZq\nriw/dRhA3C3FBcN2ahD+oxcFQhXD4O9VMQwbC2PfPvXcR41VMMRrpFoXZVqtOHAHcUkFDXrffjvQ\nti1w9dXq/WwEMIq02jAsDNdDXHjhhdi+ffuB96tWrcLw4cODtwxg/vz5KC4uRq9evXDHHXcot7n2\n2mvRq1cv9O/fH5988kko7aaaHj2ANWv0M7sGxXG8TW3OsQ18m4LeusI9P2m1QGLg27bSW7QmRNeR\nbGFwV5fKwhDrMHi8Qle4l8lZUmHBz99tapDGbGHYVnoXFgL5+fq2ohaMgQOB665LXp4WwRg2bBiG\nDh2K1157DY8++ihOPfVU3HDDDYEbrqurw+TJkzF//nx8/fXXeOaZZ7B8+fKEbebOnYtvv/0WK1eu\nxKOPPoqrrroqcLvpICcHKCoCVq1KzfF37WKDsTxAu2ErGKkMeussDMBbHYYoIrpKbznorYph8MFP\nrsMQLRCVYDSGp6eJ8HNsLFlSbpXeXoLe8rZuQW4vgpGKGMbAgcBll3nbxxZXY3DSpEkoKSnB8OHD\nceihh2LZsmXo3Llz4IaXLFmCnj17omvXrgCAcePGYdasWejdu/eBbWbPno0JEyYAAIYOHYrt27ej\nsrIS+aK8Zyg9egDffsvcU2HjNX7BscmUqq9ng78uc9qUVutHMEQLw6YOgy+XrQ5xkDfVYYiFe6IF\nwV0tvA6DH5cv4+fR2CwLjmhhqFxSYh1GVIV7Yp/cPgdT4V7QoLe8nSwgNnfyqU6rVa1PadCb89RT\nT+GWW27Bk08+ic8//xynn346/va3v2HAgAGBGl67di2KiooOvC8sLMSH0oOJVdusWbMmSTCmTJly\n4HVZWRnKysoC9S0MevZkgpEKvDw4ScTGwti7l1kuui+Xl6C3KoYhptUC5jmjdFOD1Naa3VSqOgxd\n4Z5crMbdJeLjYFu0SHZNNTbSaWHILik/MYx0Br1V56sSDU4YA7MbfgSjvr4cQHmgdl0/qhdffBHv\nv/8+OnbsiPHjx+Oss87CJZdcgk8//TRQw7bV4o70yar2EwUjU+jZE/juu9Qc20/8ArCbHsQU8Aa8\nu6RUMQxxgNC5pOQYho1LSrYw3ILesmDIQW+5mC8rK/l8GgtyDMNkYYRdh+HFJcU/1yAuqTAsDHFb\neT8vFkY602pzcsoAlAlLpno+huupvfLKK+jYseOB90OGDMGSJUs8NyRTUFCAioqKA+8rKipQWFho\n3GbNmjUoKCgI3HY6SLWF4dcl5SYYpoA3wKyIIBaGrUvKrQ5D5ZKS74JFl1RNjTqGIQuGKeidjjvH\nqBCr2k11GFHHMG69ld2IBHFJBZ1LSmW9eLUwgro2M9YltWfPHjz22GP46quvsPenkSIWi+Hxxx8P\n1PCgQYOwcuVKrFq1Cl26dMFzzz2HZ555JmGbMWPG4KGHHsK4ceOwePFitG3btkHEL4CGKxhBLIyW\nLROX2WRJ2VoYboKhszD4HbOuDkN2W8lptXxZXV1cEGOxxhf0dsuSqqtjn2fULimeF5OKoLduQJXP\nNwzB0PW/c2dg5kxg9Gjz/lEJhushLrroIlRWVuL1119HWVkZ1qxZg7y8vMANZ2dn46GHHsJpp52G\nkpISnH/++ejduzdmzJiBGTNmAABOP/10dO/eHT179sSkSZPwl7/8JXC76aJbN+DHH4Ob7yqCxDDc\ngt6mDCnAW6W3bR2GTQxDdkmJ26piFqosKVUdhsnCEF1R4p2w7R1xQ0KOYahcUmHVYfgNejtOPBkj\nnZXeKsEwtWVzPjoLo317u4Hdj2CkJUvq22+/xQsvvIBZs2ZhwoQJuOCCC3DCCScEbxnAqFGjMGrU\nqIRlkyZNSnj/0EMPhdJWumnWDOjUiYlG9+7hHnvLFn/HbNWK9ceEm0vKy+SDXuswdJXetllSfJkq\nS8o2hiEHvfkgyosEgcxzTZ16KrBgQbBjcMHgrhyVhRFWHYZfl1R9ffy7mc6gt5cUXCCYS6pdu3AE\nI6x9ZFy71vSn28Y2bdrgiy++wPbt27Fp06bgLR8E8NTasMlUl1SQSm8g2ZLwmiWlqvQ2Fe6pLAye\nVisW9smWRaZZGD9lpgdCFEdT4V4qpjf34pLi3810VnrbBL3DKtyztTDctlGdSxjfW9eP6oorrsDW\nrVtx2223YcyYMaiqqsKtt94avOWDgFRlSm3eDBx6qPf9bLKkbCyMIHNJyWm1tnUYtoV7oktFVbjH\nXSribLTc1aKKYfA2Vf8zhVB80y4uqUwJevNto0yrdSvcCxLDaNs2uIWh619aXFJXXHEFAOCkk07C\nDz/8ELzFg4hUBb6jtDB0WVI6C8MmrdZrHYZb4Z4qS0qutxCD2nIdhjj5IBD/AYsClUmE0R/VtRAR\nr2VQCyOIYPDvnlt6s5+0WpNFIuJmYXhxScl9zM4OLhiOkzrB8PRVG+0WuicSSKVg+LEwbAUjrKC3\nbGGI03BwwqjDkAv3VIV88mCoWy6Lj9hfWTgyhVRYGLq02lDuUgMEvfnEl7LlKuOWVpvKqUGCxDDc\nji1u55Uwvreevmpr164N3uJBRKoEY/Pm1E0N4jfovW+fe9Bbjl8A4dRhqCwK/uhSVdBbnCbELUuK\ntyn+zzQLI4xB3LZwL5Rcfp8xjPr6uGC4WRiprvQ2tRXEJWUSOnk7r+vTYmE88MAD2LZtGwCgtLQ0\neIsHEd27A99/H+78Q/v2sTv81q2975vqoLdb4Z5KMLzWYbhlSekK98TJB03WhsnCaMwxDNvCvbDE\nya9LiguG20zQflxSYRXuBQl6hyEYkcYwKisrMXjwYAwcOBATJ06E4zjW03oc7LRsydLk1q5ls9eG\nAY9f+PkIwqj09uqSCsvCkJeb4hoqAZEtCd1rMa1WjmFkqksqFRaGKYYRlOzsxMkcvQgG/z4FdUlF\nPTWIySUVRgxDRVoK926//XasWLECl156KZ544gn06tUL//Vf/4XvUjVRUiMjbLeU34A3EM5cUqag\nt18Lwy1Lyi3orbIoVFlSojDwH71Ye6CaGoS3Kf7PNJdUOrOkUmFh2PafuxmBxhP0lmnwLikAaNKk\nCTp16oT8/HxkZWVh27ZtOPfcc3HjjTcG70EjJ+zUWr8BbyD+XG9T9bnfoLdNDENOqQWSXVLioCxO\nNicLhmx12MwlpXJDBXFJ8R92lAb37NnAlVcGP46XLKmgyEFvL4LBv7tuLim3GIaXoLdbWm06LAyT\nC0y1bWRTg9x///04+uij8dvf/hbHH388vvzySzzyyCNYunQpXnrppeA9aOSEbWH4DXgD7EuUl2cO\nfPt1SeksjJqa+N2cnFLLt1FZGEB8YHGrw5AL9/y6pPgxZQtD55KSl0dBr17hPHPFNksqFUFvPxaG\n7JKSJ59IpUtKta3foLftwO5FMLwc1yuuMYytW7fipZdewuGHHy413gRz5swJ3oNGTs+ewL/+Fd7x\nglgYQDxTqm1b9XqboLdtlhSPA3DLwi3oLabPAnbxCnkZH9RMhXsqwfBSuCcLheqOPF2EJVaihQGY\npzcPoy1+fF3NgAr+mQLJLinVXX4qg97ye79Bb7kfOqHj32m3vqqOabOPLa6CMXXqVO26kpKS4D1o\n5GSShQG4B77DdEkB8TiGTjBsLAy3LCn+Y/JSuKdKq5UL99xcUvx/lC6psASDnz8fsDLVwtC5pORj\npLvS24uFYZpeJQyXlG59WlxSRDD4fFJhTYcdJOgNuAtGdXV4abVAYhzDLejNn1nB4Xe9XrKkxKCt\njUuqoccwwhQM/l/nkgrTwvAbw9C5pORjmMQt7KC3jPgd/sc/1O3oXFKpTKslwWgAtGnDBuANG8I5\nXlCXlFumlJuFwbOk5B+cKq0WSMyUsqnDkCcmNLmfdMtUFoeqcE+XVquLYehcUlEKRlhti+emK9zL\nJAtDdkl5tTDCrPQ2ZUmdc466nSgsjLRPDUL4I8xMqVS7pNyC3jyoLP9gTRaGSTBkl5S4Xmdh2Lqk\nRItDfOKeSTBMFoZb8DsKwoxh8OPpXFKpqvT2amE0axbMJRX0eRimbeW+6O70vRbu+cnEcjuGH0gw\n0kCYcYwwgt5uFobJJQUku6UcxxzD0FkQQKKFoZqY0KuFIbuk3OowVILBz0lXh5FJLqlUWRi6tNqw\ng978M7OBC0bz5skuKdWAGlaWlFsMQw7ci+3qBn+vFoZKEE2QS6oBE7ZgBLUwTGm1bi4pIDlTSqwQ\nlpEtDDmtVi7cU1kYtoIhF+65Bb1VMQzVj122KDIprTYs5BiGaXrzoMiFe7aV3vX17DNq3jy4SyrM\nLCmTYLhZGLYxDK9CTYLRgAlTMPw+C4MTNOgNJFsYOusCcA96iy4pnYWhqgBXuaRkIRDf28QwZPeI\nW+wiE1xSYeHmkgrTwpCr+MOwMFRB73RVesvH8mJh2KbVkkvqICIswaitZYO9robChqBBb8CbYAQJ\neussDF1cQ1W4ZxO3EAeXhmZhhOWSssmSSkXQW/xs3frHg942LqkwC/dsXFIi4vno7vRNE5L6yZKy\nCYqThdFA4IIRNLV261b7J3LpCBr0BpLnkwrLwlDVYXBx8FO4p5qtVoxbyDEMwGxhNGbBsMmSCivo\nLccwvAgGtzCCBr3DzJKSBcjtfGKx8F1SNjEOEowGAn9O75YtwY4TNH4BmAWDP9HMj4WhSqkFvFkY\nsktKFAKbLCnRopAFxCaGwY/FcbMsMqFwT9W2n5mRxfPXZUmZ3Dxe8JMlJVoYzZolz4fmxSUVNK1W\n3lYWDLfzEWMYquPaBL3l97JIUVptAycMt9SmTUDHjsGOYRKM/fvZj9ntDkm+w1M9z5vjpXBPVYfh\nJ+jtxyVlEgxbSyNT8DMw2GZJRWlh8M+0WTO7oLfJJZVKC8NGMHQuKZ3bz83l5MeN5YcM+6o3XsIQ\njI0bwxEMXZaUTcAb8B/DUKXVmoLefOAKwyVlCnqLg4sqw0VnWaTDJXX88ak7tgg/h1jMnCWViqC3\njWBkZSXWYbgJhlvQWzVg6z5HVQxDxotg+EmrdUP+3pJLqoEThmBUVqbWwkiFYMgWhiqt1lTpzS0M\nmywpXeGeGMMQRSIWS3ZJqdIj3WIXqRQM3p8TTzSvd1vmhm2WVNhBb9u0WjeXlOoOPF2V3vJ6G8Ew\nuaRsr4eIuI9uQkcSjAZEWBZGfn6wY5iypHbvZk8JdMNL0NsthmEKeuusCS9zSbm5pGxiGFG6pPwM\n/l72UVlRqc6S8lO458fC0B1XnPVWJIhgeLUwTIJhc9Pm5pKiGEYDJ5NcUjrBqKpiguJGmHUY8uSD\nuiwpL8/D4EKgK9zTPd8bMAe9de/TEfTWDULt2ycvC0Mw0jW9uZ+0WtsYhpuFYRMo5n2UMQmGTZaU\nySVlIxgyfqwSP5BgpImGIBi2FkY66zBspgYRA6JiDMOtcM9vWm0ULikVxx7LPgsAOPdcu310x7fN\nkgrbJeUnrVYlGHJmWJiCkQoLgx9T1abqengJesv9Kyiw65cNJBhpokMHNnBu2+b/GGHFMHRBby8W\nhpglZUqr9TL5oMnCsA16m7KkVAFwntZpKtxzEwzbqS3CRhyknn02/tqLYKjET+eSSkWlt21aLf9M\ndRbG7bcnb29ySakEQ7W9KG4ismCI2wQNevvBFMP44YdgxxYhwUgTsVjwWWvDiGG0aMEGcNVzvf1a\nGEHTam0sDNklpav0Fu+QVS4pblWIA4rOwpBFRBfDiNIlxRH74EcwbFxSqYphhGFhyN8rU5aUFwuj\nRQv3uaTkmIjNNQr7qXg259JgLYytW7di5MiROOKII3Dqqadi+/btyu26du2Ko446CqWlpRgyZEia\nexk+Qd1SYbikYjH9c72rqlLrknJLq9VVeouDittcUrKFYRvo9uKSSmf9he0A4neg8eKSMt21H3WU\nfZtBXFL19XprVsSm0ttmkG3dOvlaOA7LKJSPx/FS6a1ap8JtlgjTd1FlPfslEsGYPn06Ro4ciRUr\nVmDEiBGYPn26crtYLIby8nJ88sknWLJkSZp7GT49ewIrV/rbd+9e9iUNMo8UR5cptXu3nUsqyNQg\nptlqbeswdFlSjpMcw1C5ofhr8YekCmDrgtzy/6gqvXVWhZeBwTZLiou57lwnTrRvU7QwbNNq+efO\nbwhs0F0HLjw2mUVDhqiD3mIf0uGSchMMsT+yWPLXobgTgx/CO7Nnz8bChQsBABMmTEBZWZlWNByL\nCZimTJly4HVZWRnKysrC6Gbo9OwJ/HTanuFV3mF86LrAtxcLQ9w/VUFvVR2GLoZRUxP/oahcUnLQ\n28YlpYtVpNMl5efuMIygt6pwTxZ7v236Savln2FWlrkfNn2ytTB69dIP7iecADz1FHDRRd4FA1CL\nkNiHX/wC+Ne/4su9WBhyDIO/3rq1HEC5e+cMRCIYlZWVyP/JGZ+fn4/KykrldrFYDKeccgqysrIw\nadIkXHHFFcrtRMHIZHr2BB57zN++YbijODrBsLUwopjeXBXg5sfigiFbIUC8EMotldaPSyqdMYxU\noYtheLUwvOCn0psLRrNm9haG6W6df4fkNlTH0MUw+HfVj0vKTTCeew5480024Shvw4SNS6pjxzIA\nZcKaqeaDKkiZYIwcORIbFA+yvl1KZ4jFYohpPtn3338fnTt3xqZNmzBy5EgUFxdj2LBhKelvOggS\nwwhbMHQxDJ6CZ0KVJWWyMPbsYa+DTG+usjB4SqloQYjvxUFQ9dwLr4Ihb8P7JLuD3H7cXvDjTghS\nh8EFViUYpoHQS5t+Yhi8T14sDDeXlDzjrS5QrBvc+V2/LBhu14InXqi21bkZg7ikbPtlQ8oE4403\n3tCuy8/Px4YNG9CpUyesX78eHTUjYefOnQEAHTp0wFlnnYUlS5Y0aMHo3JkNyjt3smCaF8JIqeWY\nLAy/QW9TWu3Oney1ycLgd33iF9/LI1r3708c2GUBka0KMUXUb5aUauBSZRgFwSQYugEgaOGeH5eU\nF/zEMMTPIAwLo77e/ZkafJl8LfjgbSsYcpBbPKbtIw+8WhipimFEEvQeM2YMnnjiCQDAE088gbFj\nxyZtU11djV0/jWq7d+/GggUL0K9fv7T2M2xiMaBHD3+ptWGk1HJMMQw/LilTWq1NDEOstRC/1NzC\nEO9udSIiCoTsopJjGHyZ+NpUhyE/21sWELnPURM0hmFySenwkowhWxi2MQy+b9AYBm/XbT4qHgvQ\nDdaiYOisEFP7KsKwMBrdXFK/+93v8MYbb+CII47A22+/jd/97ncAgHXr1uGMM84AAGzYsAHDhg3D\ngAEDMHToUIwePRqnnnpqFN0NFb9uqTAtDFOWVNhzSYkxDFVaLXdJ6dap6jDkLCmdC0r1XicYJpcU\nb1tnaYikSjD4ADB0qP22NuhiGPIgqRJ0kZ+cAVaIguQlhsH3DZolJbqE5OWqY7jNVqub/VZHql1S\npnaDEknQu3379njzzTeTlnfp0gWvvfYaAKB79+749NNP0921lNOrlz/BWLcOOProcPqQzqC3aGHs\n3693SalSbk0ptH5dUqILxqtg6FxS4j6pFoywA+y2dRhuFoaX+Y/8zFYrXvOgFoYu6Kxy69haGF4F\nI2wLQ3alNioL42DGr4Wxdi3QpUs4fQgjrdY26C1ODaLazs3C0E0NIm6vcknJAqLKjBIHYVMdhs4l\npaBQUVEAABzTSURBVAp6hy0Y8g9fFWMJ4/huWVKmGMbNN3tr080l1bVr8j5hWhi6QLZtDIOjEwy3\nwd1WMFRt6bApQiTBaID4FYx168IVDFWWVKomH+QuKZ1gyDPSyvu6TQ1i65IyuaHCckmFFRjmyJZF\nOiwMnUtKd2633urtefVyHYZ8HQsL1fsA3iwMfk4/ebwPwF1CZ52VaBl5jWFw3CwM1Wfm1cLwm1ar\nO55fSDDSjB/BcBwmGF78xCbCDnrbWhh798ZTYTkmlxRfp7MwRBFRWRhuWVImwRDNel39RTosDI5K\nMLwM0jpUMQydSyqsc3MTDLd+2vaDbzduXPKxamuZJXP99fHlYaXV2lgYYgyjTx91H2w/ay7yAHDL\nLcC118bXeUn3tYEEI80UFLBinN277ffZsYMNTq1ahdOHVAS9dWm1ovvKj0uKWxhylpQsGKILSvWe\n72trYYhuKi9ZUmGY/SZsfvR+gt6mLKn6+vj1cDu2TWKGeHzbGIb4xEVbC0P+vDh8wG7SJDndVcaP\nhSEP7vJxV60CZs+Ob/voo/F1OpejeMwXXkg+Pj/X3/42UYBkZPH0CglGmmnShFkZK1bY77N2rV1B\nnS1hWxh79+qDnuK2KsGwsTBULilxeznInZ2dKBjivrpUWi+CYbIw0umS8uvvVh3fFMNwC3h7Rc6S\nshFZuX+27fB9RHgMQT6Oqh9+0mp1dRs22Hy+55yT+F78/roR1ColwYiAkhLg66/ttw8zfgGoBaO+\nnlVk+3mmt+lZ4G6CYWNhiO4Q7iqSpwKR34suKXG5ziWlyxbi/ZCPI/5PpWBweBvTpqXmuOLgKk4I\nCYTrjgISj+/VJRWLebcwVIkDXKhMAzSfzDJsl5SIyWKztRR79gRKS73t4xcSjAjo3RtYvtx++3QI\nRnU1m/vf5k5FzpJyEww+NUiQoLc4qGRlsWPJMQzxzn/fPrVFoLpTtbUw5G10ld5BEQdr2bIIuw5D\nFspYLDFRgfdHZU2JeBkkxePbuqT8xIlsXFK6NuRtVdvxc+aCsnq1uh9un0fQwPSJJwI33OB/fy+Q\nYERAJgqGbfwCYCIgPg+Ai41u26AuKblCXBYM2SWVlcV+zCqXlJtgqFJtvVgYfmIYY8cCP/tZ4vml\nC5WFIQuGl2lBbAYsccJJW5eU+Ll4tTDk6yknSchtyMtkwZDFkZ/DYYfZ9cuEH/FQ1V3orqntb1wH\nCUYEeBWMiopwYxht27JAusiOHfbzWzVrxu4M+aBi65JSZUmJMQmdS8pNMOQgtykNVtxH3M6UJeUW\nw5D77BWbYLKXGIbXtuX/YmYbEH4Mg3+uqvnDdASxMOTrxNu3DXrLT/fj6J7jHWQuMb+fr/z9aNEC\n+Oqr5O3uvdd/3wASjEg44gjg++/1X0SZ1avVxUx+4YIhfrF37LCfDygWY3cqPNMrSAyD3zHu2ePf\nwpDvGE0DvK1LShXD0LmkgqbVmgTDFPQOo/LfxsKQY0gqvLikxNRdr4Lhx8KQ77Z5UoS8XHVXzq1X\nFW5iY7NOPM6wYcDIkeZt3doQ2yopSd7O66SnMiQYEdC8OVBUZF+PsWpVuIKRlcXcUqKVsWMH0KaN\n/THCEgwgLhi2FkZ2NjumrnBPZwnIVoXJwhBf+w1669x0MllZ9oIhEvRuUTwuT4sO6pKyhbexf39y\nSrZblXIYFsa+fe5Bb75MF8M49VRgwgS7vtjwzjtA//7m/uhIdeyCQ4IREbZuKcdhgnH44eG23759\n/OEsALB9u3fBqKpi/duzxz2G4Tj6WW2bNmWio7Iw9uxJzGgC9C4pm8ps1eswBUMczGzrZqJ0SXFh\n4J+LzsJIhWCorEdAba2I56+zHGS8WhheXVJFRcDf/568XJ7+3O/n5CeGQUHvRkpJiZ1gbNnCBlQv\ng7kN7duzY3O8Whh5eczC4EV7urs+LhjcAlD9yJs1Y8eSB6XsbCYk8oAiCwaf4FA3oIuWhigmJsEQ\nn/ksDzwml5R4firBmDIledkhh7hbGLr3IldeqV+nY9s29t9NMMIOxHPrUWVhqFBZcW6Do8nCEL8v\nqjaAeFqtLBgmQQO81WGEkVYrbkuC0Ujp3duuFiNsdxRHtjD8uqRM7iiA/Tgdh1kjcsCb06wZy9qS\nBw5uYciC0bRpYsyDr5cHcvm/bFWYXFJ8sJD3V7Uj4mZhXHVV4vvjjwfuvNNfdpVMu3bsPx80bKp6\nebabrYUR1oDE2xAtjBNOYDcxchvnn6+2MNyQM984ooURJOidakzX+te/dp/WJBWQYEREnz7Al1+6\nbxd2wJsTpmCYfPWxGFu/Y4d5vqmdO9UptyoLgy+XBUOcvRZQu5J04iHXI/DpMHTHEf/rXFI2AcZu\n3dj18ZKr75fCQjZRoAoxhsHPgdcX2LikvFYQi4LB227Vin0vZY45JjUWhk3Q2xTD0OE2NYgtpv3O\nPz8ew7J1Ux5xhL9+iJBgRETfvmx6EPm5wjKpiF8A6bMwAGZZmASDWxiqoj6ThSELAx94ZCERLQ03\nC0MsyrKJiYj7iNsATOinTk3su+4H3aGDenmYrgY5X/+cc4DBg9lrUTAA91mGg8ILNsVnpOhcU7KP\nXldfIWMjGKbBlrsKvVoYXsXTbftOnbwdT8Xu3cAf/xj8OCQYEdG8OSvpV+VKi3z/PbsLDZtDDgku\nGFVV4QmGVwtDLPTTWRjyezlLShxQbFxSottGXK4bdHJykn+kuoH/vvuAH36IV8XL2AiGbhueXikO\nvHV1bBI7PtWI7G7TCUYqXFJcKOTPmSN+PmJarVvsw6uFIW6XlwfMmxfPqPJC2BbGjz/ab6sjNzec\nOBQJRoQMGAB88ol5m2++AYqLw287qIXBg96pFAwe9JYHBp0lwf/L7iW3LClbweDnyfdTTdQo/ih1\nPnEAOPfcxOW5ucwikeM8XgYb3UCluinh58bdLbKF5WZhqALEbojXRkyrlT8/Gdkykm8I3NrzkyVV\nWMhuqnJyEudNs0F3LVQZVSbEzyJMzjsvbll6hQQjQkpL7QSjd+/w2w7LJWUzYWHz5ixt16tgNG3K\nrBiVhQEkC4Yun181W624XpclJe8vCwYPausqfnU+cQB4+unkdSb83KWqBETuE49TyCLrVTBsEH3o\nqqC3bmAUXUeilWgrGKY6DBFxO37tuPvTDZvrEdbjCYLyr38BY8b425cEI0JKSwHTY8t37mQDreoJ\nZEGR02q3bAEOPdR+fz8xDF2WlC7o3by5WjDcLAyObGFkZ6t/2KKQqARFLm7jaZNugiG2NXkyuwby\nwOxGKmMYQLKFoRMMfu5B+jNsWPw7IMYwbFxSomB4tTD8uKQ43C169NFAr17m9tzQWZy2KdWm43r9\nPORAvi0kGBHSvz/w2Wf6uWe++QY48shwUi5lZAtj40a7h99wxBiGW0WzX5cUn+TQ1sKQtxMHGfE/\nkDjI6wSDbyOv4wMpz4KysTCys9n28oBrmx0VVuxAPg4/F5WFweeT0hVciti4pDp1it+te7EwZMEI\nw8JQ1WGofmfcwhgyxP4ZNrprofoMTdft+eeBBQvs2vSKbsp2N1I0ez9hQ/v2LDvmm2/U876kKn7B\n2+aCUV8PbNrkz8KoqnKfATOIYAB6C0MeaGSXlK6OAkgU6ezsRGukSRO2Xq7U5ftzn7YXC0P+gXoV\nAC9Bb9Mdq62F0bSpvywp20I0lWDYZEmFZWHs3WtnYcgZeTaoUoN1xzchThMSNn4FgyyMiDnhBOD9\n99Xrli9PnWB06ABUVrLX27ezQd9L6iSfIt1m0kK/gsHfqwr6gLhlY2thiLUEsoXBt23ZMjG1VjwO\nz1bj1dFigFw8Foevf+st4E9/SjyW18HD5g7ebUqKDh2Sl+liGLm58aI+UTD4/GF+LB5ZMKqr4wJ9\n9dXAJZfo9xMF3auFoQp6V1UlW8aqGEZODrt5EL87bud+8snMYrfZPhYL59nsXj8PEowGygknAO+9\np163bFn8SVph0749Gwiqqry7o4D4jLc2wfLmzVmMxDRBoSoo7mZh8PUqdxJgdknJs9/yfUXB4PAf\nNK+V4NlRpiwo8fXw4SzjRlxm+wMPOh8RZ80aliZ69tnAf/xHfLlsYfC7Y51grFyp7k9pKXDBBfb9\nadmSfeb8s3zoIf13XQ5688/Ra1otr3zPzmY3OybB4PA2dO5MHaq6mrDcimEclwSjgaITDMcBPv4Y\nGDQoNe3GYiyYvnatP8Fo147dadsIRsuW7CFQusrnvDzmItAJhuzysk03VGVJycfm60XBkC2Hrl2Z\n+44fLy8vcdCwcUnJy9x+5NyK8QI/5sCB7L94fQoKmBh07w488kh8ORcM7n7i1qI4G7EoGC+/DHz+\neXL/27YF/vEP+3mTWrVi11T1GcrHFl1S4nxgQVxSjmMnGHItjx/CjkOFAQlGA6W4mA26FRWJy1et\nYl/ozp1T13ZBgX/BaNvWXjDatGF3uCbBAJItEJ1gyG4Uju69yiUlCobsklIFP/k8Tar2vaTV2rof\n+MDtZ5B57DHg3/8GevRw35YLBs+YE4VTZWEUFwP9+nnvk0xeHrBhg7qWhV+j4cPZ/1TEMIBkwdAF\nvcV9VMfTLePwmg7dNjaV3GFP/kiC0UBp0gQYNQqYMydx+cKFwHHHpbbtwkI2kG/cqJ+aQocXC4ML\nhi4PnQ8a8nH4IKUTDDf4diqXlCwYvJpXFA/V4P7uu8AVV7DXboLhJVCtw49LKiuL1TyUlTGLwsT5\n5zOB4S4zTm4uszC2bg0v6C1em7w8dpNk89Autyypl15i/3/8kZ2P3J58h68TjLAsDFl4PvyQJbDw\n469fn9hmjx7uNxJu87V5hdJqGzA//zkwa1bisjff9P/0LVu4YKxe7X2+Kp5lZSM2XAh0FgYXEnm9\n7k7SVjB27mT/bVxS4jPKTYJxwgnmH2+XLswXf999LJAbFn4CoyeeCHz3nXmbtm2BSy9l5yVmjrVs\nCbz+OhOSL79M/my8DFJ33pm8T6tW7LunEgyTS0oVwzjrLPa/qCjRShU/x4kT4/EZG8EQC/fEfXTw\n7+RbbwFnnJG4rn37xAxE0aKw/VxtH8ZlS4OyMJ5//nn06dMHWVlZWLZsmXa7+fPno7i4GL169cId\nd9yRxh6ml9NOAz74IO63rqlh+dennJLadg8/nM1f9P337neiMrm5bNBdvtzdpOaC4dXC4Mg/Vl0B\noPzj408UPPJI4NhjE/spWxgqK8Htx6wSltxclqxw3XVql5DXgV93rtOnezuODeKA2bIli1cAwKuv\nJqdc2wjGww/HX48bx26MOHl5esGQESvx3bKkVNe3vh54/PH49txass2S4u2a4DGg4cP14iIef906\n8/Fk3IpjvdKgBKNfv354+eWXceKJJ2q3qaurw+TJkzF//nx8/fXXeOaZZ7Dc5olDDZBWrdiP6bHH\n2Pu5c1lVaSomHRTp04fNM/TNN/6qWAsLmZXhFmfhg4IuP50Lhs4CEe/+gWT3CYenCXO4YLRoASxa\nlNi+LBjDhrGBHvBWYQuEkxap4osvgBkzkvvkOMBNNyVvH8asppy8PJZB178/S0iQr7nuGomZS7/6\nVfz1M8+wGZo5rVuzGxWTYIjZaCoL4+GHgTfecD8XLjb8pqhLF/ZfFoyhQ5P3tbUwbBCvGf/N2H7X\neF9ffFG93uu0Iw1KMIqLi3GEy+TsS5YsQc+ePdG1a1fk5ORg3LhxmCX7bRoRv/kNcPfdzA87dWq4\n7gwd/fszy+bLL/0FMvmPSRW4FOF32jpR4j8enYWxenXie5XwfP898L//G39/4onsT8Uxx7AHF3F4\n3IKndXoVAi/umZYt2bOgxbZ19O2rF1kVkycni6ZfevZk/3lthK1gvPOO3fH79GGxEdW0N/z79Le/\nsZuZFi3iA6YoGIcd5m6Ff/99/Ht19dVMBAsK2PsWLeJi0revekI+WTDy8uLXRsQmxhEkS+qf/2Rx\nzrPPVq9v0cLbjUujq/Reu3YtioqKDrwvLCzEhx9+qNx2ivDcy7KyMpSVlaW4d+EzYAB7glb37sDY\nscD48alvs00bNqi2amX3mEyZ005TPyFNhlexq35oABu8771XPTj+5S/Jky9OmpR8dyhbYwsX6vvz\nwQfx13PmJA86d97J3IO9eiVmR8n06sUei/r737PrMGSI+yyg2dksNgAAixfbWXYPPACMGMHmMzKR\nleU9200Hv5+bOJG5pOR+zp/PMrEmTUpcfvjhrN7jb39j78eMYUkdMkcfzQT6vPOS1z31FJt5oH17\n9tejB3D66czyPvlkdg3Xr1d/7449lk2uxxG/F02aMMEuLmYW5iGHAL/9LXDbbWw/zi9/GbeGuCvu\nwgvZ/127kts85RT3myYg2RK/6Sb2W7ehtFRfp6KaJUJFeXk5ysvLATDh9EPMcVJjUI8cORIbNmxI\nWj5t2jSceeaZAICTTz4Z99xzDwbyxHGBF198EfPnz8fMmTMBAE8//TQ+/PBDPPjggwnbxWIxpOgU\nImHXLvblS1fOtuMwH6/ftD2bp7EB9s9uJjKHVDw4KRPhMxOn4zcnToUSBnV1yQ+CssXP2JkyC+MN\nG+eigYKCAlQIxQkVFRUoTMW0rRlGuqdAjsWC5Xjb+nZJLBoeB4NYAKmZ3FNH2M+2CLs+w43I02p1\nCjdo0CCsXLkSq1atwv79+/Hcc89hjN9J3AmCIIjARCIYL7/8MoqKirB48WKcccYZGPWTk3PdunU4\n46ck5uzsbDz00EM47bTTUFJSgvPPPx+9U/EkIYIgCMKKlMUw0kVji2EQBEGkAz9jZ+QuKYIgCKJh\nQIJBEARBWEGCQRAEQVhBgkEQBEFYQYJBEARBWEGCQRAEQVhBgkEQBEFYQYJBEARBWEGCQRAEQVhB\ngkEQBEFYQYJBEARBWEGCQRAEQVhBgkEQBEFYQYJBEARBWEGCQRAEQVhBgkEQBEFYQYJBEARBWEGC\nQRAEQVhBgkEQBEFYQYJBEARBWEGCQRAEQVhBgkEQBEFYQYJBEARBWEGCQRAEQVhBgkEQBEFYQYJB\nEARBWEGCQRAEQVhBgtGIKC8vj7oLGQNdizh0LeLQtQhGJILx/PPPo0+fPsjKysKyZcu023Xt2hVH\nHXUUSktLMWTIkDT2sGFCP4Y4dC3i0LWIQ9ciGNlRNNqvXz+8/PLLmDRpknG7WCyG8vJytG/fPk09\nIwiCIHREIhjFxcXW2zqOk8KeEARBELbEnAhH5JNPPhn33HMPBg4cqFzfvXt3tGnTBllZWZg0aRKu\nuOKKpG1isViqu0kQBNEo8Tr8p8zCGDlyJDZs2JC0fNq0aTjzzDOtjvH++++jc+fO2LRpE0aOHIni\n4mIMGzYsYRuyQAiCINJDygTjjTfeCHyMzp07AwA6dOiAs846C0uWLEkSDIIgCCI9RJ5Wq7MQqqur\nsWvXLgDA7t27sWDBAvTr1y+dXSMIgiAEIhGMl19+GUVFRVi8eDHOOOMMjBo1CgCwbt06nHHGGQCA\nDRs2YNiwYRgwYACGDh2K0aNH49RTT42iuwRBEAQAOA2YefPmOUceeaTTs2dPZ/r06VF3JzJ+/PFH\np6yszCkpKXH69Onj3H///VF3KVJqa2udAQMGOKNHj466K5Gzbds255xzznGKi4ud3r17Ox988EHU\nXYqMadOmOSUlJU7fvn2d8ePHO3v37o26S2lj4sSJTseOHZ2+ffseWLZlyxbnlFNOcXr16uWMHDnS\n2bZtm+txIndJ+aWurg6TJ0/G/Pnz8fXXX+OZZ57B8uXLo+5WJOTk5ODee+/FV199hcWLF+Phhx8+\naK8FANx///0oKSmhDDoA1113HU4//XQsX74cn3/+OXr37h11lyJh1apVmDlzJpYtW4YvvvgCdXV1\nePbZZ6PuVtqYOHEi5s+fn7Bs+vTpGDlyJFasWIERI0Zg+vTprsdpsIKxZMkS9OzZE127dkVOTg7G\njRuHWbNmRd2tSOjUqRMGDBgAAMjLy0Pv3r2xbt26iHsVDWvWrMHcuXNx+eWXH/QZdDt27MC7776L\nSy+9FACQnZ2NNm3aRNyraGjdujVycnJQXV2N2tpaVFdXo6CgIOpupY1hw4ahXbt2Cctmz56NCRMm\nAAAmTJiAV155xfU4DVYw1q5di6KiogPvCwsLsXbt2gh7lBmsWrUKn3zyCYYOHRp1VyLhhhtuwF13\n3YUmTRrsVzs0fvjhB3To0AETJ07EwIEDccUVV6C6ujrqbkVC+/bt8Zvf/AaHHXYYunTpgrZt2+KU\nU06JuluRUllZifz8fABAfn4+KisrXfdpsL8qcjckU1VVhXPPPRf3338/8vLyou5O2nn11VfRsWNH\nlJaWHvTWBQDU1tZi2bJl+NWvfoVly5ahZcuWVm6Hxsh3332H++67D6tWrcK6detQVVWFf/zjH1F3\nK2OIxWJWY2qDFYyCggJUVFQceF9RUYHCwsIIexQtNTU1OOecc3DhhRdi7NixUXcnEhYtWoTZs2ej\nW7duGD9+PN5++21cfPHFUXcrMgoLC1FYWIjBgwcDAM4991zjZJ+NmY8//hjHHXccDjnkEGRnZ+Ps\ns8/GokWLou5WpOTn5x8orl6/fj06duzouk+DFYxBgwZh5cqVWLVqFfbv34/nnnsOY8aMibpbkeA4\nDi677DKUlJTg+uuvj7o7kTFt2jRUVFTghx9+wLPPPovhw4fjySefjLpbkdGpUycUFRVhxYoVAIA3\n33wTffr0ibhX0VBcXIzFixdjz549cBwHb775JkpKSqLuVqSMGTMGTzzxBADgiSeesLvRTFUaVzqY\nO3euc8QRRzg9evRwpk2bFnV3IuPdd991YrGY079/f2fAgAHOgAEDnHnz5kXdrUgpLy93zjzzzKi7\nETmffvqpM2jQIOeoo45yzjrrLGf79u1Rdyky7rjjjgNptRdffLGzf//+qLuUNsaNG+d07tzZycnJ\ncQoLC53HH3/c2bJlizNixAhPabWRTj5IEARBNBwarEuKIAiCSC8kGARBEIQVJBgEQRCEFSQYBEEQ\nhBUkGAQRATNmzMBTTz0VdTcIwhOUJUUQBEFYQRYGQbjw0UcfoX///ti3bx92796Nvn374uuvv07Y\nZs6cOTjmmGMwcOBAjBw5Ehs3bgQAXH/99bj11lsBAK+//jpOOukkOI6DKVOm4J577gEAPPDAA+jT\npw/69++P8ePHp/fkCMIDZGEQhAV/+MMfsHfvXuzZswdFRUW46aabEtZv374dbdu2BQD89a9/xTff\nfIO7774be/bsweDBg/Hggw/iqquuwrx589CtWzdMnToVrVq1wq9//WsUFBRg1apVyMnJwc6dO9G6\ndesoTpEgXEnZM70JojHxxz/+EYMGDUKLFi3w4IMPJq2vqKjAL37xC2zYsAH79+9Ht27dAAAtWrTA\nzJkzMWzYMNx///0HloscddRRuOCCCzB27NiDdh4womFALimCsGDz5s3YvXs3qqqqsGfPHtx8880o\nLS3FwIEDAQDXXHMNrr32Wnz++eeYMWMG9u7de2Dfzz//HB06dEiafp8b96+99hquvvpqLFu2DIMH\nD0ZdXV36TowgPECCQRAWTJo0CbfddhsuuOAC3HTTTbjtttvwySefHJj9defOnejSpQsA4O9///uB\n/VavXo0///nP+OSTTzBv3jwsWbIk4biO4+DHH39EWVkZpk+fjh07dmD37t1pOy+C8AK5pAjChSef\nfBLNmjXDuHHjUF9fj+OOOw7l5eUoKys7sM2UKVNw3nnnoV27dhg+fDhWr14NALj88stxzz33oFOn\nTnjsscdwySWX4KOPPgLAnkFQV1eHiy66CDt27IDjOLjuuusohkFkLBT0JgiCIKwglxRBEARhBQkG\nQRAEYQUJBkEQBGEFCQZBEARhBQkGQRAEYQUJBkEQBGHF/wNBgbaMpgldXgAAAABJRU5ErkJggg==\n", - "text": [ - "" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "\u4f7f\u7528sympy\u8a08\u7b97\u6975\u9650" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u6211\u5011\u5c07\u662f\u8457\u5f15\u5165\u53ef\u4ee5\u8b93\u7d50\u679c\u6bd4\u8f03\u6f02\u4eae\u7684\u6a21\u7d44(printing)\uff0c\u7531\u65bc\u6bcf\u4e00\u53f0\u96fb\u8166\u5b89\u88dd\u7684\u7a0b\u5f0f\u90fd\u6709\u4e9b\u8a31\u4e0d\u540c\uff0c\u6240\u4ee5\u4e0d\u898b\u5f97\u53ef\u4ee5\u5f15\u5165" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import pkg_resources\n", - "if pkg_resources.get_distribution(\"sympy\").version > \"0.7.4\":\n", - " from sympy.interactive import printing\n", - " printing.init_printing(use_latex=True)\n", - "\n", - "from IPython.display import display" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u7684\u4f8b\u5b50\u662f\u8a08\u7b97$\\lim_{x \\to 0} \\frac{\\sin{x}}{x}$\n", - "\u7531\u65bc\u6211\u5011\u8981\u8a08\u7b97limit\u3001sin\u6240\u4ee5\u6211\u5011\u9700\u8981\u7531sympy(\u7b26\u865f\u8a08\u7b97)\u5f15\u5165\u76f8\u95dc\u51fd\u6578\uff0c\u540c\u6642\u9700\u8981\u5ba3\u544ax\u662f\u4e00\u500b\u7b26\u865f\u8b8a\u6578" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from sympy import limit, Symbol, sin, oo\n", - "x = Symbol('x')\n", - "limit(sin(x)/x, x, 0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "latex": [ - "$$1$$" - ], - "metadata": {}, - "output_type": "pyout", - "png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAJFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADHJj5lAAAAC3RSTlMAzRAiu5mrdu/dZmiL4QAAAAAjSURBVAgd\nY2BgEGJgYDDZxMCgEgYkGNhJJVgzdmYB9TEwAACPpQrvlUCHcAAAAABJRU5ErkJggg==\n", - "prompt_number": 5, - "text": [ - "1" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$\\lim_{x \\to \\infty} \\frac{\\sin{x}}{x}$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "limit(sin(x)/x, x, oo)" - ], - "language": "python", - "metadata": { - "slideshow": { - "slide_type": "slide" - } + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 計算機概論期末報告範本- 2014/06/18 增訂\n", + "(2016/12/08 修正 python 3 range 函數部分)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 成功大學數學系 xxx 學號" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![成功大學數學系xxx學號](MagicConch.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "為了方便我打平時分數請附上你的個人相片(這樣我比較有印象),貼圖的方法可以把上一個cell改成 Raw NBConvert 就可以了解貼圖語法。\n", + "\n", + "上個cell裡的程式碼是 ![成功大學數學系xxx學號] (MagicConch.jpg) (注意前面的中括弧和小括弧間沒有空白)。\n", + "\n", + "圖必須和你的 ipython notebook檔 放在(以我這個檔為例,ipython notebook檔名是mysympy.ipynb,圖檔是MagicConch.jpg)放在同一個目錄,MagicConch.jpg是圖的檔名,除了jpg檔外,也可以用其他常見的圖檔。。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "目前markdown(也就是你現在在notebook裡,除了code或是heading你會看到的部份)無法自由調整圖片大小,所以如果圖太大的話,可以在終端裡使用convert程式轉換\n", + "\n", + "convert -resize 50% sourceimg destimg\n", + "\n", + "上面的指令會把 sourceimg縮小成50% 存成 destimg\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "報告中的程式碼或是說明不需要鉅細靡遺,原則上能作到日後需要使用這些功能時看這篇說明就可以使用,或是類似網路上一堆使用教學的網誌那就夠了。報告繳交時,除了相關檔案外(ipynb、圖檔),請將你的ipynb檔轉換為pdf檔繳交(如何轉換,我另外說明)。如果你有個人網誌,也可以轉換乘html檔,貼在你的網誌。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用matplotlib畫圖" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "首先載入需要的相關模組" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from numpy import sin, exp\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "準備數據 ... 假設我要畫 $\\sin{e^x}$,$x_a \\le x \\le x_b$, \n", + "註:上式的數學式子是使用latex語法打的,可以選Raw NBConvert就可以看到語法,底下可以看到其他類似例子\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "NumP = 1000\n", + "x = list(range(0,NumP+1))\n", + "y = list(range(0,NumP+1))\n", + "xa = 0.0\n", + "xb = 10.0\n", + "dx = (xb-xa)/float(NumP)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "注意底下的x[i]、y[i]的寫法,為了畫圖,我們在[xa,xb]取了NumP+1個點(包含兩個端點),在上面的cell裡,我們計算了分割大小(dx),然後在底下以loop的方式產生x[i]以及函數在該點的值y[i]。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n/1NdlkhSJgs/AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] }, - "outputs": [ - { - "latex": [ - "$$0$$" - ], - "metadata": {}, - "output_type": "pyout", - "png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJdjLNVN0iZu+7\nq0QgoRR7AAAAVklEQVQIHWNgEDJRZWBgSGeQmMDAtYGBOYGB5wID+0cG/gsMfN8Z5BUY+L4wzDdg\nYP0MJeUNQCL8Cgzs3xk4DjBwfWRg2cDAlMDA0M4gHcDAIOxylQEA9FISlFfRJtkAAAAASUVORK5C\nYII=\n", - "prompt_number": 6, - "text": [ - "0" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "\u4f7f\u7528sympy\u8a08\u7b97\u7a4d\u5206" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u7684\u4f8b\u5b50\u662f\u8a08\u7b97$\\int \\sin{x}\\, dx$\uff0c\u7531\u65bc\u524d\u9762\u5df2\u7d93\u5f15\u5165 sin \u540c\u6642\u4e5f\u5c07x \u5ba3\u544a\u70ba\u4e00\u500bsymbol\uff0c\u6240\u4ee5\u6211\u5011\u9019\u908a\u53ea\u9700\u8981\u518d\u5f15\u5165integrate" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - " from sympy import integrate\n", - " integrate(x*sin(x**2), x)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "latex": [ - "$$- \\frac{1}{2} \\cos{\\left (x^{2} \\right )}$$" - ], - "metadata": {}, - "output_type": "pyout", - "png": "iVBORw0KGgoAAAANSUhEUgAAAGYAAAAqBAMAAACzazNGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMiK7mat272aJ\nRFQidGHIAAACPElEQVRIDe1STWsTURQ9ycwY5yPpo4vSgmAsLlxZRUVcmT8gGRArKGJcWJeOLvwA\nF4rQgqLORjRSNKBuXGWp4mIQJAsjZOFCpNDZCSLV0toitI73zcebl9aEzMKdF/LuOfecM2/y5gFp\n7UjhoGhycVCn8I1cyZ6B/j/zj86gdY6JTxOB3md9JDJY9tYy3K5Uz4xai3yKrf7Ep8Ey+fiNjI62\nDqsphQq3lm5LVIJXBS7RVdkrWB+gpXdKoX/zoI9VSJYjYIvQacH6AMNPRJOnFfkPJcrGXmXJZA4f\ngUItoX3660RTdy+cAfRGwtOeu9b2sa3+AerjepmPL9Jv7OGpWdcIgh9AMT0SroZ1wlefqwewxR0B\n9vDJFJDzzENKOZShLkddXsdRWlY8kj4zeFzYBVjMWizZkYu+6/A+XjsxFPCiR66SVPWBNWXlfug6\nSEPkayGmRfudINGLvwh+7wArubeBw8e0DzDk8pUX7bOxxD6rx2CGcpipVsAiK93TTTUOlAwHxfVv\nQHgBp2nAnkCPM389tybeqc+Q974ynOVPfATM++dxMn662YiB1HIzszaOt+9g7tWbDp/PM4zWx943\nY498D7TLU5V43N2MMClmeVdAjMLafCJcLnipidB2ltIbwIuUSUhtSAR4KbGnwL2KxFN4N4WE9kts\ngvXKDEsumJ7MgMPSq0pKyZHIpIQJFte6uWALAgEXJExQqdGSsS5l9JNdv5498wWanTGlOtCzZo62\nWzczboOJIFgaLPMHgT+FzBSDxnYAAAAASUVORK5CYII=\n", - "prompt_number": 7, - "text": [ - " \u239b 2\u239e \n", - "-cos\u239dx \u23a0 \n", - "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n", - " 2 " - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "\u4f7f\u7528sympy\u8a08\u7b97\u5fae\u5206" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\u5e95\u4e0b\u7684\u4f8b\u5b50\u662f\u8a08\u7b97$\\frac{d}{dx} \\sin{x}$\uff0c\u7531\u65bc\u524d\u9762\u5df2\u7d93\u5f15\u5165 sin \u540c\u6642\u4e5f\u5c07x \u5ba3\u544a\u70ba\u4e00\u500bsymbol\uff0c\u6240\u4ee5\u6211\u5011\u9019\u908a\u53ea\u9700\u8981\u518d\u5f15\u5165diff" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from sympy import diff\n", - "diff(sin(x), x)" - ], - "language": "python", "metadata": {}, - "outputs": [ - { - "latex": [ - "$$\\cos{\\left (x \\right )}$$" - ], - "metadata": {}, - "output_type": "pyout", - "png": "iVBORw0KGgoAAAANSUhEUgAAADkAAAAVBAMAAAAOWFv7AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJVCLvMs1Edmar\n3bti/yyrAAABP0lEQVQoFZWRL0gDURzHP+ft3J1uczgwCQ7EYpqoYVNwBovFSxbTRJNlaaAiHtj1\ngsmyjRXRIoIYRLRYTAMRbF5eGjIQTf52vL0NXfEX3vu83/f3770H/7R9FX/bL88KlDdW7CPbyY7T\n60DPXtPcJe1iW+OYJg1OXaOdh9HZOYxczWdv9VwEMw3GxdNZLkRri5J74NIwAuKiJq4gxX3lDYY9\nbI+14gsc7hYwRY3nYYal5ApE6kxIpWgLRjLvDVfUQR+SHAsRbVKuSNCXqEHq5EOp8K1UnTvl8iB5\n7cpEPzFAxpe+5DehfJohJhO1p1oealINp7J2MN1SkaNIgYQr13jEaSWalgQNpGF8eh5rctF3Fi6z\nUlTKGc/V2p2g7cvyy171eV1TF641ynP9sXbz0AxPQe+mf1+H9apsqNMN/AAQ00PuNbV4pAAAAABJ\nRU5ErkJggg==\n", - "prompt_number": 8, - "text": [ - "cos(x)" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$\\frac{d^2}{dx^2} \\sin{x}$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "diff(sin(x), x,2)" - ], - "language": "python", + "output_type": "display_data" + } + ], + "source": [ + "for i in list(range(NumP+1)):\n", + " x[i] = xa+dx*float(i)\n", + " y[i]=sin(exp(x[i]))\n", + "\n", + "# 開始畫圖\n", + "\n", + " # 設定要畫的的x,y數據list....\n", + "\n", + "plt.plot(x,y) \n", + " # 設定圖的範圍, 不設的話,系統會自行決定\n", + "plt.xlim(0,10)\n", + "plt.ylim(-1.5,1.5)\n", + " # 照需要寫入x 軸和y軸的 label 以及title\n", + "\n", + "plt.xlabel(\"x-axis\") \n", + "plt.ylabel(\"y-axis\") \n", + "plt.title(\"The Title\") \n", + " # 在這個指令之前,都還在做畫圖的動作 \n", + " # 這個指令算是 \"秀圖\" \n", + "plt.show() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用sympy計算極限" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下我們將是著引入可以讓結果比較漂亮的模組(printing),由於每一台電腦安裝的程式都有些許不同,所以不見得可以引入" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pkg_resources\n", + "if pkg_resources.get_distribution(\"sympy\").version > \"0.7.4\":\n", + " from sympy.interactive import printing\n", + " printing.init_printing(use_latex=True)\n", + "\n", + "from IPython.display import display" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子是計算$\\lim_{x \\to 0} \\frac{\\sin{x}}{x}$\n", + "由於我們要計算limit、sin所以我們需要由sympy(符號計算)引入相關函數,同時需要宣告x是一個符號變數" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAJFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADHJj5lAAAAC3RSTlMAzRAiu5mrdu/dZmiL4QAAAAAjSURBVAgd\nY2BgEGJgYDDZxMCgEgYkGNhJJVgzdmYB9TEwAACPpQrvlUCHcAAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$1$$" + ], + "text/plain": [ + "1" + ] + }, + "execution_count": 5, "metadata": {}, - "outputs": [ - { - "latex": [ - "$$- \\sin{\\left (x \\right )}$$" - ], - "metadata": {}, - "output_type": "pyout", - "png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAVBAMAAAATJmVgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnZUu0TviSKZ\nZquXRLrEAAABSklEQVQoFaWSPUvDYBSFTz6a1ITYUOziIBVEdHIQXc2i4NQidBH8AHHP0kkkgj/A\ndHOSjA62vIOgi+jg6BD8A2bQubhL8b4mNwmazQvJeXI4OfcNBPjn6HFa4Hi/i7a7hXPH+M7A2omY\ngHlGlaFCaxGbBbFT6JRgVkKmTG+93DjPCYsFYvN4xw4Sffm59yHdG7pa+/e79D0Ss1F8aDATqH08\nymWngBI5a1obeKXHbOoDWDATmCEaMXnrgOVanwa9cYTmqpwFsjf64ifVRoO24JK6oPpE6MhbNrMr\nXzCpy89TSKmcsgXezkop2kgtHlyg9LlGhOm4lKLTG+4BapQqnd4YwBS0jjeOgIvDAA/U+CJr06kP\n96718WRmPNkKrsiiNXO91jAmXMoiFaIJNu2Q6a86T+xZXaYKPWGvyVCl+V+Yx6tStjw4jSPwDWX2\nRQ0oD4CmAAAAAElFTkSuQmCC\n", - "prompt_number": 9, - "text": [ - "-sin(x)" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "diff(sin(x), x,x)" - ], - "language": "python", + "output_type": "execute_result" + } + ], + "source": [ + "from sympy import limit, Symbol, sin, oo\n", + "x = Symbol('x')\n", + "limit(sin(x)/x, x, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\lim_{x \\to \\infty} \\frac{\\sin{x}}{x}$" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJdjLNVN0iZu+7\nq0QgoRR7AAAAVklEQVQIHWNgEDJRZWBgSGeQmMDAtYGBOYGB5wID+0cG/gsMfN8Z5BUY+L4wzDdg\nYP0MJeUNQCL8Cgzs3xk4DjBwfWRg2cDAlMDA0M4gHcDAIOxylQEA9FISlFfRJtkAAAAASUVORK5C\nYII=\n", + "text/latex": [ + "$$0$$" + ], + "text/plain": [ + "0" + ] + }, + "execution_count": 6, "metadata": {}, - "outputs": [ - { - "latex": [ - "$$- \\sin{\\left (x \\right )}$$" - ], - "metadata": {}, - "output_type": "pyout", - "png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAVBAMAAAATJmVgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnZUu0TviSKZ\nZquXRLrEAAABSklEQVQoFaWSPUvDYBSFTz6a1ITYUOziIBVEdHIQXc2i4NQidBH8AHHP0kkkgj/A\ndHOSjA62vIOgi+jg6BD8A2bQubhL8b4mNwmazQvJeXI4OfcNBPjn6HFa4Hi/i7a7hXPH+M7A2omY\ngHlGlaFCaxGbBbFT6JRgVkKmTG+93DjPCYsFYvN4xw4Sffm59yHdG7pa+/e79D0Ss1F8aDATqH08\nymWngBI5a1obeKXHbOoDWDATmCEaMXnrgOVanwa9cYTmqpwFsjf64ifVRoO24JK6oPpE6MhbNrMr\nXzCpy89TSKmcsgXezkop2kgtHlyg9LlGhOm4lKLTG+4BapQqnd4YwBS0jjeOgIvDAA/U+CJr06kP\n96718WRmPNkKrsiiNXO91jAmXMoiFaIJNu2Q6a86T+xZXaYKPWGvyVCl+V+Yx6tStjw4jSPwDWX2\nRQ0oD4CmAAAAAElFTkSuQmCC\n", - "prompt_number": 10, - "text": [ - "-sin(x)" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "heading", - "level": 2, + "output_type": "execute_result" + } + ], + "source": [ + "limit(sin(x)/x, x, oo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用sympy計算積分" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子是計算$\\int \\sin{x}\\, dx$,由於前面已經引入 sin 同時也將x 宣告為一個symbol,所以我們這邊只需要再引入integrate" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGYAAAAqBAMAAACzazNGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMiK7mat272aJ\nRFQidGHIAAACPElEQVRIDe1STWsTURQ9ycwY5yPpo4vSgmAsLlxZRUVcmT8gGRArKGJcWJeOLvwA\nF4rQgqLORjRSNKBuXGWp4mIQJAsjZOFCpNDZCSLV0toitI73zcebl9aEzMKdF/LuOfecM2/y5gFp\n7UjhoGhycVCn8I1cyZ6B/j/zj86gdY6JTxOB3md9JDJY9tYy3K5Uz4xai3yKrf7Ep8Ey+fiNjI62\nDqsphQq3lm5LVIJXBS7RVdkrWB+gpXdKoX/zoI9VSJYjYIvQacH6AMNPRJOnFfkPJcrGXmXJZA4f\ngUItoX3660RTdy+cAfRGwtOeu9b2sa3+AerjepmPL9Jv7OGpWdcIgh9AMT0SroZ1wlefqwewxR0B\n9vDJFJDzzENKOZShLkddXsdRWlY8kj4zeFzYBVjMWizZkYu+6/A+XjsxFPCiR66SVPWBNWXlfug6\nSEPkayGmRfudINGLvwh+7wArubeBw8e0DzDk8pUX7bOxxD6rx2CGcpipVsAiK93TTTUOlAwHxfVv\nQHgBp2nAnkCPM389tybeqc+Q974ynOVPfATM++dxMn662YiB1HIzszaOt+9g7tWbDp/PM4zWx943\nY498D7TLU5V43N2MMClmeVdAjMLafCJcLnipidB2ltIbwIuUSUhtSAR4KbGnwL2KxFN4N4WE9kts\ngvXKDEsumJ7MgMPSq0pKyZHIpIQJFte6uWALAgEXJExQqdGSsS5l9JNdv5498wWanTGlOtCzZo62\nWzczboOJIFgaLPMHgT+FzBSDxnYAAAAASUVORK5CYII=\n", + "text/latex": [ + "$$- \\frac{1}{2} \\cos{\\left (x^{2} \\right )}$$" + ], + "text/plain": [ + " ⎛ 2⎞ \n", + "-cos⎝x ⎠ \n", + "─────────\n", + " 2 " + ] + }, + "execution_count": 7, "metadata": {}, - "source": [ - "\u88dc\u5145\u8cc7\u6599\uff1aLatex" - ] - }, - { - "cell_type": "markdown", + "output_type": "execute_result" + } + ], + "source": [ + " from sympy import integrate\n", + " integrate(x*sin(x**2), x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用sympy計算微分" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下的例子是計算$\\frac{d}{dx} \\sin{x}$,由於前面已經引入 sin 同時也將x 宣告為一個symbol,所以我們這邊只需要再引入diff" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAADkAAAAVBAMAAAAOWFv7AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJVCLvMs1Edmar\n3bti/yyrAAABP0lEQVQoFZWRL0gDURzHP+ft3J1uczgwCQ7EYpqoYVNwBovFSxbTRJNlaaAiHtj1\ngsmyjRXRIoIYRLRYTAMRbF5eGjIQTf52vL0NXfEX3vu83/f3770H/7R9FX/bL88KlDdW7CPbyY7T\n60DPXtPcJe1iW+OYJg1OXaOdh9HZOYxczWdv9VwEMw3GxdNZLkRri5J74NIwAuKiJq4gxX3lDYY9\nbI+14gsc7hYwRY3nYYal5ApE6kxIpWgLRjLvDVfUQR+SHAsRbVKuSNCXqEHq5EOp8K1UnTvl8iB5\n7cpEPzFAxpe+5DehfJohJhO1p1oealINp7J2MN1SkaNIgYQr13jEaSWalgQNpGF8eh5rctF3Fi6z\nUlTKGc/V2p2g7cvyy171eV1TF641ynP9sXbz0AxPQe+mf1+H9apsqNMN/AAQ00PuNbV4pAAAAABJ\nRU5ErkJggg==\n", + "text/latex": [ + "$$\\cos{\\left (x \\right )}$$" + ], + "text/plain": [ + "cos(x)" + ] + }, + "execution_count": 8, "metadata": {}, - "source": [ - "\u4e0a\u9762\u5167\u5bb9\u4e2d\uff0c\u9664\u4e86ipython\u7684\u8f38\u51fa\u5916\uff0c\u6709\u6642\u5019\u4f60\u6703\u770b\u5230\u6578\u5b78\u5f0f\u6df7\u96dc\u5728\u6587\u5b57\u6558\u8ff0\u4e2d\uff0c\u5982\u679c\u4f60\u628a\u8a72cell\u6539\u6210 Raw NBConvert \u6703\u767c\u73fe\u6709\u4e9b\u5f0f\u5b50\u5728$ $\u4e2d\uff0c\u90a3\u4e9b\u5f0f\u5b50\u662flatex\u7684\u5beb\u6cd5\u3002latex\u662f\u5e38\u7528\u4f86\u6253\u6578\u5b78\u65b9\u7a0b\u662f\u7684\u4e00\u7a2e\u8edf\u9ad4\uff0c\u4f46\u662f\u8981\u6574\u7bc7\u6587\u7ae0\u90fd\u7528latex\u6253\uff0c\u9700\u8981\u6642\u9593\u719f\u6089\u7528\u6cd5\u3002\u5728ipython notebook\u6216\u662fmarkdown\u88e1\uff0c\u5141\u8a31\u6211\u5011\u5728\u6587\u5b57\u4e2d\u4f7f\u7528latex\u8a9e\u6cd5\u6253\u6578\u5b78\u5f0f\uff0c\u6bd4\u65b9\u8aaa(\"$\" \u524d\u7684\"*\"\u662f\u8b93markdown\u4ee5\u689d\u5217\u5f0f\u65b9\u5f0f\u8868\u793a)\n", - "\n", - "* $\\sum_{i=1}^n a_i=0$\n", - "\n", - "* $f(x)=x^{x^x}$\n", - "\n", - "* $\\frac{du}{dt} and \\frac{d^2 u}{dx^2}$\n", - "\n", - "* $\\lim_{x \\to 0} \\frac{3x^2 +7x^3}{x^2 +5x^4} = 3.$\n", - "\n", - "* $\\int_a^b f(x)\\,dx.$\n", - "\n", - "* $\\int_0^{+\\infty} x^n e^{-x} \\,dx = n!.$ \n", - "\n", - "* $\\int \\cos \\theta \\,d\\theta = \\sin \\theta.$\n", - "\n", - "* $\\int_{x^2 + y^2 \\leq R^2} f(x,y)\\,dx\\,dy = \\int_{\\theta=0}^{2\\pi} \\int_{r=0} ^R f(r\\cos\\theta,r\\sin\\theta) r\\,dr\\,d\\theta.$\n", - "\n", - "* $$ \\int_{x^2 + y^2 \\leq R^2} f(x,y)\\,dx\\,dy = \\int_{\\theta=0}^{2\\pi} \\int_{r=0} ^R f(r\\cos\\theta,r\\sin\\theta) r\\,dr\\,d\\theta.$$\n", - "\n", - "\u6700\u5f8c\u4e00\u500b\u4f8b\u5b50\u6211\u662f\u7528\"$$\"\u593e\u8d77\u6574\u500b\u5f0f\u5b50\uff0c\u9019\u5728latex\u88e1\u662f\u8868\u793a\u9019\u500b\u5f0f\u5b50\u8981\u7368\u5360\u4e00\u884c\u7f6e\u4e2d\uff0c\u540c\u6642\u986f\u793a\u7684\u683c\u5f0f\u6703\u6bd4\u8f03\u6f02\u4eae\u3002\n", - "\n", - "\u8acb\u6ce8\u610f\"$\"\u548c\u4f60\u7684\u5f0f\u5b50\u9593\u4e0d\u8981\u6709\u7a7a\u767d\n", - "\n", - "\u5982\u679c\u4f60\u60f3\u628a\u5831\u544a\u6253\u6f02\u4eae\u4e00\u9ede\uff0c\u53ef\u4ee5\u8a66\u8457\u4f7f\u7528latex" - ] - }, - { - "cell_type": "heading", - "level": 2, + "output_type": "execute_result" + } + ], + "source": [ + "from sympy import diff\n", + "diff(sin(x), x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\frac{d^2}{dx^2} \\sin{x}$" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAVBAMAAAATJmVgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnZUu0TviSKZ\nZquXRLrEAAABSklEQVQoFaWSPUvDYBSFTz6a1ITYUOziIBVEdHIQXc2i4NQidBH8AHHP0kkkgj/A\ndHOSjA62vIOgi+jg6BD8A2bQubhL8b4mNwmazQvJeXI4OfcNBPjn6HFa4Hi/i7a7hXPH+M7A2omY\ngHlGlaFCaxGbBbFT6JRgVkKmTG+93DjPCYsFYvN4xw4Sffm59yHdG7pa+/e79D0Ss1F8aDATqH08\nymWngBI5a1obeKXHbOoDWDATmCEaMXnrgOVanwa9cYTmqpwFsjf64ifVRoO24JK6oPpE6MhbNrMr\nXzCpy89TSKmcsgXezkop2kgtHlyg9LlGhOm4lKLTG+4BapQqnd4YwBS0jjeOgIvDAA/U+CJr06kP\n96718WRmPNkKrsiiNXO91jAmXMoiFaIJNu2Q6a86T+xZXaYKPWGvyVCl+V+Yx6tStjw4jSPwDWX2\nRQ0oD4CmAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$- \\sin{\\left (x \\right )}$$" + ], + "text/plain": [ + "-sin(x)" + ] + }, + "execution_count": 9, "metadata": {}, - "source": [ - "\u53c3\u8003\u8cc7\u6599\uff1a" - ] - }, - { - "cell_type": "markdown", + "output_type": "execute_result" + } + ], + "source": [ + "diff(sin(x), x,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAVBAMAAAATJmVgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnZUu0TviSKZ\nZquXRLrEAAABSklEQVQoFaWSPUvDYBSFTz6a1ITYUOziIBVEdHIQXc2i4NQidBH8AHHP0kkkgj/A\ndHOSjA62vIOgi+jg6BD8A2bQubhL8b4mNwmazQvJeXI4OfcNBPjn6HFa4Hi/i7a7hXPH+M7A2omY\ngHlGlaFCaxGbBbFT6JRgVkKmTG+93DjPCYsFYvN4xw4Sffm59yHdG7pa+/e79D0Ss1F8aDATqH08\nymWngBI5a1obeKXHbOoDWDATmCEaMXnrgOVanwa9cYTmqpwFsjf64ifVRoO24JK6oPpE6MhbNrMr\nXzCpy89TSKmcsgXezkop2kgtHlyg9LlGhOm4lKLTG+4BapQqnd4YwBS0jjeOgIvDAA/U+CJr06kP\n96718WRmPNkKrsiiNXO91jAmXMoiFaIJNu2Q6a86T+xZXaYKPWGvyVCl+V+Yx6tStjw4jSPwDWX2\nRQ0oD4CmAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$- \\sin{\\left (x \\right )}$$" + ], + "text/plain": [ + "-sin(x)" + ] + }, + "execution_count": 10, "metadata": {}, - "source": [ - "\u5e95\u4e0b\u662f\u4e00\u4e9b\u53c3\u8003\u8cc7\u6599\uff0c\u7db2\u8def\u4e0a\u9084\u6709\u975e\u5e38\u591a\u8cc7\u6599\u53ef\u4ee5\u4f7f\u7528(\u7528\u661f\u865f\u53ef\u4ee5\u689d\u5217\u5f0f\u986f\u793a\uff0c\u5404\u9805\u9593\u8acb\u7a7a\u4e00\u884c\u4e4b\u5f8c\u5728\u8f49\u63db\u6210pdf\u6a94\u6642\u624d\u4e0d\u6703\u64e0\u5728\u4e00\u8d77)\n", - "\n", - "* [LaTeX\u6280\u5de710\uff1aLaTeX\u6578\u5b78\u516c\u5f0f\u8f38\u5165\u521d\u7d1a\u5165\u9580](http://blog.sina.com.cn/s/blog_5e16f1770100fs38.html)\n", - "\n", - "* [Markdown\u7684\u7528\u6cd5](http://markdown.tw/)\n", - "\n", - "* [\u708e\u9f8d\u8001\u5e2b\u7684blogIPython \u7684 Notebook \u754c\u9762](http://yenlungblog.wordpress.com/2013/11/21/python-ipython-%E7%9A%84-notebook-%E7%95%8C%E9%9D%A2/)\n", - "\n", - "* [\u7528python \u756b\u5716 -- matplotlib -- \u9a19\u9322\u6559\u5b78](http://onionys.blogspot.tw/2012/01/python-matplotlib.html)\n", - "\n", - "* [SymPy -- \u4f7f\u7528 Python \u5e6b\u4f60\u5c0e\u7169\u4eba\u7684\u6578\u5b78\u516c\u5f0f\uff08\u4e09\uff09](http://www.gtwang.org/2012/12/sympy3.html)" - ] + "output_type": "execute_result" } ], - "metadata": {} + "source": [ + "diff(sin(x), x,x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 補充資料:Latex" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面內容中,除了ipython的輸出外,有時候你會看到數學式混雜在文字敘述中,如果你把該cell改成 Raw NBConvert 會發現有些式子在$ $中,那些式子是latex的寫法。latex是常用來打數學方程是的一種軟體,但是要整篇文章都用latex打,需要時間熟悉用法。在ipython notebook或是markdown裡,允許我們在文字中使用latex語法打數學式,比方說(\"$\" 前的\"*\"是讓markdown以條列式方式表示)\n", + "\n", + "* $\\sum_{i=1}^n a_i=0$\n", + "\n", + "* $f(x)=x^{x^x}$\n", + "\n", + "* $\\frac{du}{dt} and \\frac{d^2 u}{dx^2}$\n", + "\n", + "* $\\lim_{x \\to 0} \\frac{3x^2 +7x^3}{x^2 +5x^4} = 3.$\n", + "\n", + "* $\\int_a^b f(x)\\,dx.$\n", + "\n", + "* $\\int_0^{+\\infty} x^n e^{-x} \\,dx = n!.$ \n", + "\n", + "* $\\int \\cos \\theta \\,d\\theta = \\sin \\theta.$\n", + "\n", + "* $\\int_{x^2 + y^2 \\leq R^2} f(x,y)\\,dx\\,dy = \\int_{\\theta=0}^{2\\pi} \\int_{r=0} ^R f(r\\cos\\theta,r\\sin\\theta) r\\,dr\\,d\\theta.$\n", + "\n", + "* $$ \\int_{x^2 + y^2 \\leq R^2} f(x,y)\\,dx\\,dy = \\int_{\\theta=0}^{2\\pi} \\int_{r=0} ^R f(r\\cos\\theta,r\\sin\\theta) r\\,dr\\,d\\theta.$$\n", + "\n", + "最後一個例子我是用\"$$\"夾起整個式子,這在latex裡是表示這個式子要獨占一行置中,同時顯示的格式會比較漂亮。\n", + "\n", + "請注意\"$\"和你的式子間不要有空白\n", + "\n", + "如果你想把報告打漂亮一點,可以試著使用latex" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 參考資料:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "底下是一些參考資料,網路上還有非常多資料可以使用(用星號可以條列式顯示,各項間請空一行之後在轉換成pdf檔時才不會擠在一起)\n", + "\n", + "* [LaTeX技巧10:LaTeX數學公式輸入初級入門](http://blog.sina.com.cn/s/blog_5e16f1770100fs38.html)\n", + "\n", + "* [Markdown的用法](http://markdown.tw/)\n", + "\n", + "* [炎龍老師的blogIPython 的 Notebook 界面](http://yenlungblog.wordpress.com/2013/11/21/python-ipython-%E7%9A%84-notebook-%E7%95%8C%E9%9D%A2/)\n", + "\n", + "* [用python 畫圖 -- matplotlib -- 騙錢教學](http://onionys.blogspot.tw/2012/01/python-matplotlib.html)\n", + "\n", + "* [SymPy -- 使用 Python 幫你導煩人的數學公式(三)](http://www.gtwang.org/2012/12/sympy3.html)" + ] } - ] -} \ No newline at end of file + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 7ed614e5829ef7c80226d5f9e68ba6ba10d64adc Mon Sep 17 00:00:00 2001 From: minhung Date: Wed, 21 Dec 2016 02:14:50 +0800 Subject: [PATCH 3/6] Create GetPic --- GetPic.ipynb | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 GetPic.ipynb diff --git a/GetPic.ipynb b/GetPic.ipynb new file mode 100644 index 0000000..434e30a --- /dev/null +++ b/GetPic.ipynb @@ -0,0 +1,142 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import urllib.request\n", + "import re\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "comic_url = \"https://xkcd.com/299/\"\n", + "\n", + "with urllib.request.urlopen(comic_url) as url:\n", + " str = url.read()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#print(str) #顯示網業原始檔\n", + "\n", + "pages = urllib.parse.quote(str)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "url: http://imgs.xkcd.com/static/terrible_small_logo.png\n", + "url: http://imgs.xkcd.com/comics/aeris_dies.png\n", + "url: http://imgs.xkcd.com/comics/aeris_dies.png\n" + ] + } + ], + "source": [ + "f=open('list','w')\n", + "header = \"http:\"\n", + "url_lst = []\n", + "for m in re.finditer('(/[\\w./]+.png)', pages):\n", + " url = header+m.group(1)\n", + " url_lst.append(m.group(1))\n", + " print(\"url: \", url)\n", + " f.write(url+'\\n')\n", + "f.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "//imgs.xkcd.com/static/terrible_small_logo.png\n", + "//imgs.xkcd.com/comics/aeris_dies.png\n", + "//imgs.xkcd.com/comics/aeris_dies.png\n" + ] + } + ], + "source": [ + "for url in url_lst:\n", + " print(url)\n", + " match = re.findall('([\\w.]+.png)', url)\n", + " filename = match[0]\n", + " urllib.request.urlretrieve(header+url,filename)\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "http://stackoverflow.com/questions/7243750/download-file-from-web-in-python-3\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#import shutil\n", + "#with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:\n", + "# data = response.read() # a `bytes` object\n", + "# out_file.write(data)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From 180c947973a181519e966751358ff0f2b0145e76 Mon Sep 17 00:00:00 2001 From: minhung Date: Wed, 21 Dec 2016 14:51:28 +0800 Subject: [PATCH 4/6] Display Images --- GetPic.ipynb | 124 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 102 insertions(+), 22 deletions(-) diff --git a/GetPic.ipynb b/GetPic.ipynb index 434e30a..611e607 100644 --- a/GetPic.ipynb +++ b/GetPic.ipynb @@ -21,28 +21,40 @@ }, "outputs": [], "source": [ - "comic_url = \"https://xkcd.com/299/\"\n", + "comic_url = \"https://xkcd.com/557/\"\n", "\n", "with urllib.request.urlopen(comic_url) as url:\n", - " str = url.read()" + " str = url.read()\n", + "\n", + "#print(str) #顯示網業原始檔\n", + "pages = urllib.parse.quote(str)\n" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "#print(str) #顯示網業原始檔\n", - "\n", - "pages = urllib.parse.quote(str)\n" + "directory = (\"fig_local\\\\\")\n", + "if not os.path.exists(directory):\n", + " os.makedirs(directory)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true @@ -53,12 +65,15 @@ "output_type": "stream", "text": [ "url: http://imgs.xkcd.com/static/terrible_small_logo.png\n", - "url: http://imgs.xkcd.com/comics/aeris_dies.png\n", - "url: http://imgs.xkcd.com/comics/aeris_dies.png\n" + "url: http://imgs.xkcd.com/comics/students.png\n", + "url: http://imgs.xkcd.com/comics/students.png\n" ] } ], "source": [ + "figlist = re.findall('/ok-comic\\S+.\\\";',pages)\n", + "\n", + "\n", "f=open('list','w')\n", "header = \"http:\"\n", "url_lst = []\n", @@ -72,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -81,21 +96,90 @@ "name": "stdout", "output_type": "stream", "text": [ - "//imgs.xkcd.com/static/terrible_small_logo.png\n", - "//imgs.xkcd.com/comics/aeris_dies.png\n", - "//imgs.xkcd.com/comics/aeris_dies.png\n" + "//imgs.xkcd.com/static/terrible_small_logo.png\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "//imgs.xkcd.com/comics/students.png\n" + ] + }, + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "//imgs.xkcd.com/comics/students.png\n" ] + }, + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ + "from IPython.display import Image\n", + "from IPython.display import display\n", + "#from matplotlib.pyplot import imshow\n", + "#import numpy as np\n", + "#from PIL import Image\n", + "\n", + "#%matplotlib inline\n", + "\n", "for url in url_lst:\n", " print(url)\n", " match = re.findall('([\\w.]+.png)', url)\n", " filename = match[0]\n", - " urllib.request.urlretrieve(header+url,filename)\n", - " " + " urllib.request.urlretrieve(header+url,directory+filename)\n", + " x = Image(directory+filename)\n", + " display(x)\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -105,20 +189,16 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], - "source": [ - "#import shutil\n", - "#with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:\n", - "# data = response.read() # a `bytes` object\n", - "# out_file.write(data)" - ] + "source": [] } ], "metadata": { + "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", From e72c4c35a53389d27d7a9bfbc755e1455b1ec678 Mon Sep 17 00:00:00 2001 From: minhung Date: Thu, 22 Dec 2016 02:26:56 +0800 Subject: [PATCH 5/6] bs4 --- GetPic.ipynb | 392 ++- WebScraper.ipynb | 6819 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 7200 insertions(+), 11 deletions(-) create mode 100644 WebScraper.ipynb diff --git a/GetPic.ipynb b/GetPic.ipynb index 611e607..90bece8 100644 --- a/GetPic.ipynb +++ b/GetPic.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": { "collapsed": false, "scrolled": true @@ -87,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -171,20 +171,390 @@ "outputs": [], "source": [] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "http://stackoverflow.com/questions/7243750/download-file-from-web-in-python-3\n" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "參考資料:\n", + "* http://stackoverflow.com/questions/18304532/extracting-image-src-based-on-attribute-with-beautifulsoup\n", + "* http://stackoverflow.com/questions/18497840/beautifulsoup-how-to-open-images-and-download-them\n", + "* http://www.pythonforbeginners.com/beautifulsoup/beautifulsoup-4-python" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " xkcd: Students\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + " \n", + " \n", + " \"xkcd.com\n", + " \n", + " \n", + " \n", + " A webcomic of romance,\n", + "
\n", + " sarcasm, math, and language.\n", + "
\n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + "
\n", + " There are\n", + " \n", + " four new shirts\n", + " \n", + " in\n", + " \n", + " the xkcd store\n", + " \n", + " ,\n", + "
\n", + " along with\n", + " \n", + " posters\n", + " \n", + " and\n", + " \n", + " lots of other stuff\n", + " \n", + " !\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + " Students\n", + "
\n", + " \n", + "
\n", + " \"Students\"\n", + "
\n", + " \n", + "
\n", + " Permanent link to this comic: http://xkcd.com/557/\n", + "
\n", + " Image URL (for hotlinking/embedding): http://imgs.xkcd.com/comics/students.png\n", + "
\n", + " [[A teacher speaks in a crowded classroom, one of the students seems confused.]]\n", + "Teacher: Your projects are due today by 5:00 PM.\n", + "Student: ((...I didn't even know we had one.))\n", + "Student: ((Wait. I don't think I've been attending. I must have forgotten I had this class. Shitshitshit.))\n", + "Student: ((Okay, I'm gonna fail. Will it hold me back? I just want to get out of here. I thought I had <i>finished<\n", + "i> my requirements already.))\n", + "Student: ((In fact, I think I remember graduating.))\n", + "Student: ((What the hell is--))\n", + "[[Scene fades to the 'student' waking up.]]\n", + "Fun Fact: Decades from now, with school a distant memory, you'll <u>still<\n", + "u> be having this dream.\n", + "{{Mouseover: The same goes for the one where you're wrestling the Green Ranger in the swimming pool full of Crisco. You guys all have that dream, right? It's not just me. Right?}}\n", + "
\n", + "
\n", + "
\n", + " \"Selected\n", + " \n", + " \"Grownups\"\n", + " \n", + " \"Circuit\n", + " \n", + " \"Angular\n", + " \n", + " \"Self-Description\"\n", + " \n", + " \"Alternative\n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " RSS Feed\n", + " \n", + " -\n", + " \n", + " Atom Feed\n", + " \n", + "
\n", + "
\n", + "
\n", + " Comics I enjoy:\n", + "
\n", + " \n", + " Three Word Phrase\n", + " \n", + " ,\n", + " \n", + " SMBC\n", + " \n", + " ,\n", + " \n", + " Dinosaur Comics\n", + " \n", + " ,\n", + " \n", + " Oglaf\n", + " \n", + " (nsfw),\n", + " \n", + " A Softer World\n", + " \n", + " ,\n", + " \n", + " Buttersafe\n", + " \n", + " ,\n", + " \n", + " Perry Bible Fellowship\n", + " \n", + " ,\n", + " \n", + " Questionable Content\n", + " \n", + " ,\n", + " \n", + " Buttercup Festival\n", + " \n", + " ,\n", + " \n", + " Homestuck\n", + " \n", + " ,\n", + " \n", + " Junior Scientist Power Hour\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " xkcd.com is best viewed with Netscape Navigator 4.0 or below on a Pentium 3±1 emulated in Javascript on an Apple IIGS at a screen resolution of 1024x1. Please enable your ad blockers, disable high-heat drying, and remove your device from Airplane Mode and set it to Boat Mode. For security reasons, please leave caps lock on while browsing.\n", + "
\n", + "
\n", + "
\n", + "

\n", + " This work is licensed under a\n", + " \n", + " Creative Commons Attribution-NonCommercial 2.5 License\n", + " \n", + " .\n", + "

\n", + "

\n", + " This means you're free to copy and share these comics (but not to sell them).\n", + " \n", + " More details\n", + " \n", + " .\n", + "

\n", + "
\n", + "
\n", + " \n", + " \n", + "\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\mhchen\\Anaconda3\\lib\\site-packages\\bs4\\__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system (\"lxml\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n", + "\n", + "The code that caused this warning is on line 184 of the file C:\\Users\\mhchen\\Anaconda3\\lib\\runpy.py. To get rid of this warning, change code that looks like this:\n", + "\n", + " BeautifulSoup([your markup])\n", + "\n", + "to this:\n", + "\n", + " BeautifulSoup([your markup], \"lxml\")\n", + "\n", + " markup_type=markup_type))\n" + ] + } + ], + "source": [ + "import requests\n", + "from bs4 import BeautifulSoup\n", + "\n", + "url = \"https://xkcd.com/557/\"\n", + "response = requests.get(url)\n", + "html = response.content\n", + "\n", + "soup = BeautifulSoup(html)\n", + "print(soup.prettify())" + ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], "source": [ - "http://stackoverflow.com/questions/7243750/download-file-from-web-in-python-3\n" + "link = soup.findAll(itemprop=\"image\")\n", + "print(link)" ] }, { diff --git a/WebScraper.ipynb b/WebScraper.ipynb new file mode 100644 index 0000000..ed5d20d --- /dev/null +++ b/WebScraper.ipynb @@ -0,0 +1,6819 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "參考以下連結做成的範例程式\n", + "https://first-web-scraper.readthedocs.io/en/latest/" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b'\\n\\n \\n Boone County Sheriff - Current Jail Detainees\\n\\n\\n \\n \\n \\n \\n \\n\\n\\n\\n \\n\\n \\n\\n\\n\\n\\n\\n\\n\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\"BooneBoone County Sheriff\\'s Department
\\n Boone County Sheriff\\'s Department
\\n 2121 County Dr.
\\n Columbia, MO 65202
\\n Office (573) 875-1111
\\n Fax (573) 874-8953
\\n
\\n\\n\\n\\n\\n\\n \\n \\n \\n
\\n Home\\n Menu\\n Help\\n   Options \\n \\n
\\n\\n\\n\\n\\n\\n\\n
Current Detainees of Boone County Jail
\\n\\n
\\n
\\n
 
\\n
\\n
\\n \\n\\n\\n
\\n \\n \\n \\n\\t\\t\\t\\t\\t\\t\\t\\n \\n\\t\\t\\t\\t\\t\\t\\t\\n \\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Saved Searches
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tName Current Search:
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \"\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
Execute Saved Search:
\\n
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Browser Mode
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
Select Browsing Mode:\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\n\\n\\n\\n\\n\\n\\n\\n
 \\n   PC
    Mobile
\\n
\\n
\\n
\\n\\n\\n
\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
Search by Name\\n \\n

Last Name: \\n

\\n

First Name: \\n

\\n \\n\\n

Run Date: 12/21/16

\\n
\\n
  \\n\\n 216 Detainees  \\n   \\n   \\n\\n Page 1 of 5  \\n   \\n   \\n\\n Page Size  \\n   \\n\\n\\n\\n
\\n\\n\\n
\\n\\n
\\n\\n
\\n\\n\\n\\n\\n\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
 \\n\"Sort \\n\"Sort Last Name\\n\"Sort \\n\"Sort First Name\\n\\nMiddle Name\\n\\nSex\\n\\nRace\\n\\nAge\\n\\nCity\\n\\nState
 \\n?\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
 
\\n Details\\nALEXANDERBENJAMINFRANKLINMB21COLUMBIAMO
\\n Details\\nANDERSONANDRELAMONTEMB30ST. LOUISMO
\\n Details\\nARMOURAARONJASONMW31COLUMBIAMO
\\n Details\\nARTEAGABRAYANOSIRIS-CACHOMH25JEFFERSON CITYMO
\\n Details\\nAUBREYASHLEYSUZANNEFB20PILOT GROVEMO
\\n Details\\nAUSTINKAYCEEFW32KANSAS CITYMO
\\n Details\\nBAKERDAVIDDUANEMW52COLUMBIAMO
\\n Details\\nBARNESRICHARDDEANMW23COLUMBIAMO
\\n Details\\nBARNEYMAXRILEMARKEEMB30COLUMBIAMO
\\n Details\\nBAROLIMICHAELHAYESMW32COLUMBIAMO
\\n Details\\nBARRETTJEREMYMICHAELMW21MORRISONMO
\\n Details\\nBERARDIDEBORAHEFW55COLUMBIAMO
\\n Details\\nBOATRIGHTSCOTTRICHARDMW30ST LOUISMO
\\n Details\\nBODINEEDITHJOYCEFW41MOBERLYMO
\\n Details\\nBOGARTCOURTNEYLEEMW39COLUMBIAMO
\\n Details\\nBONAPARTENATHANIELLEROYMB38COLUMBIAMO
\\n Details\\nBONNOTALANEDWARDMW58COLUMBIAMO
\\n Details\\nBOONENIKKIMARIEFW32HALLSVILLEMO
\\n Details\\nBOSTONCOREYDESEANMB21JEFFERSON CITYMO
\\n Details\\nBREWERLYNNIIIMW35COLUMBIAMO
\\n Details\\nBREWERSEVANCEJTRIMB25INDEPENDANCEMO
\\n Details\\nBROUSSARDDAVIDMICHAELMW46COLUMBIAMO
\\n Details\\nBROWNDEAZJONRAMONMB21COLUMBIAMO
\\n Details\\nBUCHANANCHARLESMARLEONMB25COLUMBIAMO
\\n Details\\nBUTLERTRAVISDUANEMB33COLUMBIAMO
\\n Details\\nCARRASQUILLO-MARTINEZANGELLUISMH35JACKSONMO
\\n Details\\nCARTERDARIANMAURICEMB24COLUMBIAMO
\\n Details\\nCARTERLORAZWINCEMB31COLUMBIAMO
\\n Details\\nCASEYCLINTWILLIAMMW36COLUMBIAMO
\\n Details\\nCHANDIA MEDELIGNACIOALEJANDROMU22RESEDACA
\\n Details\\nCLARKRICHARDDEREKMW42COLUMBIAMO
\\n Details\\nCOLEMANJAMESMICHAELMW48COLUMBIAMO
\\n Details\\nCOLLINSDENNISCARLMB32COLUMBIAMO
\\n Details\\nCOMERKATHERINEMARIEFW41COLUMBIAMO
\\n Details\\nCRANDALLSHILOHRAEFW32SALINAKS
\\n Details\\nCRAWFORDSHANEEDWARDMW28COLUMBIAMO
\\n Details\\nCROSSWILFORDFRANKLINMB70COLUMBIAMO
\\n Details\\nCRUMCHRISTOPHERKHANMB37COLUMBIAMO
\\n Details\\nCUNNINGHAMMYLONYOTRAMIREMB24COLUMBIAMO
\\n Details\\nDALTONNEILLANCEMW28COLUMBIAMO
\\n Details\\nDAVISKAYLAREBECCAFW26COLUMBIAMO
\\n Details\\nDAWSONBRENNERZUNDELMW36COLUMBIAMO
\\n Details\\nDEACONDUSTINODALEMW24COLUMBIAMO
\\n Details\\nDEAVERSBRANDONLEEMW22COLUMBIAMO
\\n Details\\nDELACRUZRAQUEL FH40COLUMBIAMO
\\n Details\\nDELVONANTONIOKEVONMB24COLUMBIAMO
\\n Details\\nDENNYDEANDRELAVELLEMB19COLUMBIAMO
\\n Details\\nDONIGIANCHARLESROSSMW21ASHLANDMO
\\n Details\\nDOWNSWILLIAMCHARLESMW42JEFFERSON CITYMO
\\n Details\\nDUKESLENN MB32COLUMBIAMO
\\n\\n

Detainee Count 216   \\n   \\n   Page 1 of 5   \\n   \\n

\\n
This page has been viewed \\n\\n times since 1/3/06
\\n\\n\\n\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
\\n
\\n\\n\\n\\n\\n \\n \\n \\n
 
\\n\\n\\n

Subscribe to the Boone County News email list.

\\n\\n\\n \\n \\n \\n \\n \\n \\n
Copyright © 2016 Boone County, Missouri. All rights reserved.
This Web application was developed by Boone County.
\\n\\n\\n\\n\\n\\n\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n \\n\\n'\n" + ] + } + ], + "source": [ + "import requests\n", + "\n", + "url = 'http://www.showmeboone.com/sheriff/JailResidents/JailResidents.asp'\n", + "response = requests.get(url)\n", + "html = response.content\n", + "print(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " Boone County Sheriff - Current Jail Detainees\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \"Boone\n", + " \n", + " Boone County Sheriff's Department\n", + "
\n", + " Boone County Sheriff's Department\n", + "
\n", + " 2121 County Dr.\n", + "
\n", + " Columbia, MO 65202\n", + "
\n", + " Office (573) 875-1111\n", + "
\n", + " Fax (573) 874-8953\n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " Home\n", + " \n", + " \n", + " Menu\n", + " \n", + " \n", + " Help\n", + " \n", + " \n", + " Options\n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Current Detainees of Boone County Jail\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Saved Searches\n", + "
\n", + "
\n", + "
\n", + " \n", + " \n", + " Name Current Search:\n", + " \n", + "
\n", + "
\n", + " \n", + " \"\"\n", + "
\n", + "
\n", + "
\n", + " \n", + " \n", + " Execute Saved Search:\n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Browser Mode\n", + "
\n", + "
\n", + " \n", + " \n", + " Select Browsing Mode:\n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " PC\n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " Mobile\n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + " Search by Name\n", + " \n", + " \n", + "

\n", + " Last Name:\n", + " \n", + "

\n", + "

\n", + " First Name:\n", + " \n", + "

\n", + " \n", + " \n", + "

\n", + " Run Date: 12/21/16\n", + "

\n", + "
\n", + "
\n", + " \n", + " 216 Detainees\n", + " \n", + " \n", + " \n", + " \n", + " Page 1 of 5\n", + " \n", + " \n", + " \n", + " \n", + " Page Size\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + "
\n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Sort\n", + " \"Sort\n", + " Last Name\n", + " \n", + " \"Sort\n", + " \"Sort\n", + " First Name\n", + " \n", + " \n", + " Middle Name\n", + " \n", + " \n", + " Sex\n", + " \n", + " \n", + " Race\n", + " \n", + " \n", + " Age\n", + " \n", + " \n", + " City\n", + " \n", + " \n", + " State\n", + "
\n", + " \n", + " \n", + " ?\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ALEXANDER\n", + " \n", + " BENJAMIN\n", + " \n", + " FRANKLIN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 21\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ANDERSON\n", + " \n", + " ANDRE\n", + " \n", + " LAMONTE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 30\n", + " \n", + " ST. LOUIS\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ARMOUR\n", + " \n", + " AARON\n", + " \n", + " JASON\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 31\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ARTEAGA\n", + " \n", + " BRAYAN\n", + " \n", + " OSIRIS-CACHO\n", + " \n", + " M\n", + " \n", + " H\n", + " \n", + " 25\n", + " \n", + " JEFFERSON CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " AUBREY\n", + " \n", + " ASHLEY\n", + " \n", + " SUZANNE\n", + " \n", + " F\n", + " \n", + " B\n", + " \n", + " 20\n", + " \n", + " PILOT GROVE\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " AUSTIN\n", + " \n", + " KAY\n", + " \n", + " CEE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " KANSAS CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BAKER\n", + " \n", + " DAVID\n", + " \n", + " DUANE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 52\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BARNES\n", + " \n", + " RICHARD\n", + " \n", + " DEAN\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 23\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BARNEY\n", + " \n", + " MAXRILE\n", + " \n", + " MARKEE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 30\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BAROLI\n", + " \n", + " MICHAEL\n", + " \n", + " HAYES\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BARRETT\n", + " \n", + " JEREMY\n", + " \n", + " MICHAEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 21\n", + " \n", + " MORRISON\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BERARDI\n", + " \n", + " DEBORAH\n", + " \n", + " E\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 55\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOATRIGHT\n", + " \n", + " SCOTT\n", + " \n", + " RICHARD\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 30\n", + " \n", + " ST LOUIS\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BODINE\n", + " \n", + " EDITH\n", + " \n", + " JOYCE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 41\n", + " \n", + " MOBERLY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOGART\n", + " \n", + " COURTNEY\n", + " \n", + " LEE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 39\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BONAPARTE\n", + " \n", + " NATHANIEL\n", + " \n", + " LEROY\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 38\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BONNOT\n", + " \n", + " ALAN\n", + " \n", + " EDWARD\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 58\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOONE\n", + " \n", + " NIKKI\n", + " \n", + " MARIE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " HALLSVILLE\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOSTON\n", + " \n", + " COREY\n", + " \n", + " DESEAN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 21\n", + " \n", + " JEFFERSON CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BREWER\n", + " \n", + " LYNN\n", + " \n", + " III\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 35\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BREWER\n", + " \n", + " SEVANCE\n", + " \n", + " JTRI\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 25\n", + " \n", + " INDEPENDANCE\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BROUSSARD\n", + " \n", + " DAVID\n", + " \n", + " MICHAEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 46\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BROWN\n", + " \n", + " DEAZJON\n", + " \n", + " RAMON\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 21\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BUCHANAN\n", + " \n", + " CHARLES\n", + " \n", + " MARLEON\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 25\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BUTLER\n", + " \n", + " TRAVIS\n", + " \n", + " DUANE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 33\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CARRASQUILLO-MARTINEZ\n", + " \n", + " ANGEL\n", + " \n", + " LUIS\n", + " \n", + " M\n", + " \n", + " H\n", + " \n", + " 35\n", + " \n", + " JACKSON\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CARTER\n", + " \n", + " DARIAN\n", + " \n", + " MAURICE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CARTER\n", + " \n", + " LORAZ\n", + " \n", + " WINCE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 31\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CASEY\n", + " \n", + " CLINT\n", + " \n", + " WILLIAM\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 36\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CHANDIA MEDEL\n", + " \n", + " IGNACIO\n", + " \n", + " ALEJANDRO\n", + " \n", + " M\n", + " \n", + " U\n", + " \n", + " 22\n", + " \n", + " RESEDA\n", + " \n", + " CA\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CLARK\n", + " \n", + " RICHARD\n", + " \n", + " DEREK\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 42\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " COLEMAN\n", + " \n", + " JAMES\n", + " \n", + " MICHAEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 48\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " COLLINS\n", + " \n", + " DENNIS\n", + " \n", + " CARL\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 32\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " COMER\n", + " \n", + " KATHERINE\n", + " \n", + " MARIE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 41\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CRANDALL\n", + " \n", + " SHILOH\n", + " \n", + " RAE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " SALINA\n", + " \n", + " KS\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CRAWFORD\n", + " \n", + " SHANE\n", + " \n", + " EDWARD\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 28\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CROSS\n", + " \n", + " WILFORD\n", + " \n", + " FRANKLIN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 70\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CRUM\n", + " \n", + " CHRISTOPHER\n", + " \n", + " KHAN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 37\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CUNNINGHAM\n", + " \n", + " MYLONYO\n", + " \n", + " TRAMIRE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DALTON\n", + " \n", + " NEIL\n", + " \n", + " LANCE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 28\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DAVIS\n", + " \n", + " KAYLA\n", + " \n", + " REBECCA\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 26\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DAWSON\n", + " \n", + " BRENNER\n", + " \n", + " ZUNDEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 36\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DEACON\n", + " \n", + " DUSTIN\n", + " \n", + " ODALE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DEAVERS\n", + " \n", + " BRANDON\n", + " \n", + " LEE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 22\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DELACRUZ\n", + " \n", + " RAQUEL\n", + " \n", + " \n", + " F\n", + " \n", + " H\n", + " \n", + " 40\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DELVON\n", + " \n", + " ANTONIO\n", + " \n", + " KEVON\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DENNY\n", + " \n", + " DEANDRE\n", + " \n", + " LAVELLE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 19\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DONIGIAN\n", + " \n", + " CHARLES\n", + " \n", + " ROSS\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 21\n", + " \n", + " ASHLAND\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DOWNS\n", + " \n", + " WILLIAM\n", + " \n", + " CHARLES\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 42\n", + " \n", + " JEFFERSON CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DUKES\n", + " \n", + " LENN\n", + " \n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 32\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + "

\n", + " Detainee Count 216\n", + " \n", + " \n", + " Page 1 of 5\n", + " \n", + " \n", + "

\n", + "
\n", + " \n", + " This page has been viewed\n", + " \n", + " \n", + " times since 1/3/06\n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + " \n", + "

\n", + " \n", + " Subscribe\n", + " \n", + " to the Boone County News email list.\n", + "

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Copyright © 2016 Boone County, Missouri. All rights reserved.\n", + "
\n", + " This Web application was developed by\n", + " \n", + " Boone County\n", + " \n", + " .\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\mhchen\\Anaconda3\\lib\\site-packages\\bs4\\__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system (\"lxml\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n", + "\n", + "The code that caused this warning is on line 184 of the file C:\\Users\\mhchen\\Anaconda3\\lib\\runpy.py. To get rid of this warning, change code that looks like this:\n", + "\n", + " BeautifulSoup([your markup])\n", + "\n", + "to this:\n", + "\n", + " BeautifulSoup([your markup], \"lxml\")\n", + "\n", + " markup_type=markup_type))\n" + ] + } + ], + "source": [ + "from bs4 import BeautifulSoup\n", + "\n", + "url = 'http://www.showmeboone.com/sheriff/JailResidents/JailResidents.asp'\n", + "response = requests.get(url)\n", + "html = response.content\n", + "\n", + "soup = BeautifulSoup(html)\n", + "print(soup.prettify())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we take all the detective work we did with the page’s HTML above and convert it into a simple, direct command that will instruct BeautifulSoup on how to extract only the table we’re after." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " ALEXANDER\n", + " \n", + " \n", + " BENJAMIN\n", + " \n", + " \n", + " FRANKLIN\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 21\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " ANDERSON\n", + " \n", + " \n", + " ANDRE\n", + " \n", + " \n", + " LAMONTE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 30\n", + " \n", + " \n", + " ST. LOUIS\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " ARMOUR\n", + " \n", + " \n", + " AARON\n", + " \n", + " \n", + " JASON\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 31\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " ARTEAGA\n", + " \n", + " \n", + " BRAYAN\n", + " \n", + " \n", + " OSIRIS-CACHO\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " H\n", + " \n", + " \n", + " 25\n", + " \n", + " \n", + " JEFFERSON CITY\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " AUBREY\n", + " \n", + " \n", + " ASHLEY\n", + " \n", + " \n", + " SUZANNE\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 20\n", + " \n", + " \n", + " PILOT GROVE\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " AUSTIN\n", + " \n", + " \n", + " KAY\n", + " \n", + " \n", + " CEE\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 32\n", + " \n", + " \n", + " KANSAS CITY\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BAKER\n", + " \n", + " \n", + " DAVID\n", + " \n", + " \n", + " DUANE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 52\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BARNES\n", + " \n", + " \n", + " RICHARD\n", + " \n", + " \n", + " DEAN\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 23\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BARNEY\n", + " \n", + " \n", + " MAXRILE\n", + " \n", + " \n", + " MARKEE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 30\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BAROLI\n", + " \n", + " \n", + " MICHAEL\n", + " \n", + " \n", + " HAYES\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 32\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BARRETT\n", + " \n", + " \n", + " JEREMY\n", + " \n", + " \n", + " MICHAEL\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 21\n", + " \n", + " \n", + " MORRISON\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BERARDI\n", + " \n", + " \n", + " DEBORAH\n", + " \n", + " \n", + " E\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 55\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BOATRIGHT\n", + " \n", + " \n", + " SCOTT\n", + " \n", + " \n", + " RICHARD\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 30\n", + " \n", + " \n", + " ST LOUIS\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BODINE\n", + " \n", + " \n", + " EDITH\n", + " \n", + " \n", + " JOYCE\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 41\n", + " \n", + " \n", + " MOBERLY\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BOGART\n", + " \n", + " \n", + " COURTNEY\n", + " \n", + " \n", + " LEE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 39\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BONAPARTE\n", + " \n", + " \n", + " NATHANIEL\n", + " \n", + " \n", + " LEROY\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 38\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BONNOT\n", + " \n", + " \n", + " ALAN\n", + " \n", + " \n", + " EDWARD\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 58\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BOONE\n", + " \n", + " \n", + " NIKKI\n", + " \n", + " \n", + " MARIE\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 32\n", + " \n", + " \n", + " HALLSVILLE\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BOSTON\n", + " \n", + " \n", + " COREY\n", + " \n", + " \n", + " DESEAN\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 21\n", + " \n", + " \n", + " JEFFERSON CITY\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BREWER\n", + " \n", + " \n", + " LYNN\n", + " \n", + " \n", + " III\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 35\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BREWER\n", + " \n", + " \n", + " SEVANCE\n", + " \n", + " \n", + " JTRI\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 25\n", + " \n", + " \n", + " INDEPENDANCE\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BROUSSARD\n", + " \n", + " \n", + " DAVID\n", + " \n", + " \n", + " MICHAEL\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 46\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BROWN\n", + " \n", + " \n", + " DEAZJON\n", + " \n", + " \n", + " RAMON\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 21\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BUCHANAN\n", + " \n", + " \n", + " CHARLES\n", + " \n", + " \n", + " MARLEON\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 25\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " BUTLER\n", + " \n", + " \n", + " TRAVIS\n", + " \n", + " \n", + " DUANE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 33\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CARRASQUILLO-MARTINEZ\n", + " \n", + " \n", + " ANGEL\n", + " \n", + " \n", + " LUIS\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " H\n", + " \n", + " \n", + " 35\n", + " \n", + " \n", + " JACKSON\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CARTER\n", + " \n", + " \n", + " DARIAN\n", + " \n", + " \n", + " MAURICE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 24\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CARTER\n", + " \n", + " \n", + " LORAZ\n", + " \n", + " \n", + " WINCE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 31\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CASEY\n", + " \n", + " \n", + " CLINT\n", + " \n", + " \n", + " WILLIAM\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 36\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CHANDIA MEDEL\n", + " \n", + " \n", + " IGNACIO\n", + " \n", + " \n", + " ALEJANDRO\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " U\n", + " \n", + " \n", + " 22\n", + " \n", + " \n", + " RESEDA\n", + " \n", + " \n", + " CA\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CLARK\n", + " \n", + " \n", + " RICHARD\n", + " \n", + " \n", + " DEREK\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 42\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " COLEMAN\n", + " \n", + " \n", + " JAMES\n", + " \n", + " \n", + " MICHAEL\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 48\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " COLLINS\n", + " \n", + " \n", + " DENNIS\n", + " \n", + " \n", + " CARL\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 32\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " COMER\n", + " \n", + " \n", + " KATHERINE\n", + " \n", + " \n", + " MARIE\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 41\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CRANDALL\n", + " \n", + " \n", + " SHILOH\n", + " \n", + " \n", + " RAE\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 32\n", + " \n", + " \n", + " SALINA\n", + " \n", + " \n", + " KS\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CRAWFORD\n", + " \n", + " \n", + " SHANE\n", + " \n", + " \n", + " EDWARD\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 28\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CROSS\n", + " \n", + " \n", + " WILFORD\n", + " \n", + " \n", + " FRANKLIN\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 70\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CRUM\n", + " \n", + " \n", + " CHRISTOPHER\n", + " \n", + " \n", + " KHAN\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 37\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " CUNNINGHAM\n", + " \n", + " \n", + " MYLONYO\n", + " \n", + " \n", + " TRAMIRE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 24\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DALTON\n", + " \n", + " \n", + " NEIL\n", + " \n", + " \n", + " LANCE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 28\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DAVIS\n", + " \n", + " \n", + " KAYLA\n", + " \n", + " \n", + " REBECCA\n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 26\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DAWSON\n", + " \n", + " \n", + " BRENNER\n", + " \n", + " \n", + " ZUNDEL\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 36\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DEACON\n", + " \n", + " \n", + " DUSTIN\n", + " \n", + " \n", + " ODALE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 24\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DEAVERS\n", + " \n", + " \n", + " BRANDON\n", + " \n", + " \n", + " LEE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 22\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DELACRUZ\n", + " \n", + " \n", + " RAQUEL\n", + " \n", + " \n", + " \n", + " \n", + " F\n", + " \n", + " \n", + " H\n", + " \n", + " \n", + " 40\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DELVON\n", + " \n", + " \n", + " ANTONIO\n", + " \n", + " \n", + " KEVON\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 24\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DENNY\n", + " \n", + " \n", + " DEANDRE\n", + " \n", + " \n", + " LAVELLE\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 19\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DONIGIAN\n", + " \n", + " \n", + " CHARLES\n", + " \n", + " \n", + " ROSS\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 21\n", + " \n", + " \n", + " ASHLAND\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DOWNS\n", + " \n", + " \n", + " WILLIAM\n", + " \n", + " \n", + " CHARLES\n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " W\n", + " \n", + " \n", + " 42\n", + " \n", + " \n", + " JEFFERSON CITY\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " \n", + " DUKES\n", + " \n", + " \n", + " LENN\n", + " \n", + " \n", + " \n", + " \n", + " M\n", + " \n", + " \n", + " B\n", + " \n", + " \n", + " 32\n", + " \n", + " \n", + " COLUMBIA\n", + " \n", + " \n", + " MO\n", + " \n", + " \n", + " \n", + "\n", + "\n" + ] + } + ], + "source": [ + "table = soup.find('tbody', attrs={'class': 'stripe'})\n", + "print(table.prettify())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This time it only prints out the table we’re after, which was selected by instructing BeautifulSoup to return only those tags with resultsTable as their class attribute.\n", + "\n", + "Now that we have our hands on the table, we need to convert the rows in the table into a list, which we can then loop through and grab all the data out of.\n", + "\n", + "BeautifulSoup gets us going by allowing us to dig down into our table and return a list of rows, which are created in HTML using tags inside the table." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n" + ] + } + ], + "source": [ + "for row in table.findAll('tr'):\n", + " print(row.prettify())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You’ll not see each row printed out separately as the script loops through the table.\n", + "\n", + "Next we can loop through each of the cells in each row by select them inside the loop. Cells are created in HTML by the
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ALEXANDER\n", + " \n", + " BENJAMIN\n", + " \n", + " FRANKLIN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 21\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ANDERSON\n", + " \n", + " ANDRE\n", + " \n", + " LAMONTE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 30\n", + " \n", + " ST. LOUIS\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ARMOUR\n", + " \n", + " AARON\n", + " \n", + " JASON\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 31\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " ARTEAGA\n", + " \n", + " BRAYAN\n", + " \n", + " OSIRIS-CACHO\n", + " \n", + " M\n", + " \n", + " H\n", + " \n", + " 25\n", + " \n", + " JEFFERSON CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " AUBREY\n", + " \n", + " ASHLEY\n", + " \n", + " SUZANNE\n", + " \n", + " F\n", + " \n", + " B\n", + " \n", + " 20\n", + " \n", + " PILOT GROVE\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " AUSTIN\n", + " \n", + " KAY\n", + " \n", + " CEE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " KANSAS CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BAKER\n", + " \n", + " DAVID\n", + " \n", + " DUANE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 52\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BARNES\n", + " \n", + " RICHARD\n", + " \n", + " DEAN\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 23\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BARNEY\n", + " \n", + " MAXRILE\n", + " \n", + " MARKEE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 30\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BAROLI\n", + " \n", + " MICHAEL\n", + " \n", + " HAYES\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BARRETT\n", + " \n", + " JEREMY\n", + " \n", + " MICHAEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 21\n", + " \n", + " MORRISON\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BERARDI\n", + " \n", + " DEBORAH\n", + " \n", + " E\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 55\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOATRIGHT\n", + " \n", + " SCOTT\n", + " \n", + " RICHARD\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 30\n", + " \n", + " ST LOUIS\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BODINE\n", + " \n", + " EDITH\n", + " \n", + " JOYCE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 41\n", + " \n", + " MOBERLY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOGART\n", + " \n", + " COURTNEY\n", + " \n", + " LEE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 39\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BONAPARTE\n", + " \n", + " NATHANIEL\n", + " \n", + " LEROY\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 38\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BONNOT\n", + " \n", + " ALAN\n", + " \n", + " EDWARD\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 58\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOONE\n", + " \n", + " NIKKI\n", + " \n", + " MARIE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " HALLSVILLE\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BOSTON\n", + " \n", + " COREY\n", + " \n", + " DESEAN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 21\n", + " \n", + " JEFFERSON CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BREWER\n", + " \n", + " LYNN\n", + " \n", + " III\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 35\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BREWER\n", + " \n", + " SEVANCE\n", + " \n", + " JTRI\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 25\n", + " \n", + " INDEPENDANCE\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BROUSSARD\n", + " \n", + " DAVID\n", + " \n", + " MICHAEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 46\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BROWN\n", + " \n", + " DEAZJON\n", + " \n", + " RAMON\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 21\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BUCHANAN\n", + " \n", + " CHARLES\n", + " \n", + " MARLEON\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 25\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " BUTLER\n", + " \n", + " TRAVIS\n", + " \n", + " DUANE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 33\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CARRASQUILLO-MARTINEZ\n", + " \n", + " ANGEL\n", + " \n", + " LUIS\n", + " \n", + " M\n", + " \n", + " H\n", + " \n", + " 35\n", + " \n", + " JACKSON\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CARTER\n", + " \n", + " DARIAN\n", + " \n", + " MAURICE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CARTER\n", + " \n", + " LORAZ\n", + " \n", + " WINCE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 31\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CASEY\n", + " \n", + " CLINT\n", + " \n", + " WILLIAM\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 36\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CHANDIA MEDEL\n", + " \n", + " IGNACIO\n", + " \n", + " ALEJANDRO\n", + " \n", + " M\n", + " \n", + " U\n", + " \n", + " 22\n", + " \n", + " RESEDA\n", + " \n", + " CA\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CLARK\n", + " \n", + " RICHARD\n", + " \n", + " DEREK\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 42\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " COLEMAN\n", + " \n", + " JAMES\n", + " \n", + " MICHAEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 48\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " COLLINS\n", + " \n", + " DENNIS\n", + " \n", + " CARL\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 32\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " COMER\n", + " \n", + " KATHERINE\n", + " \n", + " MARIE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 41\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CRANDALL\n", + " \n", + " SHILOH\n", + " \n", + " RAE\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 32\n", + " \n", + " SALINA\n", + " \n", + " KS\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CRAWFORD\n", + " \n", + " SHANE\n", + " \n", + " EDWARD\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 28\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CROSS\n", + " \n", + " WILFORD\n", + " \n", + " FRANKLIN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 70\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CRUM\n", + " \n", + " CHRISTOPHER\n", + " \n", + " KHAN\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 37\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " CUNNINGHAM\n", + " \n", + " MYLONYO\n", + " \n", + " TRAMIRE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DALTON\n", + " \n", + " NEIL\n", + " \n", + " LANCE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 28\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DAVIS\n", + " \n", + " KAYLA\n", + " \n", + " REBECCA\n", + " \n", + " F\n", + " \n", + " W\n", + " \n", + " 26\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DAWSON\n", + " \n", + " BRENNER\n", + " \n", + " ZUNDEL\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 36\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DEACON\n", + " \n", + " DUSTIN\n", + " \n", + " ODALE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DEAVERS\n", + " \n", + " BRANDON\n", + " \n", + " LEE\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 22\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DELACRUZ\n", + " \n", + " RAQUEL\n", + " \n", + " \n", + " F\n", + " \n", + " H\n", + " \n", + " 40\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DELVON\n", + " \n", + " ANTONIO\n", + " \n", + " KEVON\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 24\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DENNY\n", + " \n", + " DEANDRE\n", + " \n", + " LAVELLE\n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 19\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DONIGIAN\n", + " \n", + " CHARLES\n", + " \n", + " ROSS\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 21\n", + " \n", + " ASHLAND\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DOWNS\n", + " \n", + " WILLIAM\n", + " \n", + " CHARLES\n", + " \n", + " M\n", + " \n", + " W\n", + " \n", + " 42\n", + " \n", + " JEFFERSON CITY\n", + " \n", + " MO\n", + "
\n", + " \n", + " \n", + " \n", + " Details\n", + " \n", + " \n", + " DUKES\n", + " \n", + " LENN\n", + " \n", + " \n", + " M\n", + " \n", + " B\n", + " \n", + " 32\n", + " \n", + " COLUMBIA\n", + " \n", + " MO\n", + "
tag." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Details\n", + "\n", + "ALEXANDER\n", + "BENJAMIN\n", + "FRANKLIN\n", + "M\n", + "B\n", + "21\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "ANDERSON\n", + "ANDRE\n", + "LAMONTE\n", + "M\n", + "B\n", + "30\n", + "ST. LOUIS\n", + "MO\n", + "\n", + " Details\n", + "\n", + "ARMOUR\n", + "AARON\n", + "JASON\n", + "M\n", + "W\n", + "31\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "ARTEAGA\n", + "BRAYAN\n", + "OSIRIS-CACHO\n", + "M\n", + "H\n", + "25\n", + "JEFFERSON CITY\n", + "MO\n", + "\n", + " Details\n", + "\n", + "AUBREY\n", + "ASHLEY\n", + "SUZANNE\n", + "F\n", + "B\n", + "20\n", + "PILOT GROVE\n", + "MO\n", + "\n", + " Details\n", + "\n", + "AUSTIN\n", + "KAY\n", + "CEE\n", + "F\n", + "W\n", + "32\n", + "KANSAS CITY\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BAKER\n", + "DAVID\n", + "DUANE\n", + "M\n", + "W\n", + "52\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BARNES\n", + "RICHARD\n", + "DEAN\n", + "M\n", + "W\n", + "23\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BARNEY\n", + "MAXRILE\n", + "MARKEE\n", + "M\n", + "B\n", + "30\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BAROLI\n", + "MICHAEL\n", + "HAYES\n", + "M\n", + "W\n", + "32\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BARRETT\n", + "JEREMY\n", + "MICHAEL\n", + "M\n", + "W\n", + "21\n", + "MORRISON\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BERARDI\n", + "DEBORAH\n", + "E\n", + "F\n", + "W\n", + "55\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BOATRIGHT\n", + "SCOTT\n", + "RICHARD\n", + "M\n", + "W\n", + "30\n", + "ST LOUIS\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BODINE\n", + "EDITH\n", + "JOYCE\n", + "F\n", + "W\n", + "41\n", + "MOBERLY\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BOGART\n", + "COURTNEY\n", + "LEE\n", + "M\n", + "W\n", + "39\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BONAPARTE\n", + "NATHANIEL\n", + "LEROY\n", + "M\n", + "B\n", + "38\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BONNOT\n", + "ALAN\n", + "EDWARD\n", + "M\n", + "W\n", + "58\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BOONE\n", + "NIKKI\n", + "MARIE\n", + "F\n", + "W\n", + "32\n", + "HALLSVILLE\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BOSTON\n", + "COREY\n", + "DESEAN\n", + "M\n", + "B\n", + "21\n", + "JEFFERSON CITY\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BREWER\n", + "LYNN\n", + "III\n", + "M\n", + "W\n", + "35\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BREWER\n", + "SEVANCE\n", + "JTRI\n", + "M\n", + "B\n", + "25\n", + "INDEPENDANCE\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BROUSSARD\n", + "DAVID\n", + "MICHAEL\n", + "M\n", + "W\n", + "46\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BROWN\n", + "DEAZJON\n", + "RAMON\n", + "M\n", + "B\n", + "21\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BUCHANAN\n", + "CHARLES\n", + "MARLEON\n", + "M\n", + "B\n", + "25\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "BUTLER\n", + "TRAVIS\n", + "DUANE\n", + "M\n", + "B\n", + "33\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CARRASQUILLO-MARTINEZ\n", + "ANGEL\n", + "LUIS\n", + "M\n", + "H\n", + "35\n", + "JACKSON\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CARTER\n", + "DARIAN\n", + "MAURICE\n", + "M\n", + "B\n", + "24\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CARTER\n", + "LORAZ\n", + "WINCE\n", + "M\n", + "B\n", + "31\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CASEY\n", + "CLINT\n", + "WILLIAM\n", + "M\n", + "W\n", + "36\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CHANDIA MEDEL\n", + "IGNACIO\n", + "ALEJANDRO\n", + "M\n", + "U\n", + "22\n", + "RESEDA\n", + "CA\n", + "\n", + " Details\n", + "\n", + "CLARK\n", + "RICHARD\n", + "DEREK\n", + "M\n", + "W\n", + "42\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "COLEMAN\n", + "JAMES\n", + "MICHAEL\n", + "M\n", + "W\n", + "48\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "COLLINS\n", + "DENNIS\n", + "CARL\n", + "M\n", + "B\n", + "32\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "COMER\n", + "KATHERINE\n", + "MARIE\n", + "F\n", + "W\n", + "41\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CRANDALL\n", + "SHILOH\n", + "RAE\n", + "F\n", + "W\n", + "32\n", + "SALINA\n", + "KS\n", + "\n", + " Details\n", + "\n", + "CRAWFORD\n", + "SHANE\n", + "EDWARD\n", + "M\n", + "W\n", + "28\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CROSS\n", + "WILFORD\n", + "FRANKLIN\n", + "M\n", + "B\n", + "70\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CRUM\n", + "CHRISTOPHER\n", + "KHAN\n", + "M\n", + "B\n", + "37\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "CUNNINGHAM\n", + "MYLONYO\n", + "TRAMIRE\n", + "M\n", + "B\n", + "24\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DALTON\n", + "NEIL\n", + "LANCE\n", + "M\n", + "W\n", + "28\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DAVIS\n", + "KAYLA\n", + "REBECCA\n", + "F\n", + "W\n", + "26\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DAWSON\n", + "BRENNER\n", + "ZUNDEL\n", + "M\n", + "W\n", + "36\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DEACON\n", + "DUSTIN\n", + "ODALE\n", + "M\n", + "W\n", + "24\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DEAVERS\n", + "BRANDON\n", + "LEE\n", + "M\n", + "W\n", + "22\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DELACRUZ\n", + "RAQUEL\n", + " \n", + "F\n", + "H\n", + "40\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DELVON\n", + "ANTONIO\n", + "KEVON\n", + "M\n", + "B\n", + "24\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DENNY\n", + "DEANDRE\n", + "LAVELLE\n", + "M\n", + "B\n", + "19\n", + "COLUMBIA\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DONIGIAN\n", + "CHARLES\n", + "ROSS\n", + "M\n", + "W\n", + "21\n", + "ASHLAND\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DOWNS\n", + "WILLIAM\n", + "CHARLES\n", + "M\n", + "W\n", + "42\n", + "JEFFERSON CITY\n", + "MO\n", + "\n", + " Details\n", + "\n", + "DUKES\n", + "LENN\n", + " \n", + "M\n", + "B\n", + "32\n", + "COLUMBIA\n", + "MO\n" + ] + } + ], + "source": [ + "for row in table.findAll('tr'):\n", + " for cell in row.findAll('td'):\n", + " print(cell.text)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have found the data we want to extract, we need to structure it in a way that can be written out to a comma-delimited text file. That won’t be hard since CSVs aren’t any more than a grid of columns and rows, much like a table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From 1833f25bd7e5f173f630efbe02ef8ecc2b634c3d Mon Sep 17 00:00:00 2001 From: minhung Date: Thu, 22 Dec 2016 12:22:53 +0800 Subject: [PATCH 6/6] bs --- GetPic.ipynb | 166 ++++++++++++- PTTcrawler.ipynb | 608 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 768 insertions(+), 6 deletions(-) create mode 100644 PTTcrawler.ipynb diff --git a/GetPic.ipynb b/GetPic.ipynb index 90bece8..706849a 100644 --- a/GetPic.ipynb +++ b/GetPic.ipynb @@ -71,7 +71,7 @@ } ], "source": [ - "figlist = re.findall('/ok-comic\\S+.\\\";',pages)\n", + "#figlist = re.findall('/ok-comic\\S+.\\\";',pages)\n", "\n", "\n", "f=open('list','w')\n", @@ -179,18 +179,20 @@ ] }, { - "cell_type": "raw", + "cell_type": "markdown", "metadata": {}, "source": [ "參考資料:\n", "* http://stackoverflow.com/questions/18304532/extracting-image-src-based-on-attribute-with-beautifulsoup\n", "* http://stackoverflow.com/questions/18497840/beautifulsoup-how-to-open-images-and-download-them\n", - "* http://www.pythonforbeginners.com/beautifulsoup/beautifulsoup-4-python" + "* http://www.pythonforbeginners.com/beautifulsoup/beautifulsoup-4-python\n", + "* http://codereview.stackexchange.com/questions/146674/image-hosting-site-image-downloader-using-requests-and-beautifulsoup\n", + "* https://github.com/leVirve/CrawlerTutorial" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -511,9 +513,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\mhchen\\Anaconda3\\lib\\site-packages\\bs4\\__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system (\"lxml\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n", + "C:\\Users\\perceval\\Anaconda3\\lib\\site-packages\\bs4\\__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system (\"lxml\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n", "\n", - "The code that caused this warning is on line 184 of the file C:\\Users\\mhchen\\Anaconda3\\lib\\runpy.py. To get rid of this warning, change code that looks like this:\n", + "The code that caused this warning is on line 184 of the file C:\\Users\\perceval\\Anaconda3\\lib\\runpy.py. To get rid of this warning, change code that looks like this:\n", "\n", " BeautifulSoup([your markup])\n", "\n", @@ -537,6 +539,158 @@ "print(soup.prettify())" ] }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[
\n", + "\"Students\"\n", + "
]\n" + ] + } + ], + "source": [ + "imgs = soup.find_all(\"div\", {\"id\":\"comic\"})\n", + "print(imgs)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\"Students\"]\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "'ResultSet' object has no attribute 'get'", + "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[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfind_all\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"img\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m#['src']) #.split(\"imgurl=\")[1])\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mtmp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mimg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfind_all\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"img\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtmp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'alt'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m''\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[1;31m#print(img.extract())\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'ResultSet' object has no attribute 'get'" + ] + } + ], + "source": [ + "for img in imgs:\n", + " print(img.find_all(\"img\")) #['src']) #.split(\"imgurl=\")[1])\n", + " tmp = img.find_all(\"img\")\n", + " print(tmp.get('alt',''))\n", + " print(img)\n", + " #print(img.extract())" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['__add__',\n", + " '__class__',\n", + " '__contains__',\n", + " '__delattr__',\n", + " '__delitem__',\n", + " '__dict__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__eq__',\n", + " '__format__',\n", + " '__ge__',\n", + " '__getattribute__',\n", + " '__getitem__',\n", + " '__gt__',\n", + " '__hash__',\n", + " '__iadd__',\n", + " '__imul__',\n", + " '__init__',\n", + " '__iter__',\n", + " '__le__',\n", + " '__len__',\n", + " '__lt__',\n", + " '__module__',\n", + " '__mul__',\n", + " '__ne__',\n", + " '__new__',\n", + " '__reduce__',\n", + " '__reduce_ex__',\n", + " '__repr__',\n", + " '__reversed__',\n", + " '__rmul__',\n", + " '__setattr__',\n", + " '__setitem__',\n", + " '__sizeof__',\n", + " '__str__',\n", + " '__subclasshook__',\n", + " '__weakref__',\n", + " 'append',\n", + " 'clear',\n", + " 'copy',\n", + " 'count',\n", + " 'extend',\n", + " 'index',\n", + " 'insert',\n", + " 'pop',\n", + " 'remove',\n", + " 'reverse',\n", + " 'sort',\n", + " 'source']" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(tmp)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], + "source": [ + "import re\n", + "#for tag in soup.find_all(re.compile('(/[\\w./]+.png)')):\n", + "for tag in soup.find_all('png'):\n", + " print(tag)\n", + "tag = soup.find_all('png')\n", + "print(tag)\n", + " " + ] + }, { "cell_type": "code", "execution_count": 11, diff --git a/PTTcrawler.ipynb b/PTTcrawler.ipynb new file mode 100644 index 0000000..71a787b --- /dev/null +++ b/PTTcrawler.ipynb @@ -0,0 +1,608 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\t\n", + "\n", + "\n", + "\n", + "看板 movie 文章列表 - 批踢踢實業坊\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + " \n", + "\t\t\n", + "
\n", + "\t
\n", + "\t\t批踢踢實業坊\n", + "\t\t\n", + "\t\t看板 movie\n", + "\t\t關於我們\n", + "\t\t聯絡資訊\n", + "\t
\n", + "
\n", + "\n", + "
\n", + "\t
\n", + "\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t看板\n", + "\t\t\t\t精華區\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t最舊\n", + "\t\t\t\t‹ 上頁\n", + "\t\t\t\t下頁 ›\n", + "\t\t\t\t最新\n", + "\t\t\t
\n", + "\t\t
\n", + "\t
\n", + "\n", + "\t
\n", + "\t\t\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\tRe: [討論] 蜘蛛人自體噴絲是很成功的改編嗎?\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
hong1126
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
10
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[負雷] 星際過客 \n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
takuminauki
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
17
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[片單] 強加價值觀給他人的片\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
tcps0428
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
2
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[問片] 動畫真人交錯的電影?\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
lorena409
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
18
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[討論] 聽到某位演員,就可以聯想到他的口頭禪.\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
Emerson158
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[好雷] 比利林恩-好多框架之要進去還是要出來\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
borntoeat
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
3
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\tRe: [負雷]星際過客 爛到氣\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
profound
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[好無雷] 星際過客 -- 尚可一看的星際愛情片\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
profound
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
2
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\tRe: [負雷]星際過客 爛到氣\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/22
\n", + "\t\t\t\t
xu3ej04zj3
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + "\t\t\n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
23
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[公告]《各式疑難雜症FAQ》\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
4/19
\n", + "\t\t\t\t
yunyun85106
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
\n", + "\t\t\t
M
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[公告] 板規!必看!|好文推薦‧惡文檢舉\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
7/18
\n", + "\t\t\t\t
ericf129
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
4
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[公告] 版主徵選公告\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/01
\n", + "\t\t\t\t
pacificocean
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[贈票]擺渡人 梁朝偉X金城武 兩大男神送你上岸\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/06
\n", + "\t\t\t\t
lcyspeaking
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\n", + "\t\t\t\t[贈票] 跨年首選【長城】台北特映會搶先看\n", + "\t\t\t\n", + "\t\t\t
\n", + "\t\t\t
\n", + "\t\t\t\t
12/06
\n", + "\t\t\t\t
ChloeD
\n", + "\t\t\t
\n", + "\t\t
\n", + "\n", + " \n", + " \n", + "\t
\n", + "\n", + " \n", + "
\n", + "\n", + " \n", + "\n", + "\n" + ] + } + ], + "source": [ + "import requests\n", + "\n", + "url = 'https://www.ptt.cc/bbs/movie/index.html'\n", + "response = requests.get(url)\n", + "\n", + "print(response.text) # result of setp-1" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[
\n", + "
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
hong1126
\n", + "
\n", + "
,
\n", + "
10
\n", + "
\n", + "
\n", + "[負雷] 星際過客 \n", + "
\n", + "
\n", + "
12/22
\n", + "
takuminauki
\n", + "
\n", + "
,
\n", + "
17
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
tcps0428
\n", + "
\n", + "
,
\n", + "
2
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
lorena409
\n", + "
\n", + "
,
\n", + "
18
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
Emerson158
\n", + "
\n", + "
,
\n", + "
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
borntoeat
\n", + "
\n", + "
,
\n", + "
3
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
profound
\n", + "
\n", + "
,
\n", + "
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
profound
\n", + "
\n", + "
,
\n", + "
2
\n", + "
\n", + "\n", + "
\n", + "
12/22
\n", + "
xu3ej04zj3
\n", + "
\n", + "
,
\n", + "
23
\n", + "
\n", + "\n", + "
\n", + "
4/19
\n", + "
yunyun85106
\n", + "
\n", + "
,
\n", + "
\n", + "
M
\n", + "\n", + "
\n", + "
7/18
\n", + "
ericf129
\n", + "
\n", + "
,
\n", + "
4
\n", + "
\n", + "\n", + "
\n", + "
12/01
\n", + "
pacificocean
\n", + "
\n", + "
,
\n", + "
\n", + "
\n", + "\n", + "
\n", + "
12/06
\n", + "
lcyspeaking
\n", + "
\n", + "
,
\n", + "
\n", + "
\n", + "\n", + "
\n", + "
12/06
\n", + "
ChloeD
\n", + "
\n", + "
]\n" + ] + } + ], + "source": [ + "import requests\n", + "from bs4 import BeautifulSoup\n", + "\n", + "url = 'https://www.ptt.cc/bbs/movie/index.html'\n", + "response = requests.get(url)\n", + "soup = BeautifulSoup(response.text, 'lxml')\n", + "articles = soup.find_all('div', 'r-ent')\n", + "\n", + "print(articles) # result of setp-2" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Re: [討論] 蜘蛛人自體噴絲是很成功的改編嗎? 12/22 hong1126\n", + "10 [負雷] 星際過客 12/22 takuminauki\n", + "17 [片單] 強加價值觀給他人的片 12/22 tcps0428\n", + "2 [問片] 動畫真人交錯的電影? 12/22 lorena409\n", + "18 [討論] 聽到某位演員,就可以聯想到他的口頭禪. 12/22 Emerson158\n", + " [好雷] 比利林恩-好多框架之要進去還是要出來 12/22 borntoeat\n", + "3 Re: [負雷]星際過客 爛到氣 12/22 profound\n", + " [好無雷] 星際過客 -- 尚可一看的星際愛情片 12/22 profound\n", + "2 Re: [負雷]星際過客 爛到氣 12/22 xu3ej04zj3\n", + "23 [公告]《各式疑難雜症FAQ》 4/19 yunyun85106\n", + "爆 [公告] 板規!必看!|好文推薦‧惡文檢舉 7/18 ericf129\n", + "4 [公告] 版主徵選公告 12/01 pacificocean\n", + "爆 [贈票]擺渡人 梁朝偉X金城武 兩大男神送你上岸 12/06 lcyspeaking\n", + "爆 [贈票] 跨年首選【長城】台北特映會搶先看 12/06 ChloeD\n" + ] + } + ], + "source": [ + "import requests\n", + "from bs4 import BeautifulSoup\n", + "\n", + "url = 'https://www.ptt.cc/bbs/movie/index.html'\n", + "response = requests.get(url)\n", + "soup = BeautifulSoup(response.text, 'lxml')\n", + "articles = soup.find_all('div', 'r-ent')\n", + "\n", + "for article in articles:\n", + " meta = article.find('div', 'title').find('a')\n", + "\n", + " title = meta.getText().strip()\n", + " link = meta.get('href')\n", + " push = article.find('div', 'nrec').getText()\n", + " date = article.find('div', 'date').getText()\n", + " author = article.find('div', 'author').getText()\n", + "\n", + " print(push, title, date, author) # result of setp-3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +}