Python教程chapter.ppt

上传人:xiao****1972 文档编号:16209421 上传时间:2020-09-22 格式:PPT 页数:40 大小:265KB
返回 下载 相关 举报
Python教程chapter.ppt_第1页
第1页 / 共40页
Python教程chapter.ppt_第2页
第2页 / 共40页
Python教程chapter.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
控制结构,循环语句,2,for循环: 回顾,语法 for in : 语义 循环标志变量var取遍序列sequence中的每个值; (该循环自动改变var的值) 对var所取的每个值执行一遍循环体body 计数循环 循环次数是确定的,即序列的长度决定,3,编程实例:求平均值,需求: 输入若干个数, 求平均值. 显然可用熟悉的累积器算法模式 算法: 输入数值个数n 初始化累积变量sum=0 循环n次 输入数值x 累加到sum 输出平均值sum/n 翻译到Python: avg1.py,4,while循环,avg1.py的缺点: 需要用户输入n 不适合事先不知道n的场合 不知道n则不能用确定的计数循环for 不确定的条件循环: while,5,while循环,语法 while : 语义 只要条件成立就反复执行循环体; 当条件不成立则执行下一条语句,6,while循环的特点,循环前测试条件(pre-test) 若不满足,则循环体一次都不执行 循环体影响下一次条件测试 否则导致无穷循环 例如:for循环改写成while循环 i = 0 #编程者设置 while i 10: print i i = i + 1 #编程者设置 若忘了最后一条语句会怎样?,条件,循环体,yes,no,7,常见循环模式: 交互循环,用户根据需要来循环执行程序某一部分 例如: avg2.py 不输入n,由程序自己数输入的值的个数 设置一个是否继续循环的标志 初始化sum = 0 #求和 初始化count = 0 #记录数据的个数 初始化moredata = yes while moredata = yes: 输入数据x 累积sum = sum + x 累积count = count + 1 询问用户moredata? 输出平均值sum/count,8,常见循环模式: 哨兵循环,avg2.py不断要用户输入moredata,很烦人. 改进: 设置一个特殊数据值(称为哨兵)作为终止循环的信号 对哨兵唯一的要求就是能与普通数据区分,9,常见循环模式: 哨兵循环,模式 输入第一个数据 while 该数据不是哨兵: 处理该数据 输入下一个数据 编程实例: avg3.py(负数哨兵)(数据中有负数则无效) avg4.py(空串哨兵),10,常见循环模式: 文件循环,avg1avg4都是交互式输入数据的 不便处理大数据量 一个输入错误即导致需要重新运行程序 改进:建立一个数据文件 数据处理应用中广泛使用 模式: 打开数据文件f for line in f.readlines(): 处理每个数据 编程实例:avg5.py,11,常见循环模式: EOF哨兵循环,一次性读入 readlines()一次性把文件的所有行都读入内存 但内存是很有限的! 可能无法运行 分批读入(缓存) readline()每次读入一行 需要哨兵(如:空行), 标志文件结束(EOF) line = f.readline() while line != “”: 处理该行 line = f.readline() 编程实例:avg6.py,12,常见循环模式: 嵌套循环,嵌套循环:一个循环语句的循环体内有另一个循环语句 用途: 遍历一维空间的元素只需一个循环变量, 遍历二维空间的元素需要两个循环变量, , 遍历n维空间的元素需要n个循环变量 如:矩阵 for i in range(10): for j in range(20): print xij,13,常见循环模式: 嵌套循环,例如: 假设数据文件的每一行有多个数据. 编程实例: avg7.py 顶层循环仍如avg6.py 但每次顶层循环内, 需要另一个循环来处理该行上的多个数据,14,布尔值计算,布尔表达式: 以True/False为值 简单布尔表达式: 关系运算(relop): =, , != 数值比较 字符串比较: 按字典序 字母序由编码(ASCII等)决定. 如:大写字母在小写字母前,15,布尔值计算,复杂布尔表达式:由布尔表达式及布尔运算构成 布尔运算(逻辑联结词) 二元运算: and, or (并且,或者) and or 一元运算: not (非) not ,16,and的定义,and表示“并且”: P and Q为真 iff P和Q都为真 用真值表表示更直观,17,or的定义,or表示“或者”: P or Q为假 iff P和Q都为假,18,or的定义,or表示“或者”: P or Q为假 iff P和Q都为假 “可兼或” : or 这次演出,我或者跳舞,或者唱歌 “不可兼或”: 互斥的涵义,即二选一 我今天晚上或者在家看电视,或者到体育场看球赛。,19,not的定义,not表示“否定”: not P为真 iff P为假.,20,布尔运算符的优先级,not最高, and次之, or最低 思考: a or not b and c何意? 最好使用括号!,21,例: 判断两点是否位置相同,嵌套if-else if p1.getX() = p2.getX(): if p1.getY() = p2.getY(): # points are the same else: # points are different else: # points are different 用布尔运算符 if p1.getX() = p2.getX() and p1.getY() = p2.getY(): # points are the same else: # points are different,22,例: 模拟racquetball的结束,用计算机模拟自然现象, 分析可能的结果 先得15分者胜 while not(scoreA = 15 or scoreB = 15): # 这里用not(and) # continue playing 先得15分或7:0者胜 a = 15 or b = 15 or (a = 7 and b = 0) or (b = 7 and a = 0) 至少要多2分才胜 (a = 15 and a - b = 2) or (b = 15 and b - a = 2) 或(a = 15 or b = 15) and abs(a - b) = 2,23,布尔代数,布尔运算遵循的代数定律 a and False = False (零律) a and True = a (同一律) a or False = a (同一律) a or True = True (零律),24,布尔代数,布尔运算遵循的代数定律 分配率 a or (b and c) = (a or b) and (a or c) a and (b or c) = (a and b) or (a and c) 双重否定 not(not a) = a 摩根律 not(a or b) = (not a) and (not b) not(a and b) = (not a) or (not b),25,利用布尔代数简化条件,例如:racquetball结束条件 while not (scoreA = 15 or scoreB = 15): # continue playing while (not scoreA = 15) and (not scoreB = 15): # continue playing while scoreA != 15 and scoreB != 15: # continue playing,26,其他循环结构: 后测试循环,问题: 输入验证 检查用户输入是否符合要求,不符合就要求用户重新输入,直至符合为止 这是一种后测试循环: 执行循环体后才测试条件 循环体至少执行一次 直至条件成立才退出循环 有些语言提供repeatuntil语句,27,其他循环结构: 后测试循环,Python未提供专门语句 但可用while实现, 只需确保首次进入while时条件成立 x = 1 while x 0: ,28,break语句,语法: break 语义: 退出break所处循环(通常是无穷循环) 应用例: 实现后测试循环 while 1: x = input(Enter a nonnegative number: ) if x = 0: break 两种希望: (1)本次循环到此为止,进入下次循环-continue (2)结束循环,退出循环体-break,29,break语句,比用一个非法值(如前面的1)来强制while循环一次的做法好. 试一试: 为两种做法都加一句数据错误报警信息 慎用break (非正常控制流,破坏了程序结构) 尤其是一个循环体用多个break出口 作用和某些程序语言中的go to语句类似,30,Loop and a Half半路循环、半途退出问题,循环出口在循环体中间.例如 while 1: x = input(Enter a nonnegative number: ) if x = 0: break print negative! 实现哨兵循环: while 1: 读取下一数据x if x是哨兵: break 处理x,31,布尔表达式用作控制结构,Python 2.7具有内建bool类型 只有两个值:True和False 此前版本用整数1和0 Python的其他任何内建类型都可解释为布尔值 非0整/浮点/长整数解释为True 0解释为False 非空字符串解释为True 空串解释为False,32,布尔表达式用作控制结构,布尔运算符的操作语义(计算顺序) x and y: 若x为假, 返回x; 否则返回y x or y: 若x为假, 返回y; 否则返回x not x: 若x为假, 返回1; 否则返回0 符合布尔逻辑 走捷径,33,例: Python布尔运算的陷阱,期待用户输入y或Y的代码: while ans = y or ans = Y: 不能写成 while ans = y or Y: 因为后者总是计算到True! (Why?),34,例: Python布尔运算的灵活性,期待用户输入,若无输入则赋予缺省值的代码: ans = raw_input(What flavor vanilla? ) if ans != : flavor = ans else: flavor = vanilla ans = raw_input(What flavor vanilla? ) if ans: flavor = ans else: flavor = vanilla ans = raw_input(What flavor vanilla? ) flavor = ans or vanilla flavor = raw_input(What flavor vanilla? ) or vanilla,35,作业,EX 8.6 P134 8, 10,36,上机总结,4-18题,word count 主要代码: lines = file.readlines() linecount = len(lines) wordcount = 0 charcount = 0 for line in lines: words = string.split(line) wordcount += len(words) for word in words: charcount += len(word) print linecount, wordcount, charcount,37,上机,5-12题,矩形的周长和面积: 求周长和面积前,对矩形的长和宽求绝对值,长和宽总是大于0的。,38,作业,7.6.15题 判断闰年:用7.6.13题给的提示,(year % 4 = 0 and year % 100 != 0) or (year % 400 = 0) 验证日期:验证月份可以使用一个月份天数的二维列表 months = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 然后验证 0 day = monthsIsLeapYearmonth 就可以了。,39,End,40,真值表,(not P) and Q,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!