Skip to main content

Python 循环语句

本章详细讲解Python 中的循环语句中的 for 循环、for循环嵌套、while 循环、while循环嵌套、break语句、continue语句、循环子句else等。在 Python 中,循环语句的缩进非常重要,因为它定义了循环体的范围。循环语句还可以与条件语句结合使用,实现更加复杂的控制流程。

生活中的循环

循环就是指在满足某个条件或者是某组条件时重复执行,那么循环的场景在现实生活中也非常常见,例如在复联中钢铁侠的女儿对她说我爱你3000次,如果我们真的说3000次我爱你,其实还是挺难的,但是对于程序而言输出3000次我爱你,其实也是蛮简单的。

钢铁侠对女儿说爱你3000次

再比如重复的做一件事情,它也是一个循环,但是人类并不擅长做重复的事情,比如说因为外界的干扰或者是自身的原因,总会造成各种各样的失误,然而计算机恰恰相反,他们非常擅长做重复的工作,而且出错率极低。所以在现在的汽车生产线上,几乎全部是现代化自动化操作,每个机器只负责重复着特定的工作,最后再将其组装成一辆汽车。

重复性机械装配

所以说循环结构在生活和编程中都是非常的常见,也是非常的重要

while循环语句

本节我们先来介绍while循环,while循环语句用于重复执行代码块,直到指定的条件不再为真。

语法

while 判断条件:
执行语句

while循环的基本语法包括一个判断条件和一个执行语句的代码块。只要判断条件为真,循环就会一直执行。当判断条件为假时,程序会跳出循环。hile循环的判断条件可以是任何返回布尔值的表达式。例如,可以使用比较运算符(如<、>、<=、>=、==、!=)或逻辑运算符(如and、or、not)来构建条件。

实例:

实例1:使用while循环输出1到5的数字

num = 0
while num <3 :
print(num)
num += 1

输出结果:

0
1
2

为了大家更好的理解,那么我们来看一个动画,通过这个动画,我们可以更好的理解这个while循环它的运行原理,左面是我们的工作区,左侧绿色的箭头表示本行代码已经执行完毕,我们就来看一下这段代码是如何执行的

1-while循环-帮你解决重复性工作

实例2:使用while循环计算1到100的和

小高斯的故事大家可能都听过,他非常快的计算出了1一直加到100它的和,高斯是这样计算的,我先求首尾之和,也就是一和100的和是101,然后接着求第2个和最后第2个2+99,它的和还是101,以此类推,最后算出的结果就是101×50个,因为有50对,最终的结果就是5050,这就是高斯的计算方法。

高斯计算100之��和

但是对于计算机而言,而是非常的简单粗暴,不就是1加100求和吗?一个一个相加就可以了

num = 1
sum = 0
while num <= 100:
sum += num
num += 1
print("1到100的和为:", sum)

输出结果:

1到100的和为: 5050

我们来分析一下这个程序,刚开始i=1,上等于0,判断条件是i小于等于100,满足条件。此时的sum就是0+1,结果为1,然后我们用这个i自增1就变成了2,回到这里继续判断,2还是小于等于100的,满足条件,执行下面的代码块,sum就加上等于2,接下来再利用这个i+1,此时的i就变成了3,3还是小于100,继续执行下面的代码块,以此类推,当这个i=99的时候,它加上等于1变为100,100还是满足的,那么这个和就继续相加100,接下来i就变成了101,此时i=101,就不满足这个条件了,这个循环就退出了。

实例3:使用while循环实现猜数字游戏

import random
target = random.randint(1, 100)
print("猜数字游戏开始!")
while True:
guess = int(input("请输入一个1到100之间的数字:"))
if guess == target:
print("恭喜你,猜对了!")
break
elif guess < target:
print("猜小了,请再猜一次!")
else:
print("猜大了,请再猜一次!")

输出结果:

猜数字游戏开始!
请输入一个1到100之间的数字:50
猜大了,请再猜一次!
请输入一个1到100之间的数字:25
猜小了,请再猜一次!
请输入一个1到100之间的数字:37
猜小了,请再猜一次!
请输入一个1到100之间的数字:43
猜大了,请再猜一次!
请输入一个1到100之间的数字:40
恭喜你,猜对了!

实例4:使用while循环找出列表中的最大值

