Python学习笔记-循环结构

Python学习笔记-循环结构

以一串数字的平均数为例,IPO:

  • 输入:待输入数字个数,数字
  • 处理:求和算法
  • 输出:平均数

for循环

#average_1.py 求平均数-for循环
n=eval(raw_input("How many numbers?"))#输入数字个数
sum=0.0
for i in range(n):#输入n个数字
    x=eval(raw_input("Enter a number>>"))
    sum=sum+x#累加器
print "\nThe average is",sum/n#输出平均数 

实用,简单,但需提前输入数字个数,不适用于大规模数字求平均数,通用性不大

while循环(条件循环)

#average_2.py 求平均数-while循环(条件循环)
i=0
sum=0.0
while i<=10:#按顺序从0到10进行循环
    print(i)#输出i
    sum=sum+i#累加器
    i=i+1
print "\nThe average is",sum/10#输出平均数 

可以自己累加输入的数字个数,但容易陷入死循环
与以下for循环相同:

#average_2.py 求平均数-while循环(条件循环)
i=0
sum=0.0
for i in range(11):#按顺序从0到10进行循环
    print(i)#输出i
    sum=sum+i#累加器
print "\nThe average is",sum/10#输出平均数 

死循环:用Ctrl+C终止程序/用Ctrl+Alt+Delete重启计算机
同样过于简单,实用性不强

交互式循环

#average_3.py 求平均数-交互式循环
count=0
sum=0.0
mordata="yes"#初始化
while mordata[0]=="y":#若mordata的第一个字母是y的话就进行循环
    x=eval(raw_input("Enter a number>>"))#输入需计算的数字
    sum=sum+x#累加器
    count+=1
    mordata=raw_input("Do you have more numbers(yes or no)?")#给mordata重新赋值
print "\nThe average is",sum/count#输出平均数 

实用性加强,不会陷入死循环,但提示过于频繁,极易引起反感。

哨兵循环

#average_4.py 哨兵循环
sum=0.0
count=0
xStr=raw_input("Enter anumber(<Enter>to quit)>>")#输入第一个数字
while xStr!="":#哨兵为""
    x=eval(xStr)#将输入的字符转变成数值型
    sum+=x#累加器
    count+=1#计数器
    xStr=raw_input("Enter anumber(<Enter>to quit)>>")#每循环一次输入一个字符
print "\nThe average of the number is",sum/count#输出结果

哨兵值:空字符串“”
遇到哨兵值循环就会结束。
增加了转换字符为数字的过程,不那么简洁但更有效

总结

for循环+while循环+哨兵循环

#average_5.py
fileName=raw_input("What file are the number in?")#输入存储数据的文件的名字
infile=open(fileName,'r')#打开文件
sum=0.0
count=0
line=infile.readline()#处理文件中的第一行数据
while line!="":#哨兵值:“”
    #为line中的值更新其count和sum
    for xStr in line.split(","):#嵌套循环:while循环里嵌套for循环
        #用于处理,文件里一行数据里有多用逗号隔开的多个数据的情况
        sum+=eval(xStr)#累加器
        count+=1#技术器
    line=infile.readline()#未遇到哨兵值时,每次循环都处理一行数据
print "\nThe average of the numbers is",sum/count#输出结果

不需要大量的人机交互,人们只需要将数据存储在一个文件里即可,不存在一次输错,就从头再来的情况,编辑修改十分方便
使用readline()函数,同时以“”为哨兵值,即按行处理数据,而且只有只有在文档末尾是时候才会终止循环(若遇到空行,其返回值为“\n"而不是空白,故不会结束循环),这样亦不会有陷入死循环的危险(文件的内容总有结束的时候)。
同时此程序里运用了end-of-file循环,即以文件的末尾为哨兵的循环,这种循环虽没有for循环简洁但十分有效。
而且使用嵌套循环,则兼顾了多行输入数据和一行内多个数据的可能,兼容性更强
此程序虽并不十分简洁,但实用性和兼容性是最强的,最为一个程序员要多向这个方面努力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值