1、Python 入门第一章 课程介绍1.Python 的特点优雅,明确,简单,用 Python 应该尽量写简单明确的代码,尽量写少的代码2.Python 适合的领域Web 网站和各种网络服务系统工具和脚本作为“胶水”语言把其他语言开发的模块包装起来方便使用3.Python 不适合的领域贴近硬件的代码(首选 C)移动开发:IOS/Android 有各自的开发语言( ObjC , Swift/Java)游戏开发:C/C+ 4.Python 实际应用国外:YouTube国内:豆瓣,搜狐邮箱openstack 就是用 Python 编写的开源云计算平台5.Python 与其他语言对比类型 运行速度 代码
2、量C 编译为机器码 非常快 非常多Java 编译为字节码 快 多Python 解释执行(不需要编译)慢 少 6.Python 的缺点运行速度慢(运行速度的瓶颈往往不在于 Python 代码,而是数据库的操作和网络调用)Python 源码不能加密第二章 Python 变量和数据类型2-1 数据类型计算机程序可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python 中,能够直接处理的数据类型有以下几种:一、整数Python 可以处理任意大小的整数,当然包括负整数,在 Python 程序中,整数的表示
3、方法和数学上的写法一模一样,例如:1,100,-8080,0 ,等等。二、浮点数浮点数也就是小数,一个浮点数的小数点位置是可变的,比如,1.23x109 和12.3x108 是相等的。浮点数可以用数学写法,如 1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把 10 用 e 替代,1.23x109 就是 1.23e9,或者 12.3e8,0.000012 可以写成 1.2e-5,等等。整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,而浮点数运算则可能会有四舍五入的误差。三、字符串字符串是以 或 “括起来的任意文本,比如 abc,“xy
4、z“等等。请注意, 或“本身只是一种表示方式,不是字符串的一部分,因此,字符串abc只有 a,b,c 这 3 个字符。四、布尔值布尔值和布尔代数的表示完全一致,一个布尔值只有 True、False 两种值,要么是True,要么是 False,在 Python 中,可以直接用 True、False 表示布尔值(请注意大小写) ,也可以通过布尔运算计算出来。布尔值可以用 and、or 和 not 运算。五、空值空值是 Python 里一个特殊的值,用 None 表示。None 不能理解为 0,因为 0 是有意义的,而 None 是一个特殊的空值。任务:1. 计算十进制整数 45678 和十六进制整
5、数 0x12fd2 之和。print 45678+0x12fd22. 请用字符串表示出 Learn Python in imooc。print Learn Python in imooc3. 请计算以下表达式的布尔值(注意=表示判断是否相等):100 print hello,world print 语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:print The quick brown fox, jumps over, the lazy dogThe quick brown fox jumps over the lazy dogprint 会依次打印每个字符串,遇到逗号“,”
6、会输出一个空格,因此,输出的字符串是这样拼起来的print 也可以打印整数,或者计算结果: print 300300 #运行结果 print 100 + 200300 #运行结果因此,我们可以把计算 100 + 200 的结果打印得更漂亮一点: print 100 + 200 =, 100 + 200100 + 200 = 300 #运行结果任务:请用两种方式打印出 hello, pythonprint hello, python,print hello, python2-3 注释任何时候,我们都可以给程序加上注释。注释是用来说明代码的,给自己或别人看,而程序运行的时候,Python 解释器会
7、直接忽略掉注释,所以,有没有注释不影响程序的执行结果,但是影响到别人能不能看懂你的代码。Python 的注释以 # 开头,后面的文字直到行尾都算注释。任务:将代码编辑器中的 “print hello“ 语句修改成注释语句: print hello#print hello2-4 什么是变量在 Python 程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头,比如:a = 1变量 a 是一个整数。t_007 = T007变量 t_007 是一个字符串。在 Python 中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可
8、以是不同类型的变量,例如:a = 123 # a 是整数print aa = imooc # a 变为字符串print a这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如 Java 是静态语言,赋值语句如下(/ 表示注释):int a = 123; / a 是整数类型变量a = “mooc“; / 错误:不能把字符串赋给整型变量和静态语言相比,动态语言更灵活,就是这个原因。理解变量在计算机内存中的表示也非常重要。当我们写:a = ABC时,Python 解释器干了两件事情:1. 在内存中创建了一个A
9、BC的字符串;2. 在内存中创建了一个名为 a 的变量,并把它指向ABC。也可以把一个变量 a 赋值给另一个变量 b,这个操作实际上是把变量 b 指向变量 a 所指向的数据任务:等差数列可以定义为每一项与它的前一项的差等于一个常数,可以用变量 x1 表示等差数列的第一项,用 d 表示公差,请计算数列 1 4 7 10 13 16 19 .前 100 项的和。x1 = 1d = 3n = 100x100 = x1+(n-1)*ds =100*(x1+x100)/2print s2-5 定义字符串如果字符串本身包含怎么办?比如我们要表示字符串 Im OK ,这时,可以用“ “括起来表示:“Im O
10、K“类似的,如果字符串包含“,我们就可以用 括起来表示: Learn “Python“ in imooc如果字符串既包含又包含“怎么办?这个时候,就需要对字符串的某些特殊字符进行“转义” ,Python 字符串用进行转义。要表示字符串 Bob said “Im OK“.由于 和 “ 会引起歧义,因此,我们在它前面插入一个表示这是一个普通字符,不代表字符串的起始,因此,这个字符串又可以表示为Bob said “Im OK“.注意:转义字符 不计入字符串的内容中。常用的转义字符还有:n 表示换行t 表示一个制表符 表示 字符本身任务:请将下面两行内容用 Python 的字符串表示并打印出来:Pyt
11、hon was started in 1989 by “Guido“.Python is free and easy to learn.s= Python was started in 1989 by “Guido“. +Python is free and easy to learn.print s2-6 raw 字符串与多行字符串如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。例如:r(_)/ (_)/但是 r.表示法不能表示多行字符串,也不能表示包含 和 “
12、的字符串(为什么?)如果要表示多行字符串,可以用.表示:Line 1Line 2Line 3上面这个字符串的表示方法和下面的是完全一样的:Line 1nLine 2nLine 3还可以在多行字符串前面添加 r ,把这个多行字符串也变成一个 raw 字符串:rPython is created by “Guido“.It is free and easy to learn.Lets start learn Python in imooc!任务:请把下面的字符串用 r.的形式改写,并用 print 打印出来:“To be, or not to be“: that is the question.n
13、Whether its nobler in the mind to suffer.print r“To be, or not to be“: that is the question.Whether its nobler in the mind to suffer.2-7 Unicode 字符串Unicode 通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为 0 就可以。因为 Python 的诞生比 Unicode 标准发布的时间还要早,所以最早的 Python 只支持ASCII 编码,普通的字符串ABC在 Python 内部都是 ASCII 编码的。Pyt
14、hon 在后来添加了对 Unicode 的支持,以 Unicode 表示的字符串用 u.表示,比如:print u中文 中文注意: 不加 u ,中文就不能正常显示。Unicode 字符串除了多了一个 u 之外,与普通字符串没啥区别,转义字符和多行表示法仍然有效:转义:u中文n 日文n 韩文多行:u第一行第二行raw+多行:urPython 的 Unicode 字符串支持“中文“,“日文“,“韩文“等多种语言如果中文字符串在 Python 环境下遇到 UnicodeDecodeError,这是因为.py 文件保存的格式有问题。可以在第一行添加注释# -*- coding: utf-8 -*-目的
15、是告诉 Python 解释器,用 UTF-8 编码读取源代码。然后用 Notepad+ 另存为. 并选择 UTF-8 格式保存。任务:用多行 Unicode 字符串表示下面的唐诗并打印:静夜思床前明月光,疑是地上霜。举头望明月,低头思故乡。print u静夜思床前明月光,疑是地上霜。举头望明月,低头思故乡。2-8 整数和浮点数Python 支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致。使用括号可以提升优先级,这和数学运算完全一致,注意只能使用小括号,但是括号可以嵌套很多层。和数学运算不同的地方是,Python 的整数运算结果仍然是整数,浮点数运算结果仍然是浮点
16、数,但是整数和浮点数混合运算的结果就变成浮点数了。2-9 布尔类型我们已经了解了 Python 支持布尔类型的数据,布尔类型只有 True 和 False 两种值,但是布尔类型有以下几种运算:与运算(and):只有两个布尔值都为 True 时,计算结果才为 True.或运算(or):只要有一个布尔值为 True,计算结果就是 True.非运算(not):把 True 变为 False,或者把 False 变为 True.布尔运算在计算机中用来做条件判断,根据计算结果为 True 或者 False,计算机可以自动执行不同的后续代码。在 Python 中,布尔类型还可以与其他数据类型做 and、o
17、r 和 not 运算,请看下面的代码:a = Trueprint a and a=T or a=F计算结果不是布尔类型,而是字符串 a=T,这是为什么呢?因为 Python 把 0、空字符串和 None 看成 False,其他数值和非空字符串都看成 True,所以:True and a=T 计算结果是 a=T继续计算 a=T or a=F 计算结果还是 a=T要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算.1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取
18、决与 b,因此返回 b。2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。所以 Python 解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。任务:请运行如下代码,并解释打印的结果:a = pythonprint hello, a or worldb = print hello, b or worldhello, pythonhello, world第三章 List 和 Tuple 类型3-1 创建 listPython 内置的
19、一种数据类型是列表:list。list 是一种有序的集合,可以随时添加和删除其中的元素。比如,列出班里所有同学的名字,就可以用一个 list 表示: Michael, Bob, TracyMichael, Bob, Tracylist 是数学意义上的有序集合,也就是说,list 中的元素是按照顺序排列的。构造 list 非常简单,按照上面的代码,直接用 把 list 的所有元素都括起来,就是一个 list 对象。通常,我们会把 list 赋值给一个变量,这样,就可以通过变量来引用 list: classmates = Michael, Bob, Tracy classmates # 打印 cl
20、assmates 变量的内容Michael, Bob, Tracy由于 Python 是动态语言,所以 list 中包含的元素并不要求都必须是同一种数据类型,我们完全可以在 list 中包含各种数据: L = Michael, 100, True一个元素也没有的 list,就是空 list: empty_list = 任务:假设班里有 3 名同学:Adam,Lisa 和 Bart,他们的成绩分别是 95.5,85 和 59,请按照 名字, 分数 , 名字, 分数. 的顺序按照分数从高到低用一个 list 表示,然后打印出来。L = Adam, 95.5, Lisa, 85, Bart, 59p
21、rint L3-2 按照索引访问 list由于 list 是一个有序集合,所以,我们可以用一个 list 按分数从高到低表示出班里的 3个同学: L = Adam, Lisa, Bart那我们如何从 list 中获取指定第 N 名的同学呢?方法是通过索引来获取 list 中的指定元素。需要特别注意的是,索引从 0 开始,也就是说,第一个元素的索引是 0,第二个元素的索引是 1,以此类推。因此,要打印第一名同学的名字,用 L0: print L0Adam要打印第四名同学的名字,用 L3: print L3Traceback (most recent call last):File “, line
22、 1, in IndexError: list index out of range报错了!IndexError 意思就是索引超出了范围,因为上面的 list 只有 3 个元素,有效的索引是 0,1 , 2。所以,使用索引时,千万注意不要越界。任务:三名同学的成绩可以用一个 list 表示:L = 95.5, 85, 59请按照索引分别打印出第一名、第二名、第三名、第四名的分数。L = 95.5,85,59print L0print L1print L2print L23-3 倒序访问 list我们还是用一个 list 按分数从高到低表示出班里的 3 个同学: L = Adam, Lisa,
23、Bart这时,老师说,请分数最低的同学站出来。要写代码完成这个任务,我们可以先数一数这个 list,发现它包含 3 个元素,因此,最后一个元素的索引是 2: print L2Bart有没有更简单的方法?有!Bart 同学是最后一名,俗称倒数第一,所以,我们可以用 -1 这个索引来表示最后一个元素: print L-1Bart类似的,倒数第二用 -2 表示,倒数第三用 -3 表示,倒数第四用 -4使用倒序索引时,也要注意不要越界。任务:三名同学的成绩可以用一个 list 表示:L = 95.5, 85, 59请按照倒序索引分别打印出倒数第一、倒数第二、倒数第三、倒数第四的分数。L = 95.5,
24、 85, 59print L-1print L-2print L-3print L-43-4 添加新元素现在,班里有 3 名同学: L = Adam, Lisa, Bart今天,班里转来一名新同学 Paul,如何把新同学添加到现有的 list 中呢?第一个办法是用 list 的 append() 方法,把新同学追加到 list 的末尾: L = Adam, Lisa, Bart L.append(Paul) print LAdam, Lisa, Bart, Paulappend()总是把新的元素添加到 list 的尾部。如果 Paul 同学表示自己总是考满分,要求添加到第一的位置,怎么办?方法
25、是用 list 的 insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素: L = Adam, Lisa, Bart L.insert(0, Paul) print LPaul, Adam, Lisa, BartL.insert(0, Paul) 的意思是,Paul将被添加到索引为 0 的位置上(也就是第一个) ,而原来索引为 0 的 Adam 同学,以及后面的所有同学,都自动向后移动一位。任务:假设新来一名学生 Paul,Paul 同学的成绩比 Bart 好,但是比 Lisa 差,他应该排到第三名的位置,请用代码实现。L = Adam, Lisa, BartL
26、.insert(2,Paul)print L3-5 从 list 删除元素Paul 同学刚来几天又要转走了,那么我们怎么把 Paul 从现有的 list 中删除呢?如果 Paul 同学排在最后一个,我们可以用 list 的 pop()方法删除: L = Adam, Lisa, Bart, Paul L.pop()Paul print LAdam, Lisa, Bartpop()方法总是删掉 list 的最后一个元素,并且它还返回这个元素,所以我们执行 L.pop() 后,会打印出 Paul。如果 Paul 同学不是排在最后一个怎么办?比如 Paul 同学排在第三: L = Adam, Lisa
27、, Paul, Bart要把 Paul 踢出 list,我们就必须先定位 Paul 的位置。由于 Paul 的索引是 2,因此,用 pop(2)把 Paul 删掉: L.pop(2)Paul print LAdam, Lisa, Bart任务:注意右边编辑器代码中 list 如下:L = Adam, Lisa, Paul, BartPaul 的索引是 2,Bart 的索引是 3,如果我们要把 Paul 和 Bart 都删掉,请解释下面的代码为什么不能正确运行:L.pop(2)L.pop(3)怎样调整代码可以把 Paul 和 Bart 都正确删除掉?L = Adam, Lisa, Paul, B
28、artL.pop(2)L.pop(2)print L3-6 替换元素假设现在班里仍然是 3 名同学: L = Adam, Lisa, Bart现在,Bart 同学要转学走了,碰巧来了一个 Paul 同学,要更新班级成员名单,我们可以先把 Bart 删掉,再把 Paul 添加进来。另一个办法是直接用 Paul 把 Bart 给替换掉: L2 = Paul print LL = Adam, Lisa, Paul对 list 中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素,list 包含的元素个数保持不变。由于 Bart 还可以用 -1 做索引,因此,下面的代码也可以完成同样的替换工作:
29、L-1 = Paul任务:班里的同学按照分数排名是这样的:L = Adam, Lisa, Bart但是,在一次考试后,Bart 同学意外取得第一,而 Adam 同学考了倒数第一。请通过对 list 的索引赋值,生成新的排名。L = Adam, Lisa, BartL0=BartL2=Adamprint L3-7 创建 tupletuple 是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple 一旦创建完毕,就不能修改了。同样是表示班里同学的名称,用 tuple 表示如下: t = (Adam, Lisa, Bart)创建 tuple 和创建 list
30、 唯一不同之处是用( )替代了 。现在,这个 t 就不能改变了,tuple 没有 append()方法,也没有 insert()和 pop()方法。所以,新同学没法直接往 tuple 中添加,老同学想退出 tuple 也不行。获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 t0,t-1等索引方式访问元素,但是不能赋值成别的元素。任务:创建一个 tuple,顺序包含 0 - 9 这 10 个数。t = (0,1,2,3,4,5,6,7,8,9)print t3-8 创建单元素 tupletuple 和 list 一样,可以包含 0 个、1 个和任意多个元素。包含多个元素
31、的 tuple,前面我们已经创建过了。包含 0 个元素的 tuple,也就是空 tuple,直接用 ()表示: t = () print t()创建包含 1 个元素的 tuple 呢?来试试: t = (1) print t1好像哪里不对!t 不是 tuple ,而是整数 1。为什么呢?因为()既可以表示 tuple,又可以作为括号表示运算时的优先级,结果 (1) 被 Python 解释器计算出结果 1,导致我们得到的不是 tuple,而是整数 1。正是因为用()定义单元素的 tuple 有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,” ,这样就避免了歧义: t =
32、(1,) print t(1,)Python 在打印单元素 tuple 时,也自动添加了一个“,” ,为了更明确地告诉你这是一个tuple。多元素 tuple 加不加这个额外的 “,”效果是一样的。3-9 “可变”的 tuple前面我们看到了 tuple 一旦创建就不能修改。现在,我们来看一个“可变”的 tuple: t = (a, b, A, B)注意到 t 有 3 个元素:a,b和一个 list:A, B。list 作为一个整体是 tuple 的第 3个元素。list 对象可以通过 t2 拿到: L = t2然后,我们把 list 的两个元素改一改: L0 = X L1 = Y再看看 tu
33、ple 的内容: print t(a, b, X, Y)不是说 tuple 一旦定义后就不可变了吗?怎么现在又变了?别急,我们先看看定义的时候 tuple 包含的 3 个元素:当我们把 list 的元素A和B修改为X和Y后,tuple 变为:表面上看,tuple 的元素确实变了,但其实变的不是 tuple 的元素,而是 list 的元素。tuple 一开始指向的 list 并没有改成别的 list,所以,tuple 所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向a,就不能改成指向b,指向一个 list,就不能改成指向其他对象,但指向的这个 list 本身是可变的!理解了“指向不
34、变”后,要创建一个内容也不变的 tuple 怎么做?那就必须保证 tuple的每一个元素本身也不能变。任务:定义了 tuple:t = (a, b, A, B)由于 t 包含一个 list 元素,导致 tuple 的内容是可变的。能否修改上述代码,让 tuple内容不可变?t = (a, b, (A, B)第四章 条件判断和循环4-1 if 语句计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。比如,输入用户年龄,根据年龄打印不同的内容,在 Python 程序中,可以用 if 语句实现:age = 20if age = 18:print your age is, ageprint a
35、dultprint END注意: Python 代码的缩进规则。具有相同缩进的代码被视为代码块,上面的 3,4 行 print 语句就构成一个代码块(但不包括第 5 行的 print) 。如果 if 语句判断为 True,就会执行这个代码块。缩进请严格按照 Python 的习惯写法:4 个空格,不要使用 Tab,更不要混合 Tab 和空格,否则很容易造成因为缩进引起的语法错误。注意: if 语句后接表达式,然后用 : 表示代码块开始。如果你在 Python 交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车: age = 20 if age = 18:. print your a
36、ge is, age. print adult.your age is 20adult任务:如果成绩达到 60 分或以上,视为 passed。假设 Bart 同学的分数是 75,请用 if 语句判断是否能打印出 passed:score = 75if score=60:print passed4-2 if-else当 if 语句判断表达式的结果为 True 时,就会执行 if 包含的代码块,如果我们想判断年龄在 18 岁以下时,打印出 teenager,怎么办?方法是再写一个 if: ,或者用 not 运算: 。细心的同学可以发现,这两种条件判断是“非此即彼”的,要么符合条件 1,要么符合条件
37、 2,因此,完全可以用一个 if . else . 语句把它们统一起来:if age = 18:print adultelse:print teenager利用 if . else . 语句,我们可以根据条件表达式的值为 True 或者 False ,分别执行 if 代码块或者 else 代码块。注意: else 后面有个“:” 。任务:如果成绩达到 60 分或以上,视为 passed,否则视为 failed。假设 Bart 同学的分数是 55,请用 if 语句打印出 passed 或者 failed:score = 55if score=60:print passedelse:print f
38、ailed4-3 if-elif-else有的时候,一个 if . else . 还不够用。比如,根据年龄的划分:条件 1:18 岁或以上:adult条件 2:6 岁或以上:teenager条件 3:6 岁以下:kid要避免嵌套结构的 if . else .,我们可以用 if . 多个 elif . else . 的结构,一次写完所有的规则:if age = 18:print adultelif age = 6:print teenagerelif age = 3:print kidelse:print babyelif 意思就是 else if。这样一来,我们就写出了结构非常清晰的一系列条件
39、判断。特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。任务:如果按照分数划定结果:90 分或以上:excellent80 分或以上:good60 分或以上:passed60 分以下:failed请编写程序根据分数打印结果。score = 85if score=90:print excellentelif score=80:print goodelif score=60:print passedelse:print failed4-4 for 循环list 或 tuple 可以表示一个有序集合。如果我们想依次访问
40、一个 list 中的每一个元素呢?比如 list:L = Adam, Lisa, Bartprint L0print L1print L2如果 list 只包含几个元素,这样写还行,如果 list 包含 1 万个元素,我们就不可能写 1万行 print。这时,循环就派上用场了。Python 的 for 循环就可以依次把 list 或 tuple 的每个元素迭代出来:L = Adam, Lisa, Bartfor name in L:print name注意: name 这个变量是在 for 循环中定义的,意思是,依次取出 list 中的每一个元素,并把元素赋值给 name,然后执行 for 循
41、环体(就是缩进的代码块) 。这样一来,遍历一个 list 或 tuple 就非常容易了。任务:班里考试后,老师要统计平均成绩,已知 4 位同学的成绩用 list 表示如下:L = 75, 92, 59, 68请利用 for 循环计算出平均成绩。L = 75, 92, 59, 68sum = 0.0for score in L:sum=sum+scoreprint sum / 44-5 while 循环和 for 循环不同的另一种循环是 while 循环,while 循环不会迭代 list 或 tuple 的元素,而是根据表达式判断循环是否结束。比如要从 0 开始打印不大于 N 的整数:N =
42、10x = 0while x 100:breakprint sum咋一看, while True 就是一个死循环,但是在循环体内,我们还判断了 x 100 条件成立时,用 break 语句退出循环,这样也可以实现循环的结束。任务:利用 while True 无限循环配合 break 语句,计算 1 + 2 + 4 + 8 + 16 + . 的前 20 项的和。sum = 0x = 1n = 1while True:sum=sum+xx=2*xn=n+1if n20:breakprint sum4-7 continue 继续循环在循环过程中,可以用 break 退出当前循环,还可以用 conti
43、nue 跳过后续循环代码,继续下一次循环。假设我们已经写好了利用 for 循环计算平均分的代码:L = 75, 98, 59, 81, 66, 43, 69, 85sum = 0.0n = 0for x in L:sum = sum + xn = n + 1print sum / n现在老师只想统计及格分数的平均分,就要把 x 100:breakprint sumsum = 0x = 0while True:x = x + 1if x 100:breakif x%2=0:continuesum=sum+xprint sum4-8 多重循环在循环内部,还可以嵌套循环,我们来看一个例子:for x
44、 in A, B, C:for y in 1, 2, 3:print x + yx 每循环一次, y 就会循环 3 次,这样,我们可以打印出一个全排列:A1A2A3B1B2B3C1C2C3任务:对 100 以内的两位数,请使用一个两重循环打印出所有十位数数字比个位数数字小的数,例如,23( 2 95Lisa = 85Bart = 59给定一个名字,就可以直接查到分数。Python 的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:d = Adam: 95,Lisa: 85,Bart: 59我们把名字称为 key,对应的成绩称为 value,dict 就是通过
45、key 来查找 value。花括号 表示这是一个 dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。由于 dict 也是集合, len() 函数可以计算任意集合的大小: len(d)3注意: 一个 key-value 算一个,因此, dict 大小为 3。任务:新来的 Paul 同学成绩是 75 分,请编写一个 dict,把 Paul 同学的成绩也加进去。d = Adam: 95,Lisa: 85,Bart: 59d = Adam: 95,Lisa: 85,Bart: 59,Paul: 755-2 访问 dict我们已经能创建一个 dict
46、,用于表示名字和成绩的对应关系:d = Adam: 95,Lisa: 85,Bart: 59那么,如何根据名字来查找对应的成绩呢?可以简单地使用 dkey 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而 dict 使用 key: print dAdam95 print dPaulTraceback (most recent call last):File “index.py“, line 11, in print dPaulKeyError: Paul注意: 通过 key 访问 dict 的 value,只要 key 存在,dict
47、就返回对应的 value。如果key 不存在,会直接报错:KeyError。要避免 KeyError 发生,有两个办法:一是先判断一下 key 是否存在,用 in 操作符:if Paul in d:print dPaul如果 Paul 不存在,if 语句判断为 False,自然不会执行 print dPaul ,从而避免了错误。二是使用 dict 本身提供的一个 get 方法,在 Key 不存在的时候,返回 None: print d.get(Bart)59 print d.get(Paul)None任务:根据如下 dict:d = Adam: 95,Lisa: 85,Bart: 59请打印出:Adam: 95Lisa: 85Bart: 59d = Adam: 95,Lisa: 85,Bart: 59for key in Adam, Lisa, Bart:print “%s: %d“%(key, dkey) (%s, %d 不能更改)5-3 dict 的特点dict 的第一个