list = [10, 8, 12, 15, 6]
max_num = list[0]
index = 1
while index < len(list):
if list[index] > max_num:
max_num = list[index]
index += 1
print("列表中的最大值为:", max_num)

输出结果:

列表中的最大值为: 15

作业

作业一:使用while循环输出1到10之间的奇数

作业二:使用while循环计算1到100之间的偶数和

作业三:使用while循环找出字符串中的最大字符

作业四:使用while循环实现猜数字游戏,最多猜5次,如果没猜对则结束游戏

作业五:使用while循环输出1到100之间的质数

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

while循环嵌套

本节我们来介绍一下while循环嵌套,可以实现多层循环,也可以嵌套其他循环结构。它的形式就像下面这样

语法

while 判断条件1:
满足条件1做的事情
满足条件1做的事情
满足条件1做的事情
while 判断条件2:
满足条件2做的事情
满足条件2做的事情
满足条件2做的事情

其中,判断条件1、判断条件2、判断条件3等都是布尔表达式,只有为True时才会执行代码块。

好,下面我们通过一个实例来讲解一下while循环嵌套 看一下它是如何使用的 帮助初学者掌握该循环结构。

实例

实例1:输出九九乘法表

我们先来观察一下它的规律,同行和列的角度来看一下这个输出结果,在这个九九乘法表中,一共有九行,如果我们用循环表示的话 用一个变量i来表示,那么就是i从1~9,然后我们在分析列,对于每一行它的列数都是不一样的,比如说第一行1X1,他只有一列,第2行1X2得2,2X2得4,他有两列,第3行有三列,第6行当i等于6的时候,他最多就有6列,第7行就有7列。用一个变量j来表示列数的话,那么j它的取值范围就是从1到i。

99乘法表

i = 1
while i <= 9: # i控制行
j = 1
while j <= i: # j控制列
print(j, "*", i, "=", i*j, end="\t")
j += 1
print("\n") # 输完最后一列以后再换行
i += 1

在这个实例中,我们使用了两个while循环嵌套,其中外部循环控制行数,内部循环控制列数。每次内部循环结束后,我们使用print("\n")来换行。

输出结果:

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

作业

作业一:使用while循环嵌套输出以下图形:

*
**
***
****
*****

作业二:使用Python while循环嵌套输出以下图形:

    *
***
*****
*******
*********

作业三:使用Python while循环嵌套输出以下图形:

*********
*******
*****
***
*

作业四:使用while循环嵌套输出以下图形:

    *
***
*****
*******
*********
*******
*****
***
*

作业五:使用while循环嵌套输出100以内的质数。

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

for循环语句

本节课我们来介绍Python的另一个循环for循环,for循环主要用于遍历任何有序的序列对象内的元素,for循环通常用于遍历序列中的元素,例如列表、元组、字符串等。

语法

for 变量 in 序列:
循环体语句

其中,变量是一个临时变量,用于存储序列中的每个元素。序列可以是列表、元组、字符串等可迭代对象。循环体语句是需要重复执行的代码块,可以是任意有效的Python代码。else语句是可选的,用于在循环结束后执行一些操作。

具体来说,for循环语句的执行流程如下:

  1. 从序列中取出第一个元素,将其赋值给变量;
  2. 执行循环体语句;
  3. 从序列中取出下一个元素,将其赋值给变量;
  4. 重复执行步骤2和步骤3,直到序列中的所有元素都被处理完毕;
  5. 如果for循环语句带有else语句,则执行else语句;否则直接结束循环。

实例

实例1: 遍历字符串

for i in 'Hello, world!':
print(i)

输出结果:

H
e
l
l
o
,

w
o
r
l
d
!

实例2: 遍历列表

names = ['daxiong', 'andy', 'xiaoxiong']
for item in names:
print(item)

输出结果:

daxiong
andy
xiaoxiong

实例3: 遍历元组

languages = ('Python', 'Java', 'C++')
for lang in languages:
print(lang)

输出结果:

Python
Java
C++

for循环语句常用的函数如下:

1.range函数

range函数是一个常用的生成序列的函数,可以用于for循环语句中。它的语法格式如下:

range(start, stop[, step])

其中,start是序列中的起始值,stop是序列中的终止值,step是序列中的步长。start和step是可选的,默认值分别为0和1。

range函数用法

实例4:for循环运行原理

for i in range(3):
print(i)
print(i*'大熊')

输出结果:

0

1
大熊
2
大熊大熊

