4.4 for循环

4.4.1 for循环

通常用于对字符串和复合数据类型等序列数据的遍历等操作。

语法为:

for 变量 in 序列:
    循环体

for循环执行时,每次从序列中拿出一个值放入变量中,然后执行循环体,其中通常有对变量的操作。当一次循环结束后,再从序列中拿出下一个值放入变量,直到序列中所有值都被取出过,循环结束。

for循环开始执行时不需要知道序列里面有多少个值,也不需要知道循环次数,所做的就是每次取出一个值,直到没有值可供取出为止。

例如:4.7-for循环.py

# for循环
for x in 'abcde':
    print(x)
print('循环之后的语句')

执行结果为:

a
b
c
d
e
循环之后的语句

4.4.2 range()函数

序列可以是字符串,复合数据类型等,for循环还可以使用range()函数来生成一个序列,进行循环控制。

具体语法为:

range(start, stop, step)

range()生成的数字从start开始,包括start,到stop为止,不包括stop,如果用区间的描述来说,是一个前闭后开区间。如果指定了第三个参数step,则从start开始,每次加上step,直到stop为止。如果没有指定第三个参数,默认step为1。

如果只给定一个参数,将作为stop使用,这时start默认为0。

例如:4.8-range函数.py

# range函数在for循环中的使用

# 从start开始,到stop结束,但不包含stop
for x in range(1, 10):
    print(x, end='  ')
print()

# 设置步长
for x in range(0, 10, 3):
    print(x, end='  ')
print()

# 没有start
for x in range(10):
    print(x, end='  ')
print()

# 步长为负
for x in range(0, -10, -3):
    print(x, end='  ')
print()

结果为:

1  2  3  4  5  6  7  8  9
0  3  6  9
0  1  2  3  4  5  6  7  8  9
0  -3  -6  -9

print函数加入的end=' '是用给定的end字符串替换掉默认的'\n',所以每次循环的print函数是在同一行输出,而不是换行输出。

使用range函数,for循环也可以实现和while一样功能的程序:4.9-for求和.py

# for 1-100求和
sum = 0
for x in range(1, 101):
    sum += x
print('sum = {}'.format(sum))

执行结果为:

sum = 5050

对比之前的while循环,for循环的写法更为简洁。

4.4.3 循环的嵌套

类似于if语句的嵌套,循环也可以嵌套。不论是while语句还是for语句,都可以作为外层循环嵌套别的循环,或者作为内层循环成为外层循环的一条循环体语句。

执行的过程为:首先外层循环进行条件判断,如果条件为真,则执行外层循环的循环体,这一次循环执行到内层循环时,再进行内层循环的判断-循环,直到内层循环结束,然后外层循环继续这一次循环;当这一次循环结束时,外层循环继续执行下一次循环,执行到内层循环时,再进行内层循环的判断-循环;直到外层循环结束为止。

也就是说外层循环执行一次,内层循环完整地执行了一遍。外层循环执行多少次,内层循环就完整地执行多少遍。而外层循环只完整地执行一遍。

例如:4.10-打印矩形.py

# 循环的嵌套,打印由*组成的图形,矩形=底*高

bottom = int(input('请输入矩形的底:'))
height = int(input('请输入矩形的高:'))

# 外层循环作用:打印若干行
j = 0
while j < height:
    # 内层循环作用:打印一行的星号
    i = 0
    while i < bottom:
        print('*', end=' ')
        i += 1

    # 打印一个换行
    print()
    j += 1

如果使用for循环,代码比较简洁:

bottom = int(input('请输入矩形的底:'))
height = int(input('请输入矩形的高:'))

for i in range(height):
    for j in range(bottom):
        print('*', end=' ')
    print()

执行结果为:

请输入矩形的底:10
请输入矩形的高:5
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *

4.4.4 循环编程规范

循环的控制变量,可以使用简单的i,j来命名,可以不用遵守变量命名规范。

循环的条件判断一般使用<,>,而不使用<=,>=,这样可以避免边界值在其中的影响。

循环控制变量一般从0开始,结合上一条规则,最大取值为循环终值-1,循环的终值就是循环次数。