无论是for循环还是while循环,默认的终止条件都是边界条件。在触发边界条件之前,代码会一直循环执行。
那有没有可以改变这种"默认循环执行"的方法呢?答案是肯定的。
学习两个关键字:break
、continue
。
某些场景里,需要在特定的条件出现时强行终止循环,并执行循环之后的代码。
这时候,就可以使用 break
这个关键字来完成。
break
定义:break
用于跳出当前的循环语句的执行。
break
语句既可以用在for循环
中也可以用在while循环
中。
它一般和if语句
搭配在一起使用,表示如果满足了某种特定条件,就直接终止当前的循环结构。
break
的具体用法。
numberList = [10, 4, 1, 20, 6]
for i in numberList:
print(i)
if i > 15:
break
print(numberList)
# output
# 10
# 4
# 1
# 20
# [10, 4, 1, 20, 6]
代码的作用
这六行代码遍历了一个列表numberList,并依次输出其中的元素。
第2-5行是一个完整的for循环结构。如果列表中有大于15的元素,就终止循环结构。
for循环外,输出了完整的numberList。
遍历列表
使用 for...in...
的结构,依次遍历numberList中的元素。
输出元素
for循环
内的代码块,依次输出列表中的元素。
按理来说,列表一共有五个元素,print(i)
会执行 5 次。
但在本例中,print(i)
只运行了 4 次 ,依次输出了列表中10、4、1和20
这四个元素。
稍后详细解释这里只运行了四次的原因。
if语句
使用if语句
判断变量i是否大于15。
如果判断条件成立,就执行下面的缩进代码:break;
如果判断条件不成立,则进入下一次循环。
break
一个关键字break
,执行它时将结束整个循环结构。
本例中,在遍历到列表的第四个元素时,由于20大于15,判断条件成立,执行缩进代码break,程序跳出该循环。
因此,print(i)
只执行了四次。
for循环外
执行break后,程序不会进入下一次循环继续遍历列表的第五个元素,而是从循环外的第一行开始执行:输出列表numberList。
代码小结
通过如下格式在代码中使用break
while循环
里break
的用法和在for循环
中类似。
示例中,n的初始值为0,我们使用while循环依次输出小于10的整型。
当n小于10时,输出n。
第4-5行使用if语句判断了n是否等于5。
如果n等于5,执行break,跳出整个while循环;
如果n不等于5,则将n加一,继续进入下一次while循环。
因此,运行结果中依次输出了0、1、2、3、4和5。
因为当n等于5时,就执行break,跳出整个循环了。
小思考
(一)运行以下代码,最后输出的结果是什么:
num_list = [30, 2, 0, 1]
total = 0
for num in num_list:
if num == 0:
break
total = total + num
print(total)
解析
total在for循环外,初始化为0。
第一次遍历:num是30,不等于0,所以total=0+30=30。
第二次遍历:num是2,不等于0,所以total=30+2=32。
第三次遍历:num等于0,执行break,跳出当前循环,运行for循环外的第一行代码。
因此,最后输出的值为32。
(二)运行以下代码,最后输出的结果是什么:
i = 5
while i < 20:
if i > 7:
break
print(i)
i = i + 1
解析
本题中,i的起始值为5,使用while循环依次输出小于20的整型。
如果i大于7,就执行break,结束整个循环结构;如果小于等于7,则i等于i+1,继续进入下一次while循环。
在while循环遍历到第4次的时候(i等于8时),程序会跳出整个while循环,不会再执行print(i)。因此,最后只有前三次print(i)的运行结果。依次是5,6,7
上面学习了,即使在边界条件保持为True
时,也可以通过使用break
来终止整个循环结构。
但是,如果只想跳过循环内某些语句,接着返回到循环的开头,继续进入下一次循环,该怎么办?
这时候,就需要用到另一个关键字:continue
。
continue
定义:continue
会"跳过"本次循环内的剩余代码。
注意,continue
是跳过本次循环,而break
跳出整个循环结构。
continue
的具体用法。
drinks = ["water", "coke", "tea", "milk"]
for item in drinks:
if item == "coke":
continue
print(item)
代码的作用
这5行代码遍历了一个列表drinks。
第2-5行是一个完整的循环结构。在循环内,通过if语句判断该列表中是否有元素是"coke"。
如果有,则跳过本次循环中的剩余代码,也就是第5行的print(item),直接进入到下一次循环。
如果没有,就执行print(item),然后进入下一次循环,直到列表drinks中所有元素都被取完为止。
遍历列表
使用 for...in...
的结构,依次遍历drinks中的元素。
if语句
使用if语句判断item是否等于"coke"。
如果等于,就执行continue语句;
如果不等于,则执行print(item)。
continue
一个关键字continue,它会跳过本次循环中后面的剩余代码,直接进入下一次循环。
本例中,在遍历到列表的第二个元素时,item是"coke",判断条件成立,执行缩进代码continue,程序跳出本次循环,进入下一次循环。
因此,print(item)没有输出coke。
代码小结
通过如下格式在代码中使用continue
while循环里continue的用法和在for循环中类似。
示例中,n的初始值为0,我们使用while循环依次输出小于10,但不包含5的整型。
第4-5行使用if语句判断了n是否等于5。
如果n等于5,执行continue,跳过当前的while循环,进入下一次while循环;
如果不等于5,则将n输出。
因此,运行结果中依次输出了1-10里,除了5以外的所有整型。
continue是可以被if语句替代的,比如刚才的例子就有两种写法。
对比单纯地使用if语句,continue的优势在于它能加快程序的运行时间。
在实际应用中可以根据自己的需要来进行选择。
break与continue的区别
最后,再来通过两段代码来感受一下break和continue的区别~
当执行break时,会跳出整个循环结构,并运行循环外的第一行代码。
执行continue时,会"跳过"本次循环内的剩余代码,返回到循环的开头,继续执行下一次循环。
总结一下:
break
直接终止整个循环结构 ;
continue
是跳过当前循环中剩下的代码,继续进入下一次循环。
循环的综合应用
回顾
学习了for计数循环;while条件循环;以及跳出循环的两种方法break,continue。
现在通过一些真实的案例来更进一步体会循环的妙处。
女生节马上要到啦,夜曲的行政小A在准备礼物时,发现了一大堆需要重复做的事情,咱们用循环大法来帮助她吧。
小A需要在大屏幕上显示出夜曲每一位女性员工的名字+女生节快乐!
女性员工姓名列表为girls = ["Max","Sunny","Chris","Sissi","May","Ann"]
for循环遍历列表
没错,我们可以用for循环遍历列表girls,并用格式化输出的方式,输出每个女员工的姓名+祝福语。
for循环进行累加/累乘的计算
除了遍历列表,for循环经常应用在多个数累加/累乘的计算中。
例如:我有一个列表,里面是自己京东账户购物车里的5件商品的价格,然后需要计算清空购物车花多少钱。
我们可以定义一个变量sum用来存储总金额,遍历列表jdList中的每个金额,依次累加到sum中。
除了累加和计数,for循环还可以和if条件判断结合,做复杂的条件判断。
例如:leader提出,如果女生们所选的礼品金额大于200的就可以晋级下一轮的终极女神PK!
要实现这个需求,就需要在for循环遍历列表的同时,判断礼品金额是否大于200,如果大于200就筛选出这位幸运儿。
经过一轮PK,本次女生节最幸运的女神是Ann~
她将获得老板特批的"清空护肤品愿望清单特权"一次。
OMG!也就是说老板会为她购买愿望清单里每一个品牌的每一种单品哦!!
猜猜看这用程序应该如何做呢?
嵌套
可以使用嵌套循环来实现这个功能,在了解嵌套循环之前,我们先来回顾一下嵌套。
在if判断语句中,我们学习过if语句的相互嵌套。
嵌套的if条件判断:就是在一个条件判断中之下再叠加一层条件判断。
嵌套循环
同理,嵌套循环就是一个循环出现在另一个循环里。
嵌套循环的特征是:对于外循环的每次迭代,内循环都要完成它的所有迭代。
嵌套循环
brandList = ["Ja mer","Cbp","SK3"]
itemList = ["精华","面霜","眼霜","爽肤水"]
for brand in brandList:
for item in itemList:
print(f"恭喜你将获得{brand}品牌的{item}一份")
代码的作用
这5行代码的意思是使用for循环遍历列表brandList中的元素,之后进入内循环遍历itemList中的所有元素,使用print输出每一种组合。
定义列表
第一行定义列表brandList,列表中有3个数据。
第二行定义列表itemList,列表中有4个数据。
接下来要进入外循环遍历brandList中的数据。
遍历列表-外循环
第三行,用for...in...结构遍历列表brandList,依次取出列表中的元素。
每取出一个元素就进入到下一个for循环结构中。
缩进
缩进的代码是一个代码块,也就是嵌套循环中的内循环,在每次外循环中都要执行。
在这里,建议缩进四个空格,和其他语句类型的缩进保持一致。
遍历列表-内循环
第四行,用for...in...结构遍历列表itemList,依次取出列表中的元素。
每取出一个元素,就进行一次格式化输出。
缩进
缩进的代码是一个代码块,表示内循环每遍历一个元素就要进行一次格式化输出。
这8个空格实际上是由外层循环代码块的4个空格加上内层循环代码块的4个空格组成的。
结果
用格式化字符串的形式输出结果。
输出的结果是"恭喜你将获得{brand}品牌的{item}一份"
代码小结
当我们要用嵌套for循环输出所有组合时就需要这几个部分
(嵌套循环执行过程)
第一行和第二行分别是brandList品牌列表和itemList单品列表
第四行代码进入外循环,对brandList列表里的元素进行遍历,遍历得到第一个元素"Ja mer"后
程序进入第五行代码开始内循环,对itemList列表里的元素进行遍历,遍历得到第一个元素"精华"
此时第一次内循环结束,输出 "恭喜你将获得Ja mer品牌的精华一份"
接下来继续剩下三次的内循环
分别完成三次itemList列表的遍历及输出
完成内循环后,此时程序回到外循环,开始遍历brandList列表的第二个元素Cbp
之后进入内循环,重复刚才的过程,直到itemList列表遍历完成
就这样每次内循环迭代完成后,再进入外循环迭代,直到外循环迭代完成,整个嵌套循环虎牙完毕了
lucky的亮亮,获得了9个奖品。
不过他打算告诉女朋友,自己只获得了列表中的前5个礼物,密谋着要把剩下的礼物卖掉换成私房钱~嘿嘿。
接下来我们试着用while循环帮助亮亮在公屏上输出前5个礼物的名字,截屏给亮亮的女朋友看。
while循环解决此问题的思路:
-
定义列表present存储9个礼物的名称,定义一个用于计数的变量count,并将其赋值为0
-
使用while循环进行判断,count是否小于等于4
-
如果是就格式化输出"恭喜你获得了{present[count]}一份"
-
每循环一次将count计数加1
present = ['苹果新款手机', '苹果平板电脑', '苹果智能手表', '华为新款手机', '华为平板电脑', '华为智能手表', '小米新款手机', '小米平板电脑', '小米智能手表']
count = 0
while count <= 4 :
print(f"恭喜你获得了{present[count]}一份")
count = count + 1
for循环
除了while循环
,我们还可以使用for循环
来实现刚刚的效果。
例如:创建一个列表aList = [0,1,2,3,4]
,使用用for循环遍历礼物列表中前五项的礼物并打印出来。
上面的遍历了5个数字的列表,我们可以通过创建列表的方式完成。
可是如果我们要遍历100个整数,或者1000个整数呢?
难道需要手动创建非常冗长的列表吗?no,no,no!
学习一种更高效的方法~
遍历整数列表
for i in range(5):
print(i)
代码的作用
for i in range()
的功能是:遍历一个整数列表。
其中range()
的功能是:创建一个整数列表。
例如:range(5)
可以生成一个从0 开始到5结束但不包括5的整数列表[0,1,2,3,4]。
for...in...
第一行,用for...in...
结构遍历range()
功能生成的列表中的每一个值。
range(5)
使用range()
功能,填入数字5,可以生成一个从0 开始到5结束但不包括5的整数列表 [0,1,2,3,4]
。
结果
for循环遍历range(5)
生成的列表[0,1,2,3,4]
每赋值给i一次,就执行一次print(i)
。
直到全部赋值完为止,循环才结束。
代码小结
当我们要遍历一个整数列表就需要这几个部分
range(5)
可以生成从0到4的整数列表。
如果我们需要生成从1到4的整数列表,只需要在range(5)
中添加一个初始计数值1,改成range(1,5)
就可以啦。
range()
功能中可以填写2个内容 ,range(a,b)
。
a: 计数从 a 开始。默认是从 0 开始,可省略 。
b: 计数到 b 结束,但不包括 b,不可省略。
for i in range(1,9)
用for循环遍历range()生成的列表中每一个数据。
range(1,9)
1表示从1开始
9表示到9为止不包含9
小练习
使用for循环,遍历5到99的整数,并输出结果。
# 使用for循环遍历5到99的整数列表
for i in range(5,100):
# 输出结果i
print(i)
请使用for循环和range()函数的知识点。
计算50以内,不包括50的正整数之和,并输出最终结果。
number = 0
for i in range(50) :
number = number + i
print(number)