我们使用一个动画来看一下for循环它的运行原理,首先执行for循环将range 3依次赋值给变量i,第1个值i应该是0,所以输出print i,他的结果是0,然后执行下面的语句,以print i X 大熊,由于0×以任何数结果都是0,所以他最终还是空格,程序继续执行,此时range输出的值是1,将这个1赋值给i,然后再运行,print i这里的结果就是1。继续执行print,1×i输出一个大熊,以此类推。 直到range中已经没有值了,所以他不会再赋值,我们的循环,就这样结束了 。这就是for循环的工作原理

for

实例5:使用for循环输出10以内的奇数

for i in range(1, 10, 2):
print(i)

输出结果:

1
3
5
7
9

实例6:使用for循环计算1-100之和

sum = 0
for i in range(1, 101):
sum += i
print("1-100之和为:", sum)

输出结果:

1-100之和为: 5050

2.enumerate函数

enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,常用于循环遍历并需要知道当前元素位置的情况。

语法

enumerate(sequence,[start=0])

参数说明:

  • sequence:一个序列、迭代器或其他支持迭代的对象。
  • start:下标起始位置,默认为0。

实例

实例7:遍历列表,并输出元素及其下标

names = ['大熊', 'andy', '小熊']
for index, name in enumerate(names):
print(index, name)

输出结果:

0 大熊
1 andy
2 小熊

实例8:遍历字符串,并输出字符及其下标

word = 'Hello'
for index, char in enumerate(word):
print(index, char)

输出结果:

0 H
1 e
2 l
3 l
4 o

作业

作业一: 输出1到100之间的所有奇数。

作业二: 输出1到100之间能被3整除的数。

作业三: 输出1到10之间的所有数字的平方。

作业四: 求1到100之间所有数字的和。

作业五: 输出一个倒序的字符串。

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

for循环嵌套

本节我们来学习for循环嵌套,for循环嵌套是指在一个for循环中嵌套另一个for循环。嵌套的for循环可以帮助我们遍历多维数组或列表等复杂的数据结构,从而更加方便地进行数据处理。

语法

for 赋值目标1 in 遍历对象1:
对赋值目标1进行操作
for 赋值目标2 in 遍历对象2:
对赋值目标2进行操作

在for循环嵌套中,内层循环会在外层循环的每次迭代中执行一遍。也就是说,内层循环会先完整地执行一遍,然后才会进入外层循环的下一次迭代。

实例

实例1:使用for循环嵌套输出九九乘法表

for i in range(1,10):    
for j in range(1,i+1):
print(i,"*",j,'=',i*j,end=' ')
print('\n')

使用for循环嵌套来实现这个例子,同样的用i来表示行,用j来表示列。i的范围应该是从1开始到9,注意这里我需要填写10 。j的范围应该从1到当前的行数也就是i+1,输出完本行,接着再来一个换行符,也就是说将这一行中的所有列全部遍历结束,然后使用换行。

输出结果:

1 * 1 = 1  

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9

4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16

5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25

6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36

7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49

8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64

9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

实例2:使用for循环嵌套遍历一个二维列表:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for row in matrix:
for num in row:
print(num, end=' ')
print()

输出结果:

1 2 3 
4 5 6
7 8 9

在上面的示例中,我们使用了两层for循环,外层循环遍历了二维列表的每一行,内层循环遍历了每一行中的每一个元素。

作业

作业一:使用for循环嵌套输出一个九九乘法表。

作业二:使用for循环嵌套统计一个二维列表lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]中所有元素的和。

作业三:使用for循环嵌套计算一个三维列表lists=[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]中所有元素的平均值。

作业四:使用for循环嵌套找出一个字符串s = 'hello, world!'中出现次数最多的字符。

作业五:使用for循环嵌套将一个列表lists = [1, 2, 3, 4, 5]中的每一个元素都乘以2。

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

break语句

本节我们来学习break语句,前面我们已经介绍了使用while循环和for循环来实现循环结构,但是呢,有的时候我们并不需要遍历所有的结果,而是在找到预期目标以后就终止循环 。Python中的break语句用于在循环中提前结束循环,即跳出循环体。它通常用于在满足某个条件时停止循环。

break跳出循环

语法

while expression:
statement(s)
if expression:
break

其中expression是一个条件,当它为True时,循环会继续执行,否则,循环会退出。statement(s)是循环体中的语句,如果break语句被执行,循环体中break之后的语句将不再执行。

