Python基础语法-for循环和while循环

章节六:for循环和while循环

今天,我们要学习的主题是【循环】。循环的意思是:把一件事重复执行很多遍

image.png-59.6kB

每个人的生活和工作都充满了循环,很多时候,循环意味着重复和枯燥。比如你要手动输入200个员工的个人信息,比如她要一遍一遍地给不认真的人费劲口舌解释同样的事情,又比如他一成不变、如同一潭死水般的生活。

一成不变的生活终归需要你自己去打破循环,但工作的事,就大可让计算机帮一帮我们了。与人类不同,计算机不怕苦也不怕累,无聊的事情可以重复上千遍,只要能追寻到你想要的答案。

这恰恰就是编程解放人类的地方。比如你需要下载很多很多张图片,本来你是要手动操作的,而计算机通过【循环】,就可以依照某些规则,帮你一张一张地下载图片,你在一旁歇着就好。计算机干重复性的工作比你拿手。

再比如作为运营,可能需要去解散很多的用户群,本来要一个一个手动点击,而计算机通过【循环】,就可以依照某些规则,帮人一个一个解散。计算机干重复性的工作比你省力。

现在你再看“循环”这两个字,是不是跟开始不太一样了?

为什么计算机就特别擅长做重复性工作呢?注意,是“超擅长、速度超快”,而不只是“能干活、不抱怨”。

究其原理,其实是因为代码中的【循环语句】,让计算机能够重复性地、自动地执行指令

image.png-65.2kB

要实现“重复、自动地执行代码”,有两种循环语句可供我们选择使用:一种是for...in...循环语句,另一种是while循环语句。

1. for...in...循环语句

先看一段最简单的for循环代码,了解它的格式:

image.png-69.2kB

image.png-96.8kB

终端上依次出现了列表里的所有数字,对吧?我们用大白话来打个比方,以便更好地理解这段代码的意义:

image.png-90kB

for i in [1,2,3,4,5]:
   print(i)

#有一群数字在排队办业务,也就是列表[1,2,3,4,5]
#它们中的每一个被叫到号的时候(for i in),就轮流进去一个空房间办业务
#每一个数字进去房间之后,都对计算机说:“喂,我要办这个业务:帮忙把我自己打印出来”,也就是print(i)
#然后计算机忠实的为每一个数字提供了打印服务,将1,2,3,4,5都打印在了屏幕上

for循环的3个要点即是:1.空房间;2.一群等着办业务的人;3.业务流程

1.1 for循环:空房间

for i in [1,2,3,4,5]:  #i是“空房间”
   print(i)

空房间的学名叫【元素】(item),你可以把它当成是一个变量。那么首先,我们需要给房间取一个名字,也就是“变量名”。

为什么我总是用i?因为英文是item,所以i是常用名嘛。但其实你给这个房间取什么名字都行。

image.png-135.4kB

是不是三种结果都一样?这就对啦,不必拘束姓名。

在for循环结束之后,我们还能使用这个房间,不过这时候房间里的人是谁呢?请运行代码体验一下:

image.png-154.3kB

原来,业务结束之后,最后一个走进去的5留在了房间里,被打印了出来。

1.2 for循环:一群排队办业务的人

我们刚刚看到的“一群排队办业务的人”,都是以列表的形式出现:[1,2,3,4,5]。还有哪些数据类型也属于“一群排队办业务的人”呢?

我觉得你已经猜到了,就是字典。

image.png-120.7kB

我们用print(i)把“空房间”i打印了出来,发现i会逐个接待字典中的每一个【键】。

字符串也属于“一群排队办业务的人”。打个比方,'吴承恩'三个字就像一家三口,但走进空房间办业务时,这家人是可以一个一个进去的。来试试吧。

image.png-95.6kB

而整数、浮点数是不属于“一群排队办业务的人”的,如果把它们放在for循环里,代码会报错

image.png-181.9kB

现在我们理解了:列表,字典,字符串都可以是“一群排队办业务的人”。

for i in [1,2,3,4,5]:  
   print(i)

