Python基础 – 跳出循环

2022/6/22 11:36:32admin0 阅读2 评论

<p>无论是for循环还是while循环,默认的终止条件都是边界条件。在触发边界条件之前,代码会一直循环执行。</p>
<p>那有没有可以改变这种“默认循环执行”的方法呢?答案是肯定的。</p>
<p>学习两个关键字:<code>break</code>、<code>continue</code>。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-01.png” alt=“” /></p>
<p>某些场景里,需要在特定的条件出现时强行终止循环,并执行循环之后的代码。</p>
<p>这时候,就可以使用 <code>break</code> 这个关键字来完成。</p>
<h2>break</h2>
<p>定义:<code>break</code>用于跳出当前的循环语句的执行。</p>
<p><code>break</code>语句既可以用在<code>for循环</code>中也可以用在<code>while循环</code>中。</p>
<p>它一般和<code>if语句</code>搭配在一起使用,表示如果满足了某种特定条件,就直接终止当前的循环结构。</p>
<p><code>break</code>的具体用法。</p>
<pre><code class=“language-python”>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]</code></pre>

<p><strong>代码的作用</strong>
这六行代码遍历了一个列表numberList,并依次输出其中的元素。</p>
<p>第2-5行是一个完整的for循环结构。如果列表中有大于15的元素,就终止循环结构。</p>
<p>for循环外,输出了完整的numberList。</p>
<p><strong>遍历列表</strong>
使用 <code>for…in…</code> 的结构,依次遍历numberList中的元素。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-02.png” alt=“” /></p>
<p><strong>输出元素</strong>
<code>for循环</code>内的代码块,依次输出列表中的元素。</p>
<p><strong>按理来说,列表一共有五个元素,<code>print(i)</code>会执行 5 次。</strong></p>
<p>但在本例中,<code>print(i)</code><strong>只运行了 4 次</strong>,依次输出了列表中<code>10、4、1和20</code>这四个元素。</p>
<p>稍后详细解释这里只运行了四次的原因。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-03.png” alt=“” /></p>
<p><strong>if语句</strong>
使用<code>if语句</code>判断变量i是否大于15。</p>
<p>如果判断条件成立,就执行下面的缩进代码:break;
如果判断条件不成立,则进入下一次循环。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-04.png” alt=“” /></p>
<p><strong>break</strong>
一个关键字<code>break</code>,执行它时将结束整个循环结构。</p>
<p>本例中,<strong>在遍历到列表的第四个元素时,由于20大于15,判断条件成立,执行缩进代码break,程序跳出该循环。</strong>
因此,<code>print(i)</code>只执行了四次。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-05.png” alt=“” /></p>
<p><strong>for循环外</strong>
执行break后,程序不会进入下一次循环继续遍历列表的第五个元素,而是从循环外的第一行开始执行:输出列表numberList。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-06.png” alt=“” /></p>
<p><strong>代码小结</strong>
通过如下格式在代码中使用break
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-07.png” alt=“” /></p>
<p><code>while循环</code>里<code>break</code>的用法和在<code>for循环</code>中类似。</p>
<p>示例中,n的初始值为0,我们使用while循环依次输出小于10的整型。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-08.png” alt=“” /></p>
<p>当n小于10时,输出n。</p>
<p>第4-5行使用if语句判断了n是否等于5。</p>
<p>如果n等于5,执行break,跳出整个while循环;
如果n不等于5,则将n加一,继续进入下一次while循环。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-09.png” alt=“” /></p>
<p>因此,运行结果中依次输出了0、1、2、3、4和5。</p>
<p>因为当n等于5时,就执行break,跳出整个循环了。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-10.png” alt=“” /></p>
<h3>小思考</h3>
<p>(一)运行以下代码,最后输出的结果是什么:</p>
<pre><code class=“language-python”>num_list = [30, 2, 0, 1]
total = 0
for num in num_list:
if num == 0:
break
total = total + num
print(total)</code></pre>
<p><strong>解析</strong>
total在for循环外,初始化为0。</p>
<p>第一次遍历:num是30,不等于0,所以total=0+30=30。
第二次遍历:num是2,不等于0,所以total=30+2=32。
第三次遍历:num等于0,执行break,跳出当前循环,运行for循环外的第一行代码。</p>
<p>因此,最后输出的值为32。</p>
<p>(二)运行以下代码,最后输出的结果是什么:</p>
<pre><code class=“language-python”>i = 5
while i < 20:
if i > 7:
break
print(i)
i = i + 1</code></pre>
<p><strong>解析</strong>
本题中,i的起始值为5,使用while循环依次输出小于20的整型。</p>
<p>如果i大于7,就执行break,结束整个循环结构;如果小于等于7,则i等于i+1,继续进入下一次while循环。</p>
<p>在while循环遍历到第4次的时候(i等于8时),程序会跳出整个while循环,不会再执行print(i)。因此,最后只有前三次print(i)的运行结果。依次是<code>5,6,7</code></p>
<p>上面学习了,即使在边界条件保持为<code>True</code>时,也可以通过使用<code>break</code>来终止整个循环结构。</p>
<p>但是,如果只想跳过循环内某些语句,接着返回到循环的开头,继续进入下一次循环,该怎么办?</p>
<p>这时候,就需要用到另一个关键字:<code>continue</code> 。</p>
<h2>continue</h2>
<p>定义:<code>continue</code><strong>会“跳过”本次循环内的剩余代码。</strong></p>
<p>注意,<code>continue</code>是跳过本次循环,而<code>break</code>跳出整个循环结构。</p>
<p><code>continue</code>的具体用法。</p>
<pre><code class=“language-python”>drinks = ["water", "coke", "tea", "milk"]
for item in drinks:
if item == "coke":
continue
print(item)</code></pre>
<p><strong>代码的作用</strong>
这5行代码遍历了一个列表drinks。</p>
<p>第2-5行是一个完整的循环结构。在循环内,通过if语句判断该列表中是否有元素是"coke"。</p>
<p>如果有,则跳过本次循环中的剩余代码,也就是第5行的print(item),直接进入到下一次循环。</p>
<p>如果没有,就执行print(item),然后进入下一次循环,直到列表drinks中所有元素都被取完为止。</p>
<p><strong>遍历列表</strong>
使用 <code>for…in…</code> 的结构,依次遍历drinks中的元素。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-11.png” alt=“” /></p>
<p><strong>if语句</strong>
使用if语句判断item是否等于"coke"。</p>
<p>如果等于,就执行continue语句;
如果不等于,则执行print(item)。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-12.png” alt=“” /></p>
<p><strong>continue</strong>
一个关键字continue,它会跳过本次循环中后面的剩余代码,直接进入下一次循环。</p>
<p>本例中,在遍历到列表的第二个元素时,item是"coke",判断条件成立,执行缩进代码continue,程序跳出本次循环,进入下一次循环。</p>
<p>因此,print(item)没有输出coke。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-13.png” alt=“” /></p>
<p><strong>代码小结</strong>
通过如下格式在代码中使用continue
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-14.png” alt=“” /></p>
<p>while循环里continue的用法和在for循环中类似。</p>
<p>示例中,n的初始值为0,我们使用while循环依次输出小于10,但不包含5的整型。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-15.png” alt=“” /></p>
<p>第4-5行使用if语句判断了n是否等于5。</p>
<p>如果n等于5,执行continue,跳过当前的while循环,进入下一次while循环;
如果不等于5,则将n输出。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-16.png” alt=“” /></p>
<p>因此,运行结果中依次输出了1-10里,除了5以外的所有整型。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-17.png” alt=“” /></p>
<p>continue是可以被if语句替代的,比如刚才的例子就有两种写法。</p>
<p>对比单纯地使用if语句,continue的优势在于它能加快程序的运行时间。</p>
<p>在实际应用中可以根据自己的需要来进行选择。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-18.png” alt=“” /></p>
<h2>break与continue的区别</h2>
<p>最后,再来通过两段代码来感受一下break和continue的区别~</p>
<p>当执行break时,会跳出整个循环结构,并运行循环外的第一行代码。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-19.png” alt=“” /></p>
<p>执行continue时,会“跳过”本次循环内的剩余代码,返回到循环的开头,继续执行下一次循环。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-20.png” alt=“” /></p>
<p>总结一下:</p>
<p><code>break</code>直接<strong>终止整个循环结构</strong>;
<code>continue</code>是<strong>跳过当前循环中剩下的代码,继续进入下一次循环。</strong></p>
<h2>循环的综合应用</h2>
<h3>回顾</h3>
<p>学习了for计数循环;while条件循环;以及跳出循环的两种方法break,continue。</p>
<p>现在通过一些真实的案例来更进一步体会循环的妙处。</p>
<p>女生节马上要到啦,夜曲的行政小A在准备礼物时,发现了一大堆需要重复做的事情,咱们用循环大法来帮助她吧。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-21.png” alt=“” /></p>
<p>小A需要在大屏幕上显示出夜曲每一位女性员工的名字+女生节快乐!</p>
<p>女性员工姓名列表为<code>girls = ["Max","Sunny","Chris","Sissi","May","Ann"]</code></p>
<p><strong>for循环遍历列表</strong>
没错,我们可以用for循环遍历列表girls,并用格式化输出的方式,输出每个女员工的姓名+祝福语。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-22.png” alt=“” /></p>
<p><strong>for循环进行累加/累乘的计算</strong>
除了遍历列表,for循环经常应用在多个数累加/累乘的计算中。</p>
<p>例如:我有一个列表,里面是自己京东账户购物车里的5件商品的价格,然后需要计算清空购物车花多少钱。</p>
<p>我们可以定义一个变量sum用来存储总金额,遍历列表jdList中的每个金额,依次累加到sum中。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-23.png” alt=“” /></p>
<p>除了累加和计数,for循环还可以和if条件判断结合,做<strong>复杂的条件判断。</strong></p>
<p>例如:leader提出,如果女生们所选的礼品金额大于200的就可以晋级下一轮的终极女神PK!</p>
<p>要实现这个需求,就需要在for循环遍历列表的同时,判断礼品金额是否大于200,如果大于200就筛选出这位幸运儿。 </p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-24.png” alt=“” /></p>
<p>经过一轮PK,本次女生节最幸运的女神是Ann~
她将获得老板特批的“清空护肤品愿望清单特权”一次。</p>
<p>OMG!也就是说老板会为她购买愿望清单里每一个品牌的每一种单品哦!!</p>
<p>猜猜看这用程序应该如何做呢?</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-25.png” alt=“” /></p>
<p><strong>嵌套</strong>
可以使用嵌套循环来实现这个功能,在了解嵌套循环之前,我们先来回顾一下嵌套。</p>
<p>在if判断语句中,我们学习过if语句的相互嵌套。</p>
<p>嵌套的if条件判断:就是在一个条件判断中之下再叠加一层条件判断。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-26.png” alt=“” /></p>
<p><strong>嵌套循环</strong>
同理,嵌套循环就是一个循环出现在另一个循环里。</p>
<p>嵌套循环的特征是:对于外循环的每次迭代,内循环都要完成它的所有迭代。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-27.png” alt=“” /></p>
<h3>嵌套循环</h3>
<pre><code class=“language-python”>brandList = ["Ja mer","Cbp","SK3"]
itemList = ["精华","面霜","眼霜","爽肤水"]
for brand in brandList:
for item in itemList:
print(f"恭喜你将获得{brand}品牌的{item}一份")</code></pre>
<p><strong>代码的作用</strong>
这5行代码的意思是使用for循环遍历列表brandList中的元素,之后进入内循环遍历itemList中的所有元素,使用print输出每一种组合。</p>
<p><strong>定义列表</strong>
第一行定义列表brandList,列表中有3个数据。</p>
<p>第二行定义列表itemList,列表中有4个数据。</p>
<p>接下来要进入外循环遍历brandList中的数据。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-28.png” alt=“” /></p>
<p><strong>遍历列表-外循环</strong>
第三行,用for…in…结构遍历列表brandList,依次取出列表中的元素。</p>
<p>每取出一个元素就进入到下一个for循环结构中。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-29.png” alt=“” /></p>
<p><strong>缩进</strong>
缩进的代码是一个代码块,也就是嵌套循环中的内循环,在每次外循环中都要执行。</p>
<p>在这里,建议缩进四个空格,和其他语句类型的缩进保持一致。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-30.png” alt=“” /></p>
<p><strong>遍历列表-内循环</strong>
第四行,用for…in…结构遍历列表itemList,依次取出列表中的元素。</p>
<p>每取出一个元素,就进行一次格式化输出。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-31.png” alt=“” /></p>
<p><strong>缩进</strong>
缩进的代码是一个代码块,表示内循环每遍历一个元素就要进行一次格式化输出。</p>
<p>这8个空格实际上是由外层循环代码块的4个空格加上内层循环代码块的4个空格组成的。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-32.png” alt=“” /></p>
<p><strong>结果</strong>
用格式化字符串的形式输出结果。</p>
<p>输出的结果是"恭喜你将获得{brand}品牌的{item}一份"
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-33.png” alt=“” /></p>
<p><strong>代码小结</strong>
当我们要用嵌套for循环输出所有组合时就需要这几个部分
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-34.png” alt=“” /></p>
<p>(嵌套循环执行过程)</p>
<p>第一行和第二行分别是brandList品牌列表和itemList单品列表</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-35.png” alt=“” /></p>
<p>第四行代码进入外循环,对brandList列表里的元素进行遍历,遍历得到第一个元素“Ja mer“后 </p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-36.png” alt=“” /></p>
<p>程序进入第五行代码开始内循环,对itemList列表里的元素进行遍历,遍历得到第一个元素”精华“</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-37.png” alt=“” /></p>
<p>此时第一次内循环结束,输出 ”恭喜你将获得Ja mer品牌的精华一份“</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-38.png” alt=“” /></p>
<p>接下来继续剩下三次的内循环</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-39.png” alt=“” /></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-40.png” alt=“” /></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-41.png” alt=“” /></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-42.png” alt=“” /></p>
<p>分别完成三次itemList列表的遍历及输出</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-43.png” alt=“” /></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-44.png” alt=“” /></p>
<p>完成内循环后,此时程序回到外循环,开始遍历brandList列表的第二个元素Cbp</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-45.png” alt=“” /></p>
<p>之后进入内循环,重复刚才的过程,直到itemList列表遍历完成</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-46.png” alt=“” /></p>
<p>就这样每次内循环迭代完成后,再进入外循环迭代,直到外循环迭代完成,整个嵌套循环虎牙完毕了</p>
<blockquote>
<p>lucky的亮亮,获得了9个奖品。</p>
<p>不过他打算告诉女朋友,自己只获得了列表中的前5个礼物,密谋着要把剩下的礼物卖掉换成私房钱~嘿嘿。</p>
<p>接下来我们试着用while循环帮助亮亮在公屏上输出前5个礼物的名字,截屏给亮亮的女朋友看。</p>
</blockquote>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-47.png” alt=“” /></p>
<p><strong>while循环</strong>解决此问题的思路:</p>
<ol>
<li>
<p>定义列表present存储9个礼物的名称,定义一个用于计数的变量count,并将其赋值为0</p>
</li>
<li>
<p>使用while循环进行判断,count是否小于等于4</p>
</li>
<li>
<p>如果是就格式化输出"恭喜你获得了{present[count]}一份"</p>
</li>
<li>
<p>每循环一次将count计数加1</p>
</li>
</ol>
<pre><code class=“language-python”>present = ['苹果新款手机', '苹果平板电脑', '苹果智能手表', '华为新款手机', '华为平板电脑', '华为智能手表', '小米新款手机', '小米平板电脑', '小米智能手表']