实例

实例1:猜数字小游戏

下面我们来编写一个猜数字的游戏来体会一下提前退出循环的情况。猜数字这个游戏它的规则入下图

猜数字小游戏

# 目标数字
secret_number = 8
# 最多次数
guess_limit = 3
# 用户已经猜测次数
guess_count = 0

while guess_count < guess_limit:
guess = int(input('请输入0-9之间的数字:'))
guess_count += 1
if guess == secret_number:
print('恭喜你,你赢了')

输出结果:

请输入0-9之间的数字:8
恭喜你,你赢了
请输入0-9之间的数字:5
请输入0-9之间的数字:6

我们发现这段代码有个问题,就是你已经猜中了,程序还会继续执行,还需要你再次输入。这显然是不符合逻辑的。所以,当用户已经猜中了,程序就要退出循环,不应该再执行了。这时就需要用到我们本节要讲解的内容——break 跳出循环。

加入break语句的优化后代码:

# 目标数字
secret_number = 8
# 最多次数
guess_limit = 3
# 用户已经猜测次数
guess_count = 0

while guess_count < guess_limit:
guess = int(input('请输入0-9之间的数字:'))
guess_count += 1
if guess == secret_number:
print('恭喜你,你赢了')
break

print('游戏结束')

输出结果:

请输入0-9之间的数字:8
恭喜你,你赢了
游戏结束

作业

作业一:使用while循环和break语句找到1到100之间的第一个能被17整除的数。

作业二:使用for循环和break语句找到1到100之间能被7整除的数,并输出前5个。

作业三:使用while循环和break语句找到第一个斐波那契数列中大于100的数。

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

循环嵌套break语句

break 语句可以退出循环,那么如果有循环嵌套的时候,它退出的是哪个循环结构呢?我们用代码来检测一下。找到我们之前九九乘法表的代码,如果我在里层for 循环中添加一个break退出,程序只是跳出里层的循环嵌套还是跳出整个循环呢?

实例1:里层for循环里面加一个break退出语句。

for i in range(1,10):
for j in range(1,i+1):
if j == 5: # 也就是到第5列的时候,退出
break
print(i,"*",j,'=',i*j,end=' ')
print('\n')

输出结果:

1 * 1 = 1  

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9

4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16

5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20

6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24

7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28

8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32

9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36

在介绍九九乘法表时,我们说过,i 表示行数,j 表示列数,里层循环是遍历每一行的所有列。我们现在把它设置为如果j== 5 ,就退出,意思就是输出到第5列的时候,退出循环。所以,从1*5开始,后面就没有第5列了。但是,程序只是退出了里层的for循环,并不影响外面的for 循环继续执行下一行。

实例2:在外层循环添加break语句

for i in range(1,10):
if i == 5:
break
for j in range(1,i+1):
print(j,"*",i,'=',i*j,end=' ')
print('\n')

输出结果:

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

i 表示行,当行数等于5时,程序就退出了。所以结果只显示了5行数数据。

从这个例子中,我们可以看出,break语句只对最近的一层循环起作用。当他在里层的时候,最近的是里层的循环,跳出的是里层循环。当它在外成的时候,跳出了外层的循环。

continue语句

本节我们学习continue语句。在Python 中,还有一个跳出循环的语句,就是continue语句,那么它与break有什么区别呢?continue的功能,没有那么强大,它不能直接跳出当前的循环体,它只能够跳过本次循环。

语法

continue跳出本次循环

实例

实例1:买房子挑选楼层

为了大家更好的理解continue语句,我们还是用代码来说明。我的一个朋友,思想比较保守封建,他在买房子的选楼层的时候,就是不买4层,14成和18层。他觉得不吉利。我们就用continue语句过滤掉这些楼层。

for i in range(1,24):  # 总楼层23层
if i == 4 or i == 14 or i == 18:
continue
print('第',i,'楼可以买')

输出结果:

第 1 楼可以买
第 2 楼可以买
第 3 楼可以买
第 5 楼可以买
第 6 楼可以买
第 7 楼可以买
第 8 楼可以买
第 9 楼可以买
第 10 楼可以买
第 11 楼可以买
第 12 楼可以买
第 13 楼可以买
第 15 楼可以买
第 16 楼可以买
第 17 楼可以买
第 19 楼可以买
第 20 楼可以买
第 21 楼可以买
第 22 楼可以买
第 23 楼可以买

