4.4 运用循环结构描述问题求解
本节要点:
- for ... in 循环语句的一般格式
- range()函数的参数,以及range()在for循环中的作用
- while循环的应用
- 多重循环
4.4.1 for 循环的应用
1、for语句配合在可迭代集合对象的语法
for 循环变量 in 列表:
循环体
示例:
#for 循环的次数取决于被迭代的集合中元素的个数
#输出列表中的每一个元素
li = [22,46,90,"china","你好"]
for x in li: # x是循环变量,迭代li列表中的每一个元素
print(x) # 循环体,被执行的次数是列表元素的个数
2、range()函数
range()函数 构造一个数值序列的列表,从而可以通过循环遍历列表中的每一个元素。语法:
range(开始值, 结束值[, 步长])
#参数说明:
#开始值: 计数从 开始值 开始。默认是从 0 开始。例如range(5)等价于range(0,5);
#结束值: 计数到 结束值 结束,但不包括 结束值。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
#步长:默认为1,表示前后两个数值的间隔数。例如:range(0,5) 等价于 range(0, 5, 1)
#range()函数的应用示例
>>>range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3) # 步长为 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
>>> range(10,1,-2) #生成降序数值序列
[10,8,6,4,2]
学生实践:
优化代码:将下面的代码使用循环结构优化,并说明优化后的特点。
rec = input("请输入某同学的数据,格式为:\n姓名 语文 数学 英语 物理 化学 生物\n").split()
rec[1]=float(rec[1])
rec[2]=float(rec[2])
rec[3]=float(rec[3])
rec[4]=float(rec[4])
rec[5]=float(rec[5])
rec[6]=float(rec[6])
tot= sum(rec[1:])
print("姓名:%s"%rec[0])
print("语文:%.2f"%rec[1])
print("数学:%.2f"%rec[2])
print("英语:%.2f"%rec[3])
print("物理:%.2f"%rec[4])
print("化学:%.2f"%rec[5])
print("生物:%.2f"%rec[6])
print("总分:%.2f"%tot)
4.4.2 while 循环的应用
while 循环的语法:
while 判断条件:
循环体 #当条件为真时,执行循环体的语句,否则跳出循环
Python while 语句执行过程
4.4.3 循环嵌套的应用
1、什么是循环嵌套?
循环嵌套就是指循环结构内部的循环体中也有一个或多个循环结构。这种结构形式,可以实现大量的重复性的操作。使用循环嵌套务必注意循环的嵌套层次,
#for 循环嵌套救命
for x in range(3):
for y in range(3):
print("x=%d y=%d"%(x,y))
print('-'*8)
'''
输出结果为:
x=0 y=0
x=0 y=1
x=0 y=2
--------
x=1 y=0
x=1 y=1
x=1 y=2
--------
x=2 y=0
x=2 y=1
x=2 y=2
--------
'''
4.4.4 循环控制的应用
循环控制包含控制循环变量的变化方式和控制循环的跳转。无论是for循环还是while循环,都需要一个控制循环的变量来控制循环的执行。
但是,有些循环仅靠循环变量自身的变化难以达到想要的控制效果,因此需要用到控制循环的跳转语句。
实现控制循环的跳转需要用到break和continue两个关键字。其-中,break是中断循环,continue是跳出本次循环体的执行。
1. break语句
在循环结构中,可以用break语句跳出当前循环体,从而中断当前循环。在实际运用中,往往是在循环体中使用某一个条件来选择是否中断循环,即跳出当前循环,继而执行当前循环外的下一条语句。
也就是说,当某个条件成立的时候,需要立即退出循环,不再运行循环中余下的代码,也不管循环控制变量的条件测试的结果如何。使用break语句,即可让程序能按照要求执行要执行的代码。
#break语句示例
#问题描述:现在给出这一群同学的身高(一个列表),选出身高在1.75以上的四个人,输出他的位置(列表的下标)以及身高,以空格间隔。
#coding:gbk
stud=[1.65,1.77,1.68,1.90,1.85,1.62,1.77,1.70,1.65,1.78,1.75,1.68] #身高数据
cnt=0 #用作记数器
for x in range(len(stud)): #len(stud)返回stud列表的元素个数
if stud[x]>=1.75: #找到目标同学
cnt+=1 #计数器加1
print(x,stud[x]) #输出目标同学的位置及身高
if cnt>=4: #如果找到4个就中止循环
break
'''
运行结果:
1 1.77
3 1.9
4 1.85
6 1.77
'''
2. continue语句
continue语句是对break语句的补充。continue不是立即跳出循环体,而是当条件符合需要跳转的时候,跳过该次循环结束前的语句,回到循环开头的条件测试部分,重新开始执行循环。同理,在实际运用中,往往是在循环体中使用某一个条件来选择是否跳转循环。
# 问题描述:请逐一输出英文字母表中的字母,但忽略顺序号是3的倍数的字母。
zmb='ABCDEFGHIJKLMNOPQRSTUVWXYZ' #字符串和列表一样可以被切片
for x in range(0,len(zmb)): #用循环变量x做字符串的下标
if (x+1) %3==0: #字母表的第1位下标是0,因此需+1
continue #用continue忽略下一句的输出指令
print(x+1,zmb[x],end="\t") #输出字母序号和字母
学生实践
1.给你一个字符“*”,请用循环语句,输出下面的图形。
* * * * * * * * * * *
* * * * * * * * *
* * * * * * *
* * * * *
* * *
*
2.给你一个字符“*”,请用循环语句,输出下面的图形。
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
3.输入一个整数n,求1+2+3+...+n的和。
4.求一个最大的整数n,这个n满足1+2+3+...+n的和小于或等于135459。(提示:使用while循环结构)
示例代码:(注:请将绿色部分补充完整。)