count = 0

while count <= 4 :
print(f"恭喜你获得了{present[count]}一份")
count = count + 1</code></pre>
<p><strong>for循环</strong>
除了<code>while循环</code>,我们还可以使用<code>for循环</code>来实现刚刚的效果。</p>
<p>例如:创建一个列表<code>aList = [0,1,2,3,4]</code>,使用用for循环遍历礼物列表中前五项的礼物并打印出来。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-48.png” alt=“” /></p>
<p>上面的遍历了5个数字的列表,我们可以通过创建列表的方式完成。</p>
<p>可是如果我们要遍历100个整数,或者1000个整数呢?</p>
<p>难道需要手动创建非常冗长的列表吗?no,no,no!</p>
<p>学习一种更高效的方法~</p>
<h2>遍历整数列表</h2>
<pre><code class=“language-python”>for i in range(5):
print(i)</code></pre>
<p><strong>代码的作用</strong>
<code>for i in range()</code>的功能是:遍历一个整数列表。</p>
<p>其中<code>range()</code>的功能是:创建一个整数列表。</p>
<p>例如:<code>range(5)</code>可以生成一个从0 开始到5结束但不包括5的整数列表[0,1,2,3,4]。</p>
<p><strong>for…in…</strong>
第一行,用<code>for…in…</code>结构遍历<code>range()</code>功能生成的列表中的每一个值。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-49.png” alt=“” /></p>
<p><strong>range(5)</strong>
使用<code>range()</code>功能,<strong>填入数字5,可以生成一个从0 开始到5结束但不包括5的整数列表</strong><code>[0,1,2,3,4]</code>。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-50.png” alt=“” /></p>
<p><strong>结果</strong>
for循环遍历<code>range(5)</code>生成的列表[0,1,2,3,4]
每赋值给i一次,就执行一次<code>print(i)</code>。
直到全部赋值完为止,循环才结束。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-51.png” alt=“” /></p>
<p><strong>代码小结</strong>
当我们要遍历一个整数列表就需要这几个部分
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-52.png” alt=“” /></p>
<p><code>range(5)</code>可以生成从0到4的整数列表。
如果我们<strong>需要生成从1到4的整数列表,只需要在<code>range(5)</code>中添加一个初始计数值1,改成<code>range(1,5)</code>就可以啦。</strong></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-53.png” alt=“” /></p>
<p><code>range()</code>功能中<strong>可以填写2个内容</strong>,<code>range(a,b)</code>。
a: 计数从 a 开始。<strong>默认是从 0 开始,可省略</strong>。
b: 计数到 b 结束,但<strong>不包括 b,不可省略</strong>。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-54.png” alt=“” /></p>
<p><strong>for i in range(1,9)</strong>
用for循环遍历range()生成的列表中每一个数据。</p>
<p>range(1,9)
1表示从1开始
9表示到9为止不包含9</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2549-55.png” alt=“” /></p>
<h2>小练习</h2>
<p>使用for循环,遍历5到99的整数,并输出结果。</p>
<pre><code class=“language-python”># 使用for循环遍历5到99的整数列表
for i in range(5,100):
# 输出结果i
print(i)</code></pre>
<p>请使用for循环和range()函数的知识点。
计算50以内,不包括50的正整数之和,并输出最终结果。</p>
<pre><code class=“language-python”>number = 0
for i in range(50) :
number = number + i
print(number)</code></pre>

评论区

  • 淄博测漏#1
    淄博测漏2022/7/16 10:29:06

    感谢分享,赞一个

    WindowsChrome