从这个例子中,可以看出,continue 语句只是跳过了本次循环,比如这里,i从1开始,当i= 4的时候,遇到continue,不执行了,跳过了下面的语句。直接开始下一次循环了。

实例2:输出1-10中的奇数

for i in range(1, 11):
if i % 2 == 0:
continue
print(i)

输出结果为:

1
3
5
7
9

在上面的实例中,当i为偶数时,执行continue语句,跳过下面的print语句,进入下一次循环,直到i为奇数时,执行print语句。

对比continue和break

下面我们来对比一下continue和break,它们之间有哪些区别?我们先来看break,当循环结构中出现break的时候,程序是这样执行的,if条件满足,碰到break它会跳出当前这个循环体,继续执行循环体外面的代码。 continue和break对比

下面我们来看一下continue语句,看一下它是如何执行的,在循环体中当if语句满足条件的时候,执行continue语句,continue它没有跳出本层循环,它会跳过后面的代码,而继续执行判断条件,依然是在while循环以内继续判断while条件,也就是说continue它跳过的是本层循环,而break呢,跳过的是整个循环体。总结一下:

  1. 执行顺序不同:break会立即跳出整个循环,而continue只是跳过本次循环,然后继续执行下一次循环。

  2. 作用范围不同:break作用于包含它的整个循环体,而continue只作用于包含它的当前循环。

  3. 目的不同:break的目的是提前结束循环,而continue的目的是跳过某些不需要处理的循环迭代。

作业:

作业一:使用continue语句输出1-10中的偶数

作业二:使用continue语句输出50-100中的能被3整除的数

作业三:输出100之内的所有数,但是遇到能被3整除的数就输出“该数能被3整除”,遇到能被5整除的数就输出“该数能被5整除”,遇到既能被3整除又能被5整除的数就输出“该数能被3和5整除”

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

循环子句else

本节我们向大家介绍循环的另一种形式:Python循环子句else,它包括while else,for else。在介绍if语句的时候我们有if else,if else是在很多语言中都存在,但是像while else和for else,在其他语言中是不存在的,这也是Python的一个特点 。

语法:

for 变量 in 序列:
# 正常循环执行的代码块
else:
# 循环正常结束时执行的代码块

while 条件:
# 正常循环执行的代码块
else:
# 循环正常结束时执行的代码块

else 子句只在循环正常结束时执行,如果循环被 break 语句中断,else 子句将不会执行。

  1. while循环子句else

实例

实例1:使用while-else实现猜数字小游戏

我们再来通过猜数字游戏的代码,来介绍一下while-else的使用。用户在3次以内猜中,提示用户成功。可是如果输入3次了,都没与才对,程序并没有提示用户失败。要实现这个功能,我们来编写一个程序,实现这个功能。我们可以使用一个标识符来表示如果是否成功。如果成功,标识符设置为True,否则标识符为False。最后判断标识为False,就可以输出用户状态了。

# 目标数字
secret_number = 8
# 最多次数
guess_limit = 3
# 用户已经猜测次数
guess_count = 0
flag = False

while guess_count < guess_limit:
guess = int(input('请输入0-9之间的数字:'))
guess_count += 1
if guess == secret_number:
flag = True
break

if flag:
print('恭喜你,你赢了')
else:
print('抱歉,你输了')

print('游戏结束')

while-else语句优化后的代码

# 目标数字
secret_number = 8
# 最多次数
guess_limit = 3
# 用户已经猜测次数
guess_count = 0

while guess_count < guess_limit:
guess = int(input('请输入0-9之间的数字:'))
guess_count += 1
if guess == secret_number:
print('恭喜你,你赢了')
break
else:
print('抱歉,你输了')
print('游戏结束')

如果我们的代码中,没有break语句,例如循环输出1到5,这时再来试一下while-else语句。代码如下

i = 1
while i <= 5:
print(i)
i += 1
else:
print('输出完成')

输出结果:

1
2
3
4
5
输出完成

因为while循环里没有break ,正常退出了,所以,它也会输出最后的else下的内容。也就是等价于

i = 1
while i <= 5:
print(i)
i += 1

print('输出完成')

所以,这种情况就没有必要使用else语句了,以避免让阅读代码的人犯糊涂。

  1. for循环子句else

