Python基础 – while循环

2022/6/21 10:16:58admin0 阅读0 评论

<h2>for循环回顾</h2>
<p>学习了如何利用for语句实现代码重复执行的循环结构。</p>
<p>通过遍历列表,输出其中的每一个元素。</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-01.png” alt=“” /></p>
<p>for循环就像是排队办事,一个个进入,轮流办理,每个人经历的流程都一样。</p>
<p>在for循环,一次遍历就是一次循环,因此我们知道会经历过几次循环。</p>
<p>在另一种情况下,我们并不关心循环几次,只在意<strong>循环什么时候结束。</strong></p>
<p>这样的循环逻辑,就对应Python中的条件循环(也叫<strong>while循环</strong>)。</p>
<h2>条件循环</h2>
<p>条件循环,又称while循环,以判断条件是否成立,来决定是否执行循环内的代码。</p>
<p>当判断为真时,代码会循环执行,当判断为假时则终止循环。</p>
<p>while循环中,有一个判断条件,来决定是否执行循环内的代码。</p>
<p><strong>判断为True,则继续执行循环;</strong>
<strong>判断为False,就会中止循环。</strong></p>
<p>这样的判断条件,我们称为——<strong>边界条件</strong>。</p>
<h2>边界条件</h2>
<p>while循环的边界条件,是指终止循环的那个判断条件。
边界条件为False,则中止循环。</p>
<p>(隐喻:跑圈的时候,条件为小于10圈就一直跑。直到跑到10圈,教练吹哨,就停止跑圈。)</p>
<p>理解了while循环的概念,来看看代码的语法格式。</p>
<p>同样是输出一个列表里面的所有元素,如何使用while循环来完成</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-02.png” alt=“” /></p>
<h2>while循环</h2>
<pre><code class=“language-python”>nameList = ["Max","Tom","Jim","Ken","Kim"]
counter = 0
while counter < 5:
print(nameList[counter])
counter = counter + 1</code></pre>
<p><strong>代码的作用</strong>
这5行代码使用了while循环把列表的元素全部输出出来。</p>
<p>第3行使用while循环,<strong>判断Counter是否小于5。若是,就进入循环;若不是,程序就终止。</strong></p>
<p>第4行,条件为True时,输出列表nameList中索引为Counter的元素;</p>
<p>第5行,在条件为True时,用Counter计数,继续回到第3行代码,不断循环,直到while循环判断为False,程序结束。</p>
<p><strong>counter初始化</strong>
变量counter赋值0,进行初始化。
<img src=“http://src.moshanghua.net/images/2022/06/msh-2545-03.png” alt=“” /></p>
<p><strong>while</strong>
使用关键词while,表明我们要在这里开始执行“while循环”的代码结构。
<img src=“http://src.moshanghua.net/images/2022/06/msh-2545-04.png” alt=“” /></p>
<p><strong>边界条件</strong>
边界条件,如果该条件成立(True=真),就执行下面的缩进代码;</p>
<p>如果该条件不成立(False=假),就终止循环。
<img src=“http://src.moshanghua.net/images/2022/06/msh-2545-05.png” alt=“” /></p>
<p><strong>英文冒号:</strong>
一个冒号,循环语句的固定格式,表明接下来缩进的代码块,在每次边界条件为True的时候,都要执行。
<img src=“http://src.moshanghua.net/images/2022/06/msh-2545-06.png” alt=“” /></p>
<p><strong>四个空格</strong>
四个空格,循环缩进的固定格式,表明同样缩进的代码在每次边界条件为True的时候,都要执行。
<img src=“http://src.moshanghua.net/images/2022/06/msh-2545-07.png” alt=“” /></p>
<p><strong>循环内代码</strong>
缩进后的代码,是一个代码块,是循环中要执行的部分。
<img src=“http://src.moshanghua.net/images/2022/06/msh-2545-08.png” alt=“” /></p>
<p>(while循环运行流程)</p>
<p>while标志着开始进入条件循环,判断这时的counter是否小于5,由于上面定义了counter初始化赋值为0,小于5满足条件,因此进入循环</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-09.png” alt=“” /></p>
<p>在第一次循环中,输出了列表索引为0的元素Max</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-10.png” alt=“” /></p>
<p>然后counter + 1 ,重新赋值给counter,也就是0+1 变为1</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-11.png” alt=“” /></p>
<p>重新又判断一次,此时的counter是否小于5,由于counter刚刚修改为1,小于5满足条件,依旧进入循环,输出</p>
<p>列表索引为1的元素Tom</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-12.png” alt=“” /></p>
<p>然后counter +1 重新赋值给counter,就变成了1+1 变为 2</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-13.png” alt=“” /></p>
<p>重新又一次进行判断,满足条件后,继续进入循环,输出此时索引是counter的元素 Jim</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-14.png” alt=“” /></p>
<p>然后counter + 1,再一次进入判断看是否满足条件</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-15.png” alt=“” /></p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-16.png” alt=“” /></p>
<p>直到counter +1 之后,值变为5,进行判断时,5 < 5 不成立,返回False,就终止了这个循环,这就是while循环过程。</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-17.png” alt=“” /></p>
<p><strong>代码小结</strong></p>
<p>通过如下格式在代码中使用<strong>while循环</strong></p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-18.png” alt=“” /></p>
<h3>小练习</h3>
<p>(一)</p>
<pre><code class=“language-python”>sum= 0
counter= 0
while counter < 5:
sum = sum + counter
counter = counter + 1
print(sum)</code></pre>
<p>一段累加代码,输出的结果依次是0 1 3 6 10
sum是累加器,counter是计数器,都初始化为0,
然后进入while循环,sum和counter的值相加赋值给sum,
counter+1,输出sum的值,本次循环结束,进入下一循环。
直到counter小于5不成立,循环结束。</p>
<p>(二)</p>
<pre><code class=“language-python”>sum= 0
counter= 0
while counter < 5:
sum = sum + counter
counter = counter + 1
print(sum)</code></pre>
<p>和上一段代码唯一不同之处在于print()语句所在的位置不一样。</p>
<p>上一段,在循环中输出,所以循环进行五次,就输出了五个值。</p>
<p>而本段代码中,print()在while循环之外,并且和while循环处于同一层级,循环结束以后才会执行print,<strong>输出最终的值</strong>。</p>
<p>(三)</p>
<pre><code class=“language-python”>sum= 0
counter= 0
while counter < 5:
counter = counter + 1
sum = sum + counter
print(sum)</code></pre>
<p>本段(三)和上段(二)的不同之处,在于累加器sum和计数器counter的位置。</p>
<p>本段代码中,counter先+1,sum再被赋值,所以在每一次循环中,counter都是先+1以后再与sum累加计算的,
当循环执行到第五次的时候,counter等于4,进入循环以后,counter自增等于5 ,sum等于15(1+2+3+4+5),不满足条件,循环结束,
输出sum的值为15。</p>
<hr />
<p>for循环是有天然的边界条件——完成遍历。
但while循环是有可能一直运行的。<strong>只要边界条件为真,它就会一直执行下去。</strong>
比如图中代码就会永远执行,这种循环我们又叫做”死循环”。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2545-20.gif” alt=“” /></p>
<h2>死循环</h2>
<p>死循环是一种循环类型, <strong>当一个循环永远无法终止</strong>的时候,我们就说它是一个死循环。</p>
<p>死循环会一直运行下去。</p>
<p>如图,由于边界条件永远为True,因此,循环会一直进行下去,永远不会停止。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2545-20.gif” alt=“” /></p>
<p>一般来说“死循环”是一个bug,它会导致程序一直无意义运行,我们在写代码的时候一定要尽量去避免。</p>
<p>图中,我们修改一下之前的代码,就不会进入死循环了。因为在执行完print()以后我们给tag变量赋值了False,此时while的判断条件为False,循环就结束了。</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-21.png” alt=“” /></p>
<h2>for循环和while循环区别</h2>
<p>总结一下,从代码的执行结果来看,for循环和while循环,都可以实现相同的功能。</p>
<p>但<strong>他们的区别在哪呢</strong>?</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-22.png” alt=“” /></p>
<p>第一个区别:
<strong>for循环</strong>是在每一次循环的时候,按照<strong>从头到尾的顺序自动遍历</strong>,给变量name赋值列表中的元素;</p>
<p>而<strong>while循环</strong>是用<strong>一个计数器来索引列表</strong>,分别访问这个列表里面的每个元素。</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-23.png” alt=“” /></p>
<p>第二个区别:
循环的终止条件不一样。</p>
<p><strong>for循环的终止条件是遍历完这个列表;</strong></p>
<p><strong>while循环的终止条件是边界条件</strong>,<code>counter < 5</code>,当边界条件为True的时候继续执行代码,为False的时候就终止执行。</p>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-24.png” alt=“” /></p>
<p>简而言之,需要记住三条。</p>
<ol>
<li>
<p>for循环常用于处理列表内的每个元素。</p>
</li>
<li>
<p>for循环有天然的边界条件,while循环没有,需要我们精心设计边界条件。</p>
</li>
<li>
<p>大多数时候,for循环和while循环可以互换使用。</p>
</li>
</ol>
<p><img src=“http://src.moshanghua.net/images/2022/06/msh-2545-25.png” alt=“” /></p>
<h3>小练习</h3>
<pre><code class=“language-python”>number = 100
while number >= 0:
print(number)
number = number - 1</code></pre>
<p>这段代码实现了输出100以下的非负整数。
第1行给number赋值100;
第2行,执行while循环,判断number是否>=0,如果是,就执行循环内的语句。
第3行输出了当前的number。
第4行,number-1再赋值给number,得到新的number再次进入循环</p>