还是这段代码,代码的运行结果你应该已经了然于心,是1,2,3,4,5依次出现。也就是说,当这一群排队的人依次序走进空房间,每个人都会把业务办完。

这个过程,在Python中的学名就叫做【遍历】

其实,遍历这个词在古代汉语中就已经出现过了

image.png-274kB

只不过古人是遍历名山大川,一一寻访学问;而Python是遍历数据结构(列表、字典等),一一访问其中的数据

除了列表,字典,字符串三种数据类型,我们还可以遍历其他的数据集合。比如和for循环常常一起搭配使用的:range() 函数。

1.3 range()函数

image.png-108.9kB

运行后,你看到了整数0,1,2,是不是?使用range(x)函数,就可以生成一个从0到x-1的整数序列。

它还有更多用法,再比如:

image.png-105.8kB

使用range(a,b) 函数,你可以生成了一个【取头不取尾】的整数序列

你可能会想问,我没事儿取这些整数出来干嘛?嗯,这是个好问题。咱们来看看这个:

image.png-116.9kB

重要的事情说三遍,哈哈。像这样,有了range()函数之后,当你想把一段代码固定重复n次时,就可以直接使用for i in range(n)解决问题

来进阶练习下:如果你要重复打印“书桓走的第n天,想他”,n为0到10,你会怎么写?

for i in range(0,11):
    print('书桓走的第'+str(i)+'天,想他')

image.png-248kB

range()函数还有一种用法,我们来直接运行体验一下:

image.png-104.3kB

你观察出规律了么?这里range(0,10,3)的意思是:从0数到9(取头不取尾),步长为3。

image.png-114.5kB

好啦,我们来实战一下:请你用for循环完成1到100的整数分别乘以5的计算,并打印出来,效果就像这样:

5
10
15
20
……(中间过程省略)
490
495
500

image.png-167kB

1.4 for循环:办事流程

我们以下面的代码为例:

for i in [1,2,3,4,5]:
​    print(i*5)

这两行代码中,in表示从“一群排队办业务的人”(字符串、列表、字典等)中依次取值,这个刚才我们已经学过了。

在循环的过程中,“一群排队办业务的人”会被依次取出,然后走进房间i去办理业务。

但办事流程呢?在这里流程很简单,都是print(i*5)。然后在i=1的情况下,执行一遍流程;在i=2的情况下,再执行一遍流程……一直执行到i=5,也就把这群人的事情全部办完了:

image.png-88.3kB

办事流程”的学名是【for子句】。格式是【冒号】后另起一行,【缩进】写命令

格式对于编程来说是一件再怎么强调也不为过的“小事”,所以在这里我们再强调一下for循环的格式:

image.png-69.1kB

到这里,你已经掌握for循环的基本语法了,我们再做一些练习。

假设你要做大采购,让小明买醋,小红买油,小白买盐,小张买米;我们先把这堆事情写成一个字典:d = {'小明':'醋','小红':'油','小白':'盐','小张':'米'}

如果我们把这四个人要买的东西依次print出来,要写4句print语句:

d={'小明':'醋','小红':'油','小白':'盐','小张':'米'}
print(d['小明'])
print(d['小红'])
print(d['小白'])
print(d['小张'])

请你来动手用for循环代替以上重复性代码,并起到同样的效果。

d={'小明':'醋','小红':'油','小白':'盐','小张':'米'}
for i in d:
    print(d[i])

image.png-117.5kB

2. while循环

先来看看while循环长啥样:

image.png-70.1kB

image.png-113.6kB

还是1,2,3,4,5依次出现,对吧?我们也用大白话去解释一下这段代码。

和for循环语句不同,while语句没有“空房间”,也不是“把一群排队办业务的人做完”。它是“在一定的条件下”,“按照流程办事”

image.png-72.1kB

a = 0                #先定义变量a,并赋值
while a < 5:         #设定一个放行条件:a要小于5,才能办事
    a = a + 1        #满足条件时,就办事:将a+1
    print(a)         #继续办事:将a+1的结果打印出来 

