个人主页:丷从心
系列专栏:Python基础
学习指南:Python学习指南
什么是循环
- 程序中需要重复执行的代码,可以通过循环实现
- 比如和女朋友道歉,说一万遍“宝宝,我错了”,在没有学习循环之前,我们只能通过如下方式实现
print('宝宝, 我错了')
print('宝宝, 我错了')
print('宝宝, 我错了')
# 此处省略 9997 行 print('宝宝, 我错了')
- 在学习循环之后,就能使用几行代码实现
i = 0
while i < 10000:
print('宝宝, 我错了')
i += 1
Python
中的循环方式
- 在
Python
中只有两种循环方式while
循环for
循环
while
循环
格式
while 条件:
条件为真时, 需要运行的代码
示例
i = 0
while i < 5:
print('-' * 15)
print(f'这是第 {
i + 1} 次循环')
print(f'此时 i 的值为 {
i}')
i += 1
---------------
这是第 1 次循环
此时 i 的值为 0
---------------
这是第 2 次循环
此时 i 的值为 1
---------------
这是第 3 次循环
此时 i 的值为 2
---------------
这是第 4 次循环
此时 i 的值为 3
---------------
这是第 5 次循环
此时 i 的值为 4
- 执行过程
- 首先判断
i < 5
成立,因为最开始i = 0
,然后执行while
循环内部的代码 - 打印这是第
i + 1
次循环以及当前i
的值 - 然后对变量
i
进行加 1 1 1操作(注意Python
语言中没有i++
操作,只能使用i += 1
或i = i + 1
),第一次循环结束时i
的值变为 1 1 1,然后继续判断i < 5
是否成立,如果成立则进入下一次循环 - 当
i += 1
后i
的值变为 5 5 5时,之后再对条件i < 5
进行判断,此时条件i < 5
不成立,循环结束
- 首先判断
应用
- 计算区间 [ 1 , 100 ] [1 , 100] [1,100]内偶数的累积和
sum = 0
i = 1
while i <= 100:
if i % 2 == 0:
sum += i
i += 1
print(f'区间 [1, 100] 内偶数的累积和为 {
sum}')
区间 [1, 100] 内偶数的累积和为 2550
- 可以看到,
while
语句中可以包含if
判断语句,对一定的条件进行判断
while
循环嵌套
while
循环内部代码可以包含while
循环,称为循环嵌套
示例 1 1 1
- 打印如下图形
*
* *
* * *
* * * *
* * * * *
i = 1
while i <= 5:
j = 1
while j <= i:
print('* ', end='')
j += 1
print() # 用于换行
i += 1
*
* *
* * *
* * * *
* * * * *
示例 2 2 2
- 打印九九乘法表
i = 1
while i <= 9:
j = 1
while j <= i:
print(f'{
j}*{
i}={
j * i}\t', end='')
j += 1
print() # 用于换行
i += 1
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
for
循环
- 像
while
循环一样,for
也可以完成循环功能 for
循环可以遍历任何序列数据类型,如string
、list
、tuple
、dict
、set
等数据类型
格式
for 临时变量 in 可迭代对象:
满足循环条件时, 需要运行的代码
- 至于什么是可迭代对象,将在迭代器章节进行讲解
示例
- 循环输出 0 0 0到 4 4 4
for i in range(5):
print(i)
0
1
2
3
4
内置函数range
的用法
range
函数用于生成一个range
类型生成器,可以理解为生成一个列表,至于什么是生成器,将在生成器章节进行讲解
range(x)
- 当使用 1 1 1个参数调用
range()
时,range(x)
返回 0 0 0, 1 1 1, ⋯ \cdots ⋯, x − 1 x - 1 x−1,for
循环对这些数据逐个进行提取,保存到临时变量中
for i in range(5):
print(i)
0
1
2
3
4
- 输出 0 0 0到 4 4 4,不包含 5 5 5
range(x, y)
- 当使用 2 2 2个参数调用
range()
时,range(x, y)
返回 x x x, x + 1 x + 1 x+1, ⋯ \cdots ⋯, y − 1 y - 1 y−1
for i in range(5, 10):
print(i)
5
6
7
8
9
- 输出 5 5 5到 9 9 9,不包含 10 10 10
range(x, y, z)
- 当使用 3 3 3个参数调用
range()
时,range(x, y, z)
返回从 x x x到 y − 1 y - 1 y−1的数据,以 z z z为步长,即每隔 z z z取一个数据
for i in range(1, 10, 2):
print(i)
1
3
5
7
9
- 步长 z z z可以为负数,此时需要 x x x大于 y y y
for i in range(10, 1, -2):
print(i)
10
8
6
4
2
应用
- 计算区间 [ 1 , 100 ] [1 , 100] [1,100]内整数的累积和
sum = 0
for i in range(1, 101):
sum += i
print(f'区间 [1, 100] 内整数的累积和为 {
sum}')
区间 [1, 100] 内整数的累积和为 5050
break
与continue
- 在循环的过程中,有时会因为某些条件成立或不成立而需要结束整个循环,或结束当前一次循环
break
用于结束整个循环,continue
用于结束本次循环
break
break
不能单独使用,只能在循环内部使用
while
循环中的break
未使用break
i = 0
while i < 5:
print(i)
i += 1
0
1
2
3
4
使用break
i = 0
while i < 5:
if i == 3:
break
print(i)
i += 1
0
1
2
- 当循环变量
i
增加到 3 3 3时,此时继续循环会判断i
的值是否等于 3 3 3,如果是则执行break
,结束整个循环,所以 3 3 3和 4 4 4没有被打印
for
循环中的break
url = 'www.baidu.com'
for char in url:
if char == '.':
break
print(char)
w
w
w
continue
continue
不能单独使用,只能在循环内部使用
while
循环中的continue
i = 0
while i < 5:
i += 1
if i == 3:
continue
print(i)
1
2
4
5
- 当循环变量
i
增加到 3 3 3时,之后会判断i
的值是否等于 3 3 3,如果是则执行continue
,结束本次循环,后面的print(i)
语句没有被执行,所以 3 3 3没有被打印,然后进入下一次循环
for
循环中的continue
url = 'www.baidu.com'
for char in url:
if char == 'w':
continue
print(char)
.
b
a
i
d
u
.
c
o
m
break
与continue
在循环嵌套中的使用
- 当在循环嵌套中使用
break
和continue
时会发生什么呢?
未使用break
i = 0
while i < 3:
print(i)
j = 0
while j < 3:
print(f'({
i}, {
j})')
j += 1
i += 1
0
(0, 0)
(0, 1)
(0, 2)
1
(1, 0)
(1, 1)
(1, 2)
2
(2, 0)
(2, 1)
(2, 2)
使用break
i = 0
while i < 3:
print(i)
j = 0
while j < 3:
if j == 1:
break
print(f'({
i}, {
j})')
j += 1
i += 1
0
(0, 0)
1
(1, 0)
2
(2, 0)
- 可以看到当循环变量
j
的值为 1 1 1时,内层while
循环终止,外层while
循环仍继续运行
使用continue
i = 0
while i < 3:
print(i)
j = 0
while j < 3:
j += 1
if j == 1:
continue
print(f'({
i}, {
j})')
i += 1
0
(0, 2)
(0, 3)
1
(1, 2)
(1, 3)
2
(2, 2)
(2, 3)
- 可以看到当循环变量
j
的值为 1 1 1时,内层while
循环的当前一次循环终止,外层while
循环仍继续运行
总结
break
用于结束整个循环,只对它所在的循环内部起作用continue
用于结束本次循环,只对它所在的循环内部起作用
循环中的else
语句
else
语句可以搭配循环进行使用,当循环并没有因为break
终止时,在循环结束后会执行else
语句中的代码
while
循环中的else
当循环没有因为break
而终止时
i = 0
while i < 5:
print(i)
i += 1
else:
print('循环结束')
0
1
2
3
4
循环结束
- 可以看到,在整个
while
循环运行过程中并没有因为break
而终止,当while
循环结束后,执行了else
语句
当循环因为break
终止时
i = 0
while i < 5:
if i == 3:
break
print(i)
i += 1
else:
print('循环结束')
0
1
2
- 可以看到,
while
循环因为break
而终止,else
语句并没有被执行
for
循环中的else
当循环没有因为break
而终止时
for i in range(5):
print(i)
else:
print('循环结束')
0
1
2
3
4
循环结束
当循环因为break
终止时
for i in range(5):
if i == 3:
print('要 break 喽 ~')
break
print(i)
else:
print('循环结束')
0
1
2
要 break 喽 ~