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()

其输出结果为:
image

常用拓展

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'

参考连接

posted @ 2024-12-25 16:25  HERSHY2331  阅读(1076)  评论(0)    收藏  举报