├── code
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ ├── company.cpython-36.pyc
│ ├── employee.cpython-36.pyc
│ └── person.cpython-36.pyc
├── employee.py
├── company.py
└── person.py
├── data
├── out.json
├── bikes.csv
├── out.csv
├── out.tsv
├── sample.json
├── df.csv
├── df.tsv
├── sample.csv
├── out.txt
└── out2.txt
├── README.md
├── main.py
├── homework
├── homework.ipynb
├── homework 2.ipynb
└── homework-answer.ipynb
├── pandas-1-student.ipynb
├── python-basic-2-student.ipynb
├── python-basic-2.ipynb
├── python-basic.ipynb
└── python-basic-student.ipynb
/code/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/data/out.json:
--------------------------------------------------------------------------------
1 | {"name": "July", "salary": 999999, "title": "CEO", "manager": null}
--------------------------------------------------------------------------------
/data/bikes.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZeweiChu/python-basics/HEAD/data/bikes.csv
--------------------------------------------------------------------------------
/data/out.csv:
--------------------------------------------------------------------------------
1 | july,baidu,ali,tencent
2 | fb,goog,aapl,msft
3 | 1.2,3.5,amazon,5
4 |
--------------------------------------------------------------------------------
/data/out.tsv:
--------------------------------------------------------------------------------
1 | july baidu ali tencent
2 | fb goog aapl msft
3 | 1.2 3.5 amazon 5
4 |
--------------------------------------------------------------------------------
/data/sample.json:
--------------------------------------------------------------------------------
1 | {"name": "July", "salary": 999999, "title": "CEO", "manager": null}
2 |
--------------------------------------------------------------------------------
/data/df.csv:
--------------------------------------------------------------------------------
1 | ,,x,y,y
2 | ,,1,1,2
3 | a,1,0,1,2
4 | a,2,3,4,5
5 | b,1,6,7,8
6 | c,2,9,10,11
7 |
--------------------------------------------------------------------------------
/data/df.tsv:
--------------------------------------------------------------------------------
1 | x y y
2 | 1 1 2
3 | a 1 0 1 2
4 | a 2 3 4 5
5 | b 1 6 7 8
6 | c 2 9 10 11
7 |
--------------------------------------------------------------------------------
/code/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZeweiChu/python-basics/HEAD/code/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/code/__pycache__/company.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZeweiChu/python-basics/HEAD/code/__pycache__/company.cpython-36.pyc
--------------------------------------------------------------------------------
/code/__pycache__/employee.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZeweiChu/python-basics/HEAD/code/__pycache__/employee.cpython-36.pyc
--------------------------------------------------------------------------------
/code/__pycache__/person.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZeweiChu/python-basics/HEAD/code/__pycache__/person.cpython-36.pyc
--------------------------------------------------------------------------------
/data/sample.csv:
--------------------------------------------------------------------------------
1 | 4/5/2015 13:34,Apples,73
2 | 4/5/2015 3:41,Cherries,85
3 | 4/6/2015 12:46,Pears,14
4 | 4/8/2015 8:59,Oranges,52
5 | 4/10/2015 2:07,Apples,152
6 | 4/10/2015 18:10,Bananas,23
7 | 4/10/2015 2:40,Strawberries,98
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # [python basics](https://github.com/ZeweiChu/python-basics)
2 |
3 | GitHub repo: [https://github.com/ZeweiChu/python-basics](https://github.com/ZeweiChu/python-basics)
4 |
5 | julyedu线上集训notes
6 |
7 | 褚则伟
8 |
9 | - [第一课](python-basic.ipynb)
10 | - [第二课](python-basic-2.ipynb)
11 |
--------------------------------------------------------------------------------
/data/out.txt:
--------------------------------------------------------------------------------
1 | 4/5/2015 13:34,Apples,73
2 | 4/5/2015 3:41,Cherries,85
3 | 4/6/2015 12:46,Pears,14
4 | 4/8/2015 8:59,Oranges,52
5 | 4/10/2015 2:07,Apples,152
6 | 4/10/2015 18:10,Bananas,23
7 | 4/10/2015 2:40,Strawberries,98aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssss
--------------------------------------------------------------------------------
/data/out2.txt:
--------------------------------------------------------------------------------
1 | 4/5/2015 13:34,Apples,73
2 | 4/5/2015 3:41,Cherries,85
3 | 4/6/2015 12:46,Pears,14
4 | 4/8/2015 8:59,Oranges,52
5 | 4/10/2015 2:07,Apples,152
6 | 4/10/2015 18:10,Bananas,23
7 | 4/10/2015 2:40,Strawberries,98aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssss
--------------------------------------------------------------------------------
/code/employee.py:
--------------------------------------------------------------------------------
1 | from code.person import Person
2 |
3 | class Employee(Person):
4 | def __init__(self, name, ID, title, salary, manager=None):
5 | super().__init__(name, ID)
6 | self.title = title
7 | self.salary = salary
8 | self.manager = manager
9 |
10 | def get_info(self):
11 | return "({}, title: {}, salary: {}, manager: {})".format(super().get_info(), self.title, self.salary, self.manager.get_info() if self.manager is not None else "")
12 |
13 |
--------------------------------------------------------------------------------
/code/company.py:
--------------------------------------------------------------------------------
1 | class Company(object):
2 | def __init__(self, name, employees=[]):
3 | self.name = name
4 | self.employees = employees
5 |
6 | def hire(self, employee):
7 | if not employee in self.employees:
8 | self.employees.append(employee)
9 |
10 | def fire(self, employee):
11 | if employee in self.employees:
12 | self.employees.remove(employee)
13 |
14 | def get_info(self):
15 | res = "Company: {}, employees: ".format(self.name)
16 | for employee in self.employees:
17 | res += ", {}".format(employee.get_info())
18 | return res
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | from code.employee import Employee
2 | from code.company import *
3 |
4 | if __name__ == "__main__":
5 | july = Employee("July", 1, "CEO", 99999999)
6 | # print(july.get_info())
7 | zewei = Employee("Zewei", 2, "Lecturer", 1, july)
8 | # print(zewei.get_info())
9 |
10 | c = Company("Julyedu")
11 | c.hire(july)
12 | c.hire(zewei)
13 |
14 | han = Employee("Han Xiaoyang", 3, "Lecturer", 1000000, july)
15 | c.hire(han)
16 |
17 | print(c.get_info())
18 |
19 | print("Firing Zewei!!!")
20 | c.fire(zewei)
21 | print(c.get_info())
22 |
23 | print("Firing Zewei!!!")
24 | c.fire(zewei)
25 | print(c.get_info())
26 |
27 | c.hire(zewei)
28 | print(c.get_info())
29 |
30 | # sublime
31 | # namespace
32 |
33 |
34 |
--------------------------------------------------------------------------------
/code/person.py:
--------------------------------------------------------------------------------
1 | from abc import ABC, abstractmethod
2 |
3 | class Person(ABC):
4 | @abstractmethod
5 | def __init__(self, name, ID):
6 | self.name = name
7 | self.ID = ID
8 |
9 | @abstractmethod
10 | def get_info(self):
11 | return "name: {}".format(self.name)
12 |
13 | def __eq__(self, other):
14 | return self.ID == other.ID
15 |
16 | # tongjun = Person("Tongjun", "11")
17 | # print(tongjun.get_info())
18 |
19 | class Student(Person):
20 | def __init__(self, name, ID, level=0):
21 | super().__init__(name, ID)
22 | self.level = level
23 |
24 | def get_info(self):
25 | return "{}, level: {}".format(super().get_info(), self.level)
26 |
27 | def take_exam(self, grade):
28 | if grade.upper() in ["A", "B", "C"]:
29 | self.level += 1
30 | return self.level
31 |
32 | def graduate(self):
33 | print(self.get_info())
34 | if self.level >= 12:
35 | print("Congratulations! You've graduated from Julyedu.")
36 | return True
37 | else:
38 | print("Sorry, you need to pass {} extra exams!".format(12 - self.level))
39 | return False
40 |
41 | hongyu = Student("Hongyu", 10, 3)
42 | print(hongyu.get_info())
43 | hongyu.take_exam("A")
44 |
45 | print(hongyu.get_info())
46 | hongyu.graduate()
47 | hongyu.take_exam("B")
48 | hongyu.take_exam("B")
49 | hongyu.take_exam("B")
50 | hongyu.take_exam("B")
51 | hongyu.take_exam("B")
52 | hongyu.take_exam("B")
53 | hongyu.take_exam("B")
54 | hongyu.take_exam("B")
55 | hongyu.take_exam("B")
56 | hongyu.take_exam("B")
57 | hongyu.take_exam("B")
58 | hongyu.take_exam("B")
59 | hongyu.take_exam("B")
60 | hongyu.take_exam("B")
61 | print(hongyu.get_info())
62 | hongyu.graduate()
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/homework/homework.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "collapsed": true
7 | },
8 | "source": [
9 | "# Python基础作业"
10 | ]
11 | },
12 | {
13 | "cell_type": "markdown",
14 | "metadata": {
15 | "collapsed": true
16 | },
17 | "source": [
18 | "- 在自己的电脑上安装Anaconda,用conda create创建一个python 3.6版本的environment。今后我们的程序都在这个环境下执行"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "- 上网查询,并且自己在jupyter notebook上实验,看看python 3.6当中有哪些常用的数据类型。"
26 | ]
27 | },
28 | {
29 | "cell_type": "markdown",
30 | "metadata": {},
31 | "source": [
32 | "- 用range创建一个list,命名为variable **numbers**,这个list从100到0,间隔为8。结果应该长下面这样:\n",
33 | "([100, 92, 84, 76, 68, 60, 52, 44, 36, 28, 20, 12, 4])"
34 | ]
35 | },
36 | {
37 | "cell_type": "markdown",
38 | "metadata": {},
39 | "source": [
40 | "- 用if-elif-else语句判断某个年龄是未成年(<18),成年(18-60),还是老年(>=60)。"
41 | ]
42 | },
43 | {
44 | "cell_type": "markdown",
45 | "metadata": {},
46 | "source": [
47 | "- 用list comprehension把我们前面的**numbers**每个数字都变成它的平方"
48 | ]
49 | },
50 | {
51 | "cell_type": "markdown",
52 | "metadata": {},
53 | "source": [
54 | "- 用for语句构建一个fibonacci数列,只需要前十个数字即可"
55 | ]
56 | },
57 | {
58 | "cell_type": "markdown",
59 | "metadata": {},
60 | "source": [
61 | "- 随机写下六个人的名字,构成一个list。"
62 | ]
63 | },
64 | {
65 | "cell_type": "markdown",
66 | "metadata": {},
67 | "source": [
68 | "- 把这个list变成一个dict,按照顺序给这些名字编号,号码从1开始。key是名字,value是编号。"
69 | ]
70 | }
71 | ],
72 | "metadata": {
73 | "kernelspec": {
74 | "display_name": "Python 3",
75 | "language": "python",
76 | "name": "python3"
77 | },
78 | "language_info": {
79 | "codemirror_mode": {
80 | "name": "ipython",
81 | "version": 3
82 | },
83 | "file_extension": ".py",
84 | "mimetype": "text/x-python",
85 | "name": "python",
86 | "nbconvert_exporter": "python",
87 | "pygments_lexer": "ipython3",
88 | "version": "3.6.1"
89 | }
90 | },
91 | "nbformat": 4,
92 | "nbformat_minor": 2
93 | }
94 |
--------------------------------------------------------------------------------
/homework/homework 2.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## homework:\n",
8 | "\n",
9 | "#### design and implement the following classes\n",
10 | "\n",
11 | "The purpose of this homework is to let you be familiar with writing classes in Python. You are encouraged to be creative when working on this assignment. There is no \"best solution\" to the design of your classes. \n",
12 | "\n",
13 | "- A class **Bank**, including bank name, bank balance, bank ID, accounts, employees. The bank class should have the following functions: adding an account to the bank, remove an account from the bank, and the balance shall be updated accordingly, etc. \n",
14 | "- A class **Customer**, including customer ID, customer name, accounts associated with the customer. Methods include: adding a new account, remove an account, check total balance, etc. \n",
15 | "- A class **Account**, including the account ID, bank ID, balanace, customer ID. Methods of the class are: updating account balanace, get account info, etc. \n",
16 | "- A class **Employee**, including the employee ID, employee name. \n",
17 | "- Write some demo scripts to show how your class can be uses, such as creating a new Bank object, creating a new Customer object, creating a new account at a bank for a customer, remove an account from a bank, update balanace of an account, etc. \n",
18 | "- The aforementioned facts are the aspects that must be implemented, you are encouraged to be creative. Add whatever features(classes, fields, methods, super class) you think are useful to your code. \n",
19 | "- organize your class prototypes and your script of code in different files and import them properly. "
20 | ]
21 | }
22 | ],
23 | "metadata": {
24 | "kernelspec": {
25 | "display_name": "Python 3",
26 | "language": "python",
27 | "name": "python3"
28 | },
29 | "language_info": {
30 | "codemirror_mode": {
31 | "name": "ipython",
32 | "version": 3
33 | },
34 | "file_extension": ".py",
35 | "mimetype": "text/x-python",
36 | "name": "python",
37 | "nbconvert_exporter": "python",
38 | "pygments_lexer": "ipython3",
39 | "version": "3.6.1"
40 | }
41 | },
42 | "nbformat": 4,
43 | "nbformat_minor": 2
44 | }
45 |
--------------------------------------------------------------------------------
/homework/homework-answer.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "collapsed": true
7 | },
8 | "source": [
9 | "# Python基础作业"
10 | ]
11 | },
12 | {
13 | "cell_type": "markdown",
14 | "metadata": {
15 | "collapsed": true
16 | },
17 | "source": [
18 | "- 在自己的电脑上安装Anaconda,用conda create创建一个python 3.6版本的environment。今后我们的程序都在这个环境下执行"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "- 上网查询,并且自己在jupyter notebook上实验,看看python 3.6当中有哪些常用的数据类型。"
26 | ]
27 | },
28 | {
29 | "cell_type": "markdown",
30 | "metadata": {},
31 | "source": [
32 | "str, int, float, bool, list, tuple, dict, set ..."
33 | ]
34 | },
35 | {
36 | "cell_type": "markdown",
37 | "metadata": {},
38 | "source": [
39 | "- 用range创建一个list,命名为variable **numbers**,这个list从100到0,间隔为8。结果应该长下面这样:\n",
40 | "([100, 92, 84, 76, 68, 60, 52, 44, 36, 28, 20, 12, 4])"
41 | ]
42 | },
43 | {
44 | "cell_type": "markdown",
45 | "metadata": {},
46 | "source": [
47 | "- 用if-elif-else语句判断某个年龄是未成年(<18),成年(18-60),还是老年(>=60)。"
48 | ]
49 | },
50 | {
51 | "cell_type": "code",
52 | "execution_count": 2,
53 | "metadata": {},
54 | "outputs": [
55 | {
56 | "data": {
57 | "text/plain": [
58 | "[100, 92, 84, 76, 68, 60, 52, 44, 36, 28, 20, 12, 4]"
59 | ]
60 | },
61 | "execution_count": 2,
62 | "metadata": {},
63 | "output_type": "execute_result"
64 | }
65 | ],
66 | "source": [
67 | "numbers = list(range(100, 0, -8))\n",
68 | "numbers"
69 | ]
70 | },
71 | {
72 | "cell_type": "markdown",
73 | "metadata": {},
74 | "source": [
75 | "- 用list comprehension把我们前面的**numbers**每个数字都变成它的平方"
76 | ]
77 | },
78 | {
79 | "cell_type": "code",
80 | "execution_count": 3,
81 | "metadata": {},
82 | "outputs": [
83 | {
84 | "data": {
85 | "text/plain": [
86 | "[10000, 8464, 7056, 5776, 4624, 3600, 2704, 1936, 1296, 784, 400, 144, 16]"
87 | ]
88 | },
89 | "execution_count": 3,
90 | "metadata": {},
91 | "output_type": "execute_result"
92 | }
93 | ],
94 | "source": [
95 | "[number ** 2 for number in numbers]"
96 | ]
97 | },
98 | {
99 | "cell_type": "markdown",
100 | "metadata": {},
101 | "source": [
102 | "- 用for语句构建一个fibonacci数列,只需要前十个数字即可"
103 | ]
104 | },
105 | {
106 | "cell_type": "code",
107 | "execution_count": 4,
108 | "metadata": {},
109 | "outputs": [
110 | {
111 | "name": "stdout",
112 | "output_type": "stream",
113 | "text": [
114 | "for loop:\n",
115 | "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]\n"
116 | ]
117 | }
118 | ],
119 | "source": [
120 | "print(\"for loop:\")\n",
121 | "fibs = [0, 1]\n",
122 | "for i in range(10):\n",
123 | " fibs.append(fibs[-1] + fibs[-2])\n",
124 | "print(fibs)"
125 | ]
126 | },
127 | {
128 | "cell_type": "markdown",
129 | "metadata": {},
130 | "source": [
131 | "- 随机写下六个人的名字,构成一个list。"
132 | ]
133 | },
134 | {
135 | "cell_type": "markdown",
136 | "metadata": {},
137 | "source": [
138 | "- 把这个list变成一个dict,按照顺序给这些名字编号,号码从1开始。"
139 | ]
140 | },
141 | {
142 | "cell_type": "code",
143 | "execution_count": null,
144 | "metadata": {
145 | "collapsed": true
146 | },
147 | "outputs": [],
148 | "source": []
149 | }
150 | ],
151 | "metadata": {
152 | "kernelspec": {
153 | "display_name": "Python 3",
154 | "language": "python",
155 | "name": "python3"
156 | },
157 | "language_info": {
158 | "codemirror_mode": {
159 | "name": "ipython",
160 | "version": 3
161 | },
162 | "file_extension": ".py",
163 | "mimetype": "text/x-python",
164 | "name": "python",
165 | "nbconvert_exporter": "python",
166 | "pygments_lexer": "ipython3",
167 | "version": "3.6.1"
168 | }
169 | },
170 | "nbformat": 4,
171 | "nbformat_minor": 2
172 | }
173 |
--------------------------------------------------------------------------------
/pandas-1-student.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Pandas教程\n",
8 | "\n",
9 | "### 2017七月在线 机器学习在线集训 julyedu.com\n",
10 | "by 褚则伟 "
11 | ]
12 | },
13 | {
14 | "cell_type": "markdown",
15 | "metadata": {
16 | "collapsed": true
17 | },
18 | "source": [
19 | "pandas是一个专门用于数据分析的python library"
20 | ]
21 | },
22 | {
23 | "cell_type": "markdown",
24 | "metadata": {},
25 | "source": [
26 | "## [Pandas](http://pandas.pydata.org/)简介\n",
27 | "- python数据分析library\n",
28 | "- 基于numpy (对ndarray的操作)\n",
29 | "- 有一种用python做Excel/SQL/R的感觉"
30 | ]
31 | },
32 | {
33 | "cell_type": "markdown",
34 | "metadata": {},
35 | "source": [
36 | "## 目录\n",
37 | "- Series\n",
38 | "- DataFrame\n",
39 | "- Index\n",
40 | "- csv文件读写"
41 | ]
42 | },
43 | {
44 | "cell_type": "markdown",
45 | "metadata": {},
46 | "source": [
47 | "## 数据结构Series\n",
48 | "\n",
49 | "### 2017七月在线 机器学习在线集训 julyedu.com"
50 | ]
51 | },
52 | {
53 | "cell_type": "markdown",
54 | "metadata": {},
55 | "source": [
56 | "### 构造和初始化Series"
57 | ]
58 | },
59 | {
60 | "cell_type": "markdown",
61 | "metadata": {
62 | "collapsed": true
63 | },
64 | "source": [
65 | "Series是一个一维的数据结构,下面是一些初始化Series的方法。"
66 | ]
67 | },
68 | {
69 | "cell_type": "markdown",
70 | "metadata": {},
71 | "source": [
72 | "pandas会默认用0到n来作为Series的index,但是我们也可以自己指定index。index我们可以把它理解为dict里面的key。"
73 | ]
74 | },
75 | {
76 | "cell_type": "markdown",
77 | "metadata": {},
78 | "source": [
79 | "还可以用dictionary来构造一个Series,因为Series本来就是key value pairs。"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {},
85 | "source": [
86 | "numpy ndarray构建一个Series"
87 | ]
88 | },
89 | {
90 | "cell_type": "markdown",
91 | "metadata": {},
92 | "source": [
93 | "### 选择数据"
94 | ]
95 | },
96 | {
97 | "cell_type": "markdown",
98 | "metadata": {},
99 | "source": [
100 | "我们可以像对待一个list一样对待Series"
101 | ]
102 | },
103 | {
104 | "cell_type": "markdown",
105 | "metadata": {},
106 | "source": [
107 | "为什么下面这样会拿到两个NaN呢?"
108 | ]
109 | },
110 | {
111 | "cell_type": "markdown",
112 | "metadata": {},
113 | "source": [
114 | "Series就像一个dict,前面定义的index就是用来选择数据的"
115 | ]
116 | },
117 | {
118 | "cell_type": "markdown",
119 | "metadata": {},
120 | "source": [
121 | "boolean indexing,与numpy类似。"
122 | ]
123 | },
124 | {
125 | "cell_type": "markdown",
126 | "metadata": {},
127 | "source": [
128 | "下面我再详细展示一下这个boolean indexing是如何工作的"
129 | ]
130 | },
131 | {
132 | "cell_type": "markdown",
133 | "metadata": {},
134 | "source": [
135 | "### Series元素赋值"
136 | ]
137 | },
138 | {
139 | "cell_type": "markdown",
140 | "metadata": {},
141 | "source": [
142 | "Series的元素可以被赋值"
143 | ]
144 | },
145 | {
146 | "cell_type": "markdown",
147 | "metadata": {},
148 | "source": [
149 | "前面讲过的boolean indexing在赋值的时候也可以用"
150 | ]
151 | },
152 | {
153 | "cell_type": "markdown",
154 | "metadata": {},
155 | "source": [
156 | "### 数学运算"
157 | ]
158 | },
159 | {
160 | "cell_type": "markdown",
161 | "metadata": {},
162 | "source": [
163 | "下面我们来讲一些基本的数学运算。"
164 | ]
165 | },
166 | {
167 | "cell_type": "markdown",
168 | "metadata": {},
169 | "source": [
170 | "numpy的运算可以被运用到pandsa上去"
171 | ]
172 | },
173 | {
174 | "cell_type": "markdown",
175 | "metadata": {},
176 | "source": [
177 | "我们再定义一个新的Series做加法"
178 | ]
179 | },
180 | {
181 | "cell_type": "markdown",
182 | "metadata": {},
183 | "source": [
184 | "### 数据缺失\n",
185 | "\n",
186 | "[reference](https://pandas.pydata.org/pandas-docs/stable/missing_data.html)"
187 | ]
188 | },
189 | {
190 | "cell_type": "markdown",
191 | "metadata": {},
192 | "source": [
193 | "## 数据结构[Dataframe](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html)\n",
194 | "\n",
195 | "### 2017七月在线 机器学习在线集训 julyedu.com"
196 | ]
197 | },
198 | {
199 | "cell_type": "markdown",
200 | "metadata": {},
201 | "source": [
202 | "一个Dataframe就是一张表格,Series表示的是一维数组,Dataframe则是一个二维数组,可以类比成一张excel的spreadsheet。也可以把Dataframe当做一组Series的集合。"
203 | ]
204 | },
205 | {
206 | "cell_type": "markdown",
207 | "metadata": {},
208 | "source": [
209 | "### 创建一个DataFrame"
210 | ]
211 | },
212 | {
213 | "cell_type": "markdown",
214 | "metadata": {},
215 | "source": [
216 | "dataframe可以由一个dictionary构造得到。"
217 | ]
218 | },
219 | {
220 | "cell_type": "markdown",
221 | "metadata": {},
222 | "source": [
223 | "columns的名字和顺序可以指定"
224 | ]
225 | },
226 | {
227 | "cell_type": "markdown",
228 | "metadata": {},
229 | "source": [
230 | "也可以从几个Series构建一个DataFrame"
231 | ]
232 | },
233 | {
234 | "cell_type": "markdown",
235 | "metadata": {},
236 | "source": [
237 | "也可以用一个list of dicts来构建DataFrame"
238 | ]
239 | },
240 | {
241 | "cell_type": "markdown",
242 | "metadata": {},
243 | "source": [
244 | "## 练习"
245 | ]
246 | },
247 | {
248 | "cell_type": "markdown",
249 | "metadata": {},
250 | "source": [
251 | "- 构建三个Series,分别是一系列商品的单价,计量单位,和数量。至于是什么商品什么计量单位由大家自己决定。\n",
252 | "- 然后把这三个Series合并成一个DataFrame。"
253 | ]
254 | },
255 | {
256 | "cell_type": "markdown",
257 | "metadata": {},
258 | "source": [
259 | "### 2017七月在线 机器学习在线集训 julyedu.com"
260 | ]
261 | },
262 | {
263 | "cell_type": "markdown",
264 | "metadata": {},
265 | "source": [
266 | "## 数据结构DataFrame"
267 | ]
268 | },
269 | {
270 | "cell_type": "markdown",
271 | "metadata": {},
272 | "source": [
273 | "加入一个新的column,默认会broadcast"
274 | ]
275 | },
276 | {
277 | "cell_type": "markdown",
278 | "metadata": {},
279 | "source": [
280 | "DataFrame的行由index决定"
281 | ]
282 | },
283 | {
284 | "cell_type": "markdown",
285 | "metadata": {},
286 | "source": [
287 | "DataFrame的列由column names决定"
288 | ]
289 | },
290 | {
291 | "cell_type": "markdown",
292 | "metadata": {},
293 | "source": [
294 | "loc方法可以用index选中行"
295 | ]
296 | },
297 | {
298 | "cell_type": "markdown",
299 | "metadata": {},
300 | "source": [
301 | "下面这种方法默认用来选列而不是选行"
302 | ]
303 | },
304 | {
305 | "cell_type": "markdown",
306 | "metadata": {},
307 | "source": [
308 | "iloc方法可以用数字选中行"
309 | ]
310 | },
311 | {
312 | "cell_type": "markdown",
313 | "metadata": {},
314 | "source": [
315 | "行列一起选"
316 | ]
317 | },
318 | {
319 | "cell_type": "markdown",
320 | "metadata": {},
321 | "source": [
322 | "### DataFrame元素赋值"
323 | ]
324 | },
325 | {
326 | "cell_type": "markdown",
327 | "metadata": {},
328 | "source": [
329 | "可以给一整列赋值"
330 | ]
331 | },
332 | {
333 | "cell_type": "markdown",
334 | "metadata": {},
335 | "source": [
336 | "给一整行赋值"
337 | ]
338 | },
339 | {
340 | "cell_type": "markdown",
341 | "metadata": {},
342 | "source": [
343 | "还可以用Series来指定需要修改的index以及相对应的value,没有指定的默认用NaN."
344 | ]
345 | },
346 | {
347 | "cell_type": "markdown",
348 | "metadata": {},
349 | "source": [
350 | "一个DataFrame就和一个numpy 2d array一样,可以被转置"
351 | ]
352 | },
353 | {
354 | "cell_type": "markdown",
355 | "metadata": {},
356 | "source": [
357 | "用info查看DataFrame的信息"
358 | ]
359 | },
360 | {
361 | "cell_type": "markdown",
362 | "metadata": {},
363 | "source": [
364 | "我们还可以指定index的名字和列的名字"
365 | ]
366 | },
367 | {
368 | "cell_type": "markdown",
369 | "metadata": {},
370 | "source": [
371 | "## 课后作业\n",
372 | "- 研究一下pandas当中的broadcast是怎么用的,对比一下numpy中的broadcast"
373 | ]
374 | },
375 | {
376 | "cell_type": "markdown",
377 | "metadata": {},
378 | "source": [
379 | "### 2017七月在线 机器学习在线集训 julyedu.com"
380 | ]
381 | },
382 | {
383 | "cell_type": "markdown",
384 | "metadata": {},
385 | "source": [
386 | "## Index"
387 | ]
388 | },
389 | {
390 | "cell_type": "markdown",
391 | "metadata": {},
392 | "source": [
393 | "### index object"
394 | ]
395 | },
396 | {
397 | "cell_type": "markdown",
398 | "metadata": {},
399 | "source": [
400 | "自己建一个index object"
401 | ]
402 | },
403 | {
404 | "cell_type": "markdown",
405 | "metadata": {},
406 | "source": [
407 | "从Series里面拿出一个index object"
408 | ]
409 | },
410 | {
411 | "cell_type": "markdown",
412 | "metadata": {},
413 | "source": [
414 | "index的值是不能被更改的"
415 | ]
416 | },
417 | {
418 | "cell_type": "markdown",
419 | "metadata": {},
420 | "source": [
421 | "创建Series时声明index"
422 | ]
423 | },
424 | {
425 | "cell_type": "markdown",
426 | "metadata": {},
427 | "source": [
428 | "sex_index"
429 | ]
430 | },
431 | {
432 | "cell_type": "markdown",
433 | "metadata": {},
434 | "source": [
435 | "### 针对index进行索引和切片"
436 | ]
437 | },
438 | {
439 | "cell_type": "markdown",
440 | "metadata": {},
441 | "source": [
442 | "默认的数字index依旧可以使用"
443 | ]
444 | },
445 | {
446 | "cell_type": "markdown",
447 | "metadata": {},
448 | "source": [
449 | "下面是如何对Series进行切片"
450 | ]
451 | },
452 | {
453 | "cell_type": "markdown",
454 | "metadata": {},
455 | "source": [
456 | "对DataFrame进行Indexing与Series基本相同"
457 | ]
458 | },
459 | {
460 | "cell_type": "code",
461 | "execution_count": 41,
462 | "metadata": {},
463 | "outputs": [
464 | {
465 | "data": {
466 | "text/html": [
467 | "
\n",
468 | "\n",
481 | "
\n",
482 | " \n",
483 | " \n",
484 | " | \n",
485 | " x | \n",
486 | " y | \n",
487 | " z | \n",
488 | "
\n",
489 | " \n",
490 | " \n",
491 | " \n",
492 | " | a | \n",
493 | " 0 | \n",
494 | " 1 | \n",
495 | " 2 | \n",
496 | "
\n",
497 | " \n",
498 | " | b | \n",
499 | " 3 | \n",
500 | " 4 | \n",
501 | " 5 | \n",
502 | "
\n",
503 | " \n",
504 | " | c | \n",
505 | " 6 | \n",
506 | " 7 | \n",
507 | " 8 | \n",
508 | "
\n",
509 | " \n",
510 | "
\n",
511 | "
"
512 | ],
513 | "text/plain": [
514 | " x y z\n",
515 | "a 0 1 2\n",
516 | "b 3 4 5\n",
517 | "c 6 7 8"
518 | ]
519 | },
520 | "execution_count": 41,
521 | "metadata": {},
522 | "output_type": "execute_result"
523 | }
524 | ],
525 | "source": [
526 | "df"
527 | ]
528 | },
529 | {
530 | "cell_type": "markdown",
531 | "metadata": {},
532 | "source": [
533 | "DataFrame也可以用condition selection"
534 | ]
535 | },
536 | {
537 | "cell_type": "markdown",
538 | "metadata": {},
539 | "source": [
540 | "### [reindex](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html)"
541 | ]
542 | },
543 | {
544 | "cell_type": "markdown",
545 | "metadata": {},
546 | "source": [
547 | "把一个Series或者DataFrame按照新的index顺序进行重排"
548 | ]
549 | },
550 | {
551 | "cell_type": "markdown",
552 | "metadata": {},
553 | "source": [
554 | "既然我们可以对Series进行reindex,相应地,我们也可以用同样的方法对DataFrame进行reindex。"
555 | ]
556 | },
557 | {
558 | "cell_type": "markdown",
559 | "metadata": {},
560 | "source": [
561 | "在reindex的同时,我们还可以重新指定columns"
562 | ]
563 | },
564 | {
565 | "cell_type": "markdown",
566 | "metadata": {
567 | "collapsed": true
568 | },
569 | "source": [
570 | "下面介绍如何用drop来删除Series和DataFrame中的index"
571 | ]
572 | },
573 | {
574 | "cell_type": "markdown",
575 | "metadata": {},
576 | "source": [
577 | "drop不仅仅可以删除行,还可以删除列"
578 | ]
579 | },
580 | {
581 | "cell_type": "markdown",
582 | "metadata": {},
583 | "source": [
584 | "### hierarchical index"
585 | ]
586 | },
587 | {
588 | "cell_type": "markdown",
589 | "metadata": {},
590 | "source": [
591 | "Series的hierarchical indexing"
592 | ]
593 | },
594 | {
595 | "cell_type": "markdown",
596 | "metadata": {},
597 | "source": [
598 | "unstack和stack可以帮助我们在hierarchical indexing和DataFrame之间进行切换。"
599 | ]
600 | },
601 | {
602 | "cell_type": "markdown",
603 | "metadata": {},
604 | "source": [
605 | "DataFrame的hierarchical indexing"
606 | ]
607 | },
608 | {
609 | "cell_type": "markdown",
610 | "metadata": {},
611 | "source": [
612 | "## csv文件读写"
613 | ]
614 | },
615 | {
616 | "cell_type": "markdown",
617 | "metadata": {},
618 | "source": [
619 | "- [read_csv](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)\n",
620 | "- [to_csv](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html)"
621 | ]
622 | },
623 | {
624 | "cell_type": "markdown",
625 | "metadata": {},
626 | "source": [
627 | "## 课后练习\n",
628 | "download stock data from yahoo finance, and use read_csv to create dataframe, and play with the dataframe. "
629 | ]
630 | }
631 | ],
632 | "metadata": {
633 | "kernelspec": {
634 | "display_name": "Python 3",
635 | "language": "python",
636 | "name": "python3"
637 | },
638 | "language_info": {
639 | "codemirror_mode": {
640 | "name": "ipython",
641 | "version": 3
642 | },
643 | "file_extension": ".py",
644 | "mimetype": "text/x-python",
645 | "name": "python",
646 | "nbconvert_exporter": "python",
647 | "pygments_lexer": "ipython3",
648 | "version": "3.6.1"
649 | }
650 | },
651 | "nbformat": 4,
652 | "nbformat_minor": 2
653 | }
654 |
--------------------------------------------------------------------------------
/python-basic-2-student.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "text/plain": [
11 | "1"
12 | ]
13 | },
14 | "execution_count": 1,
15 | "metadata": {},
16 | "output_type": "execute_result"
17 | }
18 | ],
19 | "source": [
20 | "1"
21 | ]
22 | },
23 | {
24 | "cell_type": "code",
25 | "execution_count": 2,
26 | "metadata": {},
27 | "outputs": [
28 | {
29 | "data": {
30 | "text/plain": [
31 | "8.5"
32 | ]
33 | },
34 | "execution_count": 2,
35 | "metadata": {},
36 | "output_type": "execute_result"
37 | }
38 | ],
39 | "source": [
40 | "2.5 + 6"
41 | ]
42 | },
43 | {
44 | "cell_type": "code",
45 | "execution_count": 9,
46 | "metadata": {},
47 | "outputs": [],
48 | "source": [
49 | "numbers = [1,2,3,4,5,2,3,4]"
50 | ]
51 | },
52 | {
53 | "cell_type": "code",
54 | "execution_count": 5,
55 | "metadata": {},
56 | "outputs": [
57 | {
58 | "data": {
59 | "text/plain": [
60 | "{1, 2, 3, 4}"
61 | ]
62 | },
63 | "execution_count": 5,
64 | "metadata": {},
65 | "output_type": "execute_result"
66 | }
67 | ],
68 | "source": [
69 | "{1,2,3,4,2,3,3,3,}"
70 | ]
71 | },
72 | {
73 | "cell_type": "code",
74 | "execution_count": 7,
75 | "metadata": {},
76 | "outputs": [
77 | {
78 | "data": {
79 | "text/plain": [
80 | "2"
81 | ]
82 | },
83 | "execution_count": 7,
84 | "metadata": {},
85 | "output_type": "execute_result"
86 | }
87 | ],
88 | "source": [
89 | "d = {\"key\":\"value\", 1:2}\n",
90 | "d[1]"
91 | ]
92 | },
93 | {
94 | "cell_type": "code",
95 | "execution_count": 8,
96 | "metadata": {},
97 | "outputs": [
98 | {
99 | "name": "stdout",
100 | "output_type": "stream",
101 | "text": [
102 | "between 10 and 20\n"
103 | ]
104 | }
105 | ],
106 | "source": [
107 | "x = 12\n",
108 | "if x < 10:\n",
109 | " print(\"less than 10\")\n",
110 | "elif x < 20:\n",
111 | " print(\"between 10 and 20\")\n",
112 | "else:\n",
113 | " print(\"larger than or equal to 20\")"
114 | ]
115 | },
116 | {
117 | "cell_type": "code",
118 | "execution_count": 10,
119 | "metadata": {},
120 | "outputs": [
121 | {
122 | "name": "stdout",
123 | "output_type": "stream",
124 | "text": [
125 | "1\n",
126 | "2\n",
127 | "3\n",
128 | "4\n",
129 | "5\n",
130 | "2\n",
131 | "3\n",
132 | "4\n"
133 | ]
134 | }
135 | ],
136 | "source": [
137 | "for n in numbers:\n",
138 | " print(n)"
139 | ]
140 | },
141 | {
142 | "cell_type": "code",
143 | "execution_count": 13,
144 | "metadata": {},
145 | "outputs": [
146 | {
147 | "name": "stdout",
148 | "output_type": "stream",
149 | "text": [
150 | "1\n",
151 | "2\n",
152 | "4\n",
153 | "5\n",
154 | "7\n",
155 | "8\n",
156 | "10\n",
157 | "11\n",
158 | "13\n",
159 | "14\n",
160 | "16\n",
161 | "17\n",
162 | "19\n"
163 | ]
164 | }
165 | ],
166 | "source": [
167 | "i = 0\n",
168 | "while 1:\n",
169 | " if i % 3 == 0:\n",
170 | " i += 1\n",
171 | " continue\n",
172 | " print(i)\n",
173 | " i += 1\n",
174 | " if i >= 20:\n",
175 | " break"
176 | ]
177 | },
178 | {
179 | "cell_type": "markdown",
180 | "metadata": {},
181 | "source": [
182 | "# python 线上集训第二课"
183 | ]
184 | },
185 | {
186 | "cell_type": "markdown",
187 | "metadata": {},
188 | "source": [
189 | "## 目录\n",
190 | "- function\n",
191 | "- class, subclass\n",
192 | "- module\n",
193 | "- read/write\n",
194 | "- csv, json"
195 | ]
196 | },
197 | {
198 | "cell_type": "markdown",
199 | "metadata": {},
200 | "source": [
201 | "## function\n",
202 | "\n",
203 | "- def关键词\n",
204 | "- 用括号包含list of parameters\n",
205 | "- statements都要indent\n"
206 | ]
207 | },
208 | {
209 | "cell_type": "code",
210 | "execution_count": 29,
211 | "metadata": {},
212 | "outputs": [
213 | {
214 | "ename": "UnboundLocalError",
215 | "evalue": "local variable 'res' referenced before assignment",
216 | "output_type": "error",
217 | "traceback": [
218 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
219 | "\u001b[1;31mUnboundLocalError\u001b[0m Traceback (most recent call last)",
220 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 15\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfib\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[1;31m#fib(10, 2)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
221 | "\u001b[1;32m\u001b[0m in \u001b[0;36mfib\u001b[1;34m(n, start)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mfib\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mn\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mstart\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mres\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mn\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
222 | "\u001b[1;31mUnboundLocalError\u001b[0m: local variable 'res' referenced before assignment"
223 | ]
224 | }
225 | ],
226 | "source": [
227 | "def fib(n,start=0):\n",
228 | " a, b = 0, 1\n",
229 | " print(res)\n",
230 | " res = []\n",
231 | " for i in range(n):\n",
232 | " if i < start:\n",
233 | " a, b = b, a+b\n",
234 | " continue\n",
235 | " # print(a, end=\" \")\n",
236 | " res.append(a)\n",
237 | " a, b = b, a+b\n",
238 | " #print()\n",
239 | " return res\n",
240 | "\n",
241 | "r = fib(5)\n",
242 | "print(r)\n",
243 | "#fib(10, 2)"
244 | ]
245 | },
246 | {
247 | "cell_type": "markdown",
248 | "metadata": {},
249 | "source": [
250 | "### 不定长度的arguments"
251 | ]
252 | },
253 | {
254 | "cell_type": "code",
255 | "execution_count": 39,
256 | "metadata": {},
257 | "outputs": [
258 | {
259 | "name": "stdout",
260 | "output_type": "stream",
261 | "text": [
262 | "(12, 15, 'a', 'July')\n"
263 | ]
264 | },
265 | {
266 | "data": {
267 | "text/plain": [
268 | "'12,15,a,July'"
269 | ]
270 | },
271 | "execution_count": 39,
272 | "metadata": {},
273 | "output_type": "execute_result"
274 | }
275 | ],
276 | "source": [
277 | "def concatenate(*args, sep=\" \"):\n",
278 | " aaaa = [str(a) for a in args]\n",
279 | " print(args)\n",
280 | " return sep.join(aaaa)\n",
281 | " \n",
282 | "concatenate(12, 15, \"a\", \"July\", sep=\",\")"
283 | ]
284 | },
285 | {
286 | "cell_type": "markdown",
287 | "metadata": {},
288 | "source": [
289 | "### default argument\n",
290 | "concat例子"
291 | ]
292 | },
293 | {
294 | "cell_type": "markdown",
295 | "metadata": {},
296 | "source": [
297 | "### 把一个tuple/list当做arguments\n",
298 | "\n"
299 | ]
300 | },
301 | {
302 | "cell_type": "code",
303 | "execution_count": 50,
304 | "metadata": {},
305 | "outputs": [
306 | {
307 | "name": "stdout",
308 | "output_type": "stream",
309 | "text": [
310 | "2 5\n"
311 | ]
312 | },
313 | {
314 | "data": {
315 | "text/plain": [
316 | "function"
317 | ]
318 | },
319 | "execution_count": 50,
320 | "metadata": {},
321 | "output_type": "execute_result"
322 | }
323 | ],
324 | "source": [
325 | "def unpack_args(a, b):\n",
326 | " print(a, b)\n",
327 | "\n",
328 | "r = [2, 5]\n",
329 | "# r = (2, 5)\n",
330 | "unpack_args(*r)\n",
331 | "\n",
332 | "type(unpack_args)"
333 | ]
334 | },
335 | {
336 | "cell_type": "markdown",
337 | "metadata": {},
338 | "source": [
339 | "### 关于模块化(modularity)\n",
340 | "\n",
341 | "function的作用是拿到一些参数,做一些运算或者别的更加复杂的操作,然后返回一些结果。\n",
342 | "\n",
343 | "(25min)"
344 | ]
345 | },
346 | {
347 | "cell_type": "markdown",
348 | "metadata": {},
349 | "source": [
350 | "# Class入门\n",
351 | "\n",
352 | "\n",
353 | "## Object oriented programming 面向对象编程\n",
354 | "\n",
355 | "```class```关键字用来定义一个class(类)。\n",
356 | "\n",
357 | "之前我们学习的都是python自带的数据类型,class是我们自己定义的类型。\n",
358 | "\n",
359 | "- object和class之间的关系\n",
360 | "class是一个模板,我们可以把class类比成一个数据类型。object是class的一个实例,就好比a是一个int,我们可以把int类比成一个class,把a类比成一个object。\n",
361 | "\n",
362 | "- 什么是```self```?\n",
363 | "- 什么是```__init__```?\n",
364 | "- pass statement\n",
365 | "- 用dir inspect一个object\n",
366 | "\n",
367 | "\n"
368 | ]
369 | },
370 | {
371 | "cell_type": "markdown",
372 | "metadata": {},
373 | "source": [
374 | "# subclass(子类)\n",
375 | "\n",
376 | "## 什么是subclass\n",
377 | "\n",
378 | "subclass是base class的继承,一个subclass可以继承所有base class的field和method,在base class的基础上做拓展。\n",
379 | "\n",
380 | "\n",
381 | "- Abstract Base Class (abc)"
382 | ]
383 | },
384 | {
385 | "cell_type": "markdown",
386 | "metadata": {},
387 | "source": [
388 | "# Iterator and Generator\n",
389 | "\n",
390 | "## iterator\n",
391 | "\n"
392 | ]
393 | },
394 | {
395 | "cell_type": "markdown",
396 | "metadata": {
397 | "collapsed": true
398 | },
399 | "source": [
400 | "定义一个class的时候,如果我们在class中定义```__iter__```和```__next__```两个method就能把这个class变成一个iterator。\n"
401 | ]
402 | },
403 | {
404 | "cell_type": "markdown",
405 | "metadata": {},
406 | "source": [
407 | "## Generator\n",
408 | "\n"
409 | ]
410 | },
411 | {
412 | "cell_type": "markdown",
413 | "metadata": {},
414 | "source": [
415 | "还有一个function叫做zip"
416 | ]
417 | },
418 | {
419 | "cell_type": "code",
420 | "execution_count": null,
421 | "metadata": {
422 | "collapsed": true
423 | },
424 | "outputs": [],
425 | "source": []
426 | },
427 | {
428 | "cell_type": "markdown",
429 | "metadata": {},
430 | "source": [
431 | "## File IO"
432 | ]
433 | },
434 | {
435 | "cell_type": "code",
436 | "execution_count": 84,
437 | "metadata": {
438 | "collapsed": true
439 | },
440 | "outputs": [],
441 | "source": [
442 | "in_file = open(\"data/sample.csv\", \"r\")"
443 | ]
444 | },
445 | {
446 | "cell_type": "code",
447 | "execution_count": 85,
448 | "metadata": {},
449 | "outputs": [],
450 | "source": [
451 | "content = in_file.read()"
452 | ]
453 | },
454 | {
455 | "cell_type": "code",
456 | "execution_count": 68,
457 | "metadata": {
458 | "scrolled": true
459 | },
460 | "outputs": [
461 | {
462 | "name": "stdout",
463 | "output_type": "stream",
464 | "text": [
465 | "4/5/2015 13:34,Apples,73\n",
466 | "\n",
467 | "4/5/2015 3:41,Cherries,85\n",
468 | "\n",
469 | "4/6/2015 12:46,Pears,14\n",
470 | "\n",
471 | "4/8/2015 8:59,Oranges,52\n",
472 | "\n",
473 | "4/10/2015 2:07,Apples,152\n",
474 | "\n",
475 | "4/10/2015 18:10,Bananas,23\n",
476 | "\n",
477 | "4/10/2015 2:40,Strawberries,98\n"
478 | ]
479 | }
480 | ],
481 | "source": [
482 | "for line in in_file:\n",
483 | " print(line)"
484 | ]
485 | },
486 | {
487 | "cell_type": "code",
488 | "execution_count": 70,
489 | "metadata": {},
490 | "outputs": [
491 | {
492 | "name": "stdout",
493 | "output_type": "stream",
494 | "text": [
495 | "4/5/2015 13:34,Apples,73\n",
496 | "\n",
497 | "4/5/2015 3:41,Cherries,85\n",
498 | "\n",
499 | "4/6/2015 12:46,Pears,14\n",
500 | "\n",
501 | "4/8/2015 8:59,Oranges,52\n",
502 | "\n",
503 | "4/10/2015 2:07,Apples,152\n",
504 | "\n",
505 | "4/10/2015 18:10,Bananas,23\n",
506 | "\n",
507 | "4/10/2015 2:40,Strawberries,98\n"
508 | ]
509 | }
510 | ],
511 | "source": [
512 | "with open(\"data/sample.csv\", \"r\") as fin:\n",
513 | " for line in fin:\n",
514 | " print(line)"
515 | ]
516 | },
517 | {
518 | "cell_type": "code",
519 | "execution_count": 63,
520 | "metadata": {},
521 | "outputs": [
522 | {
523 | "data": {
524 | "text/plain": [
525 | "str"
526 | ]
527 | },
528 | "execution_count": 63,
529 | "metadata": {},
530 | "output_type": "execute_result"
531 | }
532 | ],
533 | "source": [
534 | "type(content)"
535 | ]
536 | },
537 | {
538 | "cell_type": "code",
539 | "execution_count": 65,
540 | "metadata": {},
541 | "outputs": [
542 | {
543 | "data": {
544 | "text/plain": [
545 | "[['4/5/2015 13:34', 'Apples', '73'],\n",
546 | " ['4/5/2015 3:41', 'Cherries', '85'],\n",
547 | " ['4/6/2015 12:46', 'Pears', '14'],\n",
548 | " ['4/8/2015 8:59', 'Oranges', '52'],\n",
549 | " ['4/10/2015 2:07', 'Apples', '152'],\n",
550 | " ['4/10/2015 18:10', 'Bananas', '23'],\n",
551 | " ['4/10/2015 2:40', 'Strawberries', '98']]"
552 | ]
553 | },
554 | "execution_count": 65,
555 | "metadata": {},
556 | "output_type": "execute_result"
557 | }
558 | ],
559 | "source": [
560 | "[line.split(\",\") for line in content.split(\"\\n\")]"
561 | ]
562 | },
563 | {
564 | "cell_type": "code",
565 | "execution_count": 86,
566 | "metadata": {
567 | "collapsed": true
568 | },
569 | "outputs": [],
570 | "source": [
571 | "in_file.close()"
572 | ]
573 | },
574 | {
575 | "cell_type": "code",
576 | "execution_count": 89,
577 | "metadata": {},
578 | "outputs": [
579 | {
580 | "data": {
581 | "text/plain": [
582 | "'4/5/2015 13:34,Apples,73\\n4/5/2015 3:41,Cherries,85\\n4/6/2015 12:46,Pears,14\\n4/8/2015 8:59,Oranges,52\\n4/10/2015 2:07,Apples,152\\n4/10/2015 18:10,Bananas,23\\n4/10/2015 2:40,Strawberries,98aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssss'"
583 | ]
584 | },
585 | "execution_count": 89,
586 | "metadata": {},
587 | "output_type": "execute_result"
588 | }
589 | ],
590 | "source": [
591 | "content += \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssss\"\n",
592 | "content"
593 | ]
594 | },
595 | {
596 | "cell_type": "code",
597 | "execution_count": 93,
598 | "metadata": {},
599 | "outputs": [],
600 | "source": [
601 | "out_file = open(\"data/out.txt\", \"w\")\n",
602 | "out_file.write(content)\n",
603 | "out_file.close()"
604 | ]
605 | },
606 | {
607 | "cell_type": "code",
608 | "execution_count": 94,
609 | "metadata": {
610 | "collapsed": true
611 | },
612 | "outputs": [],
613 | "source": [
614 | "with open(\"data/out2.txt\", \"w\") as fout:\n",
615 | " fout.write(content)"
616 | ]
617 | },
618 | {
619 | "cell_type": "markdown",
620 | "metadata": {},
621 | "source": [
622 | "# csv和json格式数据\n",
623 | "\n",
624 | "## csv(comma separated values)\n",
625 | "\n",
626 | "关于module csv\n",
627 | "\n",
628 | "- reader\n",
629 | "- writer"
630 | ]
631 | },
632 | {
633 | "cell_type": "code",
634 | "execution_count": 114,
635 | "metadata": {
636 | "collapsed": true
637 | },
638 | "outputs": [],
639 | "source": [
640 | "import csv\n",
641 | "in_file = open(\"data/sample.csv\", \"r\")\n",
642 | "csv_reader = csv.reader(in_file)"
643 | ]
644 | },
645 | {
646 | "cell_type": "code",
647 | "execution_count": 96,
648 | "metadata": {
649 | "collapsed": true
650 | },
651 | "outputs": [],
652 | "source": []
653 | },
654 | {
655 | "cell_type": "code",
656 | "execution_count": 102,
657 | "metadata": {},
658 | "outputs": [],
659 | "source": [
660 | "data = list(csv_reader)"
661 | ]
662 | },
663 | {
664 | "cell_type": "code",
665 | "execution_count": 115,
666 | "metadata": {},
667 | "outputs": [
668 | {
669 | "name": "stdout",
670 | "output_type": "stream",
671 | "text": [
672 | "line #: 1, content: ['4/5/2015 13:34', 'Apples', '73']\n",
673 | "line #: 2, content: ['4/5/2015 3:41', 'Cherries', '85']\n",
674 | "line #: 3, content: ['4/6/2015 12:46', 'Pears', '14']\n",
675 | "line #: 4, content: ['4/8/2015 8:59', 'Oranges', '52']\n",
676 | "line #: 5, content: ['4/10/2015 2:07', 'Apples', '152']\n",
677 | "line #: 6, content: ['4/10/2015 18:10', 'Bananas', '23']\n",
678 | "line #: 7, content: ['4/10/2015 2:40', 'Strawberries', '98']\n"
679 | ]
680 | }
681 | ],
682 | "source": [
683 | "for line in csv_reader:\n",
684 | " print(\"line #: {}, content: {}\".format(csv_reader.line_num, line))"
685 | ]
686 | },
687 | {
688 | "cell_type": "code",
689 | "execution_count": 113,
690 | "metadata": {
691 | "collapsed": true
692 | },
693 | "outputs": [],
694 | "source": [
695 | "in_file.close()"
696 | ]
697 | },
698 | {
699 | "cell_type": "code",
700 | "execution_count": 117,
701 | "metadata": {
702 | "collapsed": true
703 | },
704 | "outputs": [],
705 | "source": [
706 | "out_file = open(\"data/out.tsv\", \"w\")\n",
707 | "out_writer = csv.writer(out_file, delimiter=\"\\t\")\n",
708 | "out_writer.writerow([\"july\", \"baidu\", \"ali\", \"tencent\"])\n",
709 | "out_writer.writerow([\"fb\", \"goog\", \"aapl\", \"msft\"])\n",
710 | "out_writer.writerow([1.2, 3.5, \"amazon\", 5])\n",
711 | "out_file.close()"
712 | ]
713 | },
714 | {
715 | "cell_type": "markdown",
716 | "metadata": {},
717 | "source": [
718 | "## json (javascript object notation)\n",
719 | "\n",
720 | "关于module json\n",
721 | "\n",
722 | "- loads\n",
723 | "- load\n",
724 | "- dumps\n",
725 | "- dump\n"
726 | ]
727 | },
728 | {
729 | "cell_type": "code",
730 | "execution_count": 118,
731 | "metadata": {
732 | "collapsed": true
733 | },
734 | "outputs": [],
735 | "source": [
736 | "import json\n",
737 | "data = '{\"name\": \"July\", \"salary\": 999999, \"title\": \"CEO\", \"manager\": null}'"
738 | ]
739 | },
740 | {
741 | "cell_type": "code",
742 | "execution_count": 119,
743 | "metadata": {},
744 | "outputs": [
745 | {
746 | "data": {
747 | "text/plain": [
748 | "{'manager': None, 'name': 'July', 'salary': 999999, 'title': 'CEO'}"
749 | ]
750 | },
751 | "execution_count": 119,
752 | "metadata": {},
753 | "output_type": "execute_result"
754 | }
755 | ],
756 | "source": [
757 | "json_data = json.loads(data)\n",
758 | "json_data"
759 | ]
760 | },
761 | {
762 | "cell_type": "code",
763 | "execution_count": 121,
764 | "metadata": {},
765 | "outputs": [
766 | {
767 | "data": {
768 | "text/plain": [
769 | "'July'"
770 | ]
771 | },
772 | "execution_count": 121,
773 | "metadata": {},
774 | "output_type": "execute_result"
775 | }
776 | ],
777 | "source": [
778 | "type(json_data)\n",
779 | "json_data[\"name\"]"
780 | ]
781 | },
782 | {
783 | "cell_type": "code",
784 | "execution_count": 122,
785 | "metadata": {},
786 | "outputs": [
787 | {
788 | "name": "stdout",
789 | "output_type": "stream",
790 | "text": [
791 | "\n",
792 | "{'name': 'July', 'salary': 999999, 'title': 'CEO', 'manager': None}\n"
793 | ]
794 | }
795 | ],
796 | "source": [
797 | "in_file = open(\"data/sample.json\", \"r\")\n",
798 | "json_data = json.load(in_file)\n",
799 | "in_file.close()\n",
800 | "print(type(json_data))\n",
801 | "print(json_data)\n"
802 | ]
803 | },
804 | {
805 | "cell_type": "code",
806 | "execution_count": 124,
807 | "metadata": {},
808 | "outputs": [
809 | {
810 | "data": {
811 | "text/plain": [
812 | "dict"
813 | ]
814 | },
815 | "execution_count": 124,
816 | "metadata": {},
817 | "output_type": "execute_result"
818 | }
819 | ],
820 | "source": [
821 | "type(json_data)"
822 | ]
823 | },
824 | {
825 | "cell_type": "code",
826 | "execution_count": 125,
827 | "metadata": {},
828 | "outputs": [
829 | {
830 | "name": "stdout",
831 | "output_type": "stream",
832 | "text": [
833 | "\n"
834 | ]
835 | },
836 | {
837 | "data": {
838 | "text/plain": [
839 | "'{\"name\": \"July\", \"salary\": 999999, \"title\": \"CEO\", \"manager\": null}'"
840 | ]
841 | },
842 | "execution_count": 125,
843 | "metadata": {},
844 | "output_type": "execute_result"
845 | }
846 | ],
847 | "source": [
848 | "json_dumped = json.dumps(json_data)\n",
849 | "print(type(json_dumped))\n",
850 | "json_dumped"
851 | ]
852 | },
853 | {
854 | "cell_type": "code",
855 | "execution_count": 126,
856 | "metadata": {
857 | "collapsed": true
858 | },
859 | "outputs": [],
860 | "source": [
861 | "json.dump(json_data, open(\"data/out.json\", \"w\"))"
862 | ]
863 | },
864 | {
865 | "cell_type": "code",
866 | "execution_count": 6,
867 | "metadata": {
868 | "collapsed": true
869 | },
870 | "outputs": [],
871 | "source": [
872 | "# 120min"
873 | ]
874 | }
875 | ],
876 | "metadata": {
877 | "kernelspec": {
878 | "display_name": "Python 3",
879 | "language": "python",
880 | "name": "python3"
881 | },
882 | "language_info": {
883 | "codemirror_mode": {
884 | "name": "ipython",
885 | "version": 3
886 | },
887 | "file_extension": ".py",
888 | "mimetype": "text/x-python",
889 | "name": "python",
890 | "nbconvert_exporter": "python",
891 | "pygments_lexer": "ipython3",
892 | "version": "3.6.1"
893 | }
894 | },
895 | "nbformat": 4,
896 | "nbformat_minor": 2
897 | }
898 |
--------------------------------------------------------------------------------
/python-basic-2.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# python 线上集训第二课"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## 目录\n",
15 | "- function\n",
16 | "- class, subclass\n",
17 | "- module"
18 | ]
19 | },
20 | {
21 | "cell_type": "markdown",
22 | "metadata": {},
23 | "source": [
24 | "## function\n",
25 | "\n",
26 | "- def关键词\n",
27 | "- 用括号包含list of parameters\n",
28 | "- statements都要indent\n"
29 | ]
30 | },
31 | {
32 | "cell_type": "code",
33 | "execution_count": 2,
34 | "metadata": {},
35 | "outputs": [
36 | {
37 | "name": "stdout",
38 | "output_type": "stream",
39 | "text": [
40 | "0 1 1 2 3 \n",
41 | "0 1 1 2 3 5 8 13 21 34 \n"
42 | ]
43 | }
44 | ],
45 | "source": [
46 | "def fib(n):\n",
47 | " a, b = 0, 1\n",
48 | " for i in range(n):\n",
49 | " print(a, end=\" \")\n",
50 | " a, b = b, a+b\n",
51 | " print()\n",
52 | "\n",
53 | "fib(5)\n",
54 | "fib(10)"
55 | ]
56 | },
57 | {
58 | "cell_type": "markdown",
59 | "metadata": {},
60 | "source": [
61 | "### 不定长度的arguments"
62 | ]
63 | },
64 | {
65 | "cell_type": "code",
66 | "execution_count": 4,
67 | "metadata": {
68 | "scrolled": true
69 | },
70 | "outputs": [
71 | {
72 | "name": "stdout",
73 | "output_type": "stream",
74 | "text": [
75 | "\n",
76 | "('hello', 'world', 'julyter', 'notebook')\n"
77 | ]
78 | }
79 | ],
80 | "source": [
81 | "def print_all(*args):\n",
82 | " print(type(args))\n",
83 | " print(args)\n",
84 | "\n",
85 | "print_all(\"hello\", \"world\", \"julyter\", \"notebook\")"
86 | ]
87 | },
88 | {
89 | "cell_type": "markdown",
90 | "metadata": {},
91 | "source": [
92 | "### default argument\n",
93 | "concat例子"
94 | ]
95 | },
96 | {
97 | "cell_type": "code",
98 | "execution_count": 7,
99 | "metadata": {
100 | "scrolled": true
101 | },
102 | "outputs": [
103 | {
104 | "name": "stdout",
105 | "output_type": "stream",
106 | "text": [
107 | "hello,world,jupyter,notebook,julyedu,1,2,3,4,5\n"
108 | ]
109 | }
110 | ],
111 | "source": [
112 | "def concatenate(*args, sep=\" \"):\n",
113 | " args = [str(a) for a in args]\n",
114 | " print(sep.join(args))\n",
115 | "\n",
116 | "concatenate(\"hello\", \"world\", \"jupyter\", \"notebook\", \\\n",
117 | " \"julyedu\", 1, 2, 3, 4, 5, sep=\",\")"
118 | ]
119 | },
120 | {
121 | "cell_type": "markdown",
122 | "metadata": {},
123 | "source": [
124 | "### 把一个tuple/list当做arguments\n",
125 | "\n"
126 | ]
127 | },
128 | {
129 | "cell_type": "code",
130 | "execution_count": 10,
131 | "metadata": {},
132 | "outputs": [
133 | {
134 | "name": "stdout",
135 | "output_type": "stream",
136 | "text": [
137 | "2 5\n"
138 | ]
139 | }
140 | ],
141 | "source": [
142 | "def unpack_args(a, b):\n",
143 | " print(a, b)\n",
144 | "\n",
145 | "r = [2,5]\n",
146 | "r = 2,5\n",
147 | "# unpack_args(r) # 会报错\n",
148 | "unpack_args(*r) # 运行正常了"
149 | ]
150 | },
151 | {
152 | "cell_type": "markdown",
153 | "metadata": {},
154 | "source": [
155 | "### 关于模块化(modularity)\n",
156 | "\n",
157 | "function的作用是拿到一些参数,做一些运算或者别的更加复杂的操作,然后返回一些结果。\n",
158 | "\n",
159 | "(25min)"
160 | ]
161 | },
162 | {
163 | "cell_type": "markdown",
164 | "metadata": {},
165 | "source": [
166 | "# Class入门\n",
167 | "\n",
168 | "\n",
169 | "## Object oriented programming 面向对象编程\n",
170 | "\n",
171 | "```class```关键字用来定义一个class(类)。\n",
172 | "\n",
173 | "之前我们学习的都是python自带的数据类型,class是我们自己定义的类型。\n",
174 | "\n",
175 | "- object和class之间的关系\n",
176 | "class是一个模板,我们可以把class类比成一个数据类型。object是class的一个实例,就好比a是一个int,我们可以把int类比成一个class,把a类比成一个object。\n",
177 | "\n",
178 | "- 什么是```self```?\n",
179 | "- 什么是```__init__```?\n",
180 | "- pass statement\n",
181 | "- 用dir inspect一个object\n",
182 | "\n",
183 | "\n"
184 | ]
185 | },
186 | {
187 | "cell_type": "code",
188 | "execution_count": 2,
189 | "metadata": {},
190 | "outputs": [
191 | {
192 | "name": "stdout",
193 | "output_type": "stream",
194 | "text": [
195 | "(Employee name: July, title: CEO, salary: 99999999, manager: )\n",
196 | "(Employee name: Zewei, title: Lecturer, salary: 1, manager: (Employee name: July, title: CEO, salary: 99999999, manager: ))\n"
197 | ]
198 | }
199 | ],
200 | "source": [
201 | "class Employee(object):\n",
202 | "\n",
203 | "\tdef __init__(self, name, ID, title, salary, manager=None):\n",
204 | "\t\tself.name = name\n",
205 | "\t\tself.ID = ID\n",
206 | "\t\tself.title = title\n",
207 | "\t\tself.salary = salary\n",
208 | "\t\tself.manager = manager\n",
209 | "\n",
210 | "\tdef get_info(self):\n",
211 | "\t\treturn \"(Employee name: {}, title: {}, salary: {}, manager: {})\".format(self.name, self.title, self.salary, self.manager.get_info() if self.manager is not None else \"\")\n",
212 | "\n",
213 | "\tdef __eq__(self, other):\n",
214 | "\t\treturn self.ID == other.ID\n",
215 | "\n",
216 | "july = Employee(\"July\", 1, \"CEO\", 99999999)\n",
217 | "print(july.get_info())\n",
218 | "zewei = Employee(\"Zewei\", 2, \"Lecturer\", 1, july)\n",
219 | "print(zewei.get_info())\n",
220 | "\n",
221 | "# (40min)"
222 | ]
223 | },
224 | {
225 | "cell_type": "code",
226 | "execution_count": 3,
227 | "metadata": {},
228 | "outputs": [
229 | {
230 | "name": "stdout",
231 | "output_type": "stream",
232 | "text": [
233 | "Company: Julyedu, employees: , (Employee name: July, title: CEO, salary: 99999999, manager: ), (Employee name: Zewei, title: Lecturer, salary: 1, manager: (Employee name: July, title: CEO, salary: 99999999, manager: )), (Employee name: Han, title: Lecturer, salary: 100000, manager: (Employee name: July, title: CEO, salary: 99999999, manager: ))\n",
234 | "Firing zewei!\n",
235 | "Company: Julyedu, employees: , (Employee name: July, title: CEO, salary: 99999999, manager: ), (Employee name: Han, title: Lecturer, salary: 100000, manager: (Employee name: July, title: CEO, salary: 99999999, manager: ))\n",
236 | "Firing zewei!\n",
237 | "Company: Julyedu, employees: , (Employee name: July, title: CEO, salary: 99999999, manager: ), (Employee name: Han, title: Lecturer, salary: 100000, manager: (Employee name: July, title: CEO, salary: 99999999, manager: ))\n"
238 | ]
239 | }
240 | ],
241 | "source": [
242 | "class Company(object):\n",
243 | "\n",
244 | "\tdef __init__(self, name, employees = []):\n",
245 | "\t\tself.name = name\n",
246 | "\t\tself.employees = employees\n",
247 | "\n",
248 | "\tdef hire(self, employee):\n",
249 | "\t\tif not employee in self.employees:\n",
250 | "\t\t\tself.employees.append(employee)\n",
251 | "\n",
252 | "\tdef fire(self, employee):\n",
253 | "\t\tif employee in self.employees:\n",
254 | "\t\t\tself.employees.remove(employee)\n",
255 | "\n",
256 | "\tdef get_info(self):\n",
257 | "\t\tres = \"Company: {}, employees: \".format(self.name)\n",
258 | "\t\tfor employee in self.employees:\n",
259 | "\t\t\tres += \", {}\".format(employee.get_info())\n",
260 | "\t\treturn res\n",
261 | "\n",
262 | "c = Company(\"Julyedu\")\n",
263 | "c.hire(july)\n",
264 | "c.hire(zewei)\n",
265 | "\n",
266 | "han = Employee(\"Han\", 3, \"Lecturer\", 100000, july)\n",
267 | "\n",
268 | "c.hire(han)\n",
269 | "\n",
270 | "print(c.get_info())\n",
271 | "\n",
272 | "print(\"Firing zewei!\")\n",
273 | "c.fire(zewei)\n",
274 | "print(c.get_info())\n",
275 | "\n",
276 | "print(\"Firing zewei!\")\n",
277 | "c.fire(zewei)\n",
278 | "print(c.get_info())\n",
279 | "\n",
280 | "# (55min)"
281 | ]
282 | },
283 | {
284 | "cell_type": "markdown",
285 | "metadata": {},
286 | "source": [
287 | "# subclass(子类)\n",
288 | "\n",
289 | "## 什么是subclass\n",
290 | "\n",
291 | "subclass是base class的继承,一个subclass可以继承所有base class的field和method,在base class的基础上做拓展。\n",
292 | "\n",
293 | "\n",
294 | "- Abstract Base Class (abc)"
295 | ]
296 | },
297 | {
298 | "cell_type": "code",
299 | "execution_count": 4,
300 | "metadata": {},
301 | "outputs": [
302 | {
303 | "name": "stdout",
304 | "output_type": "stream",
305 | "text": [
306 | "(name: July, title: CEO, salary: 99999999, manager: No manager)\n",
307 | "(name: Zewei, title: Lecturer, salary: 1, manager: (name: July, title: CEO, salary: 99999999, manager: No manager))\n",
308 | "Company: Julyedu, employees: , (name: July, title: CEO, salary: 99999999, manager: No manager), (name: Zewei, title: Lecturer, salary: 1, manager: (name: July, title: CEO, salary: 99999999, manager: No manager)), (name: Han, title: Lecturer, salary: 100000, manager: (name: July, title: CEO, salary: 99999999, manager: No manager))\n",
309 | "Firing zewei!\n",
310 | "Company: Julyedu, employees: , (name: July, title: CEO, salary: 99999999, manager: No manager), (name: Han, title: Lecturer, salary: 100000, manager: (name: July, title: CEO, salary: 99999999, manager: No manager))\n",
311 | "Firing zewei!\n",
312 | "Company: Julyedu, employees: , (name: July, title: CEO, salary: 99999999, manager: No manager), (name: Han, title: Lecturer, salary: 100000, manager: (name: July, title: CEO, salary: 99999999, manager: No manager))\n"
313 | ]
314 | }
315 | ],
316 | "source": [
317 | "from abc import ABC, abstractmethod\n",
318 | "\n",
319 | "\n",
320 | "class Person(ABC):\n",
321 | "\t@abstractmethod\n",
322 | "\tdef __init__(self, name, ID):\n",
323 | "\t\tself.name = name\n",
324 | "\t\tself.ID = ID\n",
325 | "\n",
326 | "\t@abstractmethod\n",
327 | "\tdef get_info(self):\n",
328 | "\t\treturn \"name: {}\".format(self.name)\n",
329 | "\n",
330 | "# a = Person(\"Aaron\", 20)\n",
331 | "# print(a.get_info())\n",
332 | "\n",
333 | "'''\n",
334 | "Student class\n",
335 | "\n",
336 | "'''\n",
337 | "class Student(Person):\n",
338 | "\n",
339 | "\t# method\n",
340 | "\tdef __init__(self, name, ID, level=0):\n",
341 | "\t\t# field\n",
342 | "\t\t# self refers to the object that is being created\n",
343 | "\t\tsuper().__init__(name, ID)\n",
344 | "\t\tself.level = level\n",
345 | "\n",
346 | "\tdef get_info(self):\n",
347 | "\t\treturn \"{} ,level: {}\".format(super().get_info(), self.level)\n",
348 | "\n",
349 | "\tdef take_exam(self, grade):\n",
350 | "\t\tif grade.upper() in [\"A\", \"B\", \"C\"]:\n",
351 | "\t\t\tself.level += 1\n",
352 | "\t\treturn self.level\n",
353 | "\n",
354 | "\tdef graduate(self):\n",
355 | "\t\tself.print_info()\n",
356 | "\t\tif self.level >= 12:\n",
357 | "\t\t\tprint(\"Congratulations, you've graduated from Julyedu\")\n",
358 | "\t\t\treturn True\n",
359 | "\t\telse:\n",
360 | "\t\t\tprint(\"Sorry, you need to pass {} extra exams\".format(12-self.level))\n",
361 | "\t\t\treturn False\n",
362 | "\n",
363 | "\n",
364 | "class Employee(Person):\n",
365 | "\n",
366 | "\tdef __init__(self, name, ID, title, salary, manager=None):\n",
367 | "\t\tsuper().__init__(name, ID)\n",
368 | "\t\tself.title = title\n",
369 | "\t\tself.salary = salary\n",
370 | "\t\tself.manager = manager\n",
371 | "\n",
372 | "\tdef get_info(self):\n",
373 | "\t\treturn \"({}, title: {}, salary: {}, manager: {})\".format(super().get_info(), self.title, self.salary, self.manager.get_info() if self.manager is not None else \"No manager\")\n",
374 | "\n",
375 | "\n",
376 | "\n",
377 | "july = Employee(\"July\", 1, \"CEO\", 99999999)\n",
378 | "print(july.get_info())\n",
379 | "zewei = Employee(\"Zewei\", 2, \"Lecturer\", 1, july)\n",
380 | "print(zewei.get_info())\n",
381 | "\n",
382 | "\n",
383 | "class Company(object):\n",
384 | "\n",
385 | "\tdef __init__(self, name, employees = []):\n",
386 | "\t\tself.name = name\n",
387 | "\t\tself.employees = employees\n",
388 | "\n",
389 | "\tdef hire(self, employee):\n",
390 | "\t\tif not employee in self.employees:\n",
391 | "\t\t\tself.employees.append(employee)\n",
392 | "\n",
393 | "\tdef fire(self, employee):\n",
394 | "\t\tif employee in self.employees:\n",
395 | "\t\t\tself.employees.remove(employee)\n",
396 | "\n",
397 | "\tdef get_info(self):\n",
398 | "\t\tres = \"Company: {}, employees: \".format(self.name)\n",
399 | "\t\tfor employee in self.employees:\n",
400 | "\t\t\tres += \", {}\".format(employee.get_info())\n",
401 | "\t\treturn res\n",
402 | "\n",
403 | "c = Company(\"Julyedu\")\n",
404 | "c.hire(july)\n",
405 | "c.hire(zewei)\n",
406 | "\n",
407 | "han = Employee(\"Han\", 3, \"Lecturer\", 100000, july)\n",
408 | "\n",
409 | "c.hire(han)\n",
410 | "\n",
411 | "print(c.get_info())\n",
412 | "\n",
413 | "print(\"Firing zewei!\")\n",
414 | "c.fire(zewei)\n",
415 | "print(c.get_info())\n",
416 | "\n",
417 | "print(\"Firing zewei!\")\n",
418 | "c.fire(zewei)\n",
419 | "print(c.get_info())\n",
420 | "# (70min)"
421 | ]
422 | },
423 | {
424 | "cell_type": "markdown",
425 | "metadata": {},
426 | "source": [
427 | "# Iterator and Generator\n",
428 | "\n",
429 | "## iterator\n",
430 | "\n"
431 | ]
432 | },
433 | {
434 | "cell_type": "code",
435 | "execution_count": 14,
436 | "metadata": {},
437 | "outputs": [
438 | {
439 | "name": "stdout",
440 | "output_type": "stream",
441 | "text": [
442 | "0\n",
443 | "1\n",
444 | "2\n",
445 | "3\n"
446 | ]
447 | },
448 | {
449 | "ename": "StopIteration",
450 | "evalue": "",
451 | "output_type": "error",
452 | "traceback": [
453 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
454 | "\u001b[1;31mStopIteration\u001b[0m Traceback (most recent call last)",
455 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
456 | "\u001b[1;31mStopIteration\u001b[0m: "
457 | ]
458 | }
459 | ],
460 | "source": [
461 | "x = iter([0, 1, 2, 3])\n",
462 | "print(next(x))\n",
463 | "print(next(x))\n",
464 | "print(next(x))\n",
465 | "print(next(x))\n",
466 | "print(next(x))"
467 | ]
468 | },
469 | {
470 | "cell_type": "markdown",
471 | "metadata": {
472 | "collapsed": true
473 | },
474 | "source": [
475 | "定义一个class的时候,如果我们在class中定义```__iter__```和```__next__```两个method就能把这个class变成一个iterator。\n"
476 | ]
477 | },
478 | {
479 | "cell_type": "code",
480 | "execution_count": 15,
481 | "metadata": {},
482 | "outputs": [
483 | {
484 | "name": "stdout",
485 | "output_type": "stream",
486 | "text": [
487 | "0\n",
488 | "1\n",
489 | "2\n",
490 | "3\n",
491 | "4\n",
492 | "5\n",
493 | "6\n",
494 | "7\n",
495 | "8\n",
496 | "9\n",
497 | "10\n",
498 | "11\n"
499 | ]
500 | }
501 | ],
502 | "source": [
503 | "class Yrange(object):\n",
504 | " def __init__(self, n):\n",
505 | " self.i = 0\n",
506 | " self.n = n\n",
507 | " def __iter__(self):\n",
508 | " return self\n",
509 | " def __next__(self):\n",
510 | " if self.i < self.n:\n",
511 | " i = self.i\n",
512 | " self.i += 1\n",
513 | " return i\n",
514 | " else:\n",
515 | " raise StopIteration\n",
516 | "for i in Yrange(12):\n",
517 | " print(i)"
518 | ]
519 | },
520 | {
521 | "cell_type": "markdown",
522 | "metadata": {},
523 | "source": [
524 | "## Generator\n",
525 | "\n"
526 | ]
527 | },
528 | {
529 | "cell_type": "code",
530 | "execution_count": 16,
531 | "metadata": {},
532 | "outputs": [
533 | {
534 | "name": "stdout",
535 | "output_type": "stream",
536 | "text": [
537 | "0\n",
538 | "1\n",
539 | "2\n",
540 | "3\n",
541 | "4\n"
542 | ]
543 | }
544 | ],
545 | "source": [
546 | "def zrange(n):\n",
547 | " i = 0\n",
548 | " while i < n:\n",
549 | " yield(i)\n",
550 | " i += 1\n",
551 | "\n",
552 | "for i in zrange(5):\n",
553 | " print(i)"
554 | ]
555 | },
556 | {
557 | "cell_type": "code",
558 | "execution_count": null,
559 | "metadata": {
560 | "collapsed": true
561 | },
562 | "outputs": [],
563 | "source": [
564 | "## enumerate和zip\n",
565 | "\n",
566 | "- enumerator\n",
567 | "\n",
568 | "\n"
569 | ]
570 | },
571 | {
572 | "cell_type": "code",
573 | "execution_count": 21,
574 | "metadata": {},
575 | "outputs": [
576 | {
577 | "name": "stdout",
578 | "output_type": "stream",
579 | "text": [
580 | "0 FB\n",
581 | "1 GOOGLE\n",
582 | "2 APPLE\n",
583 | "3 AMAZON\n"
584 | ]
585 | }
586 | ],
587 | "source": [
588 | "names = [\"FB\", \"GOOGLE\", \"APPLE\", \"AMAZON\"]\n",
589 | "for i, name in enumerate(names):\n",
590 | " print(i, name)"
591 | ]
592 | },
593 | {
594 | "cell_type": "markdown",
595 | "metadata": {},
596 | "source": [
597 | "还有一个function叫做zip"
598 | ]
599 | },
600 | {
601 | "cell_type": "code",
602 | "execution_count": 5,
603 | "metadata": {
604 | "scrolled": true
605 | },
606 | "outputs": [
607 | {
608 | "ename": "NameError",
609 | "evalue": "name 'names' is not defined",
610 | "output_type": "error",
611 | "traceback": [
612 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
613 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
614 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mnumbers\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;33m[\u001b[0m \u001b[1;34m\"{} {}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnames\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumbers\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# 90min\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
615 | "\u001b[1;31mNameError\u001b[0m: name 'names' is not defined"
616 | ]
617 | }
618 | ],
619 | "source": [
620 | "numbers = list(range(4))\n",
621 | "[ \"{} {}\".format(a, b) for a, b in zip(names, numbers) ]\n",
622 | "\n",
623 | "# 90min"
624 | ]
625 | },
626 | {
627 | "cell_type": "markdown",
628 | "metadata": {},
629 | "source": [
630 | "# csv和json格式数据\n",
631 | "\n",
632 | "## csv(comma separated values)\n",
633 | "\n",
634 | "关于module csv\n",
635 | "\n",
636 | "- reader\n",
637 | "- writer"
638 | ]
639 | },
640 | {
641 | "cell_type": "code",
642 | "execution_count": 28,
643 | "metadata": {
644 | "scrolled": true
645 | },
646 | "outputs": [
647 | {
648 | "name": "stdout",
649 | "output_type": "stream",
650 | "text": [
651 | "[['4/5/2015 13:34', 'Apples', '73'], ['4/5/2015 3:41', 'Cherries', '85'], ['4/6/2015 12:46', 'Pears', '14'], ['4/8/2015 8:59', 'Oranges', '52'], ['4/10/2015 2:07', 'Apples', '152'], ['4/10/2015 18:10', 'Bananas', '23'], ['4/10/2015 2:40', 'Strawberries', '98']]\n",
652 | "line #: 1, content: ['4/5/2015 13:34', 'Apples', '73']\n",
653 | "line #: 2, content: ['4/5/2015 3:41', 'Cherries', '85']\n",
654 | "line #: 3, content: ['4/6/2015 12:46', 'Pears', '14']\n",
655 | "line #: 4, content: ['4/8/2015 8:59', 'Oranges', '52']\n",
656 | "line #: 5, content: ['4/10/2015 2:07', 'Apples', '152']\n",
657 | "line #: 6, content: ['4/10/2015 18:10', 'Bananas', '23']\n",
658 | "line #: 7, content: ['4/10/2015 2:40', 'Strawberries', '98']\n"
659 | ]
660 | }
661 | ],
662 | "source": [
663 | "import csv\n",
664 | "\n",
665 | "\n",
666 | "in_file = open(\"data/sample.csv\", \"r\")\n",
667 | "csv_reader = csv.reader(in_file)\n",
668 | "data = list(csv_reader)\n",
669 | "print(data)\n",
670 | "in_file.close()\n",
671 | "\n",
672 | "in_file = open(\"data/sample.csv\", \"r\")\n",
673 | "csv_reader = csv.reader(in_file)\n",
674 | "for line in csv_reader:\n",
675 | "\tprint(\"line #: {}, content: {}\".format(csv_reader.line_num, line))\n",
676 | "in_file.close()\n",
677 | "\n",
678 | "out_file = open(\"output.csv\", \"w\")\n",
679 | "out_writer = csv.writer(out_file)\n",
680 | "out_writer.writerow([\"julyedu\", \"baidu\", \"tencent\", \"alibaba\"])\n",
681 | "out_writer.writerow([\"fb\", \"goog\", \"aapl\", \"amzn\"])\n",
682 | "out_writer.writerow([1, -2, 3.1111, 4.5])\n",
683 | "out_file.close()\n",
684 | "\n",
685 | "out_file = open(\"output.tsv\", \"w\")\n",
686 | "out_writer = csv.writer(out_file, delimiter=\"\\t\")\n",
687 | "out_writer.writerow([\"julyedu\", \"baidu\", \"tencent\", \"alibaba\"])\n",
688 | "out_writer.writerow([\"fb\", \"goog\", \"aapl\", \"amzn\"])\n",
689 | "out_writer.writerow([1, -2, 3.1111, 4.5])\n",
690 | "out_file.close()\n"
691 | ]
692 | },
693 | {
694 | "cell_type": "markdown",
695 | "metadata": {},
696 | "source": [
697 | "## json (javascript object notation)\n",
698 | "\n",
699 | "关于module json\n",
700 | "\n",
701 | "- loads\n",
702 | "- load\n",
703 | "- dumps\n",
704 | "- dump\n"
705 | ]
706 | },
707 | {
708 | "cell_type": "code",
709 | "execution_count": 31,
710 | "metadata": {
711 | "scrolled": true
712 | },
713 | "outputs": [
714 | {
715 | "name": "stdout",
716 | "output_type": "stream",
717 | "text": [
718 | "\n",
719 | "{'name': 'July', 'salary': 999999, 'title': 'CEO', 'manager': None}\n",
720 | "\n",
721 | "{'name': 'July', 'salary': 999999, 'title': 'CEO', 'manager': None}\n",
722 | "\n",
723 | "{\"name\": \"July\", \"salary\": 999999, \"title\": \"CEO\", \"manager\": null}\n"
724 | ]
725 | }
726 | ],
727 | "source": [
728 | "import json\n",
729 | "\n",
730 | "data = '{\"name\": \"July\", \"salary\": 999999, \"title\": \"CEO\", \"manager\": null}'\n",
731 | "\n",
732 | "json_data = json.loads(data)\n",
733 | "\n",
734 | "print(type(json_data))\n",
735 | "print(json_data)\n",
736 | "\n",
737 | "json_data = json.load(open(\"data/sample.json\", \"r\"))\n",
738 | "print(type(json_data))\n",
739 | "print(json_data)\n",
740 | "\n",
741 | "dumped_json = json.dumps(json_data)\n",
742 | "print(type(dumped_json))\n",
743 | "print(dumped_json)\n",
744 | "\n",
745 | "json.dump(json_data, open(\"data/out.json\", \"w\"))"
746 | ]
747 | },
748 | {
749 | "cell_type": "code",
750 | "execution_count": 6,
751 | "metadata": {
752 | "collapsed": true
753 | },
754 | "outputs": [],
755 | "source": [
756 | "# 120min"
757 | ]
758 | }
759 | ],
760 | "metadata": {
761 | "kernelspec": {
762 | "display_name": "Python 3",
763 | "language": "python",
764 | "name": "python3"
765 | },
766 | "language_info": {
767 | "codemirror_mode": {
768 | "name": "ipython",
769 | "version": 3
770 | },
771 | "file_extension": ".py",
772 | "mimetype": "text/x-python",
773 | "name": "python",
774 | "nbconvert_exporter": "python",
775 | "pygments_lexer": "ipython3",
776 | "version": "3.6.1"
777 | }
778 | },
779 | "nbformat": 4,
780 | "nbformat_minor": 2
781 | }
782 |
--------------------------------------------------------------------------------
/python-basic.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Python基础\n",
8 | "\n",
9 | "### 目录\n",
10 | "- python简介\n",
11 | "- 安装和运行\n",
12 | "- 基本数据类型\n",
13 | "- 变量和表达式\n",
14 | "- 字符串\n",
15 | "- list\n",
16 | "- 判断语句\n",
17 | "- 循环语句\n",
18 | "- set, tuple, dictionary"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "# Python简介\n",
26 | "- 官网: https://www.python.org/\n",
27 | "- 版本: **3.6**/2.7\n",
28 | "- 脚本语言,语法、调试都很方便,非常适合编程菜鸟入门\n",
29 | "\n",
30 | "## Python安装\n",
31 | "\n",
32 | "### Anaconda安装\n",
33 | "- Anaconda是一个常用的用于数据分析的Python版本管理系统\n",
34 | "- 从[官网](https://www.continuum.io/downloads)下载相应版本\n",
35 | "- 按照提示安装\n",
36 | "\n",
37 | "### Anaconda environment安装\n",
38 | "- 安装一个新的environment: conda create -n [your_environment_name] python=[your_python_version]\n",
39 | "- 进入已经安装的environment: source activate [your_environment_name]\n",
40 | "- 在windows下使用: activate [your_environment_name]\n",
41 | "- 退出当前environment: source deactivate\n",
42 | "- 查看environment: conda info --envs\n",
43 | "- 更多的conda命令请查询官网文档: https://conda.io/docs/index.html\n",
44 | "\n",
45 | "### 在environment下安装libraries\n",
46 | "- pip install [package_name]\n",
47 | "\n",
48 | "## 运行Python\n",
49 | "1. 在命令行上输入python\n",
50 | "2. 用文本编辑器写完一段程序然后运行\n",
51 | "\n",
52 | "## 如何寻找帮助\n",
53 | "- 官方文档\n",
54 | "- debug: 学会读报错信息\n",
55 | "- Goole和Stackoverflow\n",
56 | "\n",
57 | "(10 mins)"
58 | ]
59 | },
60 | {
61 | "cell_type": "markdown",
62 | "metadata": {},
63 | "source": [
64 | "## python程序基础\n",
65 | "### 用python做计算器\n",
66 | "- +, -, *\n",
67 | "- /, //\n",
68 | "- \\*\\*"
69 | ]
70 | },
71 | {
72 | "cell_type": "code",
73 | "execution_count": 2,
74 | "metadata": {},
75 | "outputs": [
76 | {
77 | "data": {
78 | "text/plain": [
79 | "34"
80 | ]
81 | },
82 | "execution_count": 2,
83 | "metadata": {},
84 | "output_type": "execute_result"
85 | }
86 | ],
87 | "source": [
88 | "12 + 22"
89 | ]
90 | },
91 | {
92 | "cell_type": "code",
93 | "execution_count": 3,
94 | "metadata": {},
95 | "outputs": [
96 | {
97 | "data": {
98 | "text/plain": [
99 | "54.0"
100 | ]
101 | },
102 | "execution_count": 3,
103 | "metadata": {},
104 | "output_type": "execute_result"
105 | }
106 | ],
107 | "source": [
108 | "15 * 3.6"
109 | ]
110 | },
111 | {
112 | "cell_type": "code",
113 | "execution_count": 4,
114 | "metadata": {},
115 | "outputs": [
116 | {
117 | "data": {
118 | "text/plain": [
119 | "20.7"
120 | ]
121 | },
122 | "execution_count": 4,
123 | "metadata": {},
124 | "output_type": "execute_result"
125 | }
126 | ],
127 | "source": [
128 | "25 - 4.3"
129 | ]
130 | },
131 | {
132 | "cell_type": "code",
133 | "execution_count": 5,
134 | "metadata": {},
135 | "outputs": [
136 | {
137 | "data": {
138 | "text/plain": [
139 | "6.25"
140 | ]
141 | },
142 | "execution_count": 5,
143 | "metadata": {},
144 | "output_type": "execute_result"
145 | }
146 | ],
147 | "source": [
148 | "25 / 4"
149 | ]
150 | },
151 | {
152 | "cell_type": "code",
153 | "execution_count": 7,
154 | "metadata": {},
155 | "outputs": [
156 | {
157 | "data": {
158 | "text/plain": [
159 | "6"
160 | ]
161 | },
162 | "execution_count": 7,
163 | "metadata": {},
164 | "output_type": "execute_result"
165 | }
166 | ],
167 | "source": [
168 | "25 // 4"
169 | ]
170 | },
171 | {
172 | "cell_type": "code",
173 | "execution_count": 9,
174 | "metadata": {},
175 | "outputs": [
176 | {
177 | "data": {
178 | "text/plain": [
179 | "280.7412308013823"
180 | ]
181 | },
182 | "execution_count": 9,
183 | "metadata": {},
184 | "output_type": "execute_result"
185 | }
186 | ],
187 | "source": [
188 | "3.5 ** 4.5"
189 | ]
190 | },
191 | {
192 | "cell_type": "markdown",
193 | "metadata": {},
194 | "source": [
195 | "- =, ==\n",
196 | "- string\n",
197 | "- escape"
198 | ]
199 | },
200 | {
201 | "cell_type": "markdown",
202 | "metadata": {},
203 | "source": [
204 | "# Python基本数据类型、变量、运算和表达式\n",
205 | "\n",
206 | "## 变量\n",
207 | "- 变量赋值(assignment)\n",
208 | "\n",
209 | "## 基本数据类型\n",
210 | "- 整型int\n",
211 | "- 浮点float\n",
212 | "- 数据类型强制转换\n",
213 | "- 四则运算\n",
214 | "- 字符串str\n",
215 | "- bool\n",
216 | "\n",
217 | "## 动态类型\n",
218 | "- python是一种动态类型的语言\n",
219 | "- type(来查看变量类型)"
220 | ]
221 | },
222 | {
223 | "cell_type": "code",
224 | "execution_count": 10,
225 | "metadata": {},
226 | "outputs": [
227 | {
228 | "data": {
229 | "text/plain": [
230 | "int"
231 | ]
232 | },
233 | "execution_count": 10,
234 | "metadata": {},
235 | "output_type": "execute_result"
236 | }
237 | ],
238 | "source": [
239 | "x = 12\n",
240 | "type(x)"
241 | ]
242 | },
243 | {
244 | "cell_type": "code",
245 | "execution_count": 11,
246 | "metadata": {},
247 | "outputs": [
248 | {
249 | "data": {
250 | "text/plain": [
251 | "float"
252 | ]
253 | },
254 | "execution_count": 11,
255 | "metadata": {},
256 | "output_type": "execute_result"
257 | }
258 | ],
259 | "source": [
260 | "x = -5.4\n",
261 | "type(x)"
262 | ]
263 | },
264 | {
265 | "cell_type": "code",
266 | "execution_count": 12,
267 | "metadata": {},
268 | "outputs": [
269 | {
270 | "data": {
271 | "text/plain": [
272 | "str"
273 | ]
274 | },
275 | "execution_count": 12,
276 | "metadata": {},
277 | "output_type": "execute_result"
278 | }
279 | ],
280 | "source": [
281 | "x = \"Julyedu\"\n",
282 | "type(x)"
283 | ]
284 | },
285 | {
286 | "cell_type": "code",
287 | "execution_count": 13,
288 | "metadata": {},
289 | "outputs": [
290 | {
291 | "data": {
292 | "text/plain": [
293 | "NoneType"
294 | ]
295 | },
296 | "execution_count": 13,
297 | "metadata": {},
298 | "output_type": "execute_result"
299 | }
300 | ],
301 | "source": [
302 | "x = None\n",
303 | "type(x)"
304 | ]
305 | },
306 | {
307 | "cell_type": "code",
308 | "execution_count": null,
309 | "metadata": {
310 | "collapsed": true
311 | },
312 | "outputs": [],
313 | "source": []
314 | },
315 | {
316 | "cell_type": "markdown",
317 | "metadata": {},
318 | "source": [
319 | "## 表达式(expression)\n",
320 | "- 引用变量\n",
321 | "- x += x, x *= y, x /= y\n",
322 | "- python会用表达式计算(返回)出一个结果\n",
323 | "\n",
324 | "## 指令(statement)\n",
325 | "- python会执行一条指令,未必会返回一个结果\n",
326 | "- expression可以被当做一个statement,但是statement一般不是一个expression\n",
327 | "- 赋值statement\n",
328 | "\n"
329 | ]
330 | },
331 | {
332 | "cell_type": "code",
333 | "execution_count": 14,
334 | "metadata": {
335 | "scrolled": true
336 | },
337 | "outputs": [
338 | {
339 | "data": {
340 | "text/plain": [
341 | "17"
342 | ]
343 | },
344 | "execution_count": 14,
345 | "metadata": {},
346 | "output_type": "execute_result"
347 | }
348 | ],
349 | "source": [
350 | "x = 12\n",
351 | "x + 5"
352 | ]
353 | },
354 | {
355 | "cell_type": "markdown",
356 | "metadata": {},
357 | "source": [
358 | "x"
359 | ]
360 | },
361 | {
362 | "cell_type": "code",
363 | "execution_count": 16,
364 | "metadata": {},
365 | "outputs": [
366 | {
367 | "data": {
368 | "text/plain": [
369 | "17"
370 | ]
371 | },
372 | "execution_count": 16,
373 | "metadata": {},
374 | "output_type": "execute_result"
375 | }
376 | ],
377 | "source": [
378 | "x += 5\n",
379 | "x"
380 | ]
381 | },
382 | {
383 | "cell_type": "code",
384 | "execution_count": 8,
385 | "metadata": {
386 | "collapsed": true
387 | },
388 | "outputs": [],
389 | "source": [
390 | "# 25min"
391 | ]
392 | },
393 | {
394 | "cell_type": "markdown",
395 | "metadata": {},
396 | "source": [
397 | "## 字符串(string)\n",
398 | "\n",
399 | "quote ' 和double quote \" 都可以用作字符串"
400 | ]
401 | },
402 | {
403 | "cell_type": "code",
404 | "execution_count": 17,
405 | "metadata": {},
406 | "outputs": [
407 | {
408 | "data": {
409 | "text/plain": [
410 | "'Julyedu'"
411 | ]
412 | },
413 | "execution_count": 17,
414 | "metadata": {},
415 | "output_type": "execute_result"
416 | }
417 | ],
418 | "source": [
419 | "'Julyedu'"
420 | ]
421 | },
422 | {
423 | "cell_type": "code",
424 | "execution_count": 18,
425 | "metadata": {},
426 | "outputs": [
427 | {
428 | "data": {
429 | "text/plain": [
430 | "'Julyedu'"
431 | ]
432 | },
433 | "execution_count": 18,
434 | "metadata": {},
435 | "output_type": "execute_result"
436 | }
437 | ],
438 | "source": [
439 | "\"Julyedu\""
440 | ]
441 | },
442 | {
443 | "cell_type": "markdown",
444 | "metadata": {},
445 | "source": [
446 | "两者之间在表示一个字符串上没有区别,但是一个字符串的开头和结尾必须使用同一种引号。\n",
447 | "backslash \\ 可以用来escape引号。"
448 | ]
449 | },
450 | {
451 | "cell_type": "code",
452 | "execution_count": 20,
453 | "metadata": {},
454 | "outputs": [
455 | {
456 | "data": {
457 | "text/plain": [
458 | "\"I'm gonna get up at 4am tomorrow\""
459 | ]
460 | },
461 | "execution_count": 20,
462 | "metadata": {},
463 | "output_type": "execute_result"
464 | }
465 | ],
466 | "source": [
467 | "'I\\'m gonna get up at 4am tomorrow'"
468 | ]
469 | },
470 | {
471 | "cell_type": "markdown",
472 | "metadata": {},
473 | "source": [
474 | "当然也可以使用两种不同的引号来区分究竟是字符串结尾还是字符串中出现了引号。"
475 | ]
476 | },
477 | {
478 | "cell_type": "code",
479 | "execution_count": 22,
480 | "metadata": {},
481 | "outputs": [
482 | {
483 | "data": {
484 | "text/plain": [
485 | "\"I'm gonna get up at 4am tomorrow\""
486 | ]
487 | },
488 | "execution_count": 22,
489 | "metadata": {},
490 | "output_type": "execute_result"
491 | }
492 | ],
493 | "source": [
494 | "\"I'm gonna get up at 4am tomorrow\""
495 | ]
496 | },
497 | {
498 | "cell_type": "markdown",
499 | "metadata": {},
500 | "source": [
501 | "如果一个string有好多行"
502 | ]
503 | },
504 | {
505 | "cell_type": "code",
506 | "execution_count": 23,
507 | "metadata": {},
508 | "outputs": [
509 | {
510 | "name": "stdout",
511 | "output_type": "stream",
512 | "text": [
513 | "first line\n",
514 | "second line\n",
515 | "third line\n"
516 | ]
517 | }
518 | ],
519 | "source": [
520 | "print(\"\"\"first line\n",
521 | "second line\n",
522 | "third line\"\"\")"
523 | ]
524 | },
525 | {
526 | "cell_type": "markdown",
527 | "metadata": {},
528 | "source": [
529 | "\\n 是换行符,可以用在strign中换行"
530 | ]
531 | },
532 | {
533 | "cell_type": "code",
534 | "execution_count": 25,
535 | "metadata": {},
536 | "outputs": [
537 | {
538 | "name": "stdout",
539 | "output_type": "stream",
540 | "text": [
541 | "first line\n",
542 | "second line\n",
543 | "thirdline\n"
544 | ]
545 | }
546 | ],
547 | "source": [
548 | "print(\"first line\\nsecond line\\nthirdline\")"
549 | ]
550 | },
551 | {
552 | "cell_type": "markdown",
553 | "metadata": {},
554 | "source": [
555 | "\\t是tab键"
556 | ]
557 | },
558 | {
559 | "cell_type": "markdown",
560 | "metadata": {},
561 | "source": [
562 | "+可以把两个string连到一起(concatenation)"
563 | ]
564 | },
565 | {
566 | "cell_type": "code",
567 | "execution_count": 26,
568 | "metadata": {},
569 | "outputs": [
570 | {
571 | "data": {
572 | "text/plain": [
573 | "'hello world'"
574 | ]
575 | },
576 | "execution_count": 26,
577 | "metadata": {},
578 | "output_type": "execute_result"
579 | }
580 | ],
581 | "source": [
582 | "\"hello\" + \" \" + \"world\""
583 | ]
584 | },
585 | {
586 | "cell_type": "markdown",
587 | "metadata": {},
588 | "source": [
589 | "## string indexing and slicing\n",
590 | "- indexing"
591 | ]
592 | },
593 | {
594 | "cell_type": "code",
595 | "execution_count": 28,
596 | "metadata": {},
597 | "outputs": [
598 | {
599 | "data": {
600 | "text/plain": [
601 | "'J'"
602 | ]
603 | },
604 | "execution_count": 28,
605 | "metadata": {},
606 | "output_type": "execute_result"
607 | }
608 | ],
609 | "source": [
610 | "w = \"Julyedu\"\n",
611 | "w[0]"
612 | ]
613 | },
614 | {
615 | "cell_type": "code",
616 | "execution_count": 29,
617 | "metadata": {},
618 | "outputs": [
619 | {
620 | "data": {
621 | "text/plain": [
622 | "'u'"
623 | ]
624 | },
625 | "execution_count": 29,
626 | "metadata": {},
627 | "output_type": "execute_result"
628 | }
629 | ],
630 | "source": [
631 | "w[1]"
632 | ]
633 | },
634 | {
635 | "cell_type": "code",
636 | "execution_count": 31,
637 | "metadata": {},
638 | "outputs": [
639 | {
640 | "data": {
641 | "text/plain": [
642 | "'u'"
643 | ]
644 | },
645 | "execution_count": 31,
646 | "metadata": {},
647 | "output_type": "execute_result"
648 | }
649 | ],
650 | "source": [
651 | "w[-1]"
652 | ]
653 | },
654 | {
655 | "cell_type": "code",
656 | "execution_count": 32,
657 | "metadata": {},
658 | "outputs": [
659 | {
660 | "data": {
661 | "text/plain": [
662 | "'e'"
663 | ]
664 | },
665 | "execution_count": 32,
666 | "metadata": {},
667 | "output_type": "execute_result"
668 | }
669 | ],
670 | "source": [
671 | "w[-3]"
672 | ]
673 | },
674 | {
675 | "cell_type": "code",
676 | "execution_count": 33,
677 | "metadata": {},
678 | "outputs": [
679 | {
680 | "ename": "IndexError",
681 | "evalue": "string index out of range",
682 | "output_type": "error",
683 | "traceback": [
684 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
685 | "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
686 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mw\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
687 | "\u001b[1;31mIndexError\u001b[0m: string index out of range"
688 | ]
689 | }
690 | ],
691 | "source": [
692 | "w[-100]"
693 | ]
694 | },
695 | {
696 | "cell_type": "markdown",
697 | "metadata": {},
698 | "source": [
699 | "- slicing"
700 | ]
701 | },
702 | {
703 | "cell_type": "code",
704 | "execution_count": 34,
705 | "metadata": {},
706 | "outputs": [
707 | {
708 | "data": {
709 | "text/plain": [
710 | "'ul'"
711 | ]
712 | },
713 | "execution_count": 34,
714 | "metadata": {},
715 | "output_type": "execute_result"
716 | }
717 | ],
718 | "source": [
719 | "w[1:3]"
720 | ]
721 | },
722 | {
723 | "cell_type": "code",
724 | "execution_count": 35,
725 | "metadata": {},
726 | "outputs": [
727 | {
728 | "data": {
729 | "text/plain": [
730 | "'Jul'"
731 | ]
732 | },
733 | "execution_count": 35,
734 | "metadata": {},
735 | "output_type": "execute_result"
736 | }
737 | ],
738 | "source": [
739 | "w[:3]"
740 | ]
741 | },
742 | {
743 | "cell_type": "code",
744 | "execution_count": 36,
745 | "metadata": {},
746 | "outputs": [
747 | {
748 | "data": {
749 | "text/plain": [
750 | "'du'"
751 | ]
752 | },
753 | "execution_count": 36,
754 | "metadata": {},
755 | "output_type": "execute_result"
756 | }
757 | ],
758 | "source": [
759 | "w[5:7]"
760 | ]
761 | },
762 | {
763 | "cell_type": "code",
764 | "execution_count": 37,
765 | "metadata": {},
766 | "outputs": [
767 | {
768 | "data": {
769 | "text/plain": [
770 | "'d'"
771 | ]
772 | },
773 | "execution_count": 37,
774 | "metadata": {},
775 | "output_type": "execute_result"
776 | }
777 | ],
778 | "source": [
779 | "w[5:-1]"
780 | ]
781 | },
782 | {
783 | "cell_type": "code",
784 | "execution_count": 38,
785 | "metadata": {},
786 | "outputs": [
787 | {
788 | "data": {
789 | "text/plain": [
790 | "'du'"
791 | ]
792 | },
793 | "execution_count": 38,
794 | "metadata": {},
795 | "output_type": "execute_result"
796 | }
797 | ],
798 | "source": [
799 | "w[5:]"
800 | ]
801 | },
802 | {
803 | "cell_type": "code",
804 | "execution_count": 39,
805 | "metadata": {},
806 | "outputs": [
807 | {
808 | "data": {
809 | "text/plain": [
810 | "'du'"
811 | ]
812 | },
813 | "execution_count": 39,
814 | "metadata": {},
815 | "output_type": "execute_result"
816 | }
817 | ],
818 | "source": [
819 | "w[5:100]"
820 | ]
821 | },
822 | {
823 | "cell_type": "code",
824 | "execution_count": 40,
825 | "metadata": {},
826 | "outputs": [
827 | {
828 | "data": {
829 | "text/plain": [
830 | "'u'"
831 | ]
832 | },
833 | "execution_count": 40,
834 | "metadata": {},
835 | "output_type": "execute_result"
836 | }
837 | ],
838 | "source": [
839 | "w[-1:100]"
840 | ]
841 | },
842 | {
843 | "cell_type": "markdown",
844 | "metadata": {},
845 | "source": [
846 | "## 字符串函数\n",
847 | "\n",
848 | "- upper and lower"
849 | ]
850 | },
851 | {
852 | "cell_type": "code",
853 | "execution_count": 41,
854 | "metadata": {},
855 | "outputs": [
856 | {
857 | "data": {
858 | "text/plain": [
859 | "'JULYEDU'"
860 | ]
861 | },
862 | "execution_count": 41,
863 | "metadata": {},
864 | "output_type": "execute_result"
865 | }
866 | ],
867 | "source": [
868 | "w.upper()"
869 | ]
870 | },
871 | {
872 | "cell_type": "code",
873 | "execution_count": 42,
874 | "metadata": {},
875 | "outputs": [
876 | {
877 | "data": {
878 | "text/plain": [
879 | "'julyedu'"
880 | ]
881 | },
882 | "execution_count": 42,
883 | "metadata": {},
884 | "output_type": "execute_result"
885 | }
886 | ],
887 | "source": [
888 | "w.lower()"
889 | ]
890 | },
891 | {
892 | "cell_type": "code",
893 | "execution_count": 43,
894 | "metadata": {},
895 | "outputs": [
896 | {
897 | "data": {
898 | "text/plain": [
899 | "'Julyedu'"
900 | ]
901 | },
902 | "execution_count": 43,
903 | "metadata": {},
904 | "output_type": "execute_result"
905 | }
906 | ],
907 | "source": [
908 | "w.capitalize()"
909 | ]
910 | },
911 | {
912 | "cell_type": "markdown",
913 | "metadata": {},
914 | "source": [
915 | "- startswith and endswith"
916 | ]
917 | },
918 | {
919 | "cell_type": "code",
920 | "execution_count": 44,
921 | "metadata": {},
922 | "outputs": [
923 | {
924 | "data": {
925 | "text/plain": [
926 | "True"
927 | ]
928 | },
929 | "execution_count": 44,
930 | "metadata": {},
931 | "output_type": "execute_result"
932 | }
933 | ],
934 | "source": [
935 | "w.endswith(\"du\")"
936 | ]
937 | },
938 | {
939 | "cell_type": "code",
940 | "execution_count": 45,
941 | "metadata": {},
942 | "outputs": [
943 | {
944 | "data": {
945 | "text/plain": [
946 | "True"
947 | ]
948 | },
949 | "execution_count": 45,
950 | "metadata": {},
951 | "output_type": "execute_result"
952 | }
953 | ],
954 | "source": [
955 | "w.endswith(\"u\")"
956 | ]
957 | },
958 | {
959 | "cell_type": "code",
960 | "execution_count": 46,
961 | "metadata": {},
962 | "outputs": [
963 | {
964 | "data": {
965 | "text/plain": [
966 | "True"
967 | ]
968 | },
969 | "execution_count": 46,
970 | "metadata": {},
971 | "output_type": "execute_result"
972 | }
973 | ],
974 | "source": [
975 | "w.startswith(\"J\")"
976 | ]
977 | },
978 | {
979 | "cell_type": "code",
980 | "execution_count": 47,
981 | "metadata": {},
982 | "outputs": [
983 | {
984 | "data": {
985 | "text/plain": [
986 | "False"
987 | ]
988 | },
989 | "execution_count": 47,
990 | "metadata": {},
991 | "output_type": "execute_result"
992 | }
993 | ],
994 | "source": [
995 | "w.startswith(\"j\")"
996 | ]
997 | },
998 | {
999 | "cell_type": "code",
1000 | "execution_count": 48,
1001 | "metadata": {},
1002 | "outputs": [
1003 | {
1004 | "data": {
1005 | "text/plain": [
1006 | "True"
1007 | ]
1008 | },
1009 | "execution_count": 48,
1010 | "metadata": {},
1011 | "output_type": "execute_result"
1012 | }
1013 | ],
1014 | "source": [
1015 | "w.startswith(\"Ju\")"
1016 | ]
1017 | },
1018 | {
1019 | "cell_type": "markdown",
1020 | "metadata": {},
1021 | "source": [
1022 | "- strip"
1023 | ]
1024 | },
1025 | {
1026 | "cell_type": "code",
1027 | "execution_count": 50,
1028 | "metadata": {},
1029 | "outputs": [
1030 | {
1031 | "data": {
1032 | "text/plain": [
1033 | "'Julyedu'"
1034 | ]
1035 | },
1036 | "execution_count": 50,
1037 | "metadata": {},
1038 | "output_type": "execute_result"
1039 | }
1040 | ],
1041 | "source": [
1042 | "w = \" Julyedu \"\n",
1043 | "w.strip()"
1044 | ]
1045 | },
1046 | {
1047 | "cell_type": "code",
1048 | "execution_count": 51,
1049 | "metadata": {},
1050 | "outputs": [
1051 | {
1052 | "data": {
1053 | "text/plain": [
1054 | "'Julyedu '"
1055 | ]
1056 | },
1057 | "execution_count": 51,
1058 | "metadata": {},
1059 | "output_type": "execute_result"
1060 | }
1061 | ],
1062 | "source": [
1063 | "w.lstrip()"
1064 | ]
1065 | },
1066 | {
1067 | "cell_type": "code",
1068 | "execution_count": 52,
1069 | "metadata": {},
1070 | "outputs": [
1071 | {
1072 | "data": {
1073 | "text/plain": [
1074 | "' Julyedu'"
1075 | ]
1076 | },
1077 | "execution_count": 52,
1078 | "metadata": {},
1079 | "output_type": "execute_result"
1080 | }
1081 | ],
1082 | "source": [
1083 | "w.rstrip()"
1084 | ]
1085 | },
1086 | {
1087 | "cell_type": "markdown",
1088 | "metadata": {},
1089 | "source": [
1090 | "- split\n",
1091 | "把一个string拆成一个list of strings"
1092 | ]
1093 | },
1094 | {
1095 | "cell_type": "code",
1096 | "execution_count": 54,
1097 | "metadata": {},
1098 | "outputs": [
1099 | {
1100 | "data": {
1101 | "text/plain": [
1102 | "['burger', 'spaghetti', 'fries', 'steak', 'dimsum', 'ramen']"
1103 | ]
1104 | },
1105 | "execution_count": 54,
1106 | "metadata": {},
1107 | "output_type": "execute_result"
1108 | }
1109 | ],
1110 | "source": [
1111 | "s = \"burger spaghetti fries steak dimsum ramen\"\n",
1112 | "s.split()"
1113 | ]
1114 | },
1115 | {
1116 | "cell_type": "code",
1117 | "execution_count": 55,
1118 | "metadata": {
1119 | "collapsed": true
1120 | },
1121 | "outputs": [],
1122 | "source": [
1123 | "s = \"burger,spaghetti,fries,steak,dimsum,ramen\""
1124 | ]
1125 | },
1126 | {
1127 | "cell_type": "code",
1128 | "execution_count": 56,
1129 | "metadata": {},
1130 | "outputs": [
1131 | {
1132 | "data": {
1133 | "text/plain": [
1134 | "['burger', 'spaghetti', 'fries', 'steak', 'dimsum', 'ramen']"
1135 | ]
1136 | },
1137 | "execution_count": 56,
1138 | "metadata": {},
1139 | "output_type": "execute_result"
1140 | }
1141 | ],
1142 | "source": [
1143 | "s.split(\",\")"
1144 | ]
1145 | },
1146 | {
1147 | "cell_type": "markdown",
1148 | "metadata": {},
1149 | "source": [
1150 | "- find: 找到第一个substring出现的位置"
1151 | ]
1152 | },
1153 | {
1154 | "cell_type": "code",
1155 | "execution_count": 57,
1156 | "metadata": {},
1157 | "outputs": [
1158 | {
1159 | "data": {
1160 | "text/plain": [
1161 | "5"
1162 | ]
1163 | },
1164 | "execution_count": 57,
1165 | "metadata": {},
1166 | "output_type": "execute_result"
1167 | }
1168 | ],
1169 | "source": [
1170 | "w.find(\"ly\")"
1171 | ]
1172 | },
1173 | {
1174 | "cell_type": "code",
1175 | "execution_count": 59,
1176 | "metadata": {},
1177 | "outputs": [
1178 | {
1179 | "data": {
1180 | "text/plain": [
1181 | "5"
1182 | ]
1183 | },
1184 | "execution_count": 59,
1185 | "metadata": {},
1186 | "output_type": "execute_result"
1187 | }
1188 | ],
1189 | "source": [
1190 | "w.find(\"l\")"
1191 | ]
1192 | },
1193 | {
1194 | "cell_type": "markdown",
1195 | "metadata": {},
1196 | "source": [
1197 | "如果输入一个不存在的substring那就会返回-1了"
1198 | ]
1199 | },
1200 | {
1201 | "cell_type": "code",
1202 | "execution_count": 60,
1203 | "metadata": {},
1204 | "outputs": [
1205 | {
1206 | "data": {
1207 | "text/plain": [
1208 | "-1"
1209 | ]
1210 | },
1211 | "execution_count": 60,
1212 | "metadata": {},
1213 | "output_type": "execute_result"
1214 | }
1215 | ],
1216 | "source": [
1217 | "w.find(\"a\")"
1218 | ]
1219 | },
1220 | {
1221 | "cell_type": "markdown",
1222 | "metadata": {},
1223 | "source": [
1224 | "- replace"
1225 | ]
1226 | },
1227 | {
1228 | "cell_type": "code",
1229 | "execution_count": 61,
1230 | "metadata": {},
1231 | "outputs": [
1232 | {
1233 | "data": {
1234 | "text/plain": [
1235 | "'burger|spaghetti|fries|steak|dimsum|ramen'"
1236 | ]
1237 | },
1238 | "execution_count": 61,
1239 | "metadata": {},
1240 | "output_type": "execute_result"
1241 | }
1242 | ],
1243 | "source": [
1244 | "s.replace(\",\", \"|\")"
1245 | ]
1246 | },
1247 | {
1248 | "cell_type": "code",
1249 | "execution_count": 9,
1250 | "metadata": {
1251 | "collapsed": true
1252 | },
1253 | "outputs": [],
1254 | "source": [
1255 | "# 40min"
1256 | ]
1257 | },
1258 | {
1259 | "cell_type": "markdown",
1260 | "metadata": {},
1261 | "source": [
1262 | "# List\n",
1263 | "\n",
1264 | "list 是一种python的数据类型,表示一连串的数据的集合。\n",
1265 | "\n",
1266 | "- 如何创建一个list"
1267 | ]
1268 | },
1269 | {
1270 | "cell_type": "code",
1271 | "execution_count": 62,
1272 | "metadata": {},
1273 | "outputs": [
1274 | {
1275 | "data": {
1276 | "text/plain": [
1277 | "['Tensorflow', 'July', 'Keras', 'Torch', 'Caffe']"
1278 | ]
1279 | },
1280 | "execution_count": 62,
1281 | "metadata": {},
1282 | "output_type": "execute_result"
1283 | }
1284 | ],
1285 | "source": [
1286 | "names = [\"Tensorflow\", \"July\", \"Keras\", \"Torch\", \"Caffe\"]\n",
1287 | "names"
1288 | ]
1289 | },
1290 | {
1291 | "cell_type": "code",
1292 | "execution_count": 63,
1293 | "metadata": {},
1294 | "outputs": [
1295 | {
1296 | "data": {
1297 | "text/plain": [
1298 | "list"
1299 | ]
1300 | },
1301 | "execution_count": 63,
1302 | "metadata": {},
1303 | "output_type": "execute_result"
1304 | }
1305 | ],
1306 | "source": [
1307 | "type(names)"
1308 | ]
1309 | },
1310 | {
1311 | "cell_type": "markdown",
1312 | "metadata": {},
1313 | "source": [
1314 | "- list indexing"
1315 | ]
1316 | },
1317 | {
1318 | "cell_type": "code",
1319 | "execution_count": 64,
1320 | "metadata": {},
1321 | "outputs": [
1322 | {
1323 | "data": {
1324 | "text/plain": [
1325 | "'Tensorflow'"
1326 | ]
1327 | },
1328 | "execution_count": 64,
1329 | "metadata": {},
1330 | "output_type": "execute_result"
1331 | }
1332 | ],
1333 | "source": [
1334 | "names[0]"
1335 | ]
1336 | },
1337 | {
1338 | "cell_type": "code",
1339 | "execution_count": 65,
1340 | "metadata": {},
1341 | "outputs": [
1342 | {
1343 | "data": {
1344 | "text/plain": [
1345 | "'July'"
1346 | ]
1347 | },
1348 | "execution_count": 65,
1349 | "metadata": {},
1350 | "output_type": "execute_result"
1351 | }
1352 | ],
1353 | "source": [
1354 | "names[1]"
1355 | ]
1356 | },
1357 | {
1358 | "cell_type": "code",
1359 | "execution_count": 66,
1360 | "metadata": {},
1361 | "outputs": [
1362 | {
1363 | "ename": "IndexError",
1364 | "evalue": "list index out of range",
1365 | "output_type": "error",
1366 | "traceback": [
1367 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
1368 | "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
1369 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnames\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1370 | "\u001b[1;31mIndexError\u001b[0m: list index out of range"
1371 | ]
1372 | }
1373 | ],
1374 | "source": [
1375 | "names[5]"
1376 | ]
1377 | },
1378 | {
1379 | "cell_type": "code",
1380 | "execution_count": 67,
1381 | "metadata": {},
1382 | "outputs": [
1383 | {
1384 | "data": {
1385 | "text/plain": [
1386 | "'Caffe'"
1387 | ]
1388 | },
1389 | "execution_count": 67,
1390 | "metadata": {},
1391 | "output_type": "execute_result"
1392 | }
1393 | ],
1394 | "source": [
1395 | "names[4]"
1396 | ]
1397 | },
1398 | {
1399 | "cell_type": "code",
1400 | "execution_count": 68,
1401 | "metadata": {},
1402 | "outputs": [
1403 | {
1404 | "data": {
1405 | "text/plain": [
1406 | "'Caffe'"
1407 | ]
1408 | },
1409 | "execution_count": 68,
1410 | "metadata": {},
1411 | "output_type": "execute_result"
1412 | }
1413 | ],
1414 | "source": [
1415 | "names[-1]"
1416 | ]
1417 | },
1418 | {
1419 | "cell_type": "code",
1420 | "execution_count": 70,
1421 | "metadata": {},
1422 | "outputs": [
1423 | {
1424 | "data": {
1425 | "text/plain": [
1426 | "'Tensorflow'"
1427 | ]
1428 | },
1429 | "execution_count": 70,
1430 | "metadata": {},
1431 | "output_type": "execute_result"
1432 | }
1433 | ],
1434 | "source": [
1435 | "names[-5]"
1436 | ]
1437 | },
1438 | {
1439 | "cell_type": "code",
1440 | "execution_count": 71,
1441 | "metadata": {},
1442 | "outputs": [
1443 | {
1444 | "ename": "IndexError",
1445 | "evalue": "list index out of range",
1446 | "output_type": "error",
1447 | "traceback": [
1448 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
1449 | "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
1450 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnames\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1451 | "\u001b[1;31mIndexError\u001b[0m: list index out of range"
1452 | ]
1453 | }
1454 | ],
1455 | "source": [
1456 | "names[-10]"
1457 | ]
1458 | },
1459 | {
1460 | "cell_type": "markdown",
1461 | "metadata": {},
1462 | "source": [
1463 | "- list slicing"
1464 | ]
1465 | },
1466 | {
1467 | "cell_type": "code",
1468 | "execution_count": 72,
1469 | "metadata": {},
1470 | "outputs": [
1471 | {
1472 | "data": {
1473 | "text/plain": [
1474 | "['July', 'Keras']"
1475 | ]
1476 | },
1477 | "execution_count": 72,
1478 | "metadata": {},
1479 | "output_type": "execute_result"
1480 | }
1481 | ],
1482 | "source": [
1483 | "names[1:3]"
1484 | ]
1485 | },
1486 | {
1487 | "cell_type": "code",
1488 | "execution_count": 73,
1489 | "metadata": {},
1490 | "outputs": [
1491 | {
1492 | "data": {
1493 | "text/plain": [
1494 | "['July', 'Keras', 'Torch', 'Caffe']"
1495 | ]
1496 | },
1497 | "execution_count": 73,
1498 | "metadata": {},
1499 | "output_type": "execute_result"
1500 | }
1501 | ],
1502 | "source": [
1503 | "names[1:5]"
1504 | ]
1505 | },
1506 | {
1507 | "cell_type": "code",
1508 | "execution_count": 74,
1509 | "metadata": {},
1510 | "outputs": [
1511 | {
1512 | "data": {
1513 | "text/plain": [
1514 | "['July', 'Keras', 'Torch', 'Caffe']"
1515 | ]
1516 | },
1517 | "execution_count": 74,
1518 | "metadata": {},
1519 | "output_type": "execute_result"
1520 | }
1521 | ],
1522 | "source": [
1523 | "names[1:7]"
1524 | ]
1525 | },
1526 | {
1527 | "cell_type": "code",
1528 | "execution_count": 75,
1529 | "metadata": {},
1530 | "outputs": [
1531 | {
1532 | "data": {
1533 | "text/plain": [
1534 | "['July', 'Keras', 'Torch']"
1535 | ]
1536 | },
1537 | "execution_count": 75,
1538 | "metadata": {},
1539 | "output_type": "execute_result"
1540 | }
1541 | ],
1542 | "source": [
1543 | "names[1:-1]"
1544 | ]
1545 | },
1546 | {
1547 | "cell_type": "code",
1548 | "execution_count": 76,
1549 | "metadata": {},
1550 | "outputs": [
1551 | {
1552 | "data": {
1553 | "text/plain": [
1554 | "[]"
1555 | ]
1556 | },
1557 | "execution_count": 76,
1558 | "metadata": {},
1559 | "output_type": "execute_result"
1560 | }
1561 | ],
1562 | "source": [
1563 | "names[1:0]"
1564 | ]
1565 | },
1566 | {
1567 | "cell_type": "markdown",
1568 | "metadata": {},
1569 | "source": [
1570 | "- 我们可以直接把string变成一个list"
1571 | ]
1572 | },
1573 | {
1574 | "cell_type": "code",
1575 | "execution_count": 77,
1576 | "metadata": {},
1577 | "outputs": [
1578 | {
1579 | "data": {
1580 | "text/plain": [
1581 | "['J', 'u', 'l', 'y', 'e', 'd', 'u']"
1582 | ]
1583 | },
1584 | "execution_count": 77,
1585 | "metadata": {},
1586 | "output_type": "execute_result"
1587 | }
1588 | ],
1589 | "source": [
1590 | "list(\"Julyedu\")"
1591 | ]
1592 | },
1593 | {
1594 | "cell_type": "markdown",
1595 | "metadata": {},
1596 | "source": [
1597 | "- 求list的长度"
1598 | ]
1599 | },
1600 | {
1601 | "cell_type": "markdown",
1602 | "metadata": {},
1603 | "source": [
1604 | "- append方法可以在list的末尾添加element"
1605 | ]
1606 | },
1607 | {
1608 | "cell_type": "code",
1609 | "execution_count": 80,
1610 | "metadata": {},
1611 | "outputs": [
1612 | {
1613 | "data": {
1614 | "text/plain": [
1615 | "['Tensorflow', 'July', 'Keras', 'Torch', 'Caffe', 'Jack', 'Jack']"
1616 | ]
1617 | },
1618 | "execution_count": 80,
1619 | "metadata": {},
1620 | "output_type": "execute_result"
1621 | }
1622 | ],
1623 | "source": [
1624 | "names.append(\"Jack\")\n",
1625 | "names"
1626 | ]
1627 | },
1628 | {
1629 | "cell_type": "code",
1630 | "execution_count": 81,
1631 | "metadata": {},
1632 | "outputs": [
1633 | {
1634 | "data": {
1635 | "text/plain": [
1636 | "['Tensorflow',\n",
1637 | " 'July',\n",
1638 | " 'Keras',\n",
1639 | " 'Torch',\n",
1640 | " 'Caffe',\n",
1641 | " 'Jack',\n",
1642 | " 'Jack',\n",
1643 | " 12,\n",
1644 | " 12.5,\n",
1645 | " [1, 2, 3]]"
1646 | ]
1647 | },
1648 | "execution_count": 81,
1649 | "metadata": {},
1650 | "output_type": "execute_result"
1651 | }
1652 | ],
1653 | "source": [
1654 | "names.append(12)\n",
1655 | "names.append(12.5)\n",
1656 | "names.append([1,2,3])\n",
1657 | "names"
1658 | ]
1659 | },
1660 | {
1661 | "cell_type": "markdown",
1662 | "metadata": {},
1663 | "source": [
1664 | "- 两个list相加合并成新的list"
1665 | ]
1666 | },
1667 | {
1668 | "cell_type": "code",
1669 | "execution_count": 82,
1670 | "metadata": {},
1671 | "outputs": [
1672 | {
1673 | "data": {
1674 | "text/plain": [
1675 | "['Tensorflow',\n",
1676 | " 'July',\n",
1677 | " 'Keras',\n",
1678 | " 'Torch',\n",
1679 | " 'Caffe',\n",
1680 | " 'Jack',\n",
1681 | " 'Jack',\n",
1682 | " 12,\n",
1683 | " 12.5,\n",
1684 | " [1, 2, 3],\n",
1685 | " 1,\n",
1686 | " 2,\n",
1687 | " 3,\n",
1688 | " 4,\n",
1689 | " 5]"
1690 | ]
1691 | },
1692 | "execution_count": 82,
1693 | "metadata": {},
1694 | "output_type": "execute_result"
1695 | }
1696 | ],
1697 | "source": [
1698 | "numbers = [1,2,3,4,5]\n",
1699 | "names + numbers"
1700 | ]
1701 | },
1702 | {
1703 | "cell_type": "markdown",
1704 | "metadata": {},
1705 | "source": [
1706 | "- 判断一个element是否在一个list里面"
1707 | ]
1708 | },
1709 | {
1710 | "cell_type": "code",
1711 | "execution_count": 83,
1712 | "metadata": {
1713 | "collapsed": true
1714 | },
1715 | "outputs": [],
1716 | "source": [
1717 | "names = [\"Tensorflow\", \"July\", \"Keras\", \"Torch\", \"Caffe\"]"
1718 | ]
1719 | },
1720 | {
1721 | "cell_type": "code",
1722 | "execution_count": 84,
1723 | "metadata": {},
1724 | "outputs": [
1725 | {
1726 | "data": {
1727 | "text/plain": [
1728 | "True"
1729 | ]
1730 | },
1731 | "execution_count": 84,
1732 | "metadata": {},
1733 | "output_type": "execute_result"
1734 | }
1735 | ],
1736 | "source": [
1737 | "\"July\" in names"
1738 | ]
1739 | },
1740 | {
1741 | "cell_type": "markdown",
1742 | "metadata": {},
1743 | "source": [
1744 | "- insert"
1745 | ]
1746 | },
1747 | {
1748 | "cell_type": "code",
1749 | "execution_count": 85,
1750 | "metadata": {},
1751 | "outputs": [
1752 | {
1753 | "data": {
1754 | "text/plain": [
1755 | "['Tensorflow', 'July', 'Happy', 'Keras', 'Torch', 'Caffe']"
1756 | ]
1757 | },
1758 | "execution_count": 85,
1759 | "metadata": {},
1760 | "output_type": "execute_result"
1761 | }
1762 | ],
1763 | "source": [
1764 | "names.insert(2, \"Happy\")\n",
1765 | "names"
1766 | ]
1767 | },
1768 | {
1769 | "cell_type": "code",
1770 | "execution_count": 86,
1771 | "metadata": {},
1772 | "outputs": [
1773 | {
1774 | "data": {
1775 | "text/plain": [
1776 | "['Tensorflow', 'July', 'Happy', 'Keras', 'Torch', 'Sad', 'Caffe']"
1777 | ]
1778 | },
1779 | "execution_count": 86,
1780 | "metadata": {},
1781 | "output_type": "execute_result"
1782 | }
1783 | ],
1784 | "source": [
1785 | "names.insert(-1, \"Sad\")\n",
1786 | "names"
1787 | ]
1788 | },
1789 | {
1790 | "cell_type": "code",
1791 | "execution_count": 87,
1792 | "metadata": {},
1793 | "outputs": [
1794 | {
1795 | "data": {
1796 | "text/plain": [
1797 | "['Tensorflow', 'July', 'Happy', 'Keras', 'Torch', 'Sad', 'Caffe', 'Awesome']"
1798 | ]
1799 | },
1800 | "execution_count": 87,
1801 | "metadata": {},
1802 | "output_type": "execute_result"
1803 | }
1804 | ],
1805 | "source": [
1806 | "names.insert(12, \"Awesome\")\n",
1807 | "names"
1808 | ]
1809 | },
1810 | {
1811 | "cell_type": "code",
1812 | "execution_count": 88,
1813 | "metadata": {},
1814 | "outputs": [
1815 | {
1816 | "data": {
1817 | "text/plain": [
1818 | "['Bazinga',\n",
1819 | " 'Tensorflow',\n",
1820 | " 'July',\n",
1821 | " 'Happy',\n",
1822 | " 'Keras',\n",
1823 | " 'Torch',\n",
1824 | " 'Sad',\n",
1825 | " 'Caffe',\n",
1826 | " 'Awesome']"
1827 | ]
1828 | },
1829 | "execution_count": 88,
1830 | "metadata": {},
1831 | "output_type": "execute_result"
1832 | }
1833 | ],
1834 | "source": [
1835 | "names.insert(-100, \"Bazinga\")\n",
1836 | "names"
1837 | ]
1838 | },
1839 | {
1840 | "cell_type": "markdown",
1841 | "metadata": {},
1842 | "source": [
1843 | "- pop"
1844 | ]
1845 | },
1846 | {
1847 | "cell_type": "code",
1848 | "execution_count": 90,
1849 | "metadata": {},
1850 | "outputs": [
1851 | {
1852 | "data": {
1853 | "text/plain": [
1854 | "'Caffe'"
1855 | ]
1856 | },
1857 | "execution_count": 90,
1858 | "metadata": {},
1859 | "output_type": "execute_result"
1860 | }
1861 | ],
1862 | "source": [
1863 | "names.pop()"
1864 | ]
1865 | },
1866 | {
1867 | "cell_type": "code",
1868 | "execution_count": null,
1869 | "metadata": {
1870 | "collapsed": true
1871 | },
1872 | "outputs": [],
1873 | "source": []
1874 | },
1875 | {
1876 | "cell_type": "code",
1877 | "execution_count": 91,
1878 | "metadata": {},
1879 | "outputs": [
1880 | {
1881 | "data": {
1882 | "text/plain": [
1883 | "['Bazinga', 'Tensorflow', 'July', 'Happy', 'Keras', 'Torch', 'Sad']"
1884 | ]
1885 | },
1886 | "execution_count": 91,
1887 | "metadata": {},
1888 | "output_type": "execute_result"
1889 | }
1890 | ],
1891 | "source": [
1892 | "names"
1893 | ]
1894 | },
1895 | {
1896 | "cell_type": "markdown",
1897 | "metadata": {},
1898 | "source": [
1899 | "- count\n"
1900 | ]
1901 | },
1902 | {
1903 | "cell_type": "code",
1904 | "execution_count": 92,
1905 | "metadata": {},
1906 | "outputs": [
1907 | {
1908 | "data": {
1909 | "text/plain": [
1910 | "1"
1911 | ]
1912 | },
1913 | "execution_count": 92,
1914 | "metadata": {},
1915 | "output_type": "execute_result"
1916 | }
1917 | ],
1918 | "source": [
1919 | "names.count(\"Tensorflow\")"
1920 | ]
1921 | },
1922 | {
1923 | "cell_type": "markdown",
1924 | "metadata": {},
1925 | "source": [
1926 | "- reverse"
1927 | ]
1928 | },
1929 | {
1930 | "cell_type": "code",
1931 | "execution_count": 95,
1932 | "metadata": {},
1933 | "outputs": [
1934 | {
1935 | "data": {
1936 | "text/plain": [
1937 | "['Sad', 'Torch', 'Keras', 'Happy', 'July', 'Tensorflow', 'Bazinga']"
1938 | ]
1939 | },
1940 | "execution_count": 95,
1941 | "metadata": {},
1942 | "output_type": "execute_result"
1943 | }
1944 | ],
1945 | "source": [
1946 | "names.reverse()\n",
1947 | "names"
1948 | ]
1949 | },
1950 | {
1951 | "cell_type": "markdown",
1952 | "metadata": {},
1953 | "source": [
1954 | "- del删除element"
1955 | ]
1956 | },
1957 | {
1958 | "cell_type": "code",
1959 | "execution_count": 96,
1960 | "metadata": {
1961 | "collapsed": true
1962 | },
1963 | "outputs": [],
1964 | "source": [
1965 | "del(names[1])"
1966 | ]
1967 | },
1968 | {
1969 | "cell_type": "code",
1970 | "execution_count": 97,
1971 | "metadata": {},
1972 | "outputs": [
1973 | {
1974 | "data": {
1975 | "text/plain": [
1976 | "['Sad', 'Keras', 'Happy', 'July', 'Tensorflow', 'Bazinga']"
1977 | ]
1978 | },
1979 | "execution_count": 97,
1980 | "metadata": {},
1981 | "output_type": "execute_result"
1982 | }
1983 | ],
1984 | "source": [
1985 | "names"
1986 | ]
1987 | },
1988 | {
1989 | "cell_type": "code",
1990 | "execution_count": 10,
1991 | "metadata": {
1992 | "collapsed": true
1993 | },
1994 | "outputs": [],
1995 | "source": [
1996 | "# 55min"
1997 | ]
1998 | },
1999 | {
2000 | "cell_type": "markdown",
2001 | "metadata": {},
2002 | "source": [
2003 | "## control statement"
2004 | ]
2005 | },
2006 | {
2007 | "cell_type": "code",
2008 | "execution_count": 98,
2009 | "metadata": {},
2010 | "outputs": [
2011 | {
2012 | "name": "stdout",
2013 | "output_type": "stream",
2014 | "text": [
2015 | "between 10 and 15\n"
2016 | ]
2017 | }
2018 | ],
2019 | "source": [
2020 | "x = 12\n",
2021 | "if x < 10:\n",
2022 | " print(\"less than 10\")\n",
2023 | "elif x <= 15:\n",
2024 | " print(\"between 10 and 15\")\n",
2025 | "else:\n",
2026 | " print(\"larger than 15\")"
2027 | ]
2028 | },
2029 | {
2030 | "cell_type": "markdown",
2031 | "metadata": {},
2032 | "source": [
2033 | "### 关于Boolean"
2034 | ]
2035 | },
2036 | {
2037 | "cell_type": "code",
2038 | "execution_count": 11,
2039 | "metadata": {
2040 | "collapsed": true
2041 | },
2042 | "outputs": [],
2043 | "source": [
2044 | "# 60 min"
2045 | ]
2046 | },
2047 | {
2048 | "cell_type": "markdown",
2049 | "metadata": {},
2050 | "source": [
2051 | "## loops\n",
2052 | "### for loop"
2053 | ]
2054 | },
2055 | {
2056 | "cell_type": "code",
2057 | "execution_count": 99,
2058 | "metadata": {},
2059 | "outputs": [
2060 | {
2061 | "name": "stdout",
2062 | "output_type": "stream",
2063 | "text": [
2064 | "Tensorflow\n",
2065 | "July\n",
2066 | "Keras\n",
2067 | "Torch\n",
2068 | "Caffe\n"
2069 | ]
2070 | }
2071 | ],
2072 | "source": [
2073 | "names = [\"Tensorflow\", \"July\", \"Keras\", \"Torch\", \"Caffe\"]\n",
2074 | "for name in names:\n",
2075 | " print(name)"
2076 | ]
2077 | },
2078 | {
2079 | "cell_type": "markdown",
2080 | "metadata": {},
2081 | "source": [
2082 | "range function"
2083 | ]
2084 | },
2085 | {
2086 | "cell_type": "code",
2087 | "execution_count": 100,
2088 | "metadata": {},
2089 | "outputs": [
2090 | {
2091 | "name": "stdout",
2092 | "output_type": "stream",
2093 | "text": [
2094 | "0\n",
2095 | "1\n",
2096 | "2\n",
2097 | "3\n",
2098 | "4\n"
2099 | ]
2100 | }
2101 | ],
2102 | "source": [
2103 | "for i in range(5):\n",
2104 | " print(i)"
2105 | ]
2106 | },
2107 | {
2108 | "cell_type": "markdown",
2109 | "metadata": {},
2110 | "source": [
2111 | "关于range的用法"
2112 | ]
2113 | },
2114 | {
2115 | "cell_type": "code",
2116 | "execution_count": 101,
2117 | "metadata": {},
2118 | "outputs": [
2119 | {
2120 | "data": {
2121 | "text/plain": [
2122 | "[1, 2, 3, 4, 5, 6, 7, 8, 9]"
2123 | ]
2124 | },
2125 | "execution_count": 101,
2126 | "metadata": {},
2127 | "output_type": "execute_result"
2128 | }
2129 | ],
2130 | "source": [
2131 | "list(range(1,10))"
2132 | ]
2133 | },
2134 | {
2135 | "cell_type": "code",
2136 | "execution_count": 102,
2137 | "metadata": {},
2138 | "outputs": [
2139 | {
2140 | "data": {
2141 | "text/plain": [
2142 | "[5, 6, 7, 8, 9]"
2143 | ]
2144 | },
2145 | "execution_count": 102,
2146 | "metadata": {},
2147 | "output_type": "execute_result"
2148 | }
2149 | ],
2150 | "source": [
2151 | "list(range(5,10))"
2152 | ]
2153 | },
2154 | {
2155 | "cell_type": "code",
2156 | "execution_count": 103,
2157 | "metadata": {},
2158 | "outputs": [
2159 | {
2160 | "data": {
2161 | "text/plain": [
2162 | "[5, 10, 15]"
2163 | ]
2164 | },
2165 | "execution_count": 103,
2166 | "metadata": {},
2167 | "output_type": "execute_result"
2168 | }
2169 | ],
2170 | "source": [
2171 | "list(range(5,20,5))"
2172 | ]
2173 | },
2174 | {
2175 | "cell_type": "code",
2176 | "execution_count": 104,
2177 | "metadata": {},
2178 | "outputs": [
2179 | {
2180 | "data": {
2181 | "text/plain": [
2182 | "[5, 8, 11, 14, 17]"
2183 | ]
2184 | },
2185 | "execution_count": 104,
2186 | "metadata": {},
2187 | "output_type": "execute_result"
2188 | }
2189 | ],
2190 | "source": [
2191 | "list(range(5,20,3))"
2192 | ]
2193 | },
2194 | {
2195 | "cell_type": "code",
2196 | "execution_count": 105,
2197 | "metadata": {},
2198 | "outputs": [
2199 | {
2200 | "data": {
2201 | "text/plain": [
2202 | "[]"
2203 | ]
2204 | },
2205 | "execution_count": 105,
2206 | "metadata": {},
2207 | "output_type": "execute_result"
2208 | }
2209 | ],
2210 | "source": [
2211 | "list(range(5,20,-1))"
2212 | ]
2213 | },
2214 | {
2215 | "cell_type": "code",
2216 | "execution_count": 106,
2217 | "metadata": {},
2218 | "outputs": [
2219 | {
2220 | "data": {
2221 | "text/plain": [
2222 | "[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6]"
2223 | ]
2224 | },
2225 | "execution_count": 106,
2226 | "metadata": {},
2227 | "output_type": "execute_result"
2228 | }
2229 | ],
2230 | "source": [
2231 | "list(range(20,5,-1))"
2232 | ]
2233 | },
2234 | {
2235 | "cell_type": "code",
2236 | "execution_count": 107,
2237 | "metadata": {},
2238 | "outputs": [
2239 | {
2240 | "data": {
2241 | "text/plain": [
2242 | "[20, 16, 12, 8]"
2243 | ]
2244 | },
2245 | "execution_count": 107,
2246 | "metadata": {},
2247 | "output_type": "execute_result"
2248 | }
2249 | ],
2250 | "source": [
2251 | "list(range(20,5,-4))"
2252 | ]
2253 | },
2254 | {
2255 | "cell_type": "code",
2256 | "execution_count": 108,
2257 | "metadata": {},
2258 | "outputs": [
2259 | {
2260 | "data": {
2261 | "text/plain": [
2262 | "[20, 16, 12, 8]"
2263 | ]
2264 | },
2265 | "execution_count": 108,
2266 | "metadata": {},
2267 | "output_type": "execute_result"
2268 | }
2269 | ],
2270 | "source": [
2271 | "list(range(20,5,-4))"
2272 | ]
2273 | },
2274 | {
2275 | "cell_type": "markdown",
2276 | "metadata": {},
2277 | "source": [
2278 | "如果我们想在每个element前面加个数字编号呢?"
2279 | ]
2280 | },
2281 | {
2282 | "cell_type": "code",
2283 | "execution_count": 109,
2284 | "metadata": {},
2285 | "outputs": [
2286 | {
2287 | "name": "stdout",
2288 | "output_type": "stream",
2289 | "text": [
2290 | "0 Tensorflow\n",
2291 | "1 July\n",
2292 | "2 Keras\n",
2293 | "3 Torch\n",
2294 | "4 Caffe\n"
2295 | ]
2296 | }
2297 | ],
2298 | "source": [
2299 | "for i in range(len(names)):\n",
2300 | " print(i, names[i])"
2301 | ]
2302 | },
2303 | {
2304 | "cell_type": "markdown",
2305 | "metadata": {},
2306 | "source": [
2307 | "其实用enumerate更简单,直接帮你带上数字"
2308 | ]
2309 | },
2310 | {
2311 | "cell_type": "code",
2312 | "execution_count": 110,
2313 | "metadata": {},
2314 | "outputs": [
2315 | {
2316 | "name": "stdout",
2317 | "output_type": "stream",
2318 | "text": [
2319 | "0 Tensorflow\n",
2320 | "1 July\n",
2321 | "2 Keras\n",
2322 | "3 Torch\n",
2323 | "4 Caffe\n"
2324 | ]
2325 | }
2326 | ],
2327 | "source": [
2328 | "for i, name in enumerate(names):\n",
2329 | " print(i, name)"
2330 | ]
2331 | },
2332 | {
2333 | "cell_type": "markdown",
2334 | "metadata": {},
2335 | "source": [
2336 | "for与list在一起使用可以写很多简洁的语句, list comprehension"
2337 | ]
2338 | },
2339 | {
2340 | "cell_type": "code",
2341 | "execution_count": 111,
2342 | "metadata": {},
2343 | "outputs": [
2344 | {
2345 | "data": {
2346 | "text/plain": [
2347 | "['stupid Tensorflow',\n",
2348 | " 'stupid July',\n",
2349 | " 'stupid Keras',\n",
2350 | " 'stupid Torch',\n",
2351 | " 'stupid Caffe']"
2352 | ]
2353 | },
2354 | "execution_count": 111,
2355 | "metadata": {},
2356 | "output_type": "execute_result"
2357 | }
2358 | ],
2359 | "source": [
2360 | "[\"stupid \" + name for name in names]\n",
2361 | "['stupid Tensorflow', 'stupid July', 'stupid Keras', 'stupid Torch', 'stupid Caffe']"
2362 | ]
2363 | },
2364 | {
2365 | "cell_type": "code",
2366 | "execution_count": 12,
2367 | "metadata": {
2368 | "collapsed": true
2369 | },
2370 | "outputs": [],
2371 | "source": [
2372 | "# 80 min"
2373 | ]
2374 | },
2375 | {
2376 | "cell_type": "markdown",
2377 | "metadata": {},
2378 | "source": [
2379 | "## while loop\n",
2380 | "\n",
2381 | "下面的这个小程序可以输出0-9"
2382 | ]
2383 | },
2384 | {
2385 | "cell_type": "code",
2386 | "execution_count": 112,
2387 | "metadata": {},
2388 | "outputs": [
2389 | {
2390 | "name": "stdout",
2391 | "output_type": "stream",
2392 | "text": [
2393 | "0\n",
2394 | "1\n",
2395 | "2\n",
2396 | "3\n",
2397 | "4\n",
2398 | "5\n",
2399 | "6\n",
2400 | "7\n",
2401 | "8\n",
2402 | "9\n"
2403 | ]
2404 | }
2405 | ],
2406 | "source": [
2407 | "i = 0\n",
2408 | "while i < 10:\n",
2409 | "\tprint(i)\n",
2410 | "\ti += 1"
2411 | ]
2412 | },
2413 | {
2414 | "cell_type": "markdown",
2415 | "metadata": {},
2416 | "source": [
2417 | "注意千万别忘了最后这一句```i += 1```否则就陷入死循环了。\n",
2418 | "\n",
2419 | "### break和continue的用法\n",
2420 | "- break会直接让你跳出当前的循环"
2421 | ]
2422 | },
2423 | {
2424 | "cell_type": "code",
2425 | "execution_count": 113,
2426 | "metadata": {},
2427 | "outputs": [
2428 | {
2429 | "name": "stdout",
2430 | "output_type": "stream",
2431 | "text": [
2432 | "0\n",
2433 | "1\n",
2434 | "2\n",
2435 | "3\n",
2436 | "4\n",
2437 | "5\n",
2438 | "6\n",
2439 | "7\n",
2440 | "8\n",
2441 | "9\n"
2442 | ]
2443 | }
2444 | ],
2445 | "source": [
2446 | "i = 0\n",
2447 | "while 1:\n",
2448 | "\tprint(i)\n",
2449 | "\ti += 1\n",
2450 | "\tif i >= 10:\n",
2451 | "\t\tbreak"
2452 | ]
2453 | },
2454 | {
2455 | "cell_type": "markdown",
2456 | "metadata": {},
2457 | "source": [
2458 | "\n",
2459 | "- continue则会让你结束当前循环的环节直接跳到下一循环"
2460 | ]
2461 | },
2462 | {
2463 | "cell_type": "code",
2464 | "execution_count": 114,
2465 | "metadata": {},
2466 | "outputs": [
2467 | {
2468 | "name": "stdout",
2469 | "output_type": "stream",
2470 | "text": [
2471 | "1\n",
2472 | "2\n",
2473 | "3\n",
2474 | "4\n",
2475 | "6\n",
2476 | "7\n",
2477 | "8\n",
2478 | "9\n",
2479 | "11\n",
2480 | "12\n",
2481 | "13\n",
2482 | "14\n",
2483 | "16\n",
2484 | "17\n",
2485 | "18\n",
2486 | "19\n"
2487 | ]
2488 | }
2489 | ],
2490 | "source": [
2491 | "i = 0\n",
2492 | "while 1:\n",
2493 | "\tif i % 5 == 0:\n",
2494 | "\t\ti += 1\n",
2495 | "\t\tcontinue\n",
2496 | "\tprint(i)\n",
2497 | "\ti += 1\n",
2498 | "\t\n",
2499 | "\tif i >= 20:\n",
2500 | "\t\tbreak"
2501 | ]
2502 | },
2503 | {
2504 | "cell_type": "markdown",
2505 | "metadata": {},
2506 | "source": [
2507 | "## 小练习:输出一个fibonacci数列"
2508 | ]
2509 | },
2510 | {
2511 | "cell_type": "code",
2512 | "execution_count": null,
2513 | "metadata": {
2514 | "collapsed": true
2515 | },
2516 | "outputs": [],
2517 | "source": []
2518 | },
2519 | {
2520 | "cell_type": "code",
2521 | "execution_count": 116,
2522 | "metadata": {},
2523 | "outputs": [
2524 | {
2525 | "name": "stdout",
2526 | "output_type": "stream",
2527 | "text": [
2528 | "while loop:\n",
2529 | "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]\n"
2530 | ]
2531 | }
2532 | ],
2533 | "source": [
2534 | "print(\"while loop:\")\n",
2535 | "fibs = []\n",
2536 | "i = 0\n",
2537 | "j = 1\n",
2538 | "while i < 500:\n",
2539 | "\tfibs.append(i)\n",
2540 | "\ttmp = j\n",
2541 | "\tj = i + j\n",
2542 | "\ti = tmp\n",
2543 | "print(fibs)"
2544 | ]
2545 | },
2546 | {
2547 | "cell_type": "code",
2548 | "execution_count": 13,
2549 | "metadata": {
2550 | "collapsed": true
2551 | },
2552 | "outputs": [],
2553 | "source": [
2554 | "# 95 min"
2555 | ]
2556 | },
2557 | {
2558 | "cell_type": "code",
2559 | "execution_count": null,
2560 | "metadata": {
2561 | "collapsed": true
2562 | },
2563 | "outputs": [],
2564 | "source": []
2565 | },
2566 | {
2567 | "cell_type": "markdown",
2568 | "metadata": {},
2569 | "source": [
2570 | "## set"
2571 | ]
2572 | },
2573 | {
2574 | "cell_type": "code",
2575 | "execution_count": 117,
2576 | "metadata": {},
2577 | "outputs": [
2578 | {
2579 | "data": {
2580 | "text/plain": [
2581 | "{'julyedu', 'jupyter', 'numpy', 'python', 'pytorch', 'tensorflow'}"
2582 | ]
2583 | },
2584 | "execution_count": 117,
2585 | "metadata": {},
2586 | "output_type": "execute_result"
2587 | }
2588 | ],
2589 | "source": [
2590 | "names = {\"tensorflow\", \"pytorch\", \"julyedu\", \"jupyter\", \"python\", \"numpy\"}\n",
2591 | "names"
2592 | ]
2593 | },
2594 | {
2595 | "cell_type": "code",
2596 | "execution_count": 118,
2597 | "metadata": {},
2598 | "outputs": [
2599 | {
2600 | "data": {
2601 | "text/plain": [
2602 | "set"
2603 | ]
2604 | },
2605 | "execution_count": 118,
2606 | "metadata": {},
2607 | "output_type": "execute_result"
2608 | }
2609 | ],
2610 | "source": [
2611 | "type(names)"
2612 | ]
2613 | },
2614 | {
2615 | "cell_type": "code",
2616 | "execution_count": 119,
2617 | "metadata": {},
2618 | "outputs": [
2619 | {
2620 | "data": {
2621 | "text/plain": [
2622 | "set()"
2623 | ]
2624 | },
2625 | "execution_count": 119,
2626 | "metadata": {},
2627 | "output_type": "execute_result"
2628 | }
2629 | ],
2630 | "source": [
2631 | "empty_set = set()\n",
2632 | "empty_set"
2633 | ]
2634 | },
2635 | {
2636 | "cell_type": "markdown",
2637 | "metadata": {},
2638 | "source": [
2639 | "- list可以被转换成set,可以用于去重"
2640 | ]
2641 | },
2642 | {
2643 | "cell_type": "code",
2644 | "execution_count": null,
2645 | "metadata": {
2646 | "collapsed": true
2647 | },
2648 | "outputs": [],
2649 | "source": []
2650 | },
2651 | {
2652 | "cell_type": "code",
2653 | "execution_count": 120,
2654 | "metadata": {},
2655 | "outputs": [
2656 | {
2657 | "data": {
2658 | "text/plain": [
2659 | "[1, 4, 5, 2, 1, 5, 4, 2]"
2660 | ]
2661 | },
2662 | "execution_count": 120,
2663 | "metadata": {},
2664 | "output_type": "execute_result"
2665 | }
2666 | ],
2667 | "source": [
2668 | "numbers = [1,4,5,2,1,5,4,2]\n",
2669 | "numbers"
2670 | ]
2671 | },
2672 | {
2673 | "cell_type": "code",
2674 | "execution_count": 121,
2675 | "metadata": {},
2676 | "outputs": [
2677 | {
2678 | "data": {
2679 | "text/plain": [
2680 | "{1, 2, 4, 5}"
2681 | ]
2682 | },
2683 | "execution_count": 121,
2684 | "metadata": {},
2685 | "output_type": "execute_result"
2686 | }
2687 | ],
2688 | "source": [
2689 | "set(numbers)"
2690 | ]
2691 | },
2692 | {
2693 | "cell_type": "code",
2694 | "execution_count": 122,
2695 | "metadata": {},
2696 | "outputs": [
2697 | {
2698 | "data": {
2699 | "text/plain": [
2700 | "[1, 2, 4, 5]"
2701 | ]
2702 | },
2703 | "execution_count": 122,
2704 | "metadata": {},
2705 | "output_type": "execute_result"
2706 | }
2707 | ],
2708 | "source": [
2709 | "list(set(numbers))"
2710 | ]
2711 | },
2712 | {
2713 | "cell_type": "markdown",
2714 | "metadata": {},
2715 | "source": [
2716 | "- string也可以被转换成set"
2717 | ]
2718 | },
2719 | {
2720 | "cell_type": "code",
2721 | "execution_count": 123,
2722 | "metadata": {},
2723 | "outputs": [
2724 | {
2725 | "data": {
2726 | "text/plain": [
2727 | "{'a', 'b', 'n'}"
2728 | ]
2729 | },
2730 | "execution_count": 123,
2731 | "metadata": {},
2732 | "output_type": "execute_result"
2733 | }
2734 | ],
2735 | "source": [
2736 | "set(\"banana\")"
2737 | ]
2738 | },
2739 | {
2740 | "cell_type": "markdown",
2741 | "metadata": {},
2742 | "source": [
2743 | "- 比较fancy的一个例子, set comprehension\n"
2744 | ]
2745 | },
2746 | {
2747 | "cell_type": "code",
2748 | "execution_count": 124,
2749 | "metadata": {},
2750 | "outputs": [
2751 | {
2752 | "data": {
2753 | "text/plain": [
2754 | "{'b'}"
2755 | ]
2756 | },
2757 | "execution_count": 124,
2758 | "metadata": {},
2759 | "output_type": "execute_result"
2760 | }
2761 | ],
2762 | "source": [
2763 | "{x for x in \"banana\" if x not in \"an\"}"
2764 | ]
2765 | },
2766 | {
2767 | "cell_type": "markdown",
2768 | "metadata": {},
2769 | "source": [
2770 | "## tuple\n",
2771 | "tuples有点像list,不过一个很大的区别是tuples是immutable的,也就是说它的element一旦创建之后就无法更改了。"
2772 | ]
2773 | },
2774 | {
2775 | "cell_type": "code",
2776 | "execution_count": 125,
2777 | "metadata": {},
2778 | "outputs": [
2779 | {
2780 | "data": {
2781 | "text/plain": [
2782 | "(1, 'facebook', 'palo alto')"
2783 | ]
2784 | },
2785 | "execution_count": 125,
2786 | "metadata": {},
2787 | "output_type": "execute_result"
2788 | }
2789 | ],
2790 | "source": [
2791 | "t = 1, \"facebook\", \"palo alto\"\n",
2792 | "t"
2793 | ]
2794 | },
2795 | {
2796 | "cell_type": "code",
2797 | "execution_count": 126,
2798 | "metadata": {},
2799 | "outputs": [
2800 | {
2801 | "data": {
2802 | "text/plain": [
2803 | "'palo alto'"
2804 | ]
2805 | },
2806 | "execution_count": 126,
2807 | "metadata": {},
2808 | "output_type": "execute_result"
2809 | }
2810 | ],
2811 | "source": [
2812 | "x, y, z = t\n",
2813 | "x\n",
2814 | "y\n",
2815 | "z"
2816 | ]
2817 | },
2818 | {
2819 | "cell_type": "markdown",
2820 | "metadata": {},
2821 | "source": [
2822 | "## dictionary\n",
2823 | "\n",
2824 | "dictionary就是字典,也就是把一个元素map到另一个元素上"
2825 | ]
2826 | },
2827 | {
2828 | "cell_type": "code",
2829 | "execution_count": 127,
2830 | "metadata": {
2831 | "collapsed": true
2832 | },
2833 | "outputs": [],
2834 | "source": [
2835 | "fruit = {'apple': 0, 'banana': 2, 'orange': 3, 'pineapple': 4}"
2836 | ]
2837 | },
2838 | {
2839 | "cell_type": "code",
2840 | "execution_count": 128,
2841 | "metadata": {},
2842 | "outputs": [
2843 | {
2844 | "data": {
2845 | "text/plain": [
2846 | "0"
2847 | ]
2848 | },
2849 | "execution_count": 128,
2850 | "metadata": {},
2851 | "output_type": "execute_result"
2852 | }
2853 | ],
2854 | "source": [
2855 | "fruit[\"apple\"]"
2856 | ]
2857 | },
2858 | {
2859 | "cell_type": "code",
2860 | "execution_count": 129,
2861 | "metadata": {},
2862 | "outputs": [
2863 | {
2864 | "data": {
2865 | "text/plain": [
2866 | "2"
2867 | ]
2868 | },
2869 | "execution_count": 129,
2870 | "metadata": {},
2871 | "output_type": "execute_result"
2872 | }
2873 | ],
2874 | "source": [
2875 | "fruit[\"banana\"]"
2876 | ]
2877 | },
2878 | {
2879 | "cell_type": "markdown",
2880 | "metadata": {},
2881 | "source": [
2882 | "下面的方法可以帮助我们查看一个dictionary的keys和values"
2883 | ]
2884 | },
2885 | {
2886 | "cell_type": "code",
2887 | "execution_count": 130,
2888 | "metadata": {},
2889 | "outputs": [
2890 | {
2891 | "data": {
2892 | "text/plain": [
2893 | "dict_keys(['apple', 'banana', 'orange', 'pineapple'])"
2894 | ]
2895 | },
2896 | "execution_count": 130,
2897 | "metadata": {},
2898 | "output_type": "execute_result"
2899 | }
2900 | ],
2901 | "source": [
2902 | "fruit.keys()"
2903 | ]
2904 | },
2905 | {
2906 | "cell_type": "code",
2907 | "execution_count": 131,
2908 | "metadata": {},
2909 | "outputs": [
2910 | {
2911 | "data": {
2912 | "text/plain": [
2913 | "dict_values([0, 2, 3, 4])"
2914 | ]
2915 | },
2916 | "execution_count": 131,
2917 | "metadata": {},
2918 | "output_type": "execute_result"
2919 | }
2920 | ],
2921 | "source": [
2922 | "fruit.values()"
2923 | ]
2924 | },
2925 | {
2926 | "cell_type": "markdown",
2927 | "metadata": {},
2928 | "source": [
2929 | "- 一个list of tuples也可以转换成dict。"
2930 | ]
2931 | },
2932 | {
2933 | "cell_type": "code",
2934 | "execution_count": 132,
2935 | "metadata": {},
2936 | "outputs": [
2937 | {
2938 | "data": {
2939 | "text/plain": [
2940 | "{'Chicago': 6,\n",
2941 | " 'Harvard': 1,\n",
2942 | " 'MIT': 5,\n",
2943 | " 'Princeton': 2,\n",
2944 | " 'Stanford': 4,\n",
2945 | " 'Yale': 3}"
2946 | ]
2947 | },
2948 | "execution_count": 132,
2949 | "metadata": {},
2950 | "output_type": "execute_result"
2951 | }
2952 | ],
2953 | "source": [
2954 | "schools = dict([(\"Harvard\",1), (\"Princeton\",2), (\"Yale\",3), (\"Stanford\",4), (\"MIT\",5), (\"Chicago\",6)])\n",
2955 | "schools"
2956 | ]
2957 | },
2958 | {
2959 | "cell_type": "markdown",
2960 | "metadata": {},
2961 | "source": [
2962 | "有时候我们想把一个list编号做成一个dictionary,比如下面这种情况:"
2963 | ]
2964 | },
2965 | {
2966 | "cell_type": "code",
2967 | "execution_count": 133,
2968 | "metadata": {
2969 | "collapsed": true
2970 | },
2971 | "outputs": [],
2972 | "source": [
2973 | "vocab = [\"apple\", \"bit\", \"chrome\", \"face\", \"google\", \"hack\", \"intern\", \"jack\", \"kaggle\"]"
2974 | ]
2975 | },
2976 | {
2977 | "cell_type": "code",
2978 | "execution_count": 134,
2979 | "metadata": {},
2980 | "outputs": [
2981 | {
2982 | "data": {
2983 | "text/plain": [
2984 | "['apple',\n",
2985 | " 'bit',\n",
2986 | " 'chrome',\n",
2987 | " 'face',\n",
2988 | " 'google',\n",
2989 | " 'hack',\n",
2990 | " 'intern',\n",
2991 | " 'jack',\n",
2992 | " 'kaggle']"
2993 | ]
2994 | },
2995 | "execution_count": 134,
2996 | "metadata": {},
2997 | "output_type": "execute_result"
2998 | }
2999 | ],
3000 | "source": [
3001 | "vocab"
3002 | ]
3003 | },
3004 | {
3005 | "cell_type": "code",
3006 | "execution_count": 135,
3007 | "metadata": {
3008 | "collapsed": true
3009 | },
3010 | "outputs": [],
3011 | "source": [
3012 | "vocab2idx = {v:k for k, v in enumerate(vocab)}"
3013 | ]
3014 | },
3015 | {
3016 | "cell_type": "code",
3017 | "execution_count": 136,
3018 | "metadata": {},
3019 | "outputs": [
3020 | {
3021 | "data": {
3022 | "text/plain": [
3023 | "{'apple': 0,\n",
3024 | " 'bit': 1,\n",
3025 | " 'chrome': 2,\n",
3026 | " 'face': 3,\n",
3027 | " 'google': 4,\n",
3028 | " 'hack': 5,\n",
3029 | " 'intern': 6,\n",
3030 | " 'jack': 7,\n",
3031 | " 'kaggle': 8}"
3032 | ]
3033 | },
3034 | "execution_count": 136,
3035 | "metadata": {},
3036 | "output_type": "execute_result"
3037 | }
3038 | ],
3039 | "source": [
3040 | "vocab2idx"
3041 | ]
3042 | },
3043 | {
3044 | "cell_type": "code",
3045 | "execution_count": 15,
3046 | "metadata": {
3047 | "collapsed": true
3048 | },
3049 | "outputs": [],
3050 | "source": [
3051 | "# 115 min"
3052 | ]
3053 | },
3054 | {
3055 | "cell_type": "markdown",
3056 | "metadata": {},
3057 | "source": [
3058 | "## function\n",
3059 | "\n",
3060 | "- def关键词\n",
3061 | "- 用括号包含list of parameters\n",
3062 | "- statements都要indent\n"
3063 | ]
3064 | },
3065 | {
3066 | "cell_type": "markdown",
3067 | "metadata": {},
3068 | "source": [
3069 | "\n",
3070 | "### 不定长度的arguments\n",
3071 | "\n"
3072 | ]
3073 | },
3074 | {
3075 | "cell_type": "markdown",
3076 | "metadata": {},
3077 | "source": [
3078 | "### default argument\n",
3079 | "concat例子\n",
3080 | "\n"
3081 | ]
3082 | },
3083 | {
3084 | "cell_type": "markdown",
3085 | "metadata": {},
3086 | "source": [
3087 | "\n",
3088 | "\n",
3089 | "### 把一个tuple/list当做arguments\n",
3090 | "\n"
3091 | ]
3092 | }
3093 | ],
3094 | "metadata": {
3095 | "kernelspec": {
3096 | "display_name": "Python 3",
3097 | "language": "python",
3098 | "name": "python3"
3099 | },
3100 | "language_info": {
3101 | "codemirror_mode": {
3102 | "name": "ipython",
3103 | "version": 3
3104 | },
3105 | "file_extension": ".py",
3106 | "mimetype": "text/x-python",
3107 | "name": "python",
3108 | "nbconvert_exporter": "python",
3109 | "pygments_lexer": "ipython3",
3110 | "version": "3.6.1"
3111 | }
3112 | },
3113 | "nbformat": 4,
3114 | "nbformat_minor": 2
3115 | }
3116 |
--------------------------------------------------------------------------------
/python-basic-student.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Python基础\n",
8 | "\n",
9 | "### 目录\n",
10 | "- python简介\n",
11 | "- 安装和运行\n",
12 | "- 基本数据类型\n",
13 | "- 变量和表达式\n",
14 | "- 字符串\n",
15 | "- list\n",
16 | "- 判断语句\n",
17 | "- 循环语句\n",
18 | "- set, tuple, dictionary"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "# Python简介\n",
26 | "- 官网: https://www.python.org/\n",
27 | "- 版本: **3.6**/2.7\n",
28 | "- 脚本语言,语法、调试都很方便,非常适合编程菜鸟入门\n",
29 | "\n",
30 | "## Python安装\n",
31 | "\n",
32 | "### Anaconda安装\n",
33 | "- Anaconda是一个常用的用于数据分析的Python版本管理系统\n",
34 | "- 从[官网](https://www.continuum.io/downloads)下载相应版本\n",
35 | "- 按照提示安装\n",
36 | "\n",
37 | "### Anaconda environment安装\n",
38 | "- 安装一个新的environment: conda create -n [your_environment_name] python=[your_python_version]\n",
39 | "- 进入已经安装的environment: source activate [your_environment_name]\n",
40 | "- 在windows下使用: activate [your_environment_name]\n",
41 | "- 退出当前environment: source deactivate\n",
42 | "- 查看environment: conda info --envs\n",
43 | "- 更多的conda命令请查询官网文档: https://conda.io/docs/index.html\n",
44 | "\n",
45 | "### 在environment下安装libraries\n",
46 | "- pip install [package_name]\n",
47 | "\n",
48 | "## 运行Python\n",
49 | "1. 在命令行上输入python\n",
50 | "2. 用文本编辑器写完一段程序然后运行\n",
51 | "\n",
52 | "## 如何寻找帮助\n",
53 | "- 官方文档\n",
54 | "- debug: 学会读报错信息\n",
55 | "- Goole和Stackoverflow"
56 | ]
57 | },
58 | {
59 | "cell_type": "code",
60 | "execution_count": 1,
61 | "metadata": {},
62 | "outputs": [
63 | {
64 | "name": "stdout",
65 | "output_type": "stream",
66 | "text": [
67 | "hello july\n"
68 | ]
69 | }
70 | ],
71 | "source": [
72 | "print(\"hello july\")"
73 | ]
74 | },
75 | {
76 | "cell_type": "code",
77 | "execution_count": 2,
78 | "metadata": {},
79 | "outputs": [
80 | {
81 | "data": {
82 | "text/plain": [
83 | "4"
84 | ]
85 | },
86 | "execution_count": 2,
87 | "metadata": {},
88 | "output_type": "execute_result"
89 | }
90 | ],
91 | "source": [
92 | "1 + 3"
93 | ]
94 | },
95 | {
96 | "cell_type": "code",
97 | "execution_count": 3,
98 | "metadata": {},
99 | "outputs": [
100 | {
101 | "data": {
102 | "text/plain": [
103 | "2.5"
104 | ]
105 | },
106 | "execution_count": 3,
107 | "metadata": {},
108 | "output_type": "execute_result"
109 | }
110 | ],
111 | "source": [
112 | "5 / 2"
113 | ]
114 | },
115 | {
116 | "cell_type": "markdown",
117 | "metadata": {},
118 | "source": [
119 | "## python程序基础\n",
120 | "### 用python做计算器\n",
121 | "- +, -, *\n",
122 | "- /, //\n",
123 | "- \\*\\*"
124 | ]
125 | },
126 | {
127 | "cell_type": "code",
128 | "execution_count": 4,
129 | "metadata": {},
130 | "outputs": [
131 | {
132 | "data": {
133 | "text/plain": [
134 | "2.3"
135 | ]
136 | },
137 | "execution_count": 4,
138 | "metadata": {},
139 | "output_type": "execute_result"
140 | }
141 | ],
142 | "source": [
143 | "5 - 2.7"
144 | ]
145 | },
146 | {
147 | "cell_type": "code",
148 | "execution_count": 5,
149 | "metadata": {},
150 | "outputs": [
151 | {
152 | "data": {
153 | "text/plain": [
154 | "13.5"
155 | ]
156 | },
157 | "execution_count": 5,
158 | "metadata": {},
159 | "output_type": "execute_result"
160 | }
161 | ],
162 | "source": [
163 | "5.4 * 2.5"
164 | ]
165 | },
166 | {
167 | "cell_type": "code",
168 | "execution_count": 1,
169 | "metadata": {},
170 | "outputs": [
171 | {
172 | "data": {
173 | "text/plain": [
174 | "0.75"
175 | ]
176 | },
177 | "execution_count": 1,
178 | "metadata": {},
179 | "output_type": "execute_result"
180 | }
181 | ],
182 | "source": [
183 | "3 / 4"
184 | ]
185 | },
186 | {
187 | "cell_type": "code",
188 | "execution_count": 3,
189 | "metadata": {},
190 | "outputs": [
191 | {
192 | "data": {
193 | "text/plain": [
194 | "0"
195 | ]
196 | },
197 | "execution_count": 3,
198 | "metadata": {},
199 | "output_type": "execute_result"
200 | }
201 | ],
202 | "source": [
203 | "3 // 4"
204 | ]
205 | },
206 | {
207 | "cell_type": "code",
208 | "execution_count": 4,
209 | "metadata": {},
210 | "outputs": [
211 | {
212 | "data": {
213 | "text/plain": [
214 | "1"
215 | ]
216 | },
217 | "execution_count": 4,
218 | "metadata": {},
219 | "output_type": "execute_result"
220 | }
221 | ],
222 | "source": [
223 | "4 // 3"
224 | ]
225 | },
226 | {
227 | "cell_type": "code",
228 | "execution_count": 5,
229 | "metadata": {},
230 | "outputs": [
231 | {
232 | "data": {
233 | "text/plain": [
234 | "1"
235 | ]
236 | },
237 | "execution_count": 5,
238 | "metadata": {},
239 | "output_type": "execute_result"
240 | }
241 | ],
242 | "source": [
243 | "4 % 3"
244 | ]
245 | },
246 | {
247 | "cell_type": "code",
248 | "execution_count": 6,
249 | "metadata": {},
250 | "outputs": [
251 | {
252 | "data": {
253 | "text/plain": [
254 | "2"
255 | ]
256 | },
257 | "execution_count": 6,
258 | "metadata": {},
259 | "output_type": "execute_result"
260 | }
261 | ],
262 | "source": [
263 | "5 % 3"
264 | ]
265 | },
266 | {
267 | "cell_type": "code",
268 | "execution_count": 7,
269 | "metadata": {},
270 | "outputs": [
271 | {
272 | "data": {
273 | "text/plain": [
274 | "25"
275 | ]
276 | },
277 | "execution_count": 7,
278 | "metadata": {},
279 | "output_type": "execute_result"
280 | }
281 | ],
282 | "source": [
283 | "5 ** 2"
284 | ]
285 | },
286 | {
287 | "cell_type": "code",
288 | "execution_count": 8,
289 | "metadata": {},
290 | "outputs": [
291 | {
292 | "data": {
293 | "text/plain": [
294 | "55.90169943749474"
295 | ]
296 | },
297 | "execution_count": 8,
298 | "metadata": {},
299 | "output_type": "execute_result"
300 | }
301 | ],
302 | "source": [
303 | "5 ** 2.5"
304 | ]
305 | },
306 | {
307 | "cell_type": "code",
308 | "execution_count": 9,
309 | "metadata": {},
310 | "outputs": [
311 | {
312 | "data": {
313 | "text/plain": [
314 | "2.23606797749979"
315 | ]
316 | },
317 | "execution_count": 9,
318 | "metadata": {},
319 | "output_type": "execute_result"
320 | }
321 | ],
322 | "source": [
323 | "5 ** 0.5"
324 | ]
325 | },
326 | {
327 | "cell_type": "markdown",
328 | "metadata": {},
329 | "source": [
330 | "- =, =="
331 | ]
332 | },
333 | {
334 | "cell_type": "code",
335 | "execution_count": 11,
336 | "metadata": {},
337 | "outputs": [
338 | {
339 | "data": {
340 | "text/plain": [
341 | "True"
342 | ]
343 | },
344 | "execution_count": 11,
345 | "metadata": {},
346 | "output_type": "execute_result"
347 | }
348 | ],
349 | "source": [
350 | "5 == 5"
351 | ]
352 | },
353 | {
354 | "cell_type": "code",
355 | "execution_count": 12,
356 | "metadata": {},
357 | "outputs": [
358 | {
359 | "data": {
360 | "text/plain": [
361 | "True"
362 | ]
363 | },
364 | "execution_count": 12,
365 | "metadata": {},
366 | "output_type": "execute_result"
367 | }
368 | ],
369 | "source": [
370 | "2.5 == 2.50"
371 | ]
372 | },
373 | {
374 | "cell_type": "code",
375 | "execution_count": null,
376 | "metadata": {
377 | "collapsed": true
378 | },
379 | "outputs": [],
380 | "source": []
381 | },
382 | {
383 | "cell_type": "markdown",
384 | "metadata": {},
385 | "source": [
386 | "# Python基本数据类型、变量、运算和表达式\n",
387 | "\n",
388 | "## 变量\n",
389 | "- 变量赋值(assignment)\n",
390 | "\n",
391 | "## 基本数据类型\n",
392 | "- 整型int\n",
393 | "- 浮点float\n",
394 | "- 数据类型强制转换\n",
395 | "- 四则运算\n",
396 | "- 字符串str\n",
397 | "- bool\n",
398 | "\n",
399 | "## 动态类型\n",
400 | "- python是一种动态类型的语言\n",
401 | "- type(来查看变量类型)"
402 | ]
403 | },
404 | {
405 | "cell_type": "code",
406 | "execution_count": 14,
407 | "metadata": {},
408 | "outputs": [],
409 | "source": [
410 | "x = 2"
411 | ]
412 | },
413 | {
414 | "cell_type": "code",
415 | "execution_count": 15,
416 | "metadata": {},
417 | "outputs": [
418 | {
419 | "data": {
420 | "text/plain": [
421 | "True"
422 | ]
423 | },
424 | "execution_count": 15,
425 | "metadata": {},
426 | "output_type": "execute_result"
427 | }
428 | ],
429 | "source": [
430 | "x == 2"
431 | ]
432 | },
433 | {
434 | "cell_type": "code",
435 | "execution_count": 16,
436 | "metadata": {
437 | "collapsed": true
438 | },
439 | "outputs": [],
440 | "source": [
441 | "y = 2.0"
442 | ]
443 | },
444 | {
445 | "cell_type": "code",
446 | "execution_count": 17,
447 | "metadata": {},
448 | "outputs": [
449 | {
450 | "data": {
451 | "text/plain": [
452 | "2.0"
453 | ]
454 | },
455 | "execution_count": 17,
456 | "metadata": {},
457 | "output_type": "execute_result"
458 | }
459 | ],
460 | "source": [
461 | "y"
462 | ]
463 | },
464 | {
465 | "cell_type": "code",
466 | "execution_count": 18,
467 | "metadata": {},
468 | "outputs": [
469 | {
470 | "data": {
471 | "text/plain": [
472 | "True"
473 | ]
474 | },
475 | "execution_count": 18,
476 | "metadata": {},
477 | "output_type": "execute_result"
478 | }
479 | ],
480 | "source": [
481 | "x == y"
482 | ]
483 | },
484 | {
485 | "cell_type": "code",
486 | "execution_count": 21,
487 | "metadata": {},
488 | "outputs": [
489 | {
490 | "data": {
491 | "text/plain": [
492 | "'Julyedu'"
493 | ]
494 | },
495 | "execution_count": 21,
496 | "metadata": {},
497 | "output_type": "execute_result"
498 | }
499 | ],
500 | "source": [
501 | "name = \"Julyedu\"\n",
502 | "name"
503 | ]
504 | },
505 | {
506 | "cell_type": "code",
507 | "execution_count": 22,
508 | "metadata": {},
509 | "outputs": [
510 | {
511 | "data": {
512 | "text/plain": [
513 | "True"
514 | ]
515 | },
516 | "execution_count": 22,
517 | "metadata": {},
518 | "output_type": "execute_result"
519 | }
520 | ],
521 | "source": [
522 | "name == \"Julyedu\""
523 | ]
524 | },
525 | {
526 | "cell_type": "code",
527 | "execution_count": null,
528 | "metadata": {
529 | "collapsed": true
530 | },
531 | "outputs": [],
532 | "source": []
533 | },
534 | {
535 | "cell_type": "markdown",
536 | "metadata": {},
537 | "source": [
538 | "## 表达式(expression)\n",
539 | "- 引用变量\n",
540 | "\n",
541 | "- python会用表达式计算(返回)出一个结果\n",
542 | "\n",
543 | "## 指令(statement)\n",
544 | "- python会执行一条指令,未必会返回一个结果\n",
545 | "- expression可以被当做一个statement,但是statement一般不是一个expression\n",
546 | "- 赋值statement\n",
547 | "- x += x, x *= y, x /= y\n"
548 | ]
549 | },
550 | {
551 | "cell_type": "code",
552 | "execution_count": 23,
553 | "metadata": {},
554 | "outputs": [
555 | {
556 | "data": {
557 | "text/plain": [
558 | "2"
559 | ]
560 | },
561 | "execution_count": 23,
562 | "metadata": {},
563 | "output_type": "execute_result"
564 | }
565 | ],
566 | "source": [
567 | "x"
568 | ]
569 | },
570 | {
571 | "cell_type": "code",
572 | "execution_count": 24,
573 | "metadata": {},
574 | "outputs": [
575 | {
576 | "data": {
577 | "text/plain": [
578 | "6"
579 | ]
580 | },
581 | "execution_count": 24,
582 | "metadata": {},
583 | "output_type": "execute_result"
584 | }
585 | ],
586 | "source": [
587 | "x + 4"
588 | ]
589 | },
590 | {
591 | "cell_type": "code",
592 | "execution_count": 25,
593 | "metadata": {},
594 | "outputs": [
595 | {
596 | "data": {
597 | "text/plain": [
598 | "4"
599 | ]
600 | },
601 | "execution_count": 25,
602 | "metadata": {},
603 | "output_type": "execute_result"
604 | }
605 | ],
606 | "source": [
607 | "x + x"
608 | ]
609 | },
610 | {
611 | "cell_type": "code",
612 | "execution_count": 26,
613 | "metadata": {},
614 | "outputs": [
615 | {
616 | "data": {
617 | "text/plain": [
618 | "2"
619 | ]
620 | },
621 | "execution_count": 26,
622 | "metadata": {},
623 | "output_type": "execute_result"
624 | }
625 | ],
626 | "source": [
627 | "x"
628 | ]
629 | },
630 | {
631 | "cell_type": "code",
632 | "execution_count": 28,
633 | "metadata": {},
634 | "outputs": [
635 | {
636 | "data": {
637 | "text/plain": [
638 | "5"
639 | ]
640 | },
641 | "execution_count": 28,
642 | "metadata": {},
643 | "output_type": "execute_result"
644 | }
645 | ],
646 | "source": [
647 | "x = 5\n",
648 | "x"
649 | ]
650 | },
651 | {
652 | "cell_type": "code",
653 | "execution_count": 33,
654 | "metadata": {
655 | "collapsed": true
656 | },
657 | "outputs": [],
658 | "source": [
659 | "x = x + 2"
660 | ]
661 | },
662 | {
663 | "cell_type": "code",
664 | "execution_count": 34,
665 | "metadata": {},
666 | "outputs": [
667 | {
668 | "data": {
669 | "text/plain": [
670 | "11"
671 | ]
672 | },
673 | "execution_count": 34,
674 | "metadata": {},
675 | "output_type": "execute_result"
676 | }
677 | ],
678 | "source": [
679 | "x"
680 | ]
681 | },
682 | {
683 | "cell_type": "code",
684 | "execution_count": 40,
685 | "metadata": {},
686 | "outputs": [
687 | {
688 | "data": {
689 | "text/plain": [
690 | "23"
691 | ]
692 | },
693 | "execution_count": 40,
694 | "metadata": {},
695 | "output_type": "execute_result"
696 | }
697 | ],
698 | "source": [
699 | "x += 2\n",
700 | "x"
701 | ]
702 | },
703 | {
704 | "cell_type": "code",
705 | "execution_count": 44,
706 | "metadata": {},
707 | "outputs": [
708 | {
709 | "data": {
710 | "text/plain": [
711 | "368"
712 | ]
713 | },
714 | "execution_count": 44,
715 | "metadata": {},
716 | "output_type": "execute_result"
717 | }
718 | ],
719 | "source": [
720 | "x *= 2\n",
721 | "x"
722 | ]
723 | },
724 | {
725 | "cell_type": "code",
726 | "execution_count": 48,
727 | "metadata": {},
728 | "outputs": [
729 | {
730 | "data": {
731 | "text/plain": [
732 | "23.0"
733 | ]
734 | },
735 | "execution_count": 48,
736 | "metadata": {},
737 | "output_type": "execute_result"
738 | }
739 | ],
740 | "source": [
741 | "x /= 2\n",
742 | "x"
743 | ]
744 | },
745 | {
746 | "cell_type": "markdown",
747 | "metadata": {},
748 | "source": [
749 | "## 字符串(string)\n",
750 | "\n",
751 | "quote ' 和double quote \" 都可以用作字符串"
752 | ]
753 | },
754 | {
755 | "cell_type": "code",
756 | "execution_count": 49,
757 | "metadata": {},
758 | "outputs": [
759 | {
760 | "data": {
761 | "text/plain": [
762 | "'Julyedu'"
763 | ]
764 | },
765 | "execution_count": 49,
766 | "metadata": {},
767 | "output_type": "execute_result"
768 | }
769 | ],
770 | "source": [
771 | "\"Julyedu\""
772 | ]
773 | },
774 | {
775 | "cell_type": "code",
776 | "execution_count": 50,
777 | "metadata": {},
778 | "outputs": [
779 | {
780 | "data": {
781 | "text/plain": [
782 | "'Julyedu'"
783 | ]
784 | },
785 | "execution_count": 50,
786 | "metadata": {},
787 | "output_type": "execute_result"
788 | }
789 | ],
790 | "source": [
791 | "'Julyedu'"
792 | ]
793 | },
794 | {
795 | "cell_type": "code",
796 | "execution_count": 51,
797 | "metadata": {},
798 | "outputs": [
799 | {
800 | "ename": "SyntaxError",
801 | "evalue": "EOL while scanning string literal (, line 1)",
802 | "output_type": "error",
803 | "traceback": [
804 | "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m \"July'\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m EOL while scanning string literal\n"
805 | ]
806 | }
807 | ],
808 | "source": [
809 | "\"July'"
810 | ]
811 | },
812 | {
813 | "cell_type": "code",
814 | "execution_count": null,
815 | "metadata": {
816 | "collapsed": true
817 | },
818 | "outputs": [],
819 | "source": []
820 | },
821 | {
822 | "cell_type": "markdown",
823 | "metadata": {},
824 | "source": [
825 | "两者之间在表示一个字符串上没有区别,但是一个字符串的开头和结尾必须使用同一种引号。\n",
826 | "backslash \\ 可以用来escape引号。"
827 | ]
828 | },
829 | {
830 | "cell_type": "markdown",
831 | "metadata": {},
832 | "source": [
833 | "当然也可以使用两种不同的引号来区分究竟是字符串结尾还是字符串中出现了引号。"
834 | ]
835 | },
836 | {
837 | "cell_type": "code",
838 | "execution_count": 52,
839 | "metadata": {},
840 | "outputs": [
841 | {
842 | "data": {
843 | "text/plain": [
844 | "\"I'm gonna get up at 4am tomorrow\""
845 | ]
846 | },
847 | "execution_count": 52,
848 | "metadata": {},
849 | "output_type": "execute_result"
850 | }
851 | ],
852 | "source": [
853 | "\"I'm gonna get up at 4am tomorrow\""
854 | ]
855 | },
856 | {
857 | "cell_type": "code",
858 | "execution_count": 53,
859 | "metadata": {},
860 | "outputs": [
861 | {
862 | "data": {
863 | "text/plain": [
864 | "'I\"m gonna get up at 4am tomorrow'"
865 | ]
866 | },
867 | "execution_count": 53,
868 | "metadata": {},
869 | "output_type": "execute_result"
870 | }
871 | ],
872 | "source": [
873 | "'I\"m gonna get up at 4am tomorrow'"
874 | ]
875 | },
876 | {
877 | "cell_type": "code",
878 | "execution_count": 55,
879 | "metadata": {},
880 | "outputs": [
881 | {
882 | "data": {
883 | "text/plain": [
884 | "\"I'm gonna get up at 4\""
885 | ]
886 | },
887 | "execution_count": 55,
888 | "metadata": {},
889 | "output_type": "execute_result"
890 | }
891 | ],
892 | "source": [
893 | "'I\\'m gonna get up at 4'"
894 | ]
895 | },
896 | {
897 | "cell_type": "markdown",
898 | "metadata": {},
899 | "source": [
900 | "如果一个string有好多行"
901 | ]
902 | },
903 | {
904 | "cell_type": "code",
905 | "execution_count": 58,
906 | "metadata": {},
907 | "outputs": [
908 | {
909 | "name": "stdout",
910 | "output_type": "stream",
911 | "text": [
912 | "first line\n",
913 | "second line\n",
914 | "third line\n"
915 | ]
916 | }
917 | ],
918 | "source": [
919 | "print(\"\"\"first line\n",
920 | "second line\n",
921 | "third line\"\"\")"
922 | ]
923 | },
924 | {
925 | "cell_type": "markdown",
926 | "metadata": {},
927 | "source": [
928 | "\\n 是换行符,可以用在strign中换行"
929 | ]
930 | },
931 | {
932 | "cell_type": "code",
933 | "execution_count": 59,
934 | "metadata": {},
935 | "outputs": [
936 | {
937 | "name": "stdout",
938 | "output_type": "stream",
939 | "text": [
940 | "first line\n",
941 | "second line\n",
942 | "third line\n"
943 | ]
944 | }
945 | ],
946 | "source": [
947 | "print(\"first line\\nsecond line\\nthird line\")"
948 | ]
949 | },
950 | {
951 | "cell_type": "markdown",
952 | "metadata": {},
953 | "source": [
954 | "\\t是tab键"
955 | ]
956 | },
957 | {
958 | "cell_type": "code",
959 | "execution_count": 60,
960 | "metadata": {},
961 | "outputs": [
962 | {
963 | "name": "stdout",
964 | "output_type": "stream",
965 | "text": [
966 | "first line\tsecond line\tthird line\n"
967 | ]
968 | }
969 | ],
970 | "source": [
971 | "print(\"first line\\tsecond line\\tthird line\")"
972 | ]
973 | },
974 | {
975 | "cell_type": "markdown",
976 | "metadata": {},
977 | "source": [
978 | "+可以把两个string连到一起(concatenation)"
979 | ]
980 | },
981 | {
982 | "cell_type": "code",
983 | "execution_count": 67,
984 | "metadata": {},
985 | "outputs": [
986 | {
987 | "data": {
988 | "text/plain": [
989 | "'Hello Julyedu33'"
990 | ]
991 | },
992 | "execution_count": 67,
993 | "metadata": {},
994 | "output_type": "execute_result"
995 | }
996 | ],
997 | "source": [
998 | "\"Hello\" + \" \" + \"Julyedu\" + str(33)"
999 | ]
1000 | },
1001 | {
1002 | "cell_type": "code",
1003 | "execution_count": 70,
1004 | "metadata": {},
1005 | "outputs": [
1006 | {
1007 | "data": {
1008 | "text/plain": [
1009 | "float"
1010 | ]
1011 | },
1012 | "execution_count": 70,
1013 | "metadata": {},
1014 | "output_type": "execute_result"
1015 | }
1016 | ],
1017 | "source": [
1018 | "type(12.5)"
1019 | ]
1020 | },
1021 | {
1022 | "cell_type": "code",
1023 | "execution_count": 71,
1024 | "metadata": {},
1025 | "outputs": [
1026 | {
1027 | "data": {
1028 | "text/plain": [
1029 | "'23.0, 2.0, 25.0'"
1030 | ]
1031 | },
1032 | "execution_count": 71,
1033 | "metadata": {},
1034 | "output_type": "execute_result"
1035 | }
1036 | ],
1037 | "source": [
1038 | "\"{}, {}, {}\".format(x, y, x+y)"
1039 | ]
1040 | },
1041 | {
1042 | "cell_type": "code",
1043 | "execution_count": 74,
1044 | "metadata": {},
1045 | "outputs": [
1046 | {
1047 | "data": {
1048 | "text/plain": [
1049 | "float"
1050 | ]
1051 | },
1052 | "execution_count": 74,
1053 | "metadata": {},
1054 | "output_type": "execute_result"
1055 | }
1056 | ],
1057 | "source": [
1058 | "type(x+y)"
1059 | ]
1060 | },
1061 | {
1062 | "cell_type": "markdown",
1063 | "metadata": {},
1064 | "source": [
1065 | "## string indexing and slicing\n",
1066 | "- indexing"
1067 | ]
1068 | },
1069 | {
1070 | "cell_type": "code",
1071 | "execution_count": 63,
1072 | "metadata": {
1073 | "collapsed": true
1074 | },
1075 | "outputs": [],
1076 | "source": [
1077 | "w = \"Julyedu\""
1078 | ]
1079 | },
1080 | {
1081 | "cell_type": "code",
1082 | "execution_count": 64,
1083 | "metadata": {},
1084 | "outputs": [
1085 | {
1086 | "data": {
1087 | "text/plain": [
1088 | "'Julyedu'"
1089 | ]
1090 | },
1091 | "execution_count": 64,
1092 | "metadata": {},
1093 | "output_type": "execute_result"
1094 | }
1095 | ],
1096 | "source": [
1097 | "w"
1098 | ]
1099 | },
1100 | {
1101 | "cell_type": "code",
1102 | "execution_count": 65,
1103 | "metadata": {},
1104 | "outputs": [
1105 | {
1106 | "data": {
1107 | "text/plain": [
1108 | "'J'"
1109 | ]
1110 | },
1111 | "execution_count": 65,
1112 | "metadata": {},
1113 | "output_type": "execute_result"
1114 | }
1115 | ],
1116 | "source": [
1117 | "w[0]"
1118 | ]
1119 | },
1120 | {
1121 | "cell_type": "code",
1122 | "execution_count": 75,
1123 | "metadata": {},
1124 | "outputs": [
1125 | {
1126 | "data": {
1127 | "text/plain": [
1128 | "'u'"
1129 | ]
1130 | },
1131 | "execution_count": 75,
1132 | "metadata": {},
1133 | "output_type": "execute_result"
1134 | }
1135 | ],
1136 | "source": [
1137 | "w[1]"
1138 | ]
1139 | },
1140 | {
1141 | "cell_type": "code",
1142 | "execution_count": 76,
1143 | "metadata": {},
1144 | "outputs": [
1145 | {
1146 | "data": {
1147 | "text/plain": [
1148 | "'u'"
1149 | ]
1150 | },
1151 | "execution_count": 76,
1152 | "metadata": {},
1153 | "output_type": "execute_result"
1154 | }
1155 | ],
1156 | "source": [
1157 | "w[6]"
1158 | ]
1159 | },
1160 | {
1161 | "cell_type": "code",
1162 | "execution_count": 77,
1163 | "metadata": {},
1164 | "outputs": [
1165 | {
1166 | "ename": "IndexError",
1167 | "evalue": "string index out of range",
1168 | "output_type": "error",
1169 | "traceback": [
1170 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
1171 | "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
1172 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mw\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m7\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1173 | "\u001b[1;31mIndexError\u001b[0m: string index out of range"
1174 | ]
1175 | }
1176 | ],
1177 | "source": [
1178 | "w[7]"
1179 | ]
1180 | },
1181 | {
1182 | "cell_type": "code",
1183 | "execution_count": 78,
1184 | "metadata": {},
1185 | "outputs": [
1186 | {
1187 | "data": {
1188 | "text/plain": [
1189 | "'u'"
1190 | ]
1191 | },
1192 | "execution_count": 78,
1193 | "metadata": {},
1194 | "output_type": "execute_result"
1195 | }
1196 | ],
1197 | "source": [
1198 | "w[-1]"
1199 | ]
1200 | },
1201 | {
1202 | "cell_type": "code",
1203 | "execution_count": 79,
1204 | "metadata": {},
1205 | "outputs": [
1206 | {
1207 | "data": {
1208 | "text/plain": [
1209 | "'d'"
1210 | ]
1211 | },
1212 | "execution_count": 79,
1213 | "metadata": {},
1214 | "output_type": "execute_result"
1215 | }
1216 | ],
1217 | "source": [
1218 | "w[-2]"
1219 | ]
1220 | },
1221 | {
1222 | "cell_type": "code",
1223 | "execution_count": 80,
1224 | "metadata": {},
1225 | "outputs": [
1226 | {
1227 | "data": {
1228 | "text/plain": [
1229 | "'J'"
1230 | ]
1231 | },
1232 | "execution_count": 80,
1233 | "metadata": {},
1234 | "output_type": "execute_result"
1235 | }
1236 | ],
1237 | "source": [
1238 | "w[-7]"
1239 | ]
1240 | },
1241 | {
1242 | "cell_type": "code",
1243 | "execution_count": 81,
1244 | "metadata": {},
1245 | "outputs": [
1246 | {
1247 | "ename": "IndexError",
1248 | "evalue": "string index out of range",
1249 | "output_type": "error",
1250 | "traceback": [
1251 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
1252 | "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
1253 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mw\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m8\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1254 | "\u001b[1;31mIndexError\u001b[0m: string index out of range"
1255 | ]
1256 | }
1257 | ],
1258 | "source": [
1259 | "w[-8]"
1260 | ]
1261 | },
1262 | {
1263 | "cell_type": "markdown",
1264 | "metadata": {},
1265 | "source": [
1266 | "- slicing"
1267 | ]
1268 | },
1269 | {
1270 | "cell_type": "code",
1271 | "execution_count": 82,
1272 | "metadata": {},
1273 | "outputs": [
1274 | {
1275 | "data": {
1276 | "text/plain": [
1277 | "'Julyedu'"
1278 | ]
1279 | },
1280 | "execution_count": 82,
1281 | "metadata": {},
1282 | "output_type": "execute_result"
1283 | }
1284 | ],
1285 | "source": [
1286 | "w"
1287 | ]
1288 | },
1289 | {
1290 | "cell_type": "code",
1291 | "execution_count": 83,
1292 | "metadata": {},
1293 | "outputs": [
1294 | {
1295 | "data": {
1296 | "text/plain": [
1297 | "'ul'"
1298 | ]
1299 | },
1300 | "execution_count": 83,
1301 | "metadata": {},
1302 | "output_type": "execute_result"
1303 | }
1304 | ],
1305 | "source": [
1306 | "w[1:3]"
1307 | ]
1308 | },
1309 | {
1310 | "cell_type": "code",
1311 | "execution_count": 84,
1312 | "metadata": {},
1313 | "outputs": [
1314 | {
1315 | "data": {
1316 | "text/plain": [
1317 | "'du'"
1318 | ]
1319 | },
1320 | "execution_count": 84,
1321 | "metadata": {},
1322 | "output_type": "execute_result"
1323 | }
1324 | ],
1325 | "source": [
1326 | "w[5:7]"
1327 | ]
1328 | },
1329 | {
1330 | "cell_type": "code",
1331 | "execution_count": 85,
1332 | "metadata": {},
1333 | "outputs": [
1334 | {
1335 | "data": {
1336 | "text/plain": [
1337 | "'ed'"
1338 | ]
1339 | },
1340 | "execution_count": 85,
1341 | "metadata": {},
1342 | "output_type": "execute_result"
1343 | }
1344 | ],
1345 | "source": [
1346 | "w[4:-1]"
1347 | ]
1348 | },
1349 | {
1350 | "cell_type": "code",
1351 | "execution_count": 86,
1352 | "metadata": {},
1353 | "outputs": [
1354 | {
1355 | "data": {
1356 | "text/plain": [
1357 | "'yedu'"
1358 | ]
1359 | },
1360 | "execution_count": 86,
1361 | "metadata": {},
1362 | "output_type": "execute_result"
1363 | }
1364 | ],
1365 | "source": [
1366 | "w[3:]"
1367 | ]
1368 | },
1369 | {
1370 | "cell_type": "code",
1371 | "execution_count": 87,
1372 | "metadata": {},
1373 | "outputs": [
1374 | {
1375 | "data": {
1376 | "text/plain": [
1377 | "'Julye'"
1378 | ]
1379 | },
1380 | "execution_count": 87,
1381 | "metadata": {},
1382 | "output_type": "execute_result"
1383 | }
1384 | ],
1385 | "source": [
1386 | "w[:5]"
1387 | ]
1388 | },
1389 | {
1390 | "cell_type": "code",
1391 | "execution_count": 88,
1392 | "metadata": {},
1393 | "outputs": [
1394 | {
1395 | "data": {
1396 | "text/plain": [
1397 | "'du'"
1398 | ]
1399 | },
1400 | "execution_count": 88,
1401 | "metadata": {},
1402 | "output_type": "execute_result"
1403 | }
1404 | ],
1405 | "source": [
1406 | "w[5:100]"
1407 | ]
1408 | },
1409 | {
1410 | "cell_type": "code",
1411 | "execution_count": 89,
1412 | "metadata": {},
1413 | "outputs": [
1414 | {
1415 | "data": {
1416 | "text/plain": [
1417 | "'u'"
1418 | ]
1419 | },
1420 | "execution_count": 89,
1421 | "metadata": {},
1422 | "output_type": "execute_result"
1423 | }
1424 | ],
1425 | "source": [
1426 | "w[-1:100]"
1427 | ]
1428 | },
1429 | {
1430 | "cell_type": "markdown",
1431 | "metadata": {},
1432 | "source": [
1433 | "## 字符串函数\n",
1434 | "\n",
1435 | "- upper and lower"
1436 | ]
1437 | },
1438 | {
1439 | "cell_type": "code",
1440 | "execution_count": 90,
1441 | "metadata": {},
1442 | "outputs": [
1443 | {
1444 | "data": {
1445 | "text/plain": [
1446 | "'JULYEDU'"
1447 | ]
1448 | },
1449 | "execution_count": 90,
1450 | "metadata": {},
1451 | "output_type": "execute_result"
1452 | }
1453 | ],
1454 | "source": [
1455 | "w.upper()"
1456 | ]
1457 | },
1458 | {
1459 | "cell_type": "markdown",
1460 | "metadata": {},
1461 | "source": [
1462 | "- startswith and endswith"
1463 | ]
1464 | },
1465 | {
1466 | "cell_type": "code",
1467 | "execution_count": 95,
1468 | "metadata": {},
1469 | "outputs": [
1470 | {
1471 | "data": {
1472 | "text/plain": [
1473 | "'julyedu'"
1474 | ]
1475 | },
1476 | "execution_count": 95,
1477 | "metadata": {},
1478 | "output_type": "execute_result"
1479 | }
1480 | ],
1481 | "source": [
1482 | "w.lower()"
1483 | ]
1484 | },
1485 | {
1486 | "cell_type": "code",
1487 | "execution_count": 93,
1488 | "metadata": {},
1489 | "outputs": [
1490 | {
1491 | "data": {
1492 | "text/plain": [
1493 | "'Julyedu'"
1494 | ]
1495 | },
1496 | "execution_count": 93,
1497 | "metadata": {},
1498 | "output_type": "execute_result"
1499 | }
1500 | ],
1501 | "source": [
1502 | "w.lower().capitalize()"
1503 | ]
1504 | },
1505 | {
1506 | "cell_type": "code",
1507 | "execution_count": 98,
1508 | "metadata": {},
1509 | "outputs": [
1510 | {
1511 | "data": {
1512 | "text/plain": [
1513 | "True"
1514 | ]
1515 | },
1516 | "execution_count": 98,
1517 | "metadata": {},
1518 | "output_type": "execute_result"
1519 | }
1520 | ],
1521 | "source": [
1522 | "w.startswith(\"July\")"
1523 | ]
1524 | },
1525 | {
1526 | "cell_type": "code",
1527 | "execution_count": 100,
1528 | "metadata": {},
1529 | "outputs": [
1530 | {
1531 | "data": {
1532 | "text/plain": [
1533 | "False"
1534 | ]
1535 | },
1536 | "execution_count": 100,
1537 | "metadata": {},
1538 | "output_type": "execute_result"
1539 | }
1540 | ],
1541 | "source": [
1542 | "w.endswith(\"ud\")"
1543 | ]
1544 | },
1545 | {
1546 | "cell_type": "markdown",
1547 | "metadata": {},
1548 | "source": [
1549 | "- strip"
1550 | ]
1551 | },
1552 | {
1553 | "cell_type": "code",
1554 | "execution_count": 103,
1555 | "metadata": {},
1556 | "outputs": [
1557 | {
1558 | "data": {
1559 | "text/plain": [
1560 | "' Julyedu '"
1561 | ]
1562 | },
1563 | "execution_count": 103,
1564 | "metadata": {},
1565 | "output_type": "execute_result"
1566 | }
1567 | ],
1568 | "source": [
1569 | "w = \" Julyedu \"\n",
1570 | "w"
1571 | ]
1572 | },
1573 | {
1574 | "cell_type": "code",
1575 | "execution_count": 102,
1576 | "metadata": {},
1577 | "outputs": [
1578 | {
1579 | "data": {
1580 | "text/plain": [
1581 | "'Julyedu'"
1582 | ]
1583 | },
1584 | "execution_count": 102,
1585 | "metadata": {},
1586 | "output_type": "execute_result"
1587 | }
1588 | ],
1589 | "source": [
1590 | "w.strip()"
1591 | ]
1592 | },
1593 | {
1594 | "cell_type": "code",
1595 | "execution_count": 104,
1596 | "metadata": {},
1597 | "outputs": [
1598 | {
1599 | "data": {
1600 | "text/plain": [
1601 | "'Julyedu '"
1602 | ]
1603 | },
1604 | "execution_count": 104,
1605 | "metadata": {},
1606 | "output_type": "execute_result"
1607 | }
1608 | ],
1609 | "source": [
1610 | "w.lstrip()"
1611 | ]
1612 | },
1613 | {
1614 | "cell_type": "code",
1615 | "execution_count": 105,
1616 | "metadata": {},
1617 | "outputs": [
1618 | {
1619 | "data": {
1620 | "text/plain": [
1621 | "' Julyedu'"
1622 | ]
1623 | },
1624 | "execution_count": 105,
1625 | "metadata": {},
1626 | "output_type": "execute_result"
1627 | }
1628 | ],
1629 | "source": [
1630 | "w.rstrip()"
1631 | ]
1632 | },
1633 | {
1634 | "cell_type": "markdown",
1635 | "metadata": {},
1636 | "source": [
1637 | "- split\n",
1638 | "把一个string拆成一个list of strings"
1639 | ]
1640 | },
1641 | {
1642 | "cell_type": "code",
1643 | "execution_count": 106,
1644 | "metadata": {
1645 | "collapsed": true
1646 | },
1647 | "outputs": [],
1648 | "source": [
1649 | "s = \"burger ramen fries spaghetti steak dimsum\""
1650 | ]
1651 | },
1652 | {
1653 | "cell_type": "code",
1654 | "execution_count": 107,
1655 | "metadata": {},
1656 | "outputs": [
1657 | {
1658 | "data": {
1659 | "text/plain": [
1660 | "['burger', 'ramen', 'fries', 'spaghetti', 'steak', 'dimsum']"
1661 | ]
1662 | },
1663 | "execution_count": 107,
1664 | "metadata": {},
1665 | "output_type": "execute_result"
1666 | }
1667 | ],
1668 | "source": [
1669 | "s.split()"
1670 | ]
1671 | },
1672 | {
1673 | "cell_type": "code",
1674 | "execution_count": 108,
1675 | "metadata": {
1676 | "collapsed": true
1677 | },
1678 | "outputs": [],
1679 | "source": [
1680 | "s = \"burger,ramen,fries,spaghetti,steak,dimsum\""
1681 | ]
1682 | },
1683 | {
1684 | "cell_type": "code",
1685 | "execution_count": 110,
1686 | "metadata": {},
1687 | "outputs": [
1688 | {
1689 | "data": {
1690 | "text/plain": [
1691 | "['burger', 'ramen', 'fries', 'spaghetti', 'steak', 'dimsum']"
1692 | ]
1693 | },
1694 | "execution_count": 110,
1695 | "metadata": {},
1696 | "output_type": "execute_result"
1697 | }
1698 | ],
1699 | "source": [
1700 | "s.split(\",\")"
1701 | ]
1702 | },
1703 | {
1704 | "cell_type": "code",
1705 | "execution_count": null,
1706 | "metadata": {
1707 | "collapsed": true
1708 | },
1709 | "outputs": [],
1710 | "source": []
1711 | },
1712 | {
1713 | "cell_type": "markdown",
1714 | "metadata": {},
1715 | "source": [
1716 | "- find: 找到第一个substring出现的位置"
1717 | ]
1718 | },
1719 | {
1720 | "cell_type": "code",
1721 | "execution_count": 113,
1722 | "metadata": {},
1723 | "outputs": [
1724 | {
1725 | "data": {
1726 | "text/plain": [
1727 | "'Julyedu'"
1728 | ]
1729 | },
1730 | "execution_count": 113,
1731 | "metadata": {},
1732 | "output_type": "execute_result"
1733 | }
1734 | ],
1735 | "source": [
1736 | "w = w.strip()\n",
1737 | "w"
1738 | ]
1739 | },
1740 | {
1741 | "cell_type": "code",
1742 | "execution_count": 115,
1743 | "metadata": {},
1744 | "outputs": [
1745 | {
1746 | "data": {
1747 | "text/plain": [
1748 | "2"
1749 | ]
1750 | },
1751 | "execution_count": 115,
1752 | "metadata": {},
1753 | "output_type": "execute_result"
1754 | }
1755 | ],
1756 | "source": [
1757 | "w.find(\"ly\")"
1758 | ]
1759 | },
1760 | {
1761 | "cell_type": "markdown",
1762 | "metadata": {},
1763 | "source": [
1764 | "如果输入一个不存在的substring那就会返回-1了"
1765 | ]
1766 | },
1767 | {
1768 | "cell_type": "code",
1769 | "execution_count": 116,
1770 | "metadata": {},
1771 | "outputs": [
1772 | {
1773 | "data": {
1774 | "text/plain": [
1775 | "-1"
1776 | ]
1777 | },
1778 | "execution_count": 116,
1779 | "metadata": {},
1780 | "output_type": "execute_result"
1781 | }
1782 | ],
1783 | "source": [
1784 | "w.find(\"a\")"
1785 | ]
1786 | },
1787 | {
1788 | "cell_type": "code",
1789 | "execution_count": 118,
1790 | "metadata": {},
1791 | "outputs": [
1792 | {
1793 | "data": {
1794 | "text/plain": [
1795 | "True"
1796 | ]
1797 | },
1798 | "execution_count": 118,
1799 | "metadata": {},
1800 | "output_type": "execute_result"
1801 | }
1802 | ],
1803 | "source": [
1804 | "\"ly\" in w"
1805 | ]
1806 | },
1807 | {
1808 | "cell_type": "markdown",
1809 | "metadata": {},
1810 | "source": [
1811 | "- replace"
1812 | ]
1813 | },
1814 | {
1815 | "cell_type": "code",
1816 | "execution_count": 123,
1817 | "metadata": {},
1818 | "outputs": [
1819 | {
1820 | "data": {
1821 | "text/plain": [
1822 | "'burger\\nramen\\nfries\\nspaghetti\\nsteak\\ndimsum'"
1823 | ]
1824 | },
1825 | "execution_count": 123,
1826 | "metadata": {},
1827 | "output_type": "execute_result"
1828 | }
1829 | ],
1830 | "source": [
1831 | "s.replace(\",\", \"\\n\")"
1832 | ]
1833 | },
1834 | {
1835 | "cell_type": "markdown",
1836 | "metadata": {},
1837 | "source": [
1838 | "# List\n",
1839 | "\n",
1840 | "list 是一种python的数据类型,表示一连串的数据的集合。\n",
1841 | "\n",
1842 | "- 如何创建一个list"
1843 | ]
1844 | },
1845 | {
1846 | "cell_type": "code",
1847 | "execution_count": 124,
1848 | "metadata": {},
1849 | "outputs": [
1850 | {
1851 | "data": {
1852 | "text/plain": [
1853 | "['Tensorflow', 'Keras', 'Torch', 'Caffe', 'Julyedu']"
1854 | ]
1855 | },
1856 | "execution_count": 124,
1857 | "metadata": {},
1858 | "output_type": "execute_result"
1859 | }
1860 | ],
1861 | "source": [
1862 | "names = [\"Tensorflow\", \"Keras\", \"Torch\", \"Caffe\", \"Julyedu\"]\n",
1863 | "names"
1864 | ]
1865 | },
1866 | {
1867 | "cell_type": "code",
1868 | "execution_count": 125,
1869 | "metadata": {},
1870 | "outputs": [
1871 | {
1872 | "data": {
1873 | "text/plain": [
1874 | "list"
1875 | ]
1876 | },
1877 | "execution_count": 125,
1878 | "metadata": {},
1879 | "output_type": "execute_result"
1880 | }
1881 | ],
1882 | "source": [
1883 | "type(names)"
1884 | ]
1885 | },
1886 | {
1887 | "cell_type": "markdown",
1888 | "metadata": {},
1889 | "source": [
1890 | "- list indexing"
1891 | ]
1892 | },
1893 | {
1894 | "cell_type": "code",
1895 | "execution_count": 126,
1896 | "metadata": {},
1897 | "outputs": [
1898 | {
1899 | "data": {
1900 | "text/plain": [
1901 | "'Tensorflow'"
1902 | ]
1903 | },
1904 | "execution_count": 126,
1905 | "metadata": {},
1906 | "output_type": "execute_result"
1907 | }
1908 | ],
1909 | "source": [
1910 | "names[0]"
1911 | ]
1912 | },
1913 | {
1914 | "cell_type": "code",
1915 | "execution_count": 127,
1916 | "metadata": {},
1917 | "outputs": [
1918 | {
1919 | "data": {
1920 | "text/plain": [
1921 | "'Keras'"
1922 | ]
1923 | },
1924 | "execution_count": 127,
1925 | "metadata": {},
1926 | "output_type": "execute_result"
1927 | }
1928 | ],
1929 | "source": [
1930 | "names[1]"
1931 | ]
1932 | },
1933 | {
1934 | "cell_type": "code",
1935 | "execution_count": 128,
1936 | "metadata": {},
1937 | "outputs": [
1938 | {
1939 | "data": {
1940 | "text/plain": [
1941 | "'Julyedu'"
1942 | ]
1943 | },
1944 | "execution_count": 128,
1945 | "metadata": {},
1946 | "output_type": "execute_result"
1947 | }
1948 | ],
1949 | "source": [
1950 | "names[-1]"
1951 | ]
1952 | },
1953 | {
1954 | "cell_type": "code",
1955 | "execution_count": 130,
1956 | "metadata": {},
1957 | "outputs": [
1958 | {
1959 | "ename": "IndexError",
1960 | "evalue": "list index out of range",
1961 | "output_type": "error",
1962 | "traceback": [
1963 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
1964 | "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
1965 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnames\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1966 | "\u001b[1;31mIndexError\u001b[0m: list index out of range"
1967 | ]
1968 | }
1969 | ],
1970 | "source": [
1971 | "names[-10]"
1972 | ]
1973 | },
1974 | {
1975 | "cell_type": "markdown",
1976 | "metadata": {},
1977 | "source": [
1978 | "- list slicing"
1979 | ]
1980 | },
1981 | {
1982 | "cell_type": "code",
1983 | "execution_count": 132,
1984 | "metadata": {},
1985 | "outputs": [
1986 | {
1987 | "data": {
1988 | "text/plain": [
1989 | "['Tensorflow', 'Keras', 'Torch', 'Caffe', 'Julyedu']"
1990 | ]
1991 | },
1992 | "execution_count": 132,
1993 | "metadata": {},
1994 | "output_type": "execute_result"
1995 | }
1996 | ],
1997 | "source": [
1998 | "names"
1999 | ]
2000 | },
2001 | {
2002 | "cell_type": "code",
2003 | "execution_count": 137,
2004 | "metadata": {},
2005 | "outputs": [
2006 | {
2007 | "data": {
2008 | "text/plain": [
2009 | "['Tensorflow', 'Keras', 'Torch', 'Caffe']"
2010 | ]
2011 | },
2012 | "execution_count": 137,
2013 | "metadata": {},
2014 | "output_type": "execute_result"
2015 | }
2016 | ],
2017 | "source": [
2018 | "names[:-1]"
2019 | ]
2020 | },
2021 | {
2022 | "cell_type": "markdown",
2023 | "metadata": {},
2024 | "source": [
2025 | "- 我们可以直接把string变成一个list"
2026 | ]
2027 | },
2028 | {
2029 | "cell_type": "code",
2030 | "execution_count": 138,
2031 | "metadata": {},
2032 | "outputs": [
2033 | {
2034 | "data": {
2035 | "text/plain": [
2036 | "['J', 'u', 'l', 'y', 'e', 'd', 'u']"
2037 | ]
2038 | },
2039 | "execution_count": 138,
2040 | "metadata": {},
2041 | "output_type": "execute_result"
2042 | }
2043 | ],
2044 | "source": [
2045 | "list(\"Julyedu\")"
2046 | ]
2047 | },
2048 | {
2049 | "cell_type": "markdown",
2050 | "metadata": {},
2051 | "source": [
2052 | "- 求list的长度"
2053 | ]
2054 | },
2055 | {
2056 | "cell_type": "code",
2057 | "execution_count": 140,
2058 | "metadata": {},
2059 | "outputs": [
2060 | {
2061 | "data": {
2062 | "text/plain": [
2063 | "5"
2064 | ]
2065 | },
2066 | "execution_count": 140,
2067 | "metadata": {},
2068 | "output_type": "execute_result"
2069 | }
2070 | ],
2071 | "source": [
2072 | "len(names)"
2073 | ]
2074 | },
2075 | {
2076 | "cell_type": "markdown",
2077 | "metadata": {},
2078 | "source": [
2079 | "- append方法可以在list的末尾添加element"
2080 | ]
2081 | },
2082 | {
2083 | "cell_type": "code",
2084 | "execution_count": 141,
2085 | "metadata": {},
2086 | "outputs": [
2087 | {
2088 | "data": {
2089 | "text/plain": [
2090 | "['Tensorflow', 'Keras', 'Torch', 'Caffe', 'Julyedu', 'PyTorch']"
2091 | ]
2092 | },
2093 | "execution_count": 141,
2094 | "metadata": {},
2095 | "output_type": "execute_result"
2096 | }
2097 | ],
2098 | "source": [
2099 | "names.append(\"PyTorch\")\n",
2100 | "names"
2101 | ]
2102 | },
2103 | {
2104 | "cell_type": "code",
2105 | "execution_count": 142,
2106 | "metadata": {},
2107 | "outputs": [
2108 | {
2109 | "data": {
2110 | "text/plain": [
2111 | "['Tensorflow',\n",
2112 | " 'Keras',\n",
2113 | " 'Torch',\n",
2114 | " 'Caffe',\n",
2115 | " 'Julyedu',\n",
2116 | " 'PyTorch',\n",
2117 | " 12,\n",
2118 | " -5.4,\n",
2119 | " [2, 4, 'Title']]"
2120 | ]
2121 | },
2122 | "execution_count": 142,
2123 | "metadata": {},
2124 | "output_type": "execute_result"
2125 | }
2126 | ],
2127 | "source": [
2128 | "names.append(12)\n",
2129 | "names.append(-5.4)\n",
2130 | "names.append([2,4,\"Title\"])\n",
2131 | "names"
2132 | ]
2133 | },
2134 | {
2135 | "cell_type": "code",
2136 | "execution_count": 143,
2137 | "metadata": {},
2138 | "outputs": [
2139 | {
2140 | "data": {
2141 | "text/plain": [
2142 | "[2, 4, 'Title']"
2143 | ]
2144 | },
2145 | "execution_count": 143,
2146 | "metadata": {},
2147 | "output_type": "execute_result"
2148 | }
2149 | ],
2150 | "source": [
2151 | "names[-1]"
2152 | ]
2153 | },
2154 | {
2155 | "cell_type": "markdown",
2156 | "metadata": {},
2157 | "source": [
2158 | "- 两个list相加合并成新的list"
2159 | ]
2160 | },
2161 | {
2162 | "cell_type": "code",
2163 | "execution_count": 145,
2164 | "metadata": {},
2165 | "outputs": [
2166 | {
2167 | "data": {
2168 | "text/plain": [
2169 | "False"
2170 | ]
2171 | },
2172 | "execution_count": 145,
2173 | "metadata": {},
2174 | "output_type": "execute_result"
2175 | }
2176 | ],
2177 | "source": [
2178 | "\"aaaaaa\" in names"
2179 | ]
2180 | },
2181 | {
2182 | "cell_type": "markdown",
2183 | "metadata": {},
2184 | "source": [
2185 | "- 判断一个element是否在一个list里面"
2186 | ]
2187 | },
2188 | {
2189 | "cell_type": "markdown",
2190 | "metadata": {},
2191 | "source": [
2192 | "- insert"
2193 | ]
2194 | },
2195 | {
2196 | "cell_type": "code",
2197 | "execution_count": 150,
2198 | "metadata": {
2199 | "collapsed": true
2200 | },
2201 | "outputs": [],
2202 | "source": [
2203 | "names.insert(-100, \"Bazinga\")"
2204 | ]
2205 | },
2206 | {
2207 | "cell_type": "code",
2208 | "execution_count": 151,
2209 | "metadata": {},
2210 | "outputs": [
2211 | {
2212 | "data": {
2213 | "text/plain": [
2214 | "['Bazinga',\n",
2215 | " 'Tensorflow',\n",
2216 | " 'Keras',\n",
2217 | " 'Happy',\n",
2218 | " 'Torch',\n",
2219 | " 'Caffe',\n",
2220 | " 'Julyedu',\n",
2221 | " 'PyTorch',\n",
2222 | " 12,\n",
2223 | " -5.4,\n",
2224 | " 'Sad',\n",
2225 | " [2, 4, 'Title']]"
2226 | ]
2227 | },
2228 | "execution_count": 151,
2229 | "metadata": {},
2230 | "output_type": "execute_result"
2231 | }
2232 | ],
2233 | "source": [
2234 | "names"
2235 | ]
2236 | },
2237 | {
2238 | "cell_type": "code",
2239 | "execution_count": null,
2240 | "metadata": {
2241 | "collapsed": true
2242 | },
2243 | "outputs": [],
2244 | "source": []
2245 | },
2246 | {
2247 | "cell_type": "markdown",
2248 | "metadata": {},
2249 | "source": [
2250 | "- pop"
2251 | ]
2252 | },
2253 | {
2254 | "cell_type": "code",
2255 | "execution_count": 155,
2256 | "metadata": {},
2257 | "outputs": [
2258 | {
2259 | "name": "stdout",
2260 | "output_type": "stream",
2261 | "text": [
2262 | "-5.4\n",
2263 | "['Bazinga', 'Tensorflow', 'Keras', 'Happy', 'Torch', 'Caffe', 'Julyedu', 'PyTorch', 12]\n"
2264 | ]
2265 | }
2266 | ],
2267 | "source": [
2268 | "last_element = names.pop()\n",
2269 | "print(last_element)\n",
2270 | "print(names)"
2271 | ]
2272 | },
2273 | {
2274 | "cell_type": "code",
2275 | "execution_count": 153,
2276 | "metadata": {},
2277 | "outputs": [
2278 | {
2279 | "data": {
2280 | "text/plain": [
2281 | "['Bazinga',\n",
2282 | " 'Tensorflow',\n",
2283 | " 'Keras',\n",
2284 | " 'Happy',\n",
2285 | " 'Torch',\n",
2286 | " 'Caffe',\n",
2287 | " 'Julyedu',\n",
2288 | " 'PyTorch',\n",
2289 | " 12,\n",
2290 | " -5.4,\n",
2291 | " 'Sad']"
2292 | ]
2293 | },
2294 | "execution_count": 153,
2295 | "metadata": {},
2296 | "output_type": "execute_result"
2297 | }
2298 | ],
2299 | "source": [
2300 | "names"
2301 | ]
2302 | },
2303 | {
2304 | "cell_type": "markdown",
2305 | "metadata": {},
2306 | "source": [
2307 | "- count\n"
2308 | ]
2309 | },
2310 | {
2311 | "cell_type": "code",
2312 | "execution_count": 156,
2313 | "metadata": {},
2314 | "outputs": [
2315 | {
2316 | "data": {
2317 | "text/plain": [
2318 | "['Bazinga',\n",
2319 | " 'Tensorflow',\n",
2320 | " 'Keras',\n",
2321 | " 'Happy',\n",
2322 | " 'Torch',\n",
2323 | " 'Caffe',\n",
2324 | " 'Julyedu',\n",
2325 | " 'PyTorch',\n",
2326 | " 12]"
2327 | ]
2328 | },
2329 | "execution_count": 156,
2330 | "metadata": {},
2331 | "output_type": "execute_result"
2332 | }
2333 | ],
2334 | "source": [
2335 | "names"
2336 | ]
2337 | },
2338 | {
2339 | "cell_type": "code",
2340 | "execution_count": 158,
2341 | "metadata": {},
2342 | "outputs": [
2343 | {
2344 | "data": {
2345 | "text/plain": [
2346 | "2"
2347 | ]
2348 | },
2349 | "execution_count": 158,
2350 | "metadata": {},
2351 | "output_type": "execute_result"
2352 | }
2353 | ],
2354 | "source": [
2355 | "names.count(12)\n",
2356 | "names.append(12)\n",
2357 | "names.count(12)"
2358 | ]
2359 | },
2360 | {
2361 | "cell_type": "code",
2362 | "execution_count": 159,
2363 | "metadata": {},
2364 | "outputs": [
2365 | {
2366 | "data": {
2367 | "text/plain": [
2368 | "['Bazinga',\n",
2369 | " 'Tensorflow',\n",
2370 | " 'Keras',\n",
2371 | " 'Happy',\n",
2372 | " 'Torch',\n",
2373 | " 'Caffe',\n",
2374 | " 'Julyedu',\n",
2375 | " 'PyTorch',\n",
2376 | " 12,\n",
2377 | " 12]"
2378 | ]
2379 | },
2380 | "execution_count": 159,
2381 | "metadata": {},
2382 | "output_type": "execute_result"
2383 | }
2384 | ],
2385 | "source": [
2386 | "names"
2387 | ]
2388 | },
2389 | {
2390 | "cell_type": "markdown",
2391 | "metadata": {},
2392 | "source": [
2393 | "- reverse"
2394 | ]
2395 | },
2396 | {
2397 | "cell_type": "code",
2398 | "execution_count": 167,
2399 | "metadata": {},
2400 | "outputs": [],
2401 | "source": [
2402 | "names.reverse()"
2403 | ]
2404 | },
2405 | {
2406 | "cell_type": "code",
2407 | "execution_count": 175,
2408 | "metadata": {},
2409 | "outputs": [
2410 | {
2411 | "data": {
2412 | "text/plain": [
2413 | "['Bazinga', 'Tensorflow', 'Keras', 'Happy', 'Caffe', 'Julyedu', 'PyTorch']"
2414 | ]
2415 | },
2416 | "execution_count": 175,
2417 | "metadata": {},
2418 | "output_type": "execute_result"
2419 | }
2420 | ],
2421 | "source": [
2422 | "names"
2423 | ]
2424 | },
2425 | {
2426 | "cell_type": "markdown",
2427 | "metadata": {},
2428 | "source": [
2429 | "- del删除element"
2430 | ]
2431 | },
2432 | {
2433 | "cell_type": "code",
2434 | "execution_count": 174,
2435 | "metadata": {},
2436 | "outputs": [],
2437 | "source": [
2438 | "del names[4]"
2439 | ]
2440 | },
2441 | {
2442 | "cell_type": "code",
2443 | "execution_count": null,
2444 | "metadata": {
2445 | "collapsed": true
2446 | },
2447 | "outputs": [],
2448 | "source": []
2449 | },
2450 | {
2451 | "cell_type": "markdown",
2452 | "metadata": {},
2453 | "source": [
2454 | "## control statement"
2455 | ]
2456 | },
2457 | {
2458 | "cell_type": "code",
2459 | "execution_count": 190,
2460 | "metadata": {},
2461 | "outputs": [
2462 | {
2463 | "name": "stdout",
2464 | "output_type": "stream",
2465 | "text": [
2466 | "equal to or larger than 20\n"
2467 | ]
2468 | }
2469 | ],
2470 | "source": [
2471 | "if False:\n",
2472 | " print(\"less than 10\")\n",
2473 | "elif x < 20:\n",
2474 | " print(\"between 10 and 20\")\n",
2475 | "else: \n",
2476 | " print(\"equal to or larger than 20\")"
2477 | ]
2478 | },
2479 | {
2480 | "cell_type": "markdown",
2481 | "metadata": {},
2482 | "source": [
2483 | "### 关于Boolean"
2484 | ]
2485 | },
2486 | {
2487 | "cell_type": "code",
2488 | "execution_count": 181,
2489 | "metadata": {},
2490 | "outputs": [
2491 | {
2492 | "name": "stdout",
2493 | "output_type": "stream",
2494 | "text": [
2495 | "23.0\n"
2496 | ]
2497 | },
2498 | {
2499 | "data": {
2500 | "text/plain": [
2501 | "True"
2502 | ]
2503 | },
2504 | "execution_count": 181,
2505 | "metadata": {},
2506 | "output_type": "execute_result"
2507 | }
2508 | ],
2509 | "source": [
2510 | "print(x)\n",
2511 | "x > 1"
2512 | ]
2513 | },
2514 | {
2515 | "cell_type": "markdown",
2516 | "metadata": {},
2517 | "source": [
2518 | "## loops\n",
2519 | "### for loop"
2520 | ]
2521 | },
2522 | {
2523 | "cell_type": "markdown",
2524 | "metadata": {},
2525 | "source": [
2526 | "range function"
2527 | ]
2528 | },
2529 | {
2530 | "cell_type": "code",
2531 | "execution_count": 191,
2532 | "metadata": {},
2533 | "outputs": [
2534 | {
2535 | "data": {
2536 | "text/plain": [
2537 | "['Bazinga', 'Tensorflow', 'Keras', 'Happy', 'Caffe', 'Julyedu', 'PyTorch']"
2538 | ]
2539 | },
2540 | "execution_count": 191,
2541 | "metadata": {},
2542 | "output_type": "execute_result"
2543 | }
2544 | ],
2545 | "source": [
2546 | "names"
2547 | ]
2548 | },
2549 | {
2550 | "cell_type": "code",
2551 | "execution_count": 206,
2552 | "metadata": {},
2553 | "outputs": [
2554 | {
2555 | "name": "stdout",
2556 | "output_type": "stream",
2557 | "text": [
2558 | "Bazinga\n",
2559 | "Tensorflow\n",
2560 | "Keras\n",
2561 | "Happy\n",
2562 | "Caffe\n",
2563 | "Julyedu\n",
2564 | "PyTorch\n"
2565 | ]
2566 | }
2567 | ],
2568 | "source": [
2569 | "for name in names:\n",
2570 | " print(name)"
2571 | ]
2572 | },
2573 | {
2574 | "cell_type": "code",
2575 | "execution_count": null,
2576 | "metadata": {
2577 | "collapsed": true
2578 | },
2579 | "outputs": [],
2580 | "source": []
2581 | },
2582 | {
2583 | "cell_type": "markdown",
2584 | "metadata": {},
2585 | "source": [
2586 | "关于range的用法"
2587 | ]
2588 | },
2589 | {
2590 | "cell_type": "code",
2591 | "execution_count": 197,
2592 | "metadata": {},
2593 | "outputs": [
2594 | {
2595 | "name": "stdout",
2596 | "output_type": "stream",
2597 | "text": [
2598 | "0\n",
2599 | "1\n",
2600 | "2\n",
2601 | "3\n",
2602 | "4\n"
2603 | ]
2604 | }
2605 | ],
2606 | "source": [
2607 | "for i in range(5):\n",
2608 | " print(i)"
2609 | ]
2610 | },
2611 | {
2612 | "cell_type": "code",
2613 | "execution_count": 199,
2614 | "metadata": {},
2615 | "outputs": [
2616 | {
2617 | "data": {
2618 | "text/plain": [
2619 | "[0, 1, 2, 3, 4]"
2620 | ]
2621 | },
2622 | "execution_count": 199,
2623 | "metadata": {},
2624 | "output_type": "execute_result"
2625 | }
2626 | ],
2627 | "source": [
2628 | "list(range(5))"
2629 | ]
2630 | },
2631 | {
2632 | "cell_type": "code",
2633 | "execution_count": 200,
2634 | "metadata": {},
2635 | "outputs": [
2636 | {
2637 | "data": {
2638 | "text/plain": [
2639 | "[1, 2, 3, 4, 5, 6, 7]"
2640 | ]
2641 | },
2642 | "execution_count": 200,
2643 | "metadata": {},
2644 | "output_type": "execute_result"
2645 | }
2646 | ],
2647 | "source": [
2648 | "list(range(1,8))"
2649 | ]
2650 | },
2651 | {
2652 | "cell_type": "code",
2653 | "execution_count": 203,
2654 | "metadata": {},
2655 | "outputs": [
2656 | {
2657 | "data": {
2658 | "text/plain": [
2659 | "[]"
2660 | ]
2661 | },
2662 | "execution_count": 203,
2663 | "metadata": {},
2664 | "output_type": "execute_result"
2665 | }
2666 | ],
2667 | "source": [
2668 | "list(range(5, 20, -2))"
2669 | ]
2670 | },
2671 | {
2672 | "cell_type": "code",
2673 | "execution_count": 205,
2674 | "metadata": {},
2675 | "outputs": [
2676 | {
2677 | "data": {
2678 | "text/plain": [
2679 | "[20, 13, 6]"
2680 | ]
2681 | },
2682 | "execution_count": 205,
2683 | "metadata": {},
2684 | "output_type": "execute_result"
2685 | }
2686 | ],
2687 | "source": [
2688 | "list(range(20, 5, -7))"
2689 | ]
2690 | },
2691 | {
2692 | "cell_type": "markdown",
2693 | "metadata": {},
2694 | "source": [
2695 | "如果我们想在每个element前面加个数字编号呢?"
2696 | ]
2697 | },
2698 | {
2699 | "cell_type": "code",
2700 | "execution_count": 211,
2701 | "metadata": {},
2702 | "outputs": [
2703 | {
2704 | "name": "stdout",
2705 | "output_type": "stream",
2706 | "text": [
2707 | "1 Bazinga\n",
2708 | "2 Tensorflow\n",
2709 | "3 Keras\n",
2710 | "4 Happy\n",
2711 | "5 Caffe\n",
2712 | "6 Julyedu\n",
2713 | "7 PyTorch\n"
2714 | ]
2715 | }
2716 | ],
2717 | "source": [
2718 | "for i in range(len(names)):\n",
2719 | " print(i+1, names[i])"
2720 | ]
2721 | },
2722 | {
2723 | "cell_type": "code",
2724 | "execution_count": null,
2725 | "metadata": {
2726 | "collapsed": true
2727 | },
2728 | "outputs": [],
2729 | "source": []
2730 | },
2731 | {
2732 | "cell_type": "markdown",
2733 | "metadata": {},
2734 | "source": [
2735 | "其实用enumerate更简单,直接帮你带上数字"
2736 | ]
2737 | },
2738 | {
2739 | "cell_type": "code",
2740 | "execution_count": 216,
2741 | "metadata": {},
2742 | "outputs": [
2743 | {
2744 | "name": "stdout",
2745 | "output_type": "stream",
2746 | "text": [
2747 | "0 Bazinga\n",
2748 | "1 Tensorflow\n",
2749 | "2 Keras\n",
2750 | "3 Happy\n",
2751 | "4 Caffe\n",
2752 | "5 Julyedu\n",
2753 | "6 PyTorch\n"
2754 | ]
2755 | }
2756 | ],
2757 | "source": [
2758 | "for i, name in enumerate(names):\n",
2759 | " print(i, name)"
2760 | ]
2761 | },
2762 | {
2763 | "cell_type": "markdown",
2764 | "metadata": {},
2765 | "source": [
2766 | "for与list在一起使用可以写很多简洁的语句, list comprehension"
2767 | ]
2768 | },
2769 | {
2770 | "cell_type": "code",
2771 | "execution_count": 217,
2772 | "metadata": {},
2773 | "outputs": [
2774 | {
2775 | "data": {
2776 | "text/plain": [
2777 | "['Bazinga', 'Tensorflow', 'Keras', 'Happy', 'Caffe', 'Julyedu', 'PyTorch']"
2778 | ]
2779 | },
2780 | "execution_count": 217,
2781 | "metadata": {},
2782 | "output_type": "execute_result"
2783 | }
2784 | ],
2785 | "source": [
2786 | "names"
2787 | ]
2788 | },
2789 | {
2790 | "cell_type": "code",
2791 | "execution_count": 224,
2792 | "metadata": {},
2793 | "outputs": [
2794 | {
2795 | "data": {
2796 | "text/plain": [
2797 | "['stupid Bazinga',\n",
2798 | " 'stupid Tensorflow',\n",
2799 | " 'stupid Keras',\n",
2800 | " 'stupid Happy',\n",
2801 | " 'stupid Caffe',\n",
2802 | " 'stupid Julyedu',\n",
2803 | " 'stupid PyTorch']"
2804 | ]
2805 | },
2806 | "execution_count": 224,
2807 | "metadata": {},
2808 | "output_type": "execute_result"
2809 | }
2810 | ],
2811 | "source": [
2812 | "[\"stupid \" + aaaa12 for aaaa12 in names]"
2813 | ]
2814 | },
2815 | {
2816 | "cell_type": "markdown",
2817 | "metadata": {},
2818 | "source": [
2819 | "## while loop\n",
2820 | "\n",
2821 | "下面的这个小程序可以输出0-9"
2822 | ]
2823 | },
2824 | {
2825 | "cell_type": "code",
2826 | "execution_count": 225,
2827 | "metadata": {},
2828 | "outputs": [
2829 | {
2830 | "name": "stdout",
2831 | "output_type": "stream",
2832 | "text": [
2833 | "0\n",
2834 | "1\n",
2835 | "2\n",
2836 | "3\n",
2837 | "4\n"
2838 | ]
2839 | }
2840 | ],
2841 | "source": [
2842 | "i = 0\n",
2843 | "while i < 5:\n",
2844 | " print(i)\n",
2845 | " i += 1\n",
2846 | " "
2847 | ]
2848 | },
2849 | {
2850 | "cell_type": "markdown",
2851 | "metadata": {},
2852 | "source": [
2853 | "注意千万别忘了最后这一句```i += 1```否则就陷入死循环了。\n",
2854 | "\n",
2855 | "### break和continue的用法\n",
2856 | "- break会直接让你跳出当前的循环"
2857 | ]
2858 | },
2859 | {
2860 | "cell_type": "code",
2861 | "execution_count": 226,
2862 | "metadata": {},
2863 | "outputs": [
2864 | {
2865 | "name": "stdout",
2866 | "output_type": "stream",
2867 | "text": [
2868 | "0\n",
2869 | "1\n",
2870 | "2\n",
2871 | "3\n",
2872 | "4\n"
2873 | ]
2874 | }
2875 | ],
2876 | "source": [
2877 | "i = 0\n",
2878 | "while True:\n",
2879 | " print(i)\n",
2880 | " i += 1\n",
2881 | " if i >= 5:\n",
2882 | " break"
2883 | ]
2884 | },
2885 | {
2886 | "cell_type": "code",
2887 | "execution_count": 228,
2888 | "metadata": {},
2889 | "outputs": [
2890 | {
2891 | "name": "stdout",
2892 | "output_type": "stream",
2893 | "text": [
2894 | "1\n",
2895 | "2\n",
2896 | "4\n",
2897 | "5\n",
2898 | "7\n",
2899 | "8\n",
2900 | "10\n",
2901 | "11\n",
2902 | "13\n",
2903 | "14\n",
2904 | "16\n",
2905 | "17\n",
2906 | "19\n"
2907 | ]
2908 | }
2909 | ],
2910 | "source": [
2911 | "i = 0\n",
2912 | "while True:\n",
2913 | " if i % 3 == 0:\n",
2914 | " i += 1\n",
2915 | " continue\n",
2916 | " \n",
2917 | " print(i)\n",
2918 | " i += 1\n",
2919 | " if i >= 20:\n",
2920 | " break"
2921 | ]
2922 | },
2923 | {
2924 | "cell_type": "markdown",
2925 | "metadata": {
2926 | "collapsed": true
2927 | },
2928 | "source": [
2929 | "## 小练习:输出一个fibonacci数列¶\n",
2930 | "\n"
2931 | ]
2932 | },
2933 | {
2934 | "cell_type": "code",
2935 | "execution_count": 230,
2936 | "metadata": {},
2937 | "outputs": [
2938 | {
2939 | "name": "stdout",
2940 | "output_type": "stream",
2941 | "text": [
2942 | "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]\n"
2943 | ]
2944 | }
2945 | ],
2946 | "source": [
2947 | "# 0, 1, 1, 2, 3, 5, 8, 13\n",
2948 | "\n",
2949 | "fibs = []\n",
2950 | "a = 0\n",
2951 | "b = 1\n",
2952 | "while a < 500:\n",
2953 | " fibs.append(a)\n",
2954 | " # a = 2, b = 3\n",
2955 | " tmp = b\n",
2956 | " # tmp = 3, b = 3, a = 2\n",
2957 | " b = a + b\n",
2958 | " # tmp = 3, a = 2, b = 5\n",
2959 | " a = tmp\n",
2960 | " # tmp = 3, a = 3, b = 5\n",
2961 | "print(fibs)"
2962 | ]
2963 | },
2964 | {
2965 | "cell_type": "code",
2966 | "execution_count": 251,
2967 | "metadata": {},
2968 | "outputs": [
2969 | {
2970 | "name": "stdout",
2971 | "output_type": "stream",
2972 | "text": [
2973 | "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]\n"
2974 | ]
2975 | }
2976 | ],
2977 | "source": [
2978 | "# 0, 1, 1, 2, 3, 5, 8, 13\n",
2979 | "\n",
2980 | "fibs = []\n",
2981 | "a = 0\n",
2982 | "b = 1\n",
2983 | "while a < 500:\n",
2984 | " fibs.append(a)\n",
2985 | " a, b = (b, a+b)\n",
2986 | "print(fibs)"
2987 | ]
2988 | },
2989 | {
2990 | "cell_type": "markdown",
2991 | "metadata": {},
2992 | "source": [
2993 | "## set"
2994 | ]
2995 | },
2996 | {
2997 | "cell_type": "markdown",
2998 | "metadata": {},
2999 | "source": [
3000 | "- list可以被转换成set,可以用于去重"
3001 | ]
3002 | },
3003 | {
3004 | "cell_type": "code",
3005 | "execution_count": 257,
3006 | "metadata": {},
3007 | "outputs": [],
3008 | "source": [
3009 | "names.append(\"Tensorflow\")"
3010 | ]
3011 | },
3012 | {
3013 | "cell_type": "code",
3014 | "execution_count": 258,
3015 | "metadata": {},
3016 | "outputs": [
3017 | {
3018 | "data": {
3019 | "text/plain": [
3020 | "['Bazinga',\n",
3021 | " 'Tensorflow',\n",
3022 | " 'Keras',\n",
3023 | " 'Happy',\n",
3024 | " 'Caffe',\n",
3025 | " 'Julyedu',\n",
3026 | " 'PyTorch',\n",
3027 | " 'Tensorflow',\n",
3028 | " 'Tensorflow',\n",
3029 | " 'Tensorflow',\n",
3030 | " 'Tensorflow',\n",
3031 | " 'Tensorflow']"
3032 | ]
3033 | },
3034 | "execution_count": 258,
3035 | "metadata": {},
3036 | "output_type": "execute_result"
3037 | }
3038 | ],
3039 | "source": [
3040 | "names"
3041 | ]
3042 | },
3043 | {
3044 | "cell_type": "code",
3045 | "execution_count": 278,
3046 | "metadata": {
3047 | "scrolled": true
3048 | },
3049 | "outputs": [
3050 | {
3051 | "data": {
3052 | "text/plain": [
3053 | "['PyTorch', 'Keras', 'Julyedu', 'Happy', 'Caffe', 'Bazinga', 'Tensorflow']"
3054 | ]
3055 | },
3056 | "execution_count": 278,
3057 | "metadata": {},
3058 | "output_type": "execute_result"
3059 | }
3060 | ],
3061 | "source": [
3062 | "list(set(names))"
3063 | ]
3064 | },
3065 | {
3066 | "cell_type": "code",
3067 | "execution_count": 262,
3068 | "metadata": {
3069 | "collapsed": true
3070 | },
3071 | "outputs": [],
3072 | "source": [
3073 | "empty_set = set()"
3074 | ]
3075 | },
3076 | {
3077 | "cell_type": "code",
3078 | "execution_count": 275,
3079 | "metadata": {},
3080 | "outputs": [],
3081 | "source": [
3082 | "empty_set.add(\"aaaaa\")"
3083 | ]
3084 | },
3085 | {
3086 | "cell_type": "code",
3087 | "execution_count": 276,
3088 | "metadata": {},
3089 | "outputs": [
3090 | {
3091 | "data": {
3092 | "text/plain": [
3093 | "{'aaaaa'}"
3094 | ]
3095 | },
3096 | "execution_count": 276,
3097 | "metadata": {},
3098 | "output_type": "execute_result"
3099 | }
3100 | ],
3101 | "source": [
3102 | "empty_set"
3103 | ]
3104 | },
3105 | {
3106 | "cell_type": "code",
3107 | "execution_count": 282,
3108 | "metadata": {},
3109 | "outputs": [
3110 | {
3111 | "data": {
3112 | "text/plain": [
3113 | "{1, 2, 3, 4, 5}"
3114 | ]
3115 | },
3116 | "execution_count": 282,
3117 | "metadata": {},
3118 | "output_type": "execute_result"
3119 | }
3120 | ],
3121 | "source": [
3122 | "numbers = {1,2,2,2,2,2,3,3,2,2,3,3,3,4,5}\n",
3123 | "numbers\n",
3124 | "#type(numbers)"
3125 | ]
3126 | },
3127 | {
3128 | "cell_type": "markdown",
3129 | "metadata": {},
3130 | "source": [
3131 | "- string也可以被转换成set"
3132 | ]
3133 | },
3134 | {
3135 | "cell_type": "code",
3136 | "execution_count": 283,
3137 | "metadata": {},
3138 | "outputs": [
3139 | {
3140 | "data": {
3141 | "text/plain": [
3142 | "{'a', 'b', 'n'}"
3143 | ]
3144 | },
3145 | "execution_count": 283,
3146 | "metadata": {},
3147 | "output_type": "execute_result"
3148 | }
3149 | ],
3150 | "source": [
3151 | "set(\"banana\")"
3152 | ]
3153 | },
3154 | {
3155 | "cell_type": "markdown",
3156 | "metadata": {},
3157 | "source": [
3158 | "- 比较fancy的一个例子, set comprehension\n"
3159 | ]
3160 | },
3161 | {
3162 | "cell_type": "code",
3163 | "execution_count": 286,
3164 | "metadata": {},
3165 | "outputs": [
3166 | {
3167 | "data": {
3168 | "text/plain": [
3169 | "['b']"
3170 | ]
3171 | },
3172 | "execution_count": 286,
3173 | "metadata": {},
3174 | "output_type": "execute_result"
3175 | }
3176 | ],
3177 | "source": [
3178 | "[x for x in \"banana\" if x not in \"an\"]"
3179 | ]
3180 | },
3181 | {
3182 | "cell_type": "markdown",
3183 | "metadata": {},
3184 | "source": [
3185 | "## tuple\n",
3186 | "tuples有点像list,不过一个很大的区别是tuples是immutable的,也就是说它的element一旦创建之后就无法更改了。"
3187 | ]
3188 | },
3189 | {
3190 | "cell_type": "code",
3191 | "execution_count": 237,
3192 | "metadata": {},
3193 | "outputs": [
3194 | {
3195 | "data": {
3196 | "text/plain": [
3197 | "(1, 2, 3, 'Facebook', 'Google')"
3198 | ]
3199 | },
3200 | "execution_count": 237,
3201 | "metadata": {},
3202 | "output_type": "execute_result"
3203 | }
3204 | ],
3205 | "source": [
3206 | "t = 1, 2,3, \"Facebook\", \"Google\"\n",
3207 | "t"
3208 | ]
3209 | },
3210 | {
3211 | "cell_type": "code",
3212 | "execution_count": 238,
3213 | "metadata": {},
3214 | "outputs": [
3215 | {
3216 | "data": {
3217 | "text/plain": [
3218 | "tuple"
3219 | ]
3220 | },
3221 | "execution_count": 238,
3222 | "metadata": {},
3223 | "output_type": "execute_result"
3224 | }
3225 | ],
3226 | "source": [
3227 | "type(t)"
3228 | ]
3229 | },
3230 | {
3231 | "cell_type": "code",
3232 | "execution_count": 240,
3233 | "metadata": {},
3234 | "outputs": [
3235 | {
3236 | "data": {
3237 | "text/plain": [
3238 | "'Facebook'"
3239 | ]
3240 | },
3241 | "execution_count": 240,
3242 | "metadata": {},
3243 | "output_type": "execute_result"
3244 | }
3245 | ],
3246 | "source": [
3247 | "t[3]"
3248 | ]
3249 | },
3250 | {
3251 | "cell_type": "code",
3252 | "execution_count": 241,
3253 | "metadata": {},
3254 | "outputs": [
3255 | {
3256 | "ename": "TypeError",
3257 | "evalue": "'tuple' object does not support item assignment",
3258 | "output_type": "error",
3259 | "traceback": [
3260 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
3261 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
3262 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mt\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"333333\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
3263 | "\u001b[1;31mTypeError\u001b[0m: 'tuple' object does not support item assignment"
3264 | ]
3265 | }
3266 | ],
3267 | "source": [
3268 | "t[2] = \"333333\""
3269 | ]
3270 | },
3271 | {
3272 | "cell_type": "code",
3273 | "execution_count": 249,
3274 | "metadata": {},
3275 | "outputs": [],
3276 | "source": [
3277 | "a, b, c, d, e = t"
3278 | ]
3279 | },
3280 | {
3281 | "cell_type": "code",
3282 | "execution_count": 250,
3283 | "metadata": {},
3284 | "outputs": [
3285 | {
3286 | "data": {
3287 | "text/plain": [
3288 | "'Google'"
3289 | ]
3290 | },
3291 | "execution_count": 250,
3292 | "metadata": {},
3293 | "output_type": "execute_result"
3294 | }
3295 | ],
3296 | "source": [
3297 | "e"
3298 | ]
3299 | },
3300 | {
3301 | "cell_type": "markdown",
3302 | "metadata": {},
3303 | "source": [
3304 | "## dictionary\n",
3305 | "\n",
3306 | "dictionary就是字典,也就是把一个元素map到另一个元素上"
3307 | ]
3308 | },
3309 | {
3310 | "cell_type": "code",
3311 | "execution_count": 292,
3312 | "metadata": {},
3313 | "outputs": [
3314 | {
3315 | "data": {
3316 | "text/plain": [
3317 | "{'apple': 0, 'banana': 12, 'orange': 22, 'pineapple': 5}"
3318 | ]
3319 | },
3320 | "execution_count": 292,
3321 | "metadata": {},
3322 | "output_type": "execute_result"
3323 | }
3324 | ],
3325 | "source": [
3326 | "fruit = {\"apple\": 0, \"orange\":22, \"pineapple\": 5, \"banana\": 12}\n",
3327 | "fruit\n",
3328 | "# key value pairs"
3329 | ]
3330 | },
3331 | {
3332 | "cell_type": "code",
3333 | "execution_count": 293,
3334 | "metadata": {},
3335 | "outputs": [
3336 | {
3337 | "data": {
3338 | "text/plain": [
3339 | "12"
3340 | ]
3341 | },
3342 | "execution_count": 293,
3343 | "metadata": {},
3344 | "output_type": "execute_result"
3345 | }
3346 | ],
3347 | "source": [
3348 | "fruit[\"banana\"]"
3349 | ]
3350 | },
3351 | {
3352 | "cell_type": "code",
3353 | "execution_count": 294,
3354 | "metadata": {},
3355 | "outputs": [
3356 | {
3357 | "data": {
3358 | "text/plain": [
3359 | "dict"
3360 | ]
3361 | },
3362 | "execution_count": 294,
3363 | "metadata": {},
3364 | "output_type": "execute_result"
3365 | }
3366 | ],
3367 | "source": [
3368 | "type(fruit)"
3369 | ]
3370 | },
3371 | {
3372 | "cell_type": "markdown",
3373 | "metadata": {},
3374 | "source": [
3375 | "下面的方法可以帮助我们查看一个dictionary的keys和values"
3376 | ]
3377 | },
3378 | {
3379 | "cell_type": "code",
3380 | "execution_count": 298,
3381 | "metadata": {},
3382 | "outputs": [
3383 | {
3384 | "name": "stdout",
3385 | "output_type": "stream",
3386 | "text": [
3387 | "apple\n",
3388 | "orange\n",
3389 | "pineapple\n",
3390 | "banana\n"
3391 | ]
3392 | }
3393 | ],
3394 | "source": [
3395 | "for i in fruit.keys():\n",
3396 | " print(i)"
3397 | ]
3398 | },
3399 | {
3400 | "cell_type": "markdown",
3401 | "metadata": {},
3402 | "source": [
3403 | "- 一个list of tuples也可以转换成dict。"
3404 | ]
3405 | },
3406 | {
3407 | "cell_type": "code",
3408 | "execution_count": 299,
3409 | "metadata": {
3410 | "collapsed": true
3411 | },
3412 | "outputs": [],
3413 | "source": [
3414 | "schools = [(\"Harvard\", 1), (\"Princeton\", 2), (\"Yale\",3), (\"Stanford\",4), (\"MIT\",5), (\"Chicago\",6)]"
3415 | ]
3416 | },
3417 | {
3418 | "cell_type": "code",
3419 | "execution_count": 300,
3420 | "metadata": {},
3421 | "outputs": [
3422 | {
3423 | "data": {
3424 | "text/plain": [
3425 | "{'Chicago': 6,\n",
3426 | " 'Harvard': 1,\n",
3427 | " 'MIT': 5,\n",
3428 | " 'Princeton': 2,\n",
3429 | " 'Stanford': 4,\n",
3430 | " 'Yale': 3}"
3431 | ]
3432 | },
3433 | "execution_count": 300,
3434 | "metadata": {},
3435 | "output_type": "execute_result"
3436 | }
3437 | ],
3438 | "source": [
3439 | "dict(schools)"
3440 | ]
3441 | },
3442 | {
3443 | "cell_type": "markdown",
3444 | "metadata": {},
3445 | "source": [
3446 | "有时候我们想把一个list编号做成一个dictionary,比如下面这种情况:"
3447 | ]
3448 | },
3449 | {
3450 | "cell_type": "code",
3451 | "execution_count": 303,
3452 | "metadata": {
3453 | "collapsed": true
3454 | },
3455 | "outputs": [],
3456 | "source": [
3457 | "vocab = [\"apple\", \"bit\", \"chrome\", \"facebook\", \"google\", \"hack\", \"iteration\", \"jupyter\", \"kaggle\"]"
3458 | ]
3459 | },
3460 | {
3461 | "cell_type": "code",
3462 | "execution_count": 304,
3463 | "metadata": {},
3464 | "outputs": [
3465 | {
3466 | "data": {
3467 | "text/plain": [
3468 | "['apple',\n",
3469 | " 'bit',\n",
3470 | " 'chrome',\n",
3471 | " 'facebook',\n",
3472 | " 'google',\n",
3473 | " 'hack',\n",
3474 | " 'iteration',\n",
3475 | " 'jupyter',\n",
3476 | " 'kaggle']"
3477 | ]
3478 | },
3479 | "execution_count": 304,
3480 | "metadata": {},
3481 | "output_type": "execute_result"
3482 | }
3483 | ],
3484 | "source": [
3485 | "vocab"
3486 | ]
3487 | },
3488 | {
3489 | "cell_type": "code",
3490 | "execution_count": 311,
3491 | "metadata": {},
3492 | "outputs": [
3493 | {
3494 | "data": {
3495 | "text/plain": [
3496 | "{'apple': 1,\n",
3497 | " 'bit': 2,\n",
3498 | " 'chrome': 3,\n",
3499 | " 'facebook': 4,\n",
3500 | " 'google': 5,\n",
3501 | " 'hack': 6,\n",
3502 | " 'iteration': 7,\n",
3503 | " 'jupyter': 8,\n",
3504 | " 'kaggle': 9}"
3505 | ]
3506 | },
3507 | "execution_count": 311,
3508 | "metadata": {},
3509 | "output_type": "execute_result"
3510 | }
3511 | ],
3512 | "source": [
3513 | "{k:v+1 for v, k in enumerate(vocab)}"
3514 | ]
3515 | },
3516 | {
3517 | "cell_type": "code",
3518 | "execution_count": null,
3519 | "metadata": {
3520 | "collapsed": true
3521 | },
3522 | "outputs": [],
3523 | "source": [
3524 | "JSON\n",
3525 | "javascript object notation\n",
3526 | "import json\n"
3527 | ]
3528 | },
3529 | {
3530 | "cell_type": "markdown",
3531 | "metadata": {},
3532 | "source": [
3533 | "## function\n",
3534 | "\n",
3535 | "- def关键词\n",
3536 | "- 用括号包含list of parameters\n",
3537 | "- statements都要indent\n"
3538 | ]
3539 | },
3540 | {
3541 | "cell_type": "markdown",
3542 | "metadata": {},
3543 | "source": [
3544 | "\n",
3545 | "### 不定长度的arguments\n",
3546 | "\n"
3547 | ]
3548 | },
3549 | {
3550 | "cell_type": "markdown",
3551 | "metadata": {},
3552 | "source": [
3553 | "### default argument\n",
3554 | "concat例子\n",
3555 | "\n"
3556 | ]
3557 | },
3558 | {
3559 | "cell_type": "markdown",
3560 | "metadata": {},
3561 | "source": [
3562 | "\n",
3563 | "\n",
3564 | "### 把一个tuple/list当做arguments\n",
3565 | "\n"
3566 | ]
3567 | }
3568 | ],
3569 | "metadata": {
3570 | "kernelspec": {
3571 | "display_name": "Python 3",
3572 | "language": "python",
3573 | "name": "python3"
3574 | },
3575 | "language_info": {
3576 | "codemirror_mode": {
3577 | "name": "ipython",
3578 | "version": 3
3579 | },
3580 | "file_extension": ".py",
3581 | "mimetype": "text/x-python",
3582 | "name": "python",
3583 | "nbconvert_exporter": "python",
3584 | "pygments_lexer": "ipython3",
3585 | "version": "3.6.1"
3586 | }
3587 | },
3588 | "nbformat": 4,
3589 | "nbformat_minor": 2
3590 | }
3591 |
--------------------------------------------------------------------------------