很明显,while循环有2个要点:1.放行条件;2.办事流程

2.1 while循环:放行条件

while在英文中表示“当”,while后面跟的是一个条件。当条件被满足时,就会循环执行while内部的代码(while子句)。

所以while循环本质上像是一个哨卡:只要事情符合条件,那就一遍又一遍的“按流程办事”

就像在上面的例题中,只要a<5这个条件成立,就不停地办事(把a+1的结果打印出来),直到条件不成立,办事流程就停止。

a = 0
while a < 5:
    a = a + 1
    print(a)

同样,while语句也要注意代码规范:

image.png-69.2kB

和for循环一样,冒号和内部代码的缩进都是必不可少的。╭(╯^╰)╮写不规范的话计算机又给你报错,然后你又卡在莫名其妙的地方很久噢......


下面,我们用一个好玩儿的案例来说明while的具体用法,不晓得你们有没有看过金庸的武侠小说《神雕侠侣》?

小说里的主角小龙女(古墓派掌门人)自小在终南山上的古墓里生活。这个门派有个规定,除非有男人愿意为掌门人死,否则掌门人永远不能出墓门半步。

在Python中,这个故事的逻辑就被翻译成:当(while)没有男人愿意为小龙女去死的时候,小龙女要一直一直一直生活在古墓里,这就是一种循环。只有当条件(没有男人愿意为小龙女去死)为假的时候,就可以打破循环,小龙女就能出古墓下山了。

这段代码我先写出来,你看看~

man = ''  # 注:''代表空字符串
while man != '有':  #注:!=代表不等于
​    man = input('有没有愿意为小龙女死的男人?没有的话就不能出古墓。')
print('小龙女可以出古墓门下山啦~')

详解:
第1行代码:定义了变量man为空的字符串。使用变量前要先定义变量并为变量赋值,下面我们还会继续用到变量man。

第2行代码:while后面有一个条件,当这个条件被满足时,即man != '有'时,放行、办事。开始执行循环内部代码,即第3行的代码,开始询问。

第3行代码:询问现在有男人愿意为小龙女死吗?输入完信息后,回到第2行代码,重新判断条件真假。直到条件被判断为假,即man == '有',while循环才结束。

第4行代码:while 循环结束后的代码,也是循环外部的代码。因为当有男人愿意为小龙女死的时候,while 后面的条件就为假,此时,程序会结束循环,去运行第五行代码。

我们来运行一下好了,同样需要你输入内容。你可以先随便输入几个数据,只要你输入的不是有,代码就会一直循环;直到你输入有,循环会结束。

image.png-221.4kB

好了,你感受过了while循环的逻辑之后,现在我想请你自己动手练一练。

这个画风突变的故事是这样的:你家的大门是密码门,密码是你的生日816。当输入密码错误的时候,会提示“请尝试输入密码:”。直到密码输入正确,就会提示“欢迎回家!”。

终端的运行效果应该差不多长这样:

请尝试输入密码:
123
请尝试输入密码:
456
请尝试输入密码:
789
请尝试输入密码:
……(中间过程省略)
816

image.png-179.5kB

2.2 while循环:办事流程

while循环,在满足条件的时候,会一轮又一轮地循环执行代码

我们来做道选择题,请看代码回答问题:

a = 0

while a < 5:
​    a = a + 1
print(a)

请问,终端会运行出什么结果?

image.png-98.8kB

这道题跟一开始的例题非常相似,唯一的区别在于print(a)有没有缩进。

# 之前的例题
a = 0

while a < 5:
​    a = a + 1
    print(a)

# 本题
a = 0

while a < 5:
​    a = a + 1
print(a)

有缩进的时候,print(a)也是循环中的“办事流程”,会将数字逐一打印。没有缩进的时候,循环中的“办事流程”就只有做加法,print(a)也就只会打印循环结束时的最后一个数字。

稍微有点费事是不?我们来做一下分解,看看每一行代码的含义:

image.png-239.4kB

