Python程序的循环结构

来自CloudWiki
跳转至: 导航搜索

程序的循环结构

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>