4.4 运用循环结构描述问题求解

本节要点:

  • for ... in 循环语句的一般格式
  • range()函数的参数,以及range()在for循环中的作用
  • while循环的应用
  • 多重循环

4.4.1 for 循环的应用

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 判断条件:
    循环体                     #当条件为真时,执行循环体的语句,否则跳出循环

while

Python while 语句执行过程

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循环,都需要一个控制循环的变量来控制循环的执行。

但是,有些循环仅靠循环变量自身的变化难以达到想要的控制效果,因此需要用到控制循环的跳转语句。

实现控制循环的跳转需要用到breakcontinue两个关键字。其-中,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.给你一个字符“*”,请用循环语句,输出下面的图形。
* * * * * * * * * * * 
* * * * * * * * * 
* * * * * * * 
* * * * * 
* * * 
* 

4411.py

2.给你一个字符“*”,请用循环语句,输出下面的图形。
           * 
         * * * 
       * * * * * 
     * * * * * * * 
   * * * * * * * * * 

4411.py

3.输入一个整数n,求1+2+3+...+n的和。

443

4.求一个最大的整数n,这个n满足1+2+3+...+n的和小于或等于135459。(提示:使用while循环结构)

示例代码:(注:请将绿色部分补充完整。

444