Python 中 的 for 循 环
语法
Python for循环可以遍历任何 序列 的项目,如一个列表或者一个字符串。
for循环的语法格式如下:
for <变量> in <序列>:
<循环体>
[else:
<语句块>]
for语句通过遍历序列中的元素实现循环,序列中的元素会被依次赋值给变量,然后执行一次循环体。当序列中的元素全部遍历完时,程序会自动退出循环,继续执行else子句中的语句块(该else子句可选)。- 若循环过程中执行了循环体中的
break语句,则程序会中途退出for语句,转而去执行for语句后面的语句(即使有else子句,该子句也不会被执行)。
嵌套
Python 语言允许在一个循环体里面嵌入另一个循环。
与for嵌套
在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。
for num in range(10,20): # 迭代 10 到 20 (不包含) 之间的数字
for i in range(2,num): # 根据因子迭代
if num%i == 0: # 确定第一个因子
j=num/i # 计算第二个因子
print ('%d 等于 %d * %d' % (num,i,j))
break # 跳出当前循环
else: # 循环的 else 部分
print ('%d 是一个质数' % num)
输出:
10 等于 2 * 5
11 是一个质数
12 等于 2 * 6
13 是一个质数
14 等于 2 * 7
15 等于 3 * 5
16 等于 2 * 8
17 是一个质数
18 等于 2 * 9
19 是一个质数
与while嵌套
i = 0
while i<10:
for j in range(10):
print("i=",i," j=",j)
i=i+1
可以看到,这段程序中,外循环使用的是 while 语句,而内循环使用的是 for 语句。
-
一开始 i=0,循环条件 i<10 成立,进入 while 外循环执行其外层循环体;
-
从 j=0 开始,由于 j <10 成立,因此进入 for 内循环执行内层循环体,直到 j=10 不满足循环条件,跳出 for 循环体,继续执行 while 外循环的循环体;
-
执行 i=i+1 语句,如果 i<10 依旧成立,则从第 2 步继续执行。直到 i<10 不成立,则此循环嵌套结构才执行完毕。
根据上面的分析,此程序中外层循环将循环 10 次(从 i=0 到 i=9),而每次执行外层循环时,内层循环都从 j = 0 循环执行到 j = 9。因此,该嵌套循环结构将执行 10*10 = 100 次。
嵌套循环执行的总次数 = 外循环执行次数 * 内循环执行次数
外循环用for,内循环用while,行不行呢?可以观查一下下面这段代码
点击查看
for j in range(10):
while j>5:
print(" j=",j)
break
j=j+1
(显然这段代码如果没有break会完全停在那句print里永远输出j=6…… 似乎在循环内部实现“当什么成立时”,用if更简单)
例:九九乘法表
要输出一个9×9的三角形区域,显然该区域的每一行、每一列都需要依次递增。
在第一行(i=1),第一列(j=1),输出算式:1×1=1 【换行】
在第二行(i=2),第一列(j=1),输出算式:1×2=2,第二列(j=2),输出一个算式:2×2=4 【换行】
… …
显然,在每一行(i)中,列(j)总是从 1 ~ i 依次遍历。输出完整一行后,再【换行】,刷新i的值,进入下一行。
因此,使用 i 表示外循环变量,使用 j 表示内循环变量。并且内循环结尾不应是换行。
此处,就可以使用end=' ',将j表示的内循环输出的每一个乘法算式的结尾设置为一段空格。
最后,使用f-string格式化输出算式,使用\t让所有的算式通过制表符对齐。
因此,我们可以将代码书写为:
for i in range(1, 10):
for j in range(1, i+1):
print(f'{j}x{i}={i*j}\t', end='')
print()
其输出结果为:

常用拓展
range函数
语法
range(start, stop[, step])
参数说明
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为 1 。例如:range(0, 5) 等价于 range(0, 5, 1)
用法
>>>range(10) # 从 0 开始到 9
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 从 1 开始到 10
[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)
[]
end=''的作用
代码print(num,end=' ')中的end=' '表示将print()函数的结束值设置为一个空格。
这样,下一次对print()的调用结果将会直接从空格的右边开始。而print()函数默认以换行符作为其结束值。
name = '我是一句话'
for a in name:
print(a,end="!")
思考,这串代码会输出什么?
点击查看?
我!是!一!句!话!
利用这一特性,可以自由调整for循环输出的内容格式。
f-string格式化输出
使用摘录
- f-string用大括号 {} 表示被替换字段,其中直接填入替换内容
- f-string的大括号 {} 可以填入表达式或调用函数,Python会求出其结果并填入返回的字符串内
- 其他使用请参考链接:Python格式化字符串f-string
>>> name = 'Eric'
>>> f'Hello, my name is {name}'
'Hello, my name is Eric'
>>> number = 7
>>> f'My lucky number is {number}'
'My lucky number is 7'
>>> price = 19.99
>>> f'The price of this book is {price}'
'The price of this book is 19.99'
参考连接
- 菜鸟教程 https://www.runoob.com/python/python-for-loop.html``
- Python格式化字符串f-string f"{}{}{}"详细介绍 https://blog.csdn.net/yizhuanlu9607/article/details/89530982
- 循环语句详解 https://blog.csdn.net/qq_32727095/article/details/118903653

浙公网安备 33010602011771号