夜光序言:
江山若深情,何故换风景。红尘若柔情,何必扰心境。
正文:通用循环构造方法
交互式循环
交互式循环是无限循环的一种
允许用户通过交互的方式重复程序的特定部分
让我们以交互循环的视角重新审视求平均数程序,伪码如下:
初始化sum为0
初始化count为0
初始化moredata为"yes"
当moredata值为"yes"时
输入数字x
将x加入sum
count值加1
询问用户是否还有moredata需要处理
输出sum/count
交互式循环代码
交互式循环执行
程序的输出如下:
用户不再需要计数,但又总被提示信息打扰
哨兵循环
执行循环直到遇到特定的值,循环语句才终止执行的循环结构设计方法
哨兵循环是求平均数的更好方案,思路如下:
设定一个哨兵值作为循环终止的标志
任何值都可以做哨兵,但要与实际数据有所区别
伪码如下:
接收第一个数据
while这个数据不是哨兵
程序执行相关语句
接收下一个数据项
在求考试分数平均数的程序中,可以设定负数为哨兵
夜光:哨兵循环版本1代码
下面是程序执行过程:
没有那么多yes/no的干扰,执行结果更加清晰
但不能包含负数的平均数计算,为了更加通用化需要引入字符串
哨兵循环版本2
利用非数字字符串表示输入结束
所有其他字符串将被转换成数字作为数据处理
空字符串以””(引号中间没有空格)代表,可以作为哨兵,用户输入回车Python就返回空字符串
伪码如下:
初始化sum为0
初始化count为0
接受输入的字符串数据,xStr
while xStr非空
将xStr转换为数字x
将x加入sum
count值加1
接受下个字符串数据,xStr
输出sum/count
以下是程序执行过程:
文件循环:
面向文件的方法是数据处理的典型应用
之前求平均数的数字都是用户输入的,如果几百个数求平均,输入困难且容易出错
可以事先将数据录入到文件中,然后将这个文件作为程序的输入,避免人工输入的麻烦,便于编辑修改
文件循环代码
遍历文件
在这段代码中,循环变量line遍历文件的每一行,将每行都转成数字然后加到sum中。
通过Python的readline()来读取,readline()将文件的一行读取到字符串中。
在文件尾部,readline()返回的一个空字符串可以作为哨兵值。
Python中采用readline()方法的end-of-file循环模式:
文件循环代码while
将end-of-file哨兵循环应用到平均数问题的代码:
嵌套循环
决策和循环互相嵌套可以实现复杂算法
之前实例中文件每行只存一个数字,这一次数字以逗号分隔出现在文件的同一行上
下面是处理一行的代码片段:
嵌套循环代码