python中的循环结构

一、Python中循环

1、循环的种类

在Python中,循环一共分为两大类:while循环与for循环

思考问题:while循环和for循环如何选择呢?

① 对于循环次数已知的情况,建议使用while循环

② 对于循环次数未知的情况,建议使用for循环

二、while循环基本语法

1、while循环的基本语法

1
2
3
4
5
6
7
8
9
# ① 定义一个计数器(初始化一个计数器)
i = 0或1
# ② 编写while循环结构
while 循环条件(判断 计数器 是否达到了目标位置):
	循环体1
	循环体2
	...
	# ③ 在循环内部更新计数器
	i = i + 1 或 i += 1

总结:while循环三步走

① 初始化计数器

② 编写循环条件(判断计数器是否达到了目标位置)

③ 在循环内部更新计数器

2、while循环的执行流程

while循环流程图:

image-20210309103649130

3、编写循环式常见问题

1
2
3
4
5
6
7
i = 1
result = 0
while i <= 100:
    if i % 2 == 0:
        result += i
        i += 1
print(f'1~100之间所有偶数的和:{result}')

问题的原因:在于i += 1缩进了2次,导致其和if形成了一个整体。while循环中计数器无法更新,最终导致以上代码出现了死循环。

三、循环中的两大关键词

1、两大关键词

在Python循环中,经常会遇到两个常见的关键词:break 与 continue

break:代表终止整个循环结构

continue:代表中止当前本次循环,继续下一次循环

break关键字

情况一:如果吃的过程中,吃完第三个吃饱了,则不需要再吃第4个和第5个苹果,即是吃苹果的动作停止,这里就是break控制循环流程,即终止此循环。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 初始化计数器
i = 1
# 编写循环条件
while i <= 5:
    # 当变量i == 4的时候,终止循环
    if i == 4:
        print('我已经吃饱了,实在吃不下了...')
        break
        
    # 正在吃第几个苹果
    print(f'正在吃第{i}个苹果')
    
    # 更新计数器
    i += 1

continue关键字

情况二:如果吃的过程中,吃到第三个吃出一个大虫子…,是不是这个苹果就不吃了,开始吃第四个苹果,这里就是continue控制循环流程,即退出当前一次循环继而执行下一次循环代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 初始化计数器
i = 1
# 编写循环条件
while i <= 5:
    # 当变量i == 3的时候,中止当前循环,继续下一次循环
    if i == 3:
        # 手工更新计数器(非常重要)
        i += 1
        print('吃到了一只大虫子,这个苹果不吃了...')
        continue
        
    print(f'正在吃第{i}个苹果')
    # 更新计数器
    i += 1

2、死循环概念

在编程中一个靠自身控制无法终止的程序称为“死循环”。

在Python中,我们也可以使用while True来模拟死循环:

1
2
while True:
    print('你是风儿我是沙,缠缠绵绵到天涯')

四、while循环嵌套

1、循环嵌套的基本语法

编写一个简单的while循环结构

1
2
3
4
5
6
7
# 初始化计数器
i = 0  i = 1
# 编写循环条件
while i < 边界值:
    循环体代码
    # 更新计数器
    i += 1

所谓的while嵌套循环就是在while循环的基础上,把循环体代码更换为一层while循环,就组成了while嵌套循环。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 第一步:初始化外层循环计数器
i = 1
# 第二步:编写外层循环的条件
while i <= 3:
    # 第四步:初始化内层循环计数器
    j = 1
    # 第五步:编写内层循环的条件
    while j <= 3:
        循环体代码
    	# 第六步:更新内层循环计数器
    	j += 1
    # 第三步:更新外层循环计数器
    i += 1

结构如下:

image-20210309144900348

2、循环嵌套的执行流程

while循环嵌套执行流程口诀:在while循环嵌套的执行过程中,外层循环1次,内层循环N次。(时钟 => 分针和秒针,分针就相当于外层循环,秒针就相当于内层循环)

想具体了解while嵌套循环的执行流程,建议使用Debug调试。

循环嵌套的总次数 = 外层循环次数 * 内层循环次数

五、for循环基本语法

1、for循环基本语法

for循环结构主要用于(序列 => 字符串、列表、元组、集合以及字典)类型数据的遍历(循环)操作。

另外当循环次数未知的情况,建议使用for循环。

1
2
3
for 临时变量 in 序列:
    重复执行的代码1
    重复执行的代码2

2、range方法(函数)

Python2 range() 函数返回的是列表,而在Python3中 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。

主要作用:用于生成一段连续的内容,从0到9

基本语法:

1
2
3
4
5
6
range(stop)
range(start, stop[, step])

start: 计数从 start 开始默认是从 0 开始例如range5等价于range0 5;
stop: 计数到 stop 结束但不包括 stop例如range05  [0, 1, 2, 3, 4] 没有 5
step步长默认为1例如range05 等价于 range(0, 5, 1)

range有一个口诀:顾头不顾尾,包含头部信息,但是不包含尾部信息,如range(10),则返回0~9之间的序列,又比如range(0, 5)代表返回0 ~ 4之间的序列。

案例:for循环与range方法,使用for循环,循环5次

1
2
for i in range(5):
    print(i)

3、循环中的两大关键字

在循环结构中存在两个关键字:break和continue

break:主要功能是终止整个循环

continue:主要功能是中止当前循环,继续下一次循环

4、for循环嵌套

所谓for循环嵌套,就是一个for循环里面嵌套另外一个for循环的写法。

当循环结构相互嵌套时,位于外层的循环结构常简称为外层循环或外循环,位于内层的循环结构常简称为内层循环或内循环。

基本语法:

1
2
3
4
5
# 外层循环
for i in 序列1:
    # 内层循环
    for j in 序列2:
        循环体

六、while循环与for循环中的else结构

1、为什么需要在while循环中添加else结构

循环可以和else配合使用,else下方缩进的代码指的是当循环正常结束之后要执行的代码。

强调:‘正常结束’,非正常结束,其else中的代码时不会执行的。(如遇到break的情况)

2、while循环中else的基本语法

需求:女朋友生气了,要惩罚:连续说5遍“老婆大人,我错了”,如果道歉正常完毕后女朋友就原谅我了,这个程序怎么写?

答:使用while…else结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 初始化计数器
i = 0
# 编写循环条件
while i < 5:
    print('老婆大人,我错了')
	# 更新计数器
    i += 1
# 循环结束后,女朋友就原谅我了
else:
    print('好开森,女朋友原谅我了...')

3、break关键字对while…else结构的影响

如果我们在while循环中,使用了break,一旦break语句执行了,则else语句则不会输出。

4、continue关键字对while…else结构的影响

基本无影响,不会跳到else位置执行。

5、for循环结构中的else结构

基本语法:

1
2
3
4
for 临时变量 in 序列:
    循环体
else:
    当for循环正常结束后返回的代码

6、break关键字对for…else结构的影响

1
2
3
4
5
6
7
8
str1 = 'itheima'
for i in str1:
    if i == 'e':
        print('遇e不打印')
        break
    print(i)
else:
    print('循环正常结束之后执行的代码')

7、continue关键字对for…else结构的影响

1
2
3
4
5
6
7
8
str1 = 'itheima'
for i in str1:
    if i == 'e':
        print('遇e不打印')
        continue
    print(i)
else:
    print('循环正常结束之后执行的代码')