1、14.1 while 循环与 for 循环 Python 循环结构主要有 while 循环和 for 循环两种形式。while 循环一般用于循环次数难以提前确定的情况;for 循环一般用于循环次数可以提前确定的情况,尤其适用于遍历可迭代对象中元素的场合。在 Python 中,while 循环和 for 循环都可以带有 else 子句。对于带有 else 子句的循环结构,若该循环因为条件表达式不成立或序列元素遍历结束而自然结束,则继续执行 else 结构中的语句,若该循环因为执行了 break 语句而导致循环提前结束,则不执行 else 中的语句。24.1 while 循环与 for 循环whi
2、le 条件表达式:循环体else:else子句代码块for 取值 in 序列或迭代对象:循环体else:else子句代码块34.1 while 循环与 for 循环 例例 4-1 编写程序,输出 1 100 之间能被 7 整除但不能同时被 5 整除的所有整数。for i in range(7,101,7):if i%5!=0:print(i,end=)44.2 break 语句与 continue 语句 break 语句和 continue 语句在 while 循环和 for 循环中都可以使用,并且一般常与选择结构结合使用。一旦 break 语句被执行,将使得 break语句所属层次的循环提前
3、结束;continue 语句的作用是提前结束本次循环,忽略 continue 之后的所有语句,提前进入下一次循环。54.2 break 语句与 continue 语句 例例 4-2 编写程序,输出小于 100 的最大素数。for n in range(100,1,-1):if n%2=0:continue for i in range(3,int(n*0.5)+1,2):if n%i=0:#结束内循环 break else:print(n)#结束外循环 break64.3 精彩例题分析与解答 例例 4-3 编写程序,快速判断一个自然数是否为素数。n=int(input(请输入一个大于1的自然数
4、:)if n in(2,3,5):print(是素数)else:#大于5的素数必然出现在6的倍数两侧#因为6x+2、6x+3、6x+4肯定不是素数 if n%6 not in(1,5):print(不是素数)else:#只需要判断3到n的平均根这个范围的奇数是否能够整除n#这样速度更快 for i in range(3,int(n*0.5)+1,2):if n%i=0:#只要有因数就不是素数,就结束循环#执行break后下面else中的代码将不被执行 print(不是素数)break else:print(是素数)74.3 精彩例题分析与解答 例例 4-4 编写程序,打印九九乘法表。for i
5、 in range(1,10):for j in range(1,i+1):print(0*1=2.format(i,j,i*j).ljust(6),end=)print()84.3 精彩例题分析与解答 例例 4-5 编写程序,打印输出“水仙花数”。for i in range(100,1000):bai,shi,ge=map(int,str(i)if ge*3+shi*3+bai*3=i:print(i)94.3 精彩例题分析与解答 例例 4-6 编写程序,计算百钱买百鸡问题。假设公鸡 5 元一只,母鸡 3元一只,小鸡 1 元三只,现在有 100 元,想买 100 只鸡,问有多少种购买方法?
6、#假设能买x只公鸡,x最大为20for x in range(21):#假设能买y只母鸡,y最大为33 for y in range(34):#假设能买z只小鸡 z=100-x-y if(z%3=0 and 5*x+3*y+z/3=100):print(x,y,z)104.3 精彩例题分析与解答 例例 4-7 编写代码,模拟决赛现场最终成绩的计算过程。#这个循环用来保证必须输入大于2的整数作为评委人数while True:try:n=int(input(请输入评委人数:)if n=2:print(评委人数太少,必须多于2个人。)else:#如果输入大于2的整数,就结束循环 break exce
7、pt:pass#用来保存所有评委的打分scores=114.3 精彩例题分析与解答for i in range(n):#这个while循环用来保证用户必须输入0到100之间的数字 while True:try:score=input(请输入第0个评委的分数:.format(i+1)#把字符串转换为实数 score=float(score)#用来保证输入的数字在0到100之间 assert 0=score=100 scores.append(score)#如果数据合法,跳出while循环,继续输入下一个评委的得分 break except:print(分数错误)124.3 精彩例题分析与解答#计
8、算并删除最高分与最低分highest=max(scores)lowest=min(scores)scores.remove(highest)scores.remove(lowest)#计算平均分,保留2位小数finalScore=round(sum(scores)/len(scores),2)formatter=去掉一个最高分0n去掉一个最低分1n最后得分2print(formatter.format(highest,lowest,finalScore)134.3 精彩例题分析与解答 例例4-8 编写函数,计算形式如 的表达式的值,其中为小于10的自然数。a=int(input(请输入整数a,
9、要求0=a7:print(times)break else:item=str(difference)184.3 精彩例题分析与解答 例例4-12 编写程序,计算 的值。result=0for i in range(1,100):result+=1/(i*(i+1)print(result)print(sum(map(lambda i:1/i/(i+1),range(1,100)#函数式编程,结果一样1910099143132121199.01001110019914131312121114.3 精彩例题分析与解答 例例 4-13 某品牌计算机第一年销量为 5 000 台,假设平均每年的销量比上一年增加 10%。编写程序,计算大约经过几年才能使得总销量达到40 000 台。every=5000total=5000year=1while True:if total=40000:break every+=every*0.1 total+=every year+=1print(year)20