以上是在使用while-else的情况,而使用for-else基本也是一样的。

实例1:

names = ['大熊', 'andy', '小熊']
for name in names:
if name == '课堂':
print('找到了课堂!')
break
else:
print('没有找到课堂!')

输出结果是:

没有找到课堂!

在这个例子中,我们遍历了一个names列表,当列表中没有课堂时,循环正常结束,执行了 else 子句。

  1. 总结while-else和for-else使用场景

什么时候使用while-else 或者是for-else?假设你正在搜索满足特定条件的项目,并且如果找不到目标值,则需要执行其他处理或抛出错误:就像这样

for x in data:
if meets_condition(x):
break
else:
# raise error or do additional processing

如果没有else子句,你需要设置一个标志,然后稍后检查以查看是否满足条件的任何值,就像下面这样

condition_is_met = False
for x in data:
if meets_condition(x):
condition_is_met = True

if not condition_is_met:
# raise error or do additional processing

作业:

作业一:使用 for 循环和 else 子句,遍历一个numbers = [1, 3, 5, 7, 9, 10, 11]的列表,找到其中的偶数并输出。如果没有找到偶数,输出一条提示信息。

作业二:使用 while 循环和 else 子句,计算 1 ~ 100 中所有奇数的和,并输出结果。

作业三:使用 for 循环和 else 子句,遍历一个strings = ['apple', 'banana', 'pear', 'orange', 'watermelon']的列表,找到其中长度大于等于 5 的字符串并输出。如果没有找到符合条件的字符串,输出一条提示信息。

作业四:使用 while 循环和 else 子句,计算 1 ~ 100 中所有能被 3 整除的数的积,并输出结果。

作业五:使用 for 循环和 else 子句,遍历一个包含字典的如下列表,找到其中年龄大于等于 18 岁的人并输出其信息。如果没有找到符合条件的人,输出一条提示信息。

people = [
{'name': 'Andy', 'age': 15},
{'name': 'JackMa', 'age': 20},
{'name': 'daxiong', 'age': 17},
{'name': '小熊', 'age': 22}
]

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

while和for区别

本节我们学习一下while循环和for循环的区别,我们在编程的时候我发现用while循环可以实现,用for循环还是可以实现 那么while循环和for 循环它们之间的区别是什么呢?我又该在什么时候选择使用for循环,什么时候使用while循环呢?本节我们就来介绍一下for循环和while循环的区别,以及在什么情况下使用for循环和while循环。

  1. for循环 VS while循环的区别

for循环和while循环的区别

总结如下:

  • for循环需要迭代次数固定,while循环迭代次数不固定

  • for循环使用计数器(range函数),while循环需要手动初始化计数器并在循环过程中变化

  • for循环可用while循环重写,但有些无限迭代的while循环无法用for循环重写

  1. while和for具体应该怎么选择

那么我们在哪种情况使用for循环,什么时候使用while循环呢?

  • 使用for循环

​ 通常来说,如果你只是遍历一个已知的集合,这个集合可以是一个字符串,一个列表,一个元组,一个字典等等,然后在这个集合中找 出满足的条件,并且进行相应的操作,那么使用for循环会更加简洁。

  • 使用while循环

但是如果你需要在满足某个条件前,不停的重复某些操作,并且没有特定的集合需要去遍历,那么一般会使用while循环。

  1. for循环和while循环效率对比

实例1:while循环效率

import time
start = time.perf_counter()# 开始时间
i=0
while i < 100000000:
i += 1
end = time.perf_counter()# 结束时间
print(end-start)

输出结果:

16.91448930100887

实例2:for循环效率

import time
start = time.perf_counter()# 开始时间
for i in range(0,100000000):
pass
end = time.perf_counter() # 结束时间
print(end-start)

输出结果:

2.8271743500081357

while循环我们用了16.9秒钟,for循环用了2.8秒,相差14.1秒钟。从这个例子中我们可以看出使用for循环运行的时间更短,这是因为我们使用这个range函数,它是直接用c语言编写的,因为我们使用的Python解释器就是由c语言编写的,所以range函数直接用c语言编写,它的速度就更快。而我们使用的while循环这里的+=1这个操作,它是通过Python的解释器间接的调用c源代码,并且这个操作又涉及了对象的创建和删除等等底层操作,所以它的运行效率更低 。通过这两个例子我们可以看出for循环的效率更胜一筹。