控制结构 循环语句
for循环:回顾 语法 for in : 语义 循环标志变量var取遍序列sequence中的每个 值;(该循环自动改变var的值) 对var所取的每个值执行一遍循环体body 计数循环 循环次数是确定的,即序列的长度决定 2
编程实例:求平均值 需求:输入若干个数求平均值 显然可用熟悉的累积器算法模式 算法: 输入数值个数n 初始化累积变量sum=0 循环n次 输入数值x 累加到sum 输出平均值sum/n 翻译到Python:avg1.py 3
while循环 avg1.py的缺点:需要用户输入n 一不适合事先不知道n的场合 ■不知道则不能用确定的计数循环for ■不确定的条件循环:while 4
while循环 ■语法 while : 语义 一只要条件成立就反复执行循环体: -当条件不成立则执行下一条语句 5
vhile循环的特点 循环前测试条件(pre-test) -若不满足,则循环体一次都不执行 条件 no 循环体影响下一次条件测试 一否则导致无穷循环 yes - 例如:for循环改写成while循环 i=0 #编程者设置 循环体 while i 10: print i 1=i+1#编程者设置 ■若忘了最后一条语句会怎样 6
条件 循环体 yes no
常见循环模式:交互循环 用户根据需要来循环执行程序某一部分 例如:avg2.py 不输入n,由程序自己数输入的值的个数 一设置一个是否继续循环的标志 初始化sum=0#求和 初始化count=0#记录数据的个数 初始化moredata=yes while moredata yes: 输入数据x 累积sum=sum+x 累积count=count+1 询问用户noredata? 输出平均值sum/count 7
常见循环模式:哨兵循环 avg2.py不断要用户输入moredata,很烦 人 改进:设置一个特殊数据值(称为哨兵)作为 终止循环的信号 对哨兵唯一的要求就是能与普通数据区分 8
常见循环模式:哨兵循环 模式 输入第一个数据 while该数据不是哨兵: 处理该数据 输入下一个数据 编程实例: avg3.py(负数哨兵)(数据中有负数则无效) avg4.py(空串哨兵) 9
常见循环模式:文件循环 avg1wavg4都是交互式输入数据的 -不便处理大数据量 一一个输入错误即导致需要重新运行程序 改进:建立一个数据文件 一数据处理应用中广泛使用 模式: 打开数据文件f for line in f.readlines(): 处理每个数据 编程实例avg5.py 10