[Python讲义]Python疯狂讲义
2019.3 济宁 第一部分 初识Python 1、Python语言简介及其特色 l Python高效强大:它有非常完善的基础代码库(标准库,开源库,自定义模块),有庞大的外围库来支持。在科学计算、人工智能、大数据、云计算等诸多领域有着丰富的应用。
l Python易学易读:它被誉为最容易上手的编程语言,语法简单,高效灵活,学习的曲线平缓。
l Python资源丰富:开发者社群强大,容易获取学习资源。
l Python开源跨平台:Python 可以跨平台运行,并且已经开放源代码超过20年的时间了,代码可以在Linux,Windows 以及 macOS 上同时运行。
Python的应用领域:
命令行窗口 图形界面 大型网站后端 嵌入式开发 云服务 * 请参考第九部分Python与Excel和Python网站图片抓取案例,体验Python的简洁与强大。
2、Python开发环境搭建 1 访问Python官方网站:https://www.python.org/,在Downloads频道中,查找适配的Windows版本。
2 在下载频道(win版本)中,提供了2.X和3.X版本Python的下载,推荐选择最新的(目前3.7.2)版本。
3 选择适合自己操作系统(32位,64位)的安装包。建议选择32位安装包。
4 启动安装流程,在第一个界面上选择“自定义安装”(推荐) 特别提醒:勾选“Add Payton 3.7 to PATH”。
5 在第2个安装界面,勾选如图的安装选项。
特别提醒:勾选pip选项 6 在第3个安装界面,修改自定义安装位置(如左图红色标记处),其余保持默认。之后,点击“Install”开启安装。
7 看到“Setup was successful”字样,表示安装成功,按“Close”关闭窗口 8 在“开始”菜单搜索框中输入“python”关键词,即可看到以上的程序项。
3、Hello,World——我们第一个Python程序 (1)启动Python命令行,键入代码 print(“Hello, World!”) 回车后得到如右图的输出 (2)print是python的内置输出函数,它可以用于各种类型数据常量、变量的输出,还可用于格式化数据的输出。
例1-1:
s = “A New Story” c = len(s) print(“the Word is %s, the length is %d” %(s,c)) 格式化字符串代码 格式 描述 %% 百分号标记 %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) %x 无符号整数(十六进制) %X 无符号整数(十六进制大写字符) %e 浮点数字(科学计数法) %E 浮点数字(科学计数法,用E代替e) %f 浮点数字(用小数点符号) %g 浮点数字(根据值的大小采用%e或%f) %G 浮点数字(类似于%g) %p 指针(用十六进制打印值的内存地址) %n 存储输出字符的数量放进参数列表的下一个变量中 (3)使用print函数格式化输出的例子-《小儿歌》。例1-2:
duo = “多多“ ge = “哥哥“ guo = “果果“ print(“%s和%s“ %(duo,ge)) print(“坐下分%s“ %(guo)) print(“%s让%s“ %(ge,duo)) print(“%s让%s“ %(duo,ge)) 4、基本数学运算 加法+ 减法- 乘法* 除法/ print(9.1+3.2) print(17-2) print(3.2*9.1) print(5/2) 取余 整除 幂运算 print(9%4) print(15.4 //3) print(4 ** 3) 组合各种不同的数学运算符进行运算 9×6.22+4.2÷1.1 S=πr2 圆形面积计算 三角形面积计算 print(9*(6.2**2)+4.2/1.1) print(3.14*(2.1)**2) print((5+8)*7/2) 例1-3:完成算式的计算(参考代码如下) (1)8×5.53-25×10.6÷8 (2)半径9.5的圆形面积 (3) 43除以9的余数与整除 (1) print(8*5.5**3-2/5*10.6/8) (2) print(3.14*9.5**2) (3) print(43 % 9) (4) print(43 // 9) 注意:
(1)区别除(/)与整除(//),如5/2=2.5与5//2=2。
(2)整除同样可进行浮点运算,得到整除结果。5.0//2.0=2.0. (3)取余操作同样可进行浮点运算,如5.0 % 2.0 = 1.0. (4)在Shell环境中,可以不用输入print,可直接输入数据进行计算 5、IDLE环境及py文件编辑 (1) IDLE 是一个纯 Python 下自带的简洁的集成开发环境(IDE),尝试启动IDLE. (2) 尝试使用IDLE创建Python脚本文件. (3) IDLE为开发人员提供了许多有用的特性,如自动缩进、语法高亮显示、单词自动完成以及命令历史等等,在这些功能的帮助下,能够有效的提高我们的开发效率。
(4) 使用IDLE运行程序<F5快捷键>,即可Shell窗口运行程序。注:#为python的注释行 (5)多行代码语句的程序建议使用IDLE进行编辑,较少代码的试验可使用Python命令行。
6、静态语言与脚本语言 静态语言要将源代码一次性编译成为可执行的代码,供计算机执行。
脚本语言要通过解释器逐条解释执行。
Java / C / C++ / C# / Pascal Javascript / PHP / Python 两种类型语言在执行速度、维护方便程度上各有特色,但本身无优劣之分 实践任务 (1)尝试完成实践创新01(详见资源目录 L01\Practice0101.py) (2)尝试完成实践创新02(详见资源目录 L01\Practice0102.py) (3)开启IDLE,创建新脚本文件,计算24×23与24+3的结果,验证同底数幂的乘法法则(详见资源目录 L01\Practice0103.py) 第二部分 Python变量 1、变量 Python中变量用于表示内存中一定空间存储的值,Python 中的变量赋值不需要类型声明。
每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
变量赋值(例2-1) 变量赋值 nm = “李小明” print(nm) 变量自增 age = 15 age = age + 1 print(age) 2、案例01《圆形面积计算器》 r = 5 # 圆形的半径 s = 3.14 * r ** 2 #圆形面积 print(s) (1)定义变量 r ,并为其赋值为5 (2)定义变量 s ,并将面积结果计算并赋值 3、变量命名规则(系统保留字) (1)命名规则是一种惯例,并无绝对强制性 # 可读性低的代码 asdf = 1.975 ;
变量应易识别和可读性高;
# 可读性高的代码 stuName = “张三” (2)变量命名不得使用系统关键字、保留字;
and as assert break class def del continue for finally from global if raise try with yield print is in (3)Python变量区分大小写;
StuName 与 stuName 是两个变量 (4)推荐驼峰命名。
studentName ßà studentname workMachineCode ßàworkmachinecode 4、数据类型 (1)五种基本数据类型:Numbers(数字)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典) (2)数字类型的分类 整型 int 十进制10,八进制数0o10,二进制0b10,十六进制0x10 浮点型 float 3.1415 布尔型 bool True, False 复数型 complex 实部+虚部组成,如 2+1.5j (3)数据类型的获取—type函数 type(9.15) à type(0x55a) à (4)数据输入与类型转换 通过input输入数据 通过类型转换得到结果 name=input(“请输入姓名:“) age = int(input(“请输入年龄:“)) print(“%s 年龄=%d“ %(name,age)) 转换浮点型float() r = float(input(“输入半径:”)) s=3.14*r**2 print(“圆面积为:%f” %s) (5)认识各种类型的数据。例2-2:
a = 123 type(a) a=123.123 type(a) a=”123” type(a) a=[1,2,3] type(a) a=(1,2,3) type(a) a={“1”:2,”2”:3,”3”:4} type(a) a=True type(a) int – 整型 float – 浮点型 str – 字符串 list – 列表 tuple – 元组 dict – 字典 bool – 布尔 5、案例02《时间差计算案例》(见L02\Case02.py) import datetime # 输入年份,并转换为整数型 y=int(input(“年:“)) # 输入月份,并转换为整数型 m = int(input(“月:“)) # 输入日,并转换为整数型 d = int(input(“日:“)) # 获得今天日期 day1 = datetime.date.today() # 转换输入的日期 day2 = datetime.date(y,m,d) n = (day2 - day1).days print(“时间差为 %d 天“ %n) 1.程序需要导入datetime模块才能实现datetime功能。
2.input函数输入内容为字符串,需要将它转换为int类型才能在下面的日期转换中传递给日期类型转换函数。
3.比较两日期可用两日期相减,取差的days属性值。
第三部分 条件语句 1、条件语句初体验——案例03《两数字排序案例》(详见L03\Case03.py) # 定义两个变量a, b a=19 b=15 # 输出a,b的初始值 print(“[1] a = %d, b = %d“ %(a,b)) # 判断a,b的大小,若a>b,则交换位置 if a>b: c = b b = a a = c print(“--- 升序排序后 ---“) else: print(“--- 不需要排序 ---”) # 输出两数 print(“[2] a = %d, b = %d“ %(a,b)) 输出结果 条件判断语句简记:
if 逻辑表达式1: 语句1 else: 语句3 * 注意:Python中缩进是代码块的标志,使用Tab键生成。
2、流程图设计(条件语句) 程序流程图是人们对解决问题的方法、思路或算法的一种描述。
1.流程图的优点:
(a)采用简单规范的符号,画法简单;
(b)结构清晰,逻辑性强;
(c)便于描述,容易理解。
2.流程图采用的符号 (1)箭头表示的是程序流 (2)矩形表示的是处理步骤 (3)菱形表示逻辑条件 (4)平行四边形表示输入输出 有时会出现多条件判断的应用,此时的条件判断结构就会变成如下结构(elif条件语句可能会有多个):
if 逻辑表达式1: 语句1 elif 逻辑表达式2:
语句2 else: 语句3 尝试画一下包含 elif 语句的条件判断程序流程图。
3、案例04《四则运算计算器》 (L03\Case04.py) # 四则运算计算器 # 输入两个数值 num1 = int(input(“请输入第1个数字:“)) num2 = int(input(“请输入第2个数字:“)) # 输入符号 opr = input(“请输入运算符(+ - * / ):“) # 判断计算类型 if opr == “+“: print(“--> %d + %d = %d“ %(num1, num2,num1 + num2)) elif opr == “-“: print(“--> %d - %d = %d“ %(num1, num2,num1 - num2)) elif opr == “*“: print(“--> %d * %d = %d“ %(num1, num2,num1 * num2)) elif opr == “/“: if num2 == 0: print(“计算错误:除数为0“) else: print(“--> %d / %d = %d“ %(num1, num2,num1 / num2)) else: print(“无此运算符“, opr) 流程图 4、案例05《密码验证》(L04\Case05.py) # 输入用户名 userName = input(“请输入用户名:“) # 输入密码 password = input(“请输入密码:“) # 判断用户名和密码是否匹配 if userName == “mike“: # 判断密码是否正确 if password == userName + “2019“: print(“登录成功!“) else: print(“密码错误“) else: print(“用户名错误“) 登录成功 登录失败 5、逻辑运算 (1)逻辑运算符 and 布尔“与” 表示两条件同时成立,则为真 x and y à x与y同时成立则返回True or 布尔“或” 表示两条件至少有一成立为真 x or y à x或y任一成立则返回True not 布尔“非” 表示一条件的相反值 not x à 若x为True则返回False (2)比较运算符(a=19,b=27) == 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 True。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。
(a < b) 返回 True。
>= 大于等于 - 返回x是否大于等于y。
(a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。
(a <= b) 返回 True。
(3)学生成绩评价程序。例2-3:
# 输入学生成绩 score = int(input(“请输入学生成绩:“)) # 先判断成绩是否超出正常范围 # 若成绩超出100 或者 成绩为负数则报错误 if score > 100 or score < 0: print(“成绩输入错误!请输入0 - 100内的成绩“) else: # 对成绩进行范围判定 if score >=90: print(“该学生成绩评价为“优秀”“) elif score >=80 and score <90: print(“该学生成绩评定为“良好”“) elif score >=60 and score <80: print(“该学生成绩评定为“及格”“) else: print(“该学生成绩“不及格”“) 该程序实现了对输入学生成绩进行评价的功能。评价标准是90分以上为“优秀”,80-90间为“良好”,60-80分为“及格”,60分下为“不及格”。
1.程序中使用“or”逻辑运算,用于判断分值是否超出了0-100分的范围。若or两侧任一条件成立,则整个判断结果为“True”,并输出错误信息。
2.程序中使用“and”逻辑与运算,用于判断分值是否处于某一段范围内。需要and两边两条件均成立,才能使整个与运算结果为“True”。
6、案例06《剪刀、石头、布》 (可参考微课视频) 胜负规则数字化表示 1、平局:p1-p2=0 2、p1胜:p1-p2=1 p2-p1=2 3、p2胜:p2-p1=1 p1-p2=2 # 石头 剪刀 布 import random # 定义“石头、剪刀、布”元组 mp = (“布“,“剪刀“,“石头“) # 循环进行10次 for v in range(10): #生成随机数,模拟游戏伸手 p1 = random.randint(0,2) p2 = random.randint(0,2) # 若相等,则平局 if p1==p2: print(“平局 (%s = %s)“ %(mp[p1],mp[p2])) # 若p1比p2大1,则p1赢 # 若p2比p1大2,则p1赢 elif p1 - p2 == 1 or p2-p1==2: print(“玩家1赢 (%s > %s)“ %(mp[p1],mp[p2])) elif p2-p1==1 or p1-p2 == 2: print(“玩家2赢 (%s < %s)“ %(mp[p1],mp[p2])) else: print(“出现其它选择 (%s,%s)“ %(mp[p1],mp[p2])) print(“------------------- 第 %d 轮结束“ %(v+1)) 特别说明:
1.用到导入random库和随机数生成函数。
2.用到元组数据类型,以把数字转换成为剪刀、石头、布表示。【元组应用可参考第五部分“元组”部分】 第四部分 循环语句 1、循环语句与流程图设计 (1)循环语句允许程序在一定条件下重复执行一个语句段多次。
(2)Python中支持For循环和While循环。
(3)循环结构流程图如下所示:
2、For循环结构和Range函数 (1) For循环会遍历一个序列,如一个列表或一个字符串。完成序列的遍历后,循环结束。
格式:
for 变量in 序列:
循环体 else: else语句 (2) For循环常用range函数生成遍历序列。range函数常用于创建一个整数列表,格式为:
range(start,end,step) 注意:生成的序列不包括end值 range(1,10,2) à从1到10,步长为2的序列:1,3,5,7,9 (3) For循环还常常对字符串遍历 myWords = “我爱我的祖国” for w in words: print(w) (4) 体验for循环的使用。例4-1:
for i in range(1,366): print(“第 %d 天刷牙” %i) 尝试修改代码的step值,看看运行结果会有怎样的改变。
3、案例07《棋盘摆麦粒》 # 变量Total为总麦粒数 total = 0 # 以国际象棋的棋盘格数为循环列表 for cell in range(64): # 每个格子为上一格子的2倍,第1格为1 # 即每格内麦粒数为2的n次方 total += 2 ** cell # 输出总数 print(“总计需要麦粒数量为: %d“ %total) 运行结果 提示:
+= 是加法赋值运算符 a += b 相当于 a = a + b 4、字符串类型及其相关函数 (1)Python字符串是最常用的数据类型之一,它用成对出现的单引号或双引号创建,但符号不能交叉配对。字符串中出现的特殊符号,需要使用转义字符。如横向制表符可用\t,单双引号可\’\”表示。
(2)字符串类型具有以下操作:
操作符 描述 举例 返回值 + 字符串连接 ‘Tom’+’Jerry‘ ‘TomJerry’ * 重复输出字符串 “Good”*3 “GoodGoodGood” [] 通过索引获取字符串中字符 s=“HappyBirthday” s[4] y [ : ] 截取字符串中的一部分 s[1,3] app in 成员运算符 - 如果字符串中包含给定的字符返回 True “m” in s False not in 成员运算符 - 如果字符串中不包含给定的字符返回 True “m” not in s True r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。原始字符串除在字符串的第一个引号前加上字母“r“(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
print(r”\n”) \n (原样输出) % 格式字符串 print(“--%s” %s) --HappyBirthday 更多字符串参数参见(http://www.runoob.com/python3/python3-string.html) (3)Python字符串相关函数(简表) 设定变量 str = “happy” capitalize() 将字符串的第一个字符转换为大写 str.capitalize() center(len,char) 返回一个len宽度居中的字符串, char为填充的字符,默认为空格。
str.center(15,”*”) find(str, beg=0 end=len(string)) 检测 str 是否包含在字符串中,存在返回字符串位置,无返回-1 str.find(“py”) join(seq) 以指定字符串作为分隔符,将seq 中所有的元素合并为一个新字符串 str.join(“****”) len(string) 返回字符串长度 len(str) max(string) 返回字符串中最大字母 max(str) upper() 将字符串变成大写 str.upper() isdecimal() 判断字符串是否全为十进制数字 str.isdecimal() split(str,num) 以str为分隔符截取字符串,若 num有值,则截取num+1个子字符串 (4)例4-2从给定的字符串中寻找隐含的密码(代码:L04\Example 4-2.py)。寻找隐藏密码的方法是:先找到字符串中出现的数字,它们就是所在单词中备选字母的位置。把这些字母一一找到连接起来就是密码。
该字符串为:To do thi2s, they recr8uited independent obser0vers a2nd sh4owed th3em color headshot phot9ographs of co6mplete strangers. 5、循环退出 (例4-3) 执行中遇到除数为0时就退出循环,借助break语句 for i in range(10): if i== 5: # 当前i==5时退出循环 break print( 10 / (i-5)) 当循环变量赋值为5时,执行跳出循环,该段循环结束 for循环中的else语句用于解决循环序列得以完整执行情况下的执行语句 for i in range(10): print(i) else: print(“Range Over”) 当循环range(10)序列全部完成则正常执行else,若循环中执行break退出,则不执行else语句 从0-9中过滤出所有偶数:循环中一旦发现奇数就用continue语句跳出本轮循环,进入下一循环 for i in range(10): if i % 2 == 1: continue print(i) 每轮循环中判断变量i是否奇数,若奇数则进入下一循环,所以只有偶数才能执行 print语句 6、案例08《百钱买百鸡》 (参见L04\Case08.py) 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
分析:用编程的方法解决这一问题,最直接的做法就是进行试值。买公鸡的可能值为1-100只,母鸡的可能是1-100只,小鸡则可能是3-100只。在每种鸡可能的范围内,逐一进行测试,哪一种组合能够符合总只数是100只,且花钱正好为100文,则该组合就是问题的解。这种解法就是枚举法。
可采用for循环,且for循环要进行三层嵌套。其求解的条件,即是两个条件的求“与”。(1)总只数=100 (2)总钱数=100 #公鸡从1-100只的范围内循环 for gj in range(1,100): for mj in range(1,100): #母鸡从1-100内循环 for xj in range(3,100,3): #小鸡至少3只,最多到100只,间隔3只 # 判断条件为总只数100,总价格正好100钱 if 5*gj + 3*mj + xj/3==100 and gj+mj+xj == 100: print(“公鸡%d只,母鸡%d只,小鸡%d只“ %(gj,mj,xj)) 运行结果 7、For循环应用的局限性 (1)适于进行具有明确的循环序列(固定的循环次数)的循环条件。
for i in range(366): print(“第%d天刷牙”%i) (2)不适应于没有固定循环次数(循环序列)的循环场景。
例如:每张纸的厚度以1/1000米计,需要折多少次能够超过珠穆朗玛峰的高度? for i in range(???): # à 此处正是要求的解,无法给出一个确定的值,不适宜于使用for语句 print(“对折 %d 次即可超过珠峰” %i) 8、案例09《与珠穆朗玛峰比高》(参考L04\Case09.py) 分析:每张纸的高度为1/1000米,对折后得到1/1000*2,再对折得到1/1000*2*2,可知对折n次的高度为1/1000*2n。若在循环中加入判断条件当对折n次的高度大于8844米时即终止循环,此时的n值正是要求解的问题。
第1次:1/1000 < 8844 (继续循环) 第2次:1/1000 * 2 < 8844(继续循环) 第3次:1/1000 * 4 < 8844(继续循环) 。。。
第n次:1/1000 * 2n > 8844(终止循环) 步骤:
(1)定义两个变量 timesà对折的次数, heightà对折后的高度 (2)开始循环,每次循环先判断对折这次后是否已经超过了珠峰高度 (3)若已经超过,则不再循环,结束;
打印出循环的次数,即为对折次数 请尝试:
(1)打开 L04\Case08.py,尝试读懂程序 (2)写一个折纸代码 # 定义变量折纸次数 times = 0 # 变量高度 height = 0 while height < 8844: # 折纸次数 + 1 times += 1 # 高度增加折一折的高度 height += 2**times /1000 # 打印输出 print(“经过 %d 次对折“ %times) print(“高度已经达到 %d 米,已超过珠峰高度!“ %height) 9、While循环结构 (1)while是非常重要的python循环结构,其循环结构为: while判断条件:
循环语句 while时间<=8:40 # à 这是一个伪代码 继续上课 # à 以当前时间是否小于8:40为条件,若条件成立,则上课 (2)循环应用:计算从1-5与10的乘法表(L04\Example 4-4.py) num = 0 # 进入while 循环 # 指明循环条件 num < 5 while num < 5: result = (num+1)*10 # 循环变量+1,很关键 num += 1 print(“%d * 10 = %d“ %(num,result)) 执行结果 (3)循环else语句与for循环一致 10、案例10《猜数字游戏》 分析:猜数字游戏最能体现while循环的特点。用户进行猜数字时, 猜数次数是变化的,因此需要进行while循环,其循环的条件为,所猜数字并非设定的数字,并且猜数次数不能超过5次。若未猜中,则退出并输出正确答案。
所用知识点:(1) 导入random模块,用于产生随机数。生成随机数的函数为random.randint(1,99)表示产生一个从1至99范围内随机数(生成数)。
(2)引用计数的变量times,用于标记已猜数次数。
(3)判断条件是 计数<5 and 所猜数 != 答案。两条件同时成立,才可以继续猜数。
import random # 生成一个100以内的随机数 num = random.randint(1,99) # 猜数计数变量 times = 0 guess = int(input(“请猜想一个100以内的整数:“)) while(guess != num and times < 5): if guess < num: guess = int(input(“猜小了,请继续猜数:“)) else: guess = int(input(“猜大了,请继续猜数:“)) times += 1 if guess == num: print(“恭喜你,猜对了,你真厉害!“) else: print(“很遗憾,你没有猜中。这个数字是 %d“ %num) 运行结果 第五部分 列表、元组和字典 1、列表的循环遍历 (1)列表是Python中基本的数据结构,我们常把一些相关的数据放在一起构成一个有序序列,这样的序列在Python中常用列表表示。如gender = [‘男’,’女’]。序列中的每个元素均可通过序列变量名索引到。gender[0]的值即为’男’。
(2)列表常用做for循环的序列。
(3)列表中每个元素可以包含任何数据类型,如数字、字符串等。
2、列表的基本操作 定义列表 city = [”北京”,”上海”,”广州”,”深圳”] count()统计列表中元素个数 city.count(“上海”) index()取得元素在列表的索引位置 city.index(“广州”) insert()在列表中指定位置插入新的元素 city.insert(2,”济南”) pop()移除列表中一项并返回(默认尾项) city.pop() remove(item)移除指定一项 city.remove(“广州“) reverse()反转列表的顺序 city.reverse() sort()对列表进行排序 city.sort() 3、列表的访问与切片 通过列表下标访问列表元素,通过指定[start:end:step]参数可获取子列表。按索引和step间隔值,获取从start至end-1位置列表。
指定step为-1则表示反向截取; [:]则表示全部截取。
4、一个关于列表的例子。(例:5-1) 从mx1中去除掉mx2中已经包含的名字 mx1 = ['王源','贾玲','沈腾','欧阳娜娜','邓超','陈赫','鹿晗','郑凯','王祖蓝','Angelababy','李晨'] mx2 = ['王源','贾玲','沈腾','欧阳娜娜','宋小宝'] for name in mx2: if name in mx1: mx1.remove(name) print(mx1) 5、元组 (1) Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
(2)元组的定义与列表类似,如 gender=(“男”,”女”),访问同列表一致使用下标,如gender[0]即为“男”。
(3)元组的切片规则与列表相同。
(4)随机产生性别序列的小例子(例5-2) import random gender=(“男”,”女”) for i in range(30): x = random.randint(0,1) print(gender[x]) 6、字典 (1) 字典是存储键值对的数据结构,字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,如area = {“济南”:”0531”,“青岛”:”0532”,“枣庄”:”0632”}。其中,键(key)是必须唯一的。
(2)字典的访问可使用键进行索引。如 area[“枣庄”] 返回值:’0632’. (3)字典基本操作包括:(以area为例) 删除键del() del area[“枣庄”] 清空字典clear() area.clear() 删除键并返回pop() area.pop(“枣庄”) 返回键列表keys() area.keys() 返回字典值列表values() area.values() 7、案例11《山东省区号查询器》(L05\Case11.py) 功能:实现一个查询器,用以查询山东省各地市的电话区号。
# 定义地区区号字典 area = {“济南“:“0531“,“青岛“:“0532“,“淄博“:“0533“,“德州“:“0534“,“烟台“:“0535“,“潍坊“:“0536“,“济宁“:“0537“,“泰安“:“0538“,“临沂“:“0539“,“荷泽“:“0530“,“滨洲“:“0543“,“东营“:“0546“,“威海“:“0631“,“枣庄“:“0632“,“日照“:“0633“,“莱芜“:“0634“} # 输入的内容 key = ““ while key.lower() != “q“: # 输出KEY值,做一个参照 print(“-“*20) for k in area.keys(): print(“%s“ %k,end=' ') # 产生空行 1.程序采用字典进行数据存储,以地区名称为键,值为该地区的区号;
2.使用一个while循环,以接收输入的字符作为循环条件,以q字母为结束条件。
3.将字典的keys输出展示各地区名称,使用者可以据此输入地区名称,并获得该字典项的值(区号)。
程序运行结果 print(“ “*10) # 输入内容 key = input(“请输入地区名称[输入字母Q退出]:“) # 若key = “q“ if key.lower() == “q“: break # 产生空行 print(“ “*10) # 判断输入内容是否在当前字典中(KEYS) if key in area: print(““%s”区号是:%s“ %(key, area[key])) else: print(““%s”不是有效的地区名称“ %key) # 程序结束退出 print(“再见“.center(20, “-“)) 第六部分 函数 1、函数 函数在Python编程中是非常重要的概念,它将具有某一功能的代码组织在一起,便于重复调用,实现了提高应用的模块化水平和代码重复利用率的目的。
2、函数结构 (1)函数以def关键词开头,后面接函数关键词和括号,括号内可以为若干函数的参数。
(2)函数体同样要进行缩进,函数使用return返回值,当然也可以没有返回值(相当于返回None)。
3、案例12《面积计算器》 功能描述:根据用户的选择进行圆形、矩形面积的计算。
# 定义圆形面积计算函数 def circleArea(r): return 3.14 * r ** 2 1.定义自定义函数实现对圆形、矩形面积的计算,便于在主程序代码中进行调用。
# 定义矩形面积计算函数 def rectangleArea(h,v): return h * v # 圆形计算功能函数 def circle(): r = int(input(“请输入圆形的半径:“)) print(“半径为%d的圆形面积为 %f“ %(r, circleArea(r))) # 矩形计算功能函数 def rectangle(): h = int(input(“请输入矩形长:“)) v = int(input(“请输入矩形宽:“)) print(“长和宽分别为%d和%d的矩形面积为 %d“ %(h,v,rectangleArea(h,v))) # 获得用户选择的功能代码 func = int(input(“请选择要计算的图形[ 1-圆形,2-矩形] 请输入代码:“)) # 判断用户选择的功能 if func == 1: # 1为圆形 circle() # 调用圆形计算 elif func == 2: # 2为矩形 rectangle() # 调用矩形计算 else: print(“功能选择错误!“) 2、主代码中通过输入功能代码来决定调用哪个函数进行输入、计算。
程序运行结果 选择功能1-圆形,调用函数àcircle,该函数中调用circleArea函数进行面积计算 选择功能2-矩形,调用函数àrectangle,该函数中调用rectangleArea函数进行面积计算 第七部分 图书小管家案例 1、程序设计的一般流程 分析需求à设计模块à编写程序 2、软件需求分析 (1)这是一个比较简单的图书管理演示程序,仅需要对图书的名称进行添加、删除、浏览功能。
(2)图书数量有限。
(3)程序功能仅供演示,需要简洁的操作界面,需要较少的代码实现。
3、程序结构(模块构成) 4、文件读写 文件读写(此处指文本文件)是非常重要的编程内容。对于本项目,则需要使用文件来存储添加的图书。
(1)读文件:
bookFile = open(“books.txt“, “r“) contents = bookFile.readlines() bookFile.close() è 打开文件,模式为“r”(只读) è 按行读取文件至列表contents中 è 文件关闭 (2)写文件:
bookFile = open(“books.txt“, “w“) bookFile.write(“\n“.join(books)) bookFile.close() è 打开文件,模式为“w” è 向文件写入内容 è 文件关闭 模式 描述 r 以只读方式打开文件。文件指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
5、异常处理 在Python中采用try…except语句进行异常处理。采用异常处理,可以保障程序的健壮性和稳定性。其语法格式为:
try: try语句 except 错误类型: 异常处理语句 else: else语句 try语句可选else子句,它应位于所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。
6、程序调试 (1)使用 print(输出关键性变量、进程标志的值) (2)使用idle进行DEBUG(开启Debug,单步跟踪) 7、案例12《图书小管家第1版》 (1)使用文本文件作为图书数据的存储载体 (2)程序中使用全局变量books存储加载到内存的数据 (3)参考资源“Python资源\L07\Case12.py” 8、案例13《图书小管家第2版》 (1)使用Sqlite数据库作为数据载体,需要安装SqliteExpert软件进行数据库和表的建立。(SqliteExpert软件在提供的资源软件包中) (2)典型的Sqlite数据库应用如下所示 conn = sqlite3.connect(“books.db“) cursor = conn.cursor() cursor.execute(sql语句) conn.commit() #提交事务 à 启动对数据库的连接,返回连接对象 à 获取数据库游标 à 执行SQL à 提交事务(select语句外) (3)参考资源“Python资源\L07\Case13.py” 第八部分 案例《我的通讯录》 1、案例需求分析 (1)这是一个能够实现基本的个人通讯录管理的简单程序。
(2)程序要实现添加联系人的添加、删除、修改功能,能够对联系人下的不同通讯方式进行管理(添加、删除、修改),能够执行通讯录的浏览和关键字查询功能。
(3)程序通过数据库(Sqlite)实现数据存储(安装SqliteExpert软件进行可视化数据库管理) 2、项目流程设计 (1)模块及结构 (2)数据库设计 3、功能实现 详见“Python资源\L08\AddressList.py” 第九部分 拓展案例 1、Python与Excel 需要通过pip安装xlrd模块 (pip install xlrd) 参考资源“Python资源\L09\01 Excel.py” 2、Python与网页图片抓取 需要先安装“pip install requests”模块 参考资源 1.“Python资源\L09\ 02 ImageGetter.py”à 抓取sogou网图片 2.“Python资源\L09\ 02 ImageGetter2.py”à 抓百度图片 第十部分 参考学习资源 1、Python基础语法参考网站——菜鸟教程 http://www.runoob.com/python/python-tutorial.html (2.X版本)【慎重】 http://www.runoob.com/python3/python3-tutorial.html (3.X版本) 2、网易卡搭编程(编程环境) https://kada.163.com/ide/python.htm 3、我要自学网——Python初学教程 https://www.51zxw.net/list.aspx?cid=707 4、我要自学网——Python入门教程 https://www.51zxw.net/list.aspx?cid=711 5、学习强国平台——视频学习(学习慕课) 《高级语言程序设计-Python》,主讲:哈尔滨工业大学 车万翔 6、学习强国平台——视频学习(学习慕课) 《用Python玩转数据》 南京大学计算机科学与技术系 张莉
推荐访问: 讲义 Python