可以看到,最后一轮循环的时候a=4,然后最后a的值被加1后等于5:

image.png-133.1kB

所以,缩进后的【while子句】才是会被循环执行的“办事流程”,这一点,你应该差不多明白了吧~

那,我们再来做一个小练习。

之前,我们用for循环解过“1到100分别乘以5”的题目:

for i in range(1,101):
    print(i*5)

如果现在用while循环,应该怎么写呢?你来试试看。

image.png-169.5kB

for循环和while循环都可以帮我们完成重复性的劳动,那到底两个循环有什么区别,什么时候用for什么时候用while呢?让我们来对比一下。

3. 两种循环对比

for循环和while循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡。

所以说,当我们【工作量确定】的时候,我们就可以让for循环来完成重复性工作。反之,要【工作量不确定时】可以让while循环来工作

# 适合用for...in...循环
for i in '神雕侠侣':
​     print(i)

# 适合用while循环
password = ''
while password != '816':
​     password = input('请尝试输入密码:')

要把字符串'神雕侠侣'拆成一个个字符打印出来,这件事【工作量确定】,适合用for循环。

而对于“输入密码,判断输入的密码是否正确”这件事,我们并不知道要判断几遍才能得到正确密码,所以【工作量不确定】,适合用while循环。

不过有一种情况for循环和while循环都可以解决问题,那就是【把一件事情做N遍】:

image.png-210.8kB

你会看到,两者都能做。不过for循环的代码相对更简洁一些。

让我们总结一下什么时候用for什么时候用while:

image.png-76.4kB

4. 习题练习

4.1 习题一

1.练习目标:
我们会通过今天的作业,再次练习for循环和while循环。

2.练习要求:
小美想要用今天学到的循环打印数字1-7,不过,她不喜欢4这个数字……
但是,今天的课堂她没有认真看,导致现在有点晕,不知道怎么写代码。
所以,请你运用课堂中出现的两种循环方式,为她展示下什么叫融会贯通。

这个练习呢,其实就一件事:打印数字。
在这件事的基础上加循环(控制打印范围)和条件判断(跳过4)。
下面,请你用不同的循环方式来帮小美实现“打印1-7,但是不要4”这个愿望。
(1)for 循环

image.png-111.6kB

(2)while 循环

image.png-114.5kB

(3)循环对比

#查看注释,运行代码。

# while 循环
n = 0
while n < 7:
    n = n+1
    if n != 4:  # 当num != 4,执行打印语句;等于4时不打印。
        print(n)

# for 循环
for num in range(1,8):  # 为同时能运行两个循环,新取参数 num。
    if num != 4:  # 当num != 4,执行打印语句;等于4时不打印。
        print(num)

image.png-214.1kB

4.2 习题二

1.练习目标
通过这个练习,你会尝试用循环来解决生活中的问题,并了解一种新的列表方法。

2.练习要求
小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。
由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。
每次换座位的时候,第一位变第三位,后面两位都往前一位。

(1)方法1:append()函数
可结合循环和append()函数,让列表发生3次变化,每次都打印出来,如下:

students = ['小红', '小刚', '小明']
students = ['小刚', '小明', '小红']
students = ['小明', '小红', '小刚']

image.png-146.1kB

代码参考:

students = ['小明','小红','小刚']
for i in range(3):
    student1 = students[0]  # 获取第一个座位的学生 student1
    students = students[1:]  # 让 student1 暂时离开,后面的学生座位都进一位。
    students.append(student1)  # 将 student1 安排到最后一个座位
    print(students)

(2)pop()函数

image.png-296.5kB

代码参考:

students = ['小明','小红','小刚']
for i in range(3):
    student1 = students.pop(0)  # 运用pop()函数,同时完成提取和删除。
    students.append(student1)  # 将移除的student1安排到最后一个座位。
    print(students)

本篇文章源自我在“风变编程”平台学习中的总结,如有不便请联系删除。www.pypypy.cn一个好的学习平台,值得推荐。

猜你喜欢

转载自www.cnblogs.com/ywb123/p/12975434.html