小甲鱼零基础入门学习python课堂笔记.docx
《小甲鱼零基础入门学习python课堂笔记.docx》由会员分享,可在线阅读,更多相关《小甲鱼零基础入门学习python课堂笔记.docx(105页珍藏版)》请在冰点文库上搜索。
[键入公司名称]
人生苦短,我用Python
[键入文档副标题]
徐辉
[选取日期]
目录
01讲:
我和Python的第一次亲密接触 8
02讲:
用Python设计第一个游戏 9
03讲:
小插曲之变量和字符串 12
04讲:
改进我们的小游戏 13
05讲:
闲聊之Python的数据类型 15
06讲:
Pyhon之常用操作符 16
07讲:
了不起的分支和循环1 17
08讲:
了不起的分支和循环2 19
09讲:
了不起的分支和循环3 21
10讲:
列表,一个打了激素的数组1 23
11讲:
列表,一个打了激素的数组2 25
12讲:
列表,一个打了激素的数组3 27
13讲:
元组,戴上了枷锁的列表 30
14讲:
字符串:
各种奇葩的内置方法 32
15讲:
字符串的格式语句与操作符 37
16讲:
序列相关内置函数介绍 40
1-16讲:
阶段总结 45
17讲:
函数:
Python的乐高积木 46
18讲:
函数:
灵活即强大 47
18讲2:
py文件打包成exe文件 49
19讲:
函数:
我的地盘我做主 50
20讲:
函数:
内嵌函数和闭包 52
21讲:
函数:
lambda表达式 54
22讲:
函数:
递归是神马 56
23讲:
递归:
这帮小兔崽子 57
24讲:
递归:
汉诺塔 59
17-24讲:
阶段性总结 60
25讲:
字典:
当索引值不好用时 61
26讲:
字典:
当索引值不好用时2 62
27讲:
集合:
在我的世界里,你就是唯一 65
28讲:
文件:
因为懂你,所以永恒 66
29讲:
文件:
一个任务 68
30讲:
文件系统:
介绍一个高大上的东西 71
31讲:
永久存储:
腌制一缸美味的泡菜 75
31讲:
异常处理:
你不可能总是对的 76
33讲:
异常处理:
你不可能总是对的2 78
34讲:
丰富的else语句和简洁的with 81
35讲:
图形界面用户入门:
EasyGui 83
36讲:
类和对象:
给大家介绍对象 83
37讲:
类和对象:
面向对象编程 85
38讲:
类和对象:
继承 86
39讲:
类和对象:
拾遗 87
40讲:
类和对象:
一些相关的BIF 90
41讲:
类和对象:
构造和析构 92
42讲:
类和对象:
算术运算符 94
43讲:
类和对象:
算术运算符2 96
44讲:
魔法方法:
简单定制 97
45讲:
魔法方法:
属性访问 99
46讲:
魔法方法:
描述符 101
47讲:
魔法方法:
定制容器 104
48讲:
魔法方法:
迭代器 105
序
----小甲鱼
四件在我步入职业软件开发生涯那天起就该知道的事情
我的软件开发生涯开始于大约15年以前。
*m2]9R!
f#R)G/O1g'z
)q8l%{(o*j8e1S6J
但是直到最近5年,我才真正地看到它的提高。
+J Q/G!
K6f,\2s
9}&T1X7y6L
下面这些事情,我希望在进入软件开发领域时我已经知道了。
如果我早点知道这些事儿,我将会变得更加成功。
7q!
l!
O+O&T+e"i9r
:
i&G6U-f-K'}4t
软件开发中没有“正确的方式“
:
p-k8T0O;_7X9E
在我开发生涯的早期,我在学习和争论上浪费了大量的时间。
我错误地认为,在软件开发的诸多方面都存在一种绝对”正确的方式“。
但是,关于软件开发,几乎每一件我当时认为是正确的事到头来都被证明是错的。
:
{9o-P3Y8S4Y.F(@
更重要的是,我发现几乎没有任何一件事是非黑即白的。
在编写代码和开发软件的过程中,几乎所有的决策都是基于当时特定的情形。
我之前已经谈过为什么信仰一种技术对开发人员有害,但是我现在说的这个话题谈的不止是一种技术(这么狭隘)。
'[*f1}5@$J+L
没有通用的最佳实践,这也是真的。
甚至是一些highycharged话题。
例如,要不要单元测试?
敏捷开发和瀑布模型哪个好?
这些没有永远正确的答案。
在我的职业生涯中,我在”正道“(理想主义)路线的迷宫里浪费了太多的时间,而不是采用可以帮我走得更远的”务实“(现实主义)路线。
5t:
E6~ r;Z3A!
m(R8R
4L$Y8O:
T)n7I!
Z
细读书不是最佳的学习方式
9O4o,?
r5W"o v
我一开始学习编程和技术知识的时候,我花了太多时间细读一些关于特定技术的书。
6l$Z&G1{3b0p
-s&Z8g-z*~(u
读书没错,但是选择读什么书和读它的哪一部分非常重要。
比如,我记得我读过一本非常厚的讲VC++的书。
(我十分肯定是这本书的更早的一个版本。
)不管怎么说,这本书是本内容丰富的好书,但是一页一页地读并不是学习VC++最好的方式。
9d0H0c!
v,h;_
如果我当时先粗略地看看此书的章节,获得对VC++的一些全局的认识,然后再去搞懂其中最最重要的部分,我能学到并记住更多的东西。
如果我当时坐下来,通过实际地做一些东西来练习基础知识,而不是仅仅读一下或者过一过书上的例子,我现在会更加成功。
你没有在真正地学一门技术,除非你用它解决了真正的问题。
m'h5P,T*p4}
深入学习一门特定技术是浪费时间
我不仅在”细读书“上浪费了时间,我在”读错书“上也浪费了时间。
我错误地相信,从里到外学习一门特定的技术能很好地推动我的职业生涯。
我花了太多时间读一些非常专门的技术书,如,ASP.NET或Hibernate,而不是读更多的像《代码大全》,《代码整洁之道》,和《敏捷软件开发:
原则、模式与实践(C#版)》。
(BTW,我推荐你去读所有的这些书,如果你没读过的话。
)*]9_&X+m*E;}$s
尽管了解你所使用的技术非常重要,但是成为那个特定技术的绝对专家并不重要。
知道确切的API调用没多大好处,你需要的时候可以轻而易举地查到。
)B1L-P7W%m#k/S
*}#X9X-O+a%z0\9I
我在太多技术上花了太多时间深入学习,最后这个技术不是死掉了就是我后来放弃不用了。
大多数关于这些特定技术的知识最后只代表了浪费掉的时间。
!
s#[)n'M%C7]/a6l
我发现,成为你正在使用的特定的程序语言的专家很重要,因为程序语言方面的知识将影响你很长时间。
我仍然百分之百会花时间深入学习$@6Z%{:
b/m P,|
.v,Y*f+J N4w6s
C++,C#和Java,但是我可能会花较少的时间去学习C++所有复杂的细节,因为那些细节现在对我帮助不大。
4N"K7|0v5C(U
0j$d'M0S4H$F,H*u
在你的开发生涯中,社区极其重要!
$O"r6Q2B:
v/C
我的生涯早期,我犯了一个错误,就是不怎么去向社区寻求帮助,也不为他人提供帮助。
;X/~7o+D*m/a'[ x,T,D9x
我一向乐于帮助我的同事,也在不同的工作岗位上也非常善于交际,但活动范围从来没有超出过公司。
7\ z/U3f*Q8x9H.\
我在我的生涯中花了大量的时间,试图在一个特定的公司进行投资,却没能将我的时间投资在我参与的软件开发社区中。
我花了很多时间,做关于技术或者是最佳实践的内部presentation,而这些时间原本可以用来制作可以服务于社区的内容和材料,同时也能给我带来工作上的认可。
7`6P-M1l:
X
我也犯了另一个错误,就是认为自己没什么有价值的东西去贡献。
5k6g(t;F1j'o,L
我和很多刚入行的开发者聊过,有时候我觉得,比起我们这些”老油条“,他们有更多的东西去贡献给社区,因为他们更理解其他初学者蛋疼的问题。
/E6N1]4J4x%P3x&Q
如果我可以重来一遍,我一定会在我的生涯中更早、更多地参与各种会议和用户群。
我会更早地开始写博客,并利用我的大部分学习时间去
建立项目和资源,去帮助别人而不是只读书。
&R9|"i*f2g5O9];i
3M/i+S0T1[8@3C.T7[
总是参与一个业余项目5p8q'X(C*W9x9O.m
可能我做的最大的,并且对我生涯影响最大的改变将会是完全戒掉电视,无尽的任务和魔兽世界(两个游戏),并把这部分时间花在一个业余项目上。
(U:
B:
g'}%l
我过去花了相当一部分时间做一些享受性的,但是对我的生活没有长远利益的事情。
5_:
`&p&j.d4s*]9T6T0T;b
大约3到4年前,我已经基本不看电视了,现在我也很少看电影。
电视和大部分电影只是一个对时间的巨大浪费,而这些时间你可以用来干很多有用的事。
视频游戏很大程度上也是一样,但至少在视频游戏里,你在积极地做一些事情,而不是被动地吸收一些没有用的信息。
我会一直热爱玩视频游戏,并且我不认为我会停下来,但是,我真心希望我(之前)把一大部分用来打游戏看电视的时间花在一个业余项目上。
惭愧的是,我做的第一个真正的业余项目是在大约三年前,那时我开始创建我的第一个android应用。
/{1|(L"M!
l2M.?
当你在为别人工作的时候,花时间为自己工作非常重要,不然你就是在为他人建立王国而忽视自己的王国。
+U#l3d;`%}3p#]
我不仅从最近几年的业余项目中学到了很多,并且我也从中得到了很多利益。
事实上,其中一个,即制作Pluralsight课程,是我现在花全部时间在做的。
2
01讲:
我和Python的第一次亲密接触
本期内容介绍:
1.Python语言介绍;
2.Python程序下载安装过程;
3.IDLE功能介绍;
4.字符串类型说明;
5.print()函数功能说明;
6.在Python中的“*”和“+”号运算符的功能;
内容详细说明
1.Python即可用作解释其他高级语言的脚本语言,也是一门面向对象的高级语言;较之C语言和java编程效率要高得多。
2.推荐在Python官网下载3.0以上版本并安装,下载地址见www.python.org/downloads/
3.IDLE是Python程序自带的辅助开发工具,也就是一个能与程序进行交互的文本框,在开始菜单下的输入框内输入“IDLE”并回车, 便能找到并打开IDLE界面,初学者可以靠它进行交互式学习。
4.字符串类型在Python中被定义为以双引号或单引号引起来的字符,例如,
在Python中只有字符串变量,没有像C语音一样字符变量的概念,例如
5.print()函数用于将字符串或数字等在屏幕上显示,例如
>>>print('小甲鱼')
小甲鱼
>>>print(3+5)
8
6.在Python中“*”连接一个字符串和数字时表示将字符串重复多少次,例如
>>>"赞"*5
'赞赞赞赞赞'
而两个字符串之间以“+”号连接表示将两个字符串拼接,例如
>>>'小甲鱼'+'醉酒青牛'
'小甲鱼醉酒青牛'
另外“+”号两边必须是同样的数据类型,如果是一个字符串和一个数字则报错,例如
>>>'小甲鱼'+5
Traceback(mostrecentcalllast):
File"",line1,in
'小甲鱼'+5
TypeError:
Can'tconvert'int'objecttostrimplicitly
7. 在Widnwos下,在IDLE下的快捷键小知识:
1)组合Alt+P表示上一个命令,Alt+N表示下一条命令
02讲:
用Python设计第一个游戏
上期内容回顾:
1.Python语言介绍
2.Python程序下载安装过程
3.IDLE功能介绍
4.字符串类型说明
5.print()函数功能说明
6.在Python中的“*”和“+”号运算符的功能
7.IDLE中一些常用快捷键
本期主要内容导读:
主要是通过一个文字小游戏,使得大家了解Python程序的基本格式以及相应程序的流程图和关于内置函数的相关介绍。
废话不多说,入正题!
1.Python程序的基本格式介绍
Python程序的的基本格式是缩进,通过不同的缩进代表不同的作用域,这是有别于C及JAVA等高级语言最显著的特点,而且缩进使得程序变得更加简洁和整齐。
另外,我们需要掌握几个快捷键来提高编程效率:
在IDLE窗口下,Crtl+n表示新建一个Python程序文件,Crtl+s表示保存当前编辑的Python程序文件,F5表示执行程序文件;还有一个Tab键对初学者也非常重要。
它有三个作用:
1)通过按Tab键可实现程序代码缩进,IDLE现在支持选择多行代码,实现多行缩进的效果;2)调用内置函数时,如果只记得头几个字母,可以输进去之后按Tab键,会显示该头字母开头的所有内置函数。
2.绘制流程图
我们主要了解一个程序包含的基本要素,任何一个程序最基本的要素为”开始“,”程序体“,”结束“三部分组成,程序体内除了一些按先后顺序执行的语句外,还有条件语句和循环语句,他们是程序体的核心。
本期的程序对应的流程图见附件。
3.内置函数
内置函数,英文为Bulit-infunctions,我的理解就是可以在Python的IDLE里面直接使用的函数,而其他函数使用是需要通过import语句调入扩展包后才能使用。
在IDLE下通过键入dir(__builtins__)回车可以列出所有Python的内置函数,而每个内置函数的功能及使用方法可以使用help(内置函数名)
的方法显示出来。
这一期里面,我们要掌握input()函数以及int()函数的用法,关于这两个函数用法由于过于简单,这里就不再赘述。
4.一点补充
Python程序内不需要事先声明变量,可以直接赋值使用,另外需要注意if和else语句的使用方法,赋运算符值"="和比较运算符"=="的使用和区别来。
文字游戏代码:
流程图
03讲:
小插曲之变量和字符串
上期内容回顾:
1.Python程序的基本格式介绍;
2.绘制流程图;
3.内置函数介绍;
本期主要内容简介:
1.变量;
2.转义字符使用介绍;
3.原始字符串用法;
4.长字符串的用法;
详细内容说明:
1.变量:
在Python中变量不需要事先声明,但是需要先赋值后再使用,变量更像是贴在值上的标签,这给Python带来了很大便捷。
变量的名字和C及java编程语言一样,由字母、数字、下划线组成,且首位不允许是数字,而且变量名最好能专业些,让人一看就知道其含义。
2.字符串:
在Python中字符串就是以双引号或者单引号括起来的内容,但是单、双引号不能混用。
例如"小甲鱼",‘小牛’都是合法的字符串,而“小甲虫’则会报错。
3.转义字符:
刚才说了,在Python里面''和‘主要起到定义字符串的作用,但是如果一个字符串中本身又包含字符串呢,不要急,这里轮到我们的转义 字符华丽登场了!
转义字符就是反斜杠'\',对于想要将其作为一个字符处理的单引号或者双引号而言,前面只要加上转义字符就可以了。
例如对于字符串Let'sgo!
,我们就可以这样写'Let\'sgo!
'。
另外,我们也可以使用"Let'sgo!
"来表示。
最后,转义字符加上一个字母可以表示特殊的含义,比如最常见的'\n','\t'等。
感兴趣的鱼油可以看鱼神的总结
4.原始字符串:
在Python中,反斜杠主要用来作为转义字符的,当我们需要用其本身含义时,可以对其自身前面加一个转义字符处理。
但是对于一些特殊的字符串,如果里面频繁用到反斜杠,再手动的去一个个加就显得繁琐,这个时候可以在其字符串前面加上一个字母r,轻松解决,这就是原始字符串的含义,让字符串中的反斜杠回归原始的本意。
例如字符串C:
\ProgramFile\Intel\WiFi\Help,定义只要r'C:
\ProgramFile\Intel\WiFi\Help',他的实现方法其实很简单,就是程序会自动对每一个反斜杠前面再加一个反斜杠。
但是r不能对末尾是反斜杠的字符串进行定义,'C:
\Temp\'。
这个时候如果非要使用r进行原始字符串操作的话可以采用如下形式解决:
r'C:
\Temp''\\'或者r'C:
\Temp'+'\\'。
5. 长字符串:
一般情况下,使用单引号或者双引号只能引一行的字符串,如果字符串是有多行组成,则需要使用三引号,例如:
'''我爱鱼C,
正如我爱小甲鱼。
他那呱唧、呱唧的声音,
总萦绕在我的脑海里,
久久不肯散去。
'''
6.特别注意:
Python里面所有的操作符如单引号、双引号、冒号、小括号等等都必须是英文字符,否则会报错。
04讲:
改进我们的小游戏
上期内容回顾:
1.变量;
2.转义字符使用介绍;
3.原始字符串用法;
4.长字符串的用法;
本期内容详解:
通过对比可以发现,
1):
小牛的程序里面在循环体内外都有输入数字和判断语句,显得有些重复;
2):
如果第三次输入也没有输对的话,小牛的代码里并没有判断输入的数是大了还是小了;
而鱼神代码里面,在循环体外并没有让用户输入一个值,而是对guess赋了一个初值0,并保证这个值绝对不与答案相等;
在循环体内,首先要求用户输入一个数,并让次数总数减1,然后先判断是否与答案值相等,等了就结束,否则继续判断值是大了还是小了,大了则输出值偏大了并接着判断输入次数是否用尽,小了同样输入小了并判断次数是否用尽,接着判断程序体条件是否为真以判断是否继续循环,直到用户输入正确或次数用尽则结束循环。
最后一条语句声明游戏结束。
05讲:
闲聊之Python的数据类型
小牛有话说:
亲爱的鱼油们,大家好,我是小牛,我又过来班门弄斧啦,这一期里面鱼神主要是对Python中的数据类型进行了介绍,主要涉及到了字符串。
整形和浮点型及布尔类型等基本的数据类型概念介绍,对于浮点类型而言的“e记法”的概念和应用,类型转换和获取类型信息的方法~~~~~~
本期内容介绍:
1.基本数据类型:
1)整型,在Python3中长整形和整形归为一类,所有的整数都属于整型,例如1,0,1000,1203等等
2)浮点型,数字中有小数点的数,如12.1 1.85 10.0 等等,另外1e10也表示浮点数
3)字符串,所有以单引号或双引号括起来的值都叫做字符串,例如“小甲鱼” '小甲虫' '醉酒青牛'
4)布尔类型,布尔类型只有两个值,True或False,记得在Python里面这两个值首字母均大写。
2.e记法;
如果数位很多的话,一般将其表示为e记法形式,例如0.000000000000135用e记法表示为1.35e-13,它是一个浮点数类型,
例如用e记法表示为1e3,表示的是1000.0是个浮点数,这里e也可以改写成E。
3.数据类型转换
整型强制转换函数int(),可以将纯数字的字符串或浮点型强制转换为整形,如int('0012')为12; int(12.5)为12
浮点型强制转换函数float(),可以将包含一个小数点的数字字符串或者整形转换为浮点型,如float('0012')为12.0,float('.123')为0.123;float(12)为12.0
字符串强制类型转换函数str(),可以将任何类型转换为字符串类型,例如str(1e28)为‘1e+28' str(1e2)为'100.0'等等
4.数据类型信息获取;
函数type(),直接给出数的数据类型,例如type(12.0)则返回float,type(1000)返回int,type(False)返回bool等
函数isinstance()需要给出需要判断的数和一个数据类型,是则返回True,否则返回False,如isinstace(1,int)返回
True,isinstance(12.5,float)返回True,isinstance('Iloveu',float)返回False,而isinstance('Iloveu',str)返回True
06讲:
Pyhon之常用操作符
本期主要内容导读:
亲爱的鱼油们,大家好,我是小牛,这一期我们归纳一下鱼神第六讲Python常用运算符。
这一期里面鱼神主要是对Python中常用运算符进行了简要系统讲解,主要涉及到了算数运算符、比较运算符和逻辑运算符三大类,并归纳了整个运算符在使用过程中的优先级问题。
本期内容详解:
1.算术运算符:
加(+),减(-),乘(*),除(/),幂运算(**),地板除(//)
1)/和//的区别
在Python中的除运算符与其它程序语言的不太一样,/表示真正的除号,例如1/3=0.3333333333333333,而4/2的值为2.0。
说明两个数相除的值是一个浮点数,而其它程序语言/却表示两个整数相除,只返回一个整数。
Python后来为了兼容这种用法,引入了//来实现。
例如3//2的值为1,而3.0//2的值为1.0,且3//2.0的值也为1.0。
说明在Python中//符号两边同为整数时的值才为整数,否则则为一个浮点数(后面带'.0')。
2)**运算符与负号(-)运算符的优先级问题
在Python中,‘-’在一个数字前面表示成负号,例如-3,-5.12等。
**在-的右边时,其优先级高于-,例如-2**2相当于-(2**2)等于-4,而当其在右边时优先级低于-,如2**-2则相当于2**(-2)等于0.25.
3)允许运算符与等号一起使用,表示变量本身参加运算并重新赋值给变量,例如x=5,x+=5后,x的值为10
2.逻辑操作符:
and or not
1)xandy的值计算过程为先判断x的值,如果为0则返回0,否则返回y的值, 例如3and 4值为4;0and4值为0
2) xory的值计算过程为先判断x的值,如果为0则返回y的值,否则返回x的值,例如3or4的值为3;0or4的值为4
3) notx的值的计算过程为先