Python程序的循环结构
目录
程序的循环结构
Python语言的循环结构包括两种:遍历循环和无限循环。
- 遍历循环使用保留字for依次提取遍历结构各元素进行处理;
- 无限循环使用保留字while根据判断条件执行程序。
遍历循环:for
遍历循环可以理解为从遍历结构中逐一提取元素,放在循环变量中,
对于每个所提取的元素执行一次语句块。
for语句的循环执行次数是根据遍历结构中元素个数确定的。
for <循环变量> in <遍历结构>: <语句块>
在Python中,可迭代对象就是可以用for来循环的东西,遍历结构可以是字符串、组合数据类型、range()函数或文件等。
对于字符串,可以逐一遍历字符串当中的每个字符。
for c in "Python": print(c)
组合数据类型:
>>> ls = [1,2,3,4,5] >>> for i in ls: print(i)
使用range()函数,可以指定语句块的循环次数。
>>> for i in range(5): print(i)
for i in range(1,10,2): print(i,end=",")
文件对象可以直接用for循环迭代:
f = open("D:/test.txt","w") f.write("新年都未有芳华。\n") f.write("2月初惊见草芽。\n") f.write("白雪却嫌春色晚。\n") f.write("故穿庭树作飞花。\n") f.close() fp =open('D:/test.txt',"rt") for line in fp: #文件对象可以直接迭代 print(line) fp.close()
- 练习:下面代码的输出结果是
for i in range(1,10,2): print(i,end=",")
A.1,3,
B.1,3,5,7,9,
C.1,4,7,
D.1,4,
- 练习:下面代码的输出结果是
sum = 0 for i in range(2,101): if i % 2 == 0: sum += i else: sum -= i print(sum)
A.51
B.50
C.49
D.-50
- 问题解决:输出1~100之间能被7整除但不能同时被5整除的所有整数。
for i in range(1, 101): if i%7==0 and i%5!=0: print(i)
else一般用于当遍历未达预期时,需要显示的信息。
- 问题解决:计算1+2+3+…+99+100的结果。
s = 0 for i in range(1, 101): #不包括101 s += i print(s)
- 练习:如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数
求1000以内的水仙花数(3位数)
扩展模式:else语句
遍历循环还有一种扩展模式,即增加else语句。
for s in range(5): print("程序执行中:"+str(s)) else: s = "循环正常结束" print(s)
可以把循环中的else语句想象成一种奖励:当程序辛苦的执行全部循环的时候,没有中途退出或停止,则额外给予一段程序执行的奖励。
无限循环
- while循环: 一般用于循环次数难以提前确定的情况,当然也可以用于循环次数确定的情况;
无限循环结构的语法形式分别为:
while 条件表达式: 循环体
当程序执行到while语句时,判断条件如果为True,执行循环体语句,
语句结束后返回再次判断while语句的条件;当条件为False时,循环终止,执行与while同级别缩进的后续语句。
循环次数不确定
while True: s = input("请输入您的账号:") print("您输入的是:",s)
思考:怎样终止循环呢 ?
例题:求一个数的倒序输出
#3221 ->1223 n = input("n=") n =int(n) s="" while n!=0: m=n%10#求一个数的末位 s=s+str(m)#把末位加到字符串上 n=n//10#把末位切掉 print(n)
循环控制:break和continue
循环结构有两个辅助循环控制的保留字:break和continue。
break用于跳出最内层for或while循环,跳出该循环后,从循环后的代码继续执行。
- continue语句的作用是提前结束本次循环,忽略continue之后的所有语句,提前进入下一次循环。
break
break的例子:
while True: name = input("请输入姓名:(退出请输入quit)") if name == "quit": break; print(name) print("程序退出.")
- 如果有两层或多层循环,break退出最内层循环。
continue
continue语句的作用是提前结束本次循环,忽略continue之后的所有语句,提前进入下一次循环。
练习题.下面代码的输出结果是
for s in "HelloWorld": if s=="W": continue print(s,end="")
A.World
B.Helloorld
C.HelloWorld
D.Hello
练习题.下面代码的输出结果是
for s in "HelloWorld": if s=="W": break print(s,end="")
A.HelloWorld
B.Helloorld
C.Hello
D.World
示例:本地车免检
while True: name = input("请输入车牌号:") if name == "quit": break; if "鲁A" in name:#如果是本地车牌,略过本车,继续下一个 continue; else: print(name,"号码的车主,请缴通行费")
continue语句和break语句的区别是:continue语句只结束本次循环,不终止整个循环的执行,
而break具备结束循环的能力。
=====练习题B (二级真题)=====while True:可以构成一个“死循环”。请编写程序利用这个死循环完成如下功能:循环获得用户输入,直至用户输入字符 y 或 Y 为止,并退出程序。
输入格式
输入 n 行字符串,最后输入 y 或者 Y
输出格式
输出 n 行字符串,最后跳出循环
循环次数确定
n = 0 while n<10: print(n) n = n+3
练习题(二级真题)
给出如下代码:
a=3 while a > 0: a -= 1 print(a,end=" ")
以下选项中描述错误的是:
A.使用while 保留字可创建无限循环
B.这段代码的输出内容为2 1 0
C.a -= 1 可由 a = a – 1实现
D.条件a > 0 如果修改为a < 0 程序执行会进入死循环
练习题:十进制整数转二进制
描述:
十进制整数转二进制的方法是:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序即可得到对应的二进制数的各位。
例如:22转二进制的计算过程:
22 / 2 11 余0 11/2 5 余 1 5 /2 2 余 1 2 /2 1 余 0 1 /2 0 余 1
得到22的二进制是10110
输入格式:输入一个正整数
输出格式:输出对应的二进制数
练习题A:根据斐波那契数列的定义
根据斐波那契数列的定义
F(0)=0,F(1)=1, F(n)=F(n–1)+F(n–2)(n≥2),输出不大于 100 的序列元素,提示代码如下:
a,b = 0, 1 while ____a<100____: print(a, end = ",") a, b = ____b,a+b____
解法2:
# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com # Python 斐波那契数列实现 # 获取用户输入数据 nterms = int(input("你需要几项?")) # 第一和第二项 n1 = 0 n2 = 1 count = 2 # 判断输入的值是否合法 if nterms <= 0: print("请输入一个正整数。") elif nterms == 1: print("斐波那契数列:") print(n1) else: print("斐波那契数列:") print(n1,",",n2,end=" , ") while count < nterms: nth = n1 + n2 print(nth,end=" , ") # 更新值 n1 = n2 n2 = nth count += 1
扩展模式
无限循环,也有一种使用保留字else的扩展模式。
while 条件表达式: 循环体 [else: else子句代码块]
在这种扩展模式中,当while循环正常执行之后,程序会继续执行else语句中的内容。
n = 0 while n<10: print(n) n = n+3 else: print("循环正常结束")
练习题题答案
练习题A 斐波那契数列数列
a, b = 0, 1 while a<=100: print(a, end=',') a, b = b, a + b
练习题B 程序的退出
<nowiki>while True: s = input() if s in ["y", "Y"]: break</nowiki>