没有循环时,想打印0-100之间的数字,则需要循环多次,例:
print(0)
print(1)
print(2)
print(3)
...
print(99)
但是使用循环的话,就不会有那么麻烦
while
循环
while 这个单词有“在……时”的含义,while
循环自然也可以被理解为“在……时进行循环”。确实是这样,在 while
循环中,计算机在 满足条件 时 重复执行 某段代码,直至条件不满足再终止循环。
while
循环的执行流程与 if
语句有相似之处,语法规则与 if
语句也是很像的。下图是一个典型的 while
循环,运行后会逐行输出 0、1、2.....100:
i = 0
while i < 100:print(i)i = i + 1
这里拓展一个小知识点,i = i + 1
可以简写成 i += 1
。所以上面的代码等价于:
i = 0
while i < 3:print(i)i += 1
编程练习
等待蟹黄堡的客人一共有 5 位,海绵宝宝要为每一位客人都做一份美味蟹黄堡。你能用循环修改下面的代码,帮助海绵宝宝简化自己的工作流程吗?
i = 1
# 定义变量 i,用来表示客人的序号,初始值为 1print('为第' + str(i) + '位客人做一份蟹黄堡')
# 给当前客人做一份蟹黄堡
i += 1
# i 值加 1,招待下一位客人print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1
简化后结果为:
i = 1
# 定义变量 i,用来表示客人的序号,初始值为 1
while i < 6:print('为第' + str(i) + '位客人做一份蟹黄堡')i += 1
死循环
我们先来看看出错的代码吧,对比一下之前能正确做出 5 个蟹黄堡的代码,你发现了什么问题?
# 正确的代码:
i = 1
while i <= 5:print('为第' + str(i) + '位客人做一份蟹黄堡')i += 1# 派大星的代码:
i = 1
while i <= 365:print('给派大星做一个蟹黄堡')
没错,派大星写的循环体里少了一句 i += 1
,这就说明,在代码运行过程中,i
值始终没有被改变,一直都能满足 i <= 365
的条件。循环条件永远为真,那 print('给派大星做一个蟹黄堡')
这句指令自然也会一直执行啦。
所以,蟹黄堡就会永无止境地生成,换句话说,这个循环,停不下来 了。在编程中,这种无法靠自身控制终止的程序称为 死循环。
问题的答案很简单:确保循环条件不会永远成立,也就是说,我们要保证 while
后面跟的 循环条件 最终可以被转化为 False
。
我们让计算机在打印句子之后,还要对 i
值加 1,这样就能保证 i
值一直在增加,直至 i = 6
,不再满足 i <= 5
的条件,程序就会跳出循环:
i = 1
while i <= 5:print('为第' + str(i) + '位客人做一份蟹黄堡')i += 1
⚠️循环中,切不可缺少‘i’这个属性值,防止遇到死循环
编程练习一
海绵宝宝有一只心爱的宠物蜗牛,名叫小蜗。海绵宝宝出门去蟹堡王上班了,小蜗就写了一段代码,判断几个小时后海绵宝宝才能回家。
但这个代码的运行结果却是……海绵宝宝永远都不会回家了!小蜗以为自己被海绵宝宝抛弃了,非常伤心。你能帮它修改这段代码,让它看到正确的答案吗?
time_left = 10
# 海绵宝宝每天需要工作 10 个小时
while time_left > 0:print('距离海绵宝宝回家还有' + str(time_left) + '个小时')print('海绵宝宝回家了!')# 预期逐行输出:
# 距离海绵宝宝回家还有10个小时
# 距离海绵宝宝回家还有9个小时
# ...
# 距离海绵宝宝回家还有1个小时
# 海绵宝宝回家了!# 实际输出:
# 距离海绵宝宝回家还有10个小时
# 距离海绵宝宝回家还有10个小时
# 距离海绵宝宝回家还有10个小时
# ...(死循环中)
解答为:
time_left = 10
# 海绵宝宝每天需要工作 10 个小时
while time_left > 0:print('距离海绵宝宝回家还有' + str(time_left) + '个小时')time_left -= 1
print('海绵宝宝回家了!')
看到正确的输出,小蜗终于开心起来了,谢谢你安慰了它!
编程练习二
我们给代码加了一句 i += 1
,拯救了死循环。这里我们拓展一下思维,想想看,一个循环中不包含形如 i += 1
的代码,那它是否一定会进入死循环呢?
下面这段代码会是死循环吗?告诉我你的判断吧~
number = 0while number != 345:number = int(input('猜猜我想到的数字?'))
这段代码不会进入死循环哦!不劳烦 i += 1
出场,input()
函数也可以不断地给 number
重新赋值。如果输入的是“345”,那 number != 345
这个循环条件就不成立啦,循环当然会自动终止。
再次重申一下,避免死循环需要我们保证 循环条件是否可以转变为 False
,形如 i += 1
的代码并不是必要条件,认真控制循环条件才是避免出错的不二法门!
关于 while
循环的方方面面就说到这里,现在你又成功掌握一种新的语句了,怎么样,循环是不是很有趣?
编程练习三
掌握了 while
循环的知识,我们结合之前列表的相关知识来做一个彩票抽奖机!
中奖号码由 6 个 0-99 之间的随机数(包括 0 和 99)构成。中奖的朋友,可以获得蟹堡王年卡,每天都能吃到免费的美味蟹黄堡!
老师为你定义好了一个 get_num()
函数,功能是返回 1 个 0~99 之间的随机整数。用法如下所示:
# 假设生成的随机整数是 55
# 打印出返回值为 55
print(get_num())
# 输出:55# 将这个随机整数保存到变量里
num = get_num()
请你写一个 while
循环,重复 6 次 调用 get_num()
函数的操作,并把每次获得的随机数保存到列表 lottery
里。
提示:还记得给列表尾部追加元素要使用
append()
方法吗?
# 有了下面这行代码,get_num() 函数才有效
# 千万不要手滑删除啦!
from random import randint# 不需要修改函数,按照提示调用即可
def get_num():# randint(0, 99) 随机生成 0-99 之间的数,包括 0 和 99return randint(0, 99)lottery = []# 请你补全代码
# 用循环获得 6 个随机数存到 lottery 里作为中奖号码
i = 0
while i <= 6:num = get_num()lottery.append(num)i += 1# 打印出最终的 lottery 列表
print('本期彩票中奖号码为:' )
print(lottery)
学习巩固
1/3对折对折再对折
一张纸的厚度大约是 0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13 米)?
请用 循环 完成这个练习,并打印出 需要对折n次,n 是纸的厚度大于等于 8848.13 米时已经对折的次数。
# 珠穆朗玛峰高8848.13米 88481.3厘米 884813毫米(mm)
mount = 8848130
# 纸张 0.08mm
paper = 0.08
# 请补全代码
i= 0.08
int = 0
while i < mount:# print(i)i = i * 2int += 1
print('需要对折' + str(int) + '次')# 答案为27次
2/3黄帮主逃课了吗
我们可以用 while
循环来依次访问列表中的元素,循环终止条件可以设置为 i < len(列表名称)
。
其中,i
值对应的是列表的索引,len(列表名称)
获取的是列表长度,每访问一个元素,我们就让索引值 i
加 1,直到索引值与列表长度相同,就终止循环。
name_list = ['红小贝','黄小贝','紫小贝']
i = 0
while i < len(name_list):
print(name_list[i])
i += 1
# 逐行输出:红小贝 黄小贝 紫小贝
我们用这个方法来完成一个有趣的练习吧。今天上课时,班主任发现班上少了一名同学,她猜最淘气的黄帮主可能没来上学。
到校的学生姓名已经按照到校时间记录在考勤表 name_list
中了,请你用上面的方法完善 checking()
函数,帮助班主任判断一下黄帮主有没有逃课。如果逃课了就打印出 黄帮主逃课了,如果没有,就打印出 黄帮主是第n个到校的,n 是他到校的顺序。
name_list = ['红小贝','黄小贝','蓝小贝','绿小贝','青小贝','紫小贝','黄帮主']def checking(name):global name_listi = 0while i < len(name_list):if name == name_list[i]:print(name + '是第' + str(i + 1) + '个到校的')returni += 1print(name + '逃课了')
checking('黄帮主')
3/3头疼的数学课
黄帮主终于在铃声前到达了学校,但第一节课就是让他头疼的数学课。
今天的课堂作业是计算 1 到 100 各个数的和,黄帮主想偷懒,于是拿出了 Python 编辑器。
请你帮黄帮主完善函数 counting()
,用 while
循环打印出从 1 加到 100 的和。
def counting(n):# 请补全代码i = 0sum = 0while i <= 100:sum += ii += 1print(sum)
counting(100)
下篇预告:python中的for
循环