51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Python基础 – 跳出循环

无论是for循环还是while循环,默认的终止条件都是边界条件。在触发边界条件之前,代码会一直循环执行。

那有没有可以改变这种"默认循环执行"的方法呢?答案是肯定的。

学习两个关键字:breakcontinue

某些场景里,需要在特定的条件出现时强行终止循环,并执行循环之后的代码。

这时候,就可以使用 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循环解决此问题的思路:

  1. 定义列表present存储9个礼物的名称,定义一个用于计数的变量count,并将其赋值为0

  2. 使用while循环进行判断,count是否小于等于4

  3. 如果是就格式化输出"恭喜你获得了{present[count]}一份"

  4. 每循环一次将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)
赞(0)
未经允许不得转载:工具盒子 » Python基础 – 跳出循环