Python基础 – for循环

2022/6/20 13:45:14admin0 阅读0 评论

<h2>for循环的基础操作</h2>
<p>循环是计算机程序的三大语句结构之一。</p>
<p>它是在满足条件的情况下,反复执行某一段代码的计算过程。</p>
<p>假设,现在我们需要输出以下列表中的每个元素,你会怎么做呢?</p>
<p><code>numberList = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]</code></p>
<p>可以通过索引,将列表中的元素一个一个的输出。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-01.png” alt=“” /></p>
<p>如果列表中的元素不止五项,而是几十项,甚至是几百项,我们还要大量重复编写print() 和列表索引么?这可太麻烦了。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-02.png” alt=“” /></p>
<p>接下来,我们试着用【循环】简化这段代码。</p>
<pre><code>numberList = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
for number in numberList:
print(number)</code></pre>
<p>原本需要编写 10 行的代码,现在使用【循环】后,编写方便了很多。</p>
<p>在 Python 中,循环语句有两类:
for 循环和 while 循环</p>
<h3>for 循环的结构</h3>
<pre><code class=“language-python”>numberList = [10, 20, 30, 40, 50, 60]

for number in numberList:
print(number)</code></pre>
<p>代码的作用
这三行代码使用了 for 循环将列表 numberList 里面的所有元素全部输出出来。</p>
<p><strong>for</strong>
使用关键字 for,表明要在这里开始执行“for循环”的代码结构。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-03.png” alt=“” /></p>
<p><strong>in</strong>
使用关键词 in,和 for 搭配,表明我们要把 in 后面的列表里面的数据元素赋值给前面的变量。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-04.png” alt=“” /></p>
<p><strong>变量</strong>
表示一个变量,在 for 循环里面用来存储列表中的元素。
在本例代码中,列表 numberList 中有 6 个元素,变量 number 会被赋值 6 次。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-05.png” alt=“” /></p>
<p><strong>列表</strong>
列表中里面的元素会被分别赋值给变量,直到最后一个元素完成赋值,循环才结束。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-06.png” alt=“” /></p>
<p><strong>冒号</strong>
循环语句的固定格式,表明接下来缩进的代码是每次循环都要执行的。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-07.png” alt=“” /></p>
<p><strong>缩进</strong>
同样缩进的代码就是一个代码块,在每次循环中都要执行。
在这里,建议缩进四个空格,和 if 语句类型的缩进一样,保持同一种代码风格。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-08.png” alt=“” /></p>
<p><strong>循环内</strong>
循环内的代码块,直到列表 numberList 中的元素被全部赋值完,循环才结束。
在本例中,由于列表 numberList 中的元素有 6 个,print()就要执行 6 次。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-09.png” alt=“” /></p>
<p><strong>代码小结</strong>
通过如下格式在代码中使用for循环
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-10.png” alt=“” /></p>
<pre><code class=“language-python”># TODO 定义列表fruitList
fruitList = ["apple", "grape","cherry"]

TODO for循环列表fruitList,将元素赋值给变量fruit

for fruit in fruitList :
# TODO 输出变量fruit
print(fruit)</code></pre>
<pre><code class=“language-python”># 使用 for 循环,利用切片获取列表中的第二项到第六项元素,分别赋值给一个变量 number,然后使用 print() 输出这个变量。

定义列表numberList

numberList = [10, 20, 30, 40, 50, 60]

TODO for循环列表中的第二项到第六项元素

for number in numberList[1:] :
# TODO 输出列表的元素
print(number)</code></pre>
<h3>for 循环的运行流程</h3>
<p>当程序执行完 for 循环后,如果同一层级(缩进一致)还有代码未执行,则按照顺序,继续自上而下执行。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-11.png” alt=“” /></p>
<p>本例中,第2行和第3行的循环,执行 6 次以后,列表 numberList 中所有元素都被访问完了,for 循环结束。
<strong>变量 number 被赋值 6 次,循环结束后,变量 number 的值为 60。</strong></p>
<p>程序继续执行下面和 for 循环处于同一层级代码,输出变量 number,在运行结果中就输出了 60。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-12.png” alt=“” /></p>
<p>for 循环的灵活之处在于,它会根据列表中的元素个数,自动调节循环的次数。
也就是说,for 循环能自动遍历一个列表里面的所有元素。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-13.png” alt=“” /></p>
<h3>遍历</h3>
<p>遍历是指通过某种顺序对一个数据结构中的所有元素进行访问。</p>
<p><strong>for循环</strong>不仅<strong>可以遍历列,还可以遍历字典、元组、甚至字符串等数据结构。</strong>
<strong>遍历元组和字符串与遍历列表的代码几乎一样,也是逐个获取元组或字符串的每个字符。</strong>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-14.png” alt=“” /></p>
<p><strong>for 循环遍历字典稍微有一些区别。</strong>
字典是键值对的组合,那么对字典的遍历就包含【键,值,键和值】三种情况。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-15.png” alt=“” /></p>
<p><strong>遍历字典的键</strong>
for 循环遍历字典的键,有两种方法可以使用:</p>
<ol>
<li>
<p>for 循环遍历字典;
这个方法和 for 循环遍历列表的格式类似。</p>
</li>
<li>
<p>for循环遍历字典中的所有键;
使用 for 循环遍历 dict.keys(),将字典中的键赋值给变量,再通过 print() 输出变量。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-16.png” alt=“” /></p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-16.png” alt=“” />
</li>
</ol>
<p><strong>遍历字典的值</strong>
遍历字典的值,可以通过查字典的方式,也就是通过字典的键找到对应指定的值。
<strong>首先使用 for 循环遍历字典,将键赋值给变量</strong>,通过<code>dict[键]</code>的方式找到<code>对应的值</code>,<code>并赋值给新的变量</code>。</p>
<p>接着使用 print()输出这个变量,即可遍历字典的值。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-17.png” alt=“” /></p>
<p>遍历字典的键和值
上面演示的是使用 for 循环遍历字典的键和字典的值,如果想要同时输出字典的键和值,该怎么办呢?
这时,可以在循环内部分别输出字典的键和对应的值。</p>
<p><strong>注意,在 for 循环中,一次循环会把循环内的代码全部执行完后,再开始下一次循环。</strong>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-18.png” alt=“” /></p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-18.png” alt=“” />
<p>在本例中,for 循环遍历字典productItems,在第一次循环中,变量 key 被赋值为"口香糖"。
进入循环中,第3行代码获取到"口香糖"对应的值 15,并赋值给变量 value,在第4行和第5行分别输出"口香糖"和15。
接着进入第二次循环,变量 key 被赋值为"可乐",就这样执行完循环内的代码,再开始下一次循环,直到循环结束。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-19.png” alt=“” /></p>
<pre><code class=“language-python”># 修改年龄

刘老师在录入学生年龄时,不小心输入错了学生年龄,现在她想要把学生的年龄批量修改,这该如何操作呢?

1. 首先定义一个叫作 studentAge 的字典,{"Gary": 14, "Adam": 13, "Jack": 15, "Max":13, "Tim":14}。

2. for 循环遍历字典 studentAge,将字典的键赋值给变量key;

2.1 利用字典键查找值的方法,将字典中全部的值修改为 16。

3. for 循环结束后,输出字典studentAge。

TODO 定义字典studentAge

studentAge = {"Gary": 14, "Adam": 13, "Jack": 15, "Max":13, "Tim":14}

TODO for循环字典studentAge

for key in studentAge :
# TODO 修改字典的值为16
studentAge[key] = 16

TODO 输出字典studentAge

print(studentAge)</code></pre>
<pre><code class=“language-python”>studentAge = {"Gary": 14, "Adam": 13, "Jack": 15, "Max":13, "Tim":14}
for key in studentAge :
print(key)
print(studentAge[key])</code></pre>
<h2>for循环的复杂应用</h2>
<p>学习了 for 循环遍历列表、字典等数据的方式。</p>
<p>了解学习下for 循环与“累加” 、if 判断和“计数器”的结合运用。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-21.png” alt=“” /></p>
<p>学过运用四则运算,计算 a 和 b 的和。</p>
<p>如果,要计算列表 jdList 中所有元素的和,该怎么操作呢?</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-22.png” alt=“” /></p>
<p>这种情况下,了解下"累加"的概念。</p>
<p>什么是“累加”呢?</p>
<p>例如,往瓶子里不断地放硬币的过程,就是“累加”。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-23.png” alt=“” /></p>
<h3>for 循环与“累加”</h3>
<pre><code class=“language-python”>jdList = [3, 1.5, 4, 2]
total = 0
for price in jdList:
total = total + price
print(total)</code></pre>
<p>代码的作用
这5行代码的功能就是,计算列表中的所有元素的总和并输出。</p>
<p><strong>定义列表</strong></p>
<p>第1行定义了列表 jdList ,列表中的四个元素都是可计算的数值(整型或浮点型)。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-24.png” alt=“” /></p>
<p><strong>初始值</strong></p>
<p>我们需要用一个变量来存储总和,第2行定义变量 total ,将0赋值给变量,这个过程就是设置初始值。</p>
<p><strong>注意:这里的初始值需要定义在 for 循环的外侧,若定义在 for 循环中,每次循环变量都会重新赋值。</strong></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-25.png” alt=“” /></p>
<p><strong>遍历列表</strong></p>
<p>第3行使用<code>for…in… </code>结构<strong>遍历列表 jdList ,依次取出每个元素。</strong></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-26.png” alt=“” /></p>
<p><strong>累加</strong></p>
<p>第4行使用加法,计算 total 和 price 的和,再赋值给 total。</p>
<p><strong>注意:根据四则运算规则,先计算等号("=")右边内容,再将计算结果赋值给左边变量。</strong></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-27.png” alt=“” /></p>
<p><strong>(累加计算过程)</strong>
for循环第一次取出的元素price的值为3</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-28.png” alt=“” /></p>
<p>然后第一次对列表中的元素进行累加,total的初始值为0,price的值为3,两者相加和为3,赋值给total</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-29.png” alt=“” /></p>
<p>第二次循环时,price的值为1.5</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-30.png” alt=“” /></p>
<p>total的值为3,两者相加和为4.5,再赋值给total</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-31.png” alt=“” /></p>
<p>第三次循环时,price的值为4</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-32.png” alt=“” /></p>
<p>total的值为4.5,两者相加为8.5</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-33.png” alt=“” /></p>
<p>最后一次循环,price的值为2</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-34.png” alt=“” /></p>
<p>total的值为8.5,两者相加的结果为10.5</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-35.png” alt=“” /></p>
<p>循环结束后,print输出的total就是10.5</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-36.png” alt=“” /></p>
<p><strong>结果</strong></p>
<p>当 for 循环遍历结束后,此时,total 的值为最后一次计算的结果。</p>
<p>第5行,使用 print() 输出的就是列表中四个数据的总和。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-37.png” alt=“” /></p>
<p><strong>代码小结</strong></p>
<p>当使用累加来计算时,就需要这几部分</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-38.png” alt=“” />
以上就是一个“累加”的应用演示。</p>
<p>但在列表的操作中,不仅有总和的计算。接下来,学习记录元素在列表中位置的方法。</p>
<h3>计数器的应用</h3>
<p>例如:班主任有一个学生名单,需要按照顺序输出,第1名是xx,第2名是xx。</p>
<p>一般我们会使用索引,一行行输出,点击「run」直接运行即可。</p>
<pre><code class=“language-python”>names = ["Tom", "Tim", "Amy", "Eva"]
print(f"第1名是{names[0]}")
print(f"第2名是{names[1]}")
print(f"第3名是{names[2]}")
print(f"第4名是{names[3]}")</code></pre>
<p>但是这样一行行的输出太繁琐了。</p>
<p>为了解决这个问题,可以使用“计数器”来记录当前的遍历位置。</p>
<p>(什么是“计数器”? “计数器”与“累加”的用法类似,在日常生活中,用来统计当前项目的进度)</p>
<p>因此,班主任输出学生排名,可以在遍历姓名的同时,使用“计数器”统计当前位置。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-40.png” alt=“” /></p>
<p>(计数器计算过程)</p>
<p>for循环第一次遍历列表,</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-41.png” alt=“” /></p>
<p>然后使用count进行计数,此时count的值为0,+1,赋值给count,于是count的值为1.</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-42.png” alt=“” /></p>
<p>同时数出那names列表里的第一个元素是Tom,于是输出"第一名是Tom"</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-43.png” alt=“” /></p>
<p>第二次继续遍历</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-44.png” alt=“” /></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-45.png” alt=“” /></p>
<p>每次遍历count的值就加1
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-46.png” alt=“” /></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-7.png” alt=“” /></p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-48.png” alt=“” /></p>
<p>直到遍历完成。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-49.png” alt=“” /></p>
<h3>if判断的复杂应用</h3>
<p>学习了“累加”和“计数器”的用法后,但是部分情况下,我们不一定会对列表中的每个元素都进行累加,如果只取部分,该怎么处理呢?</p>
<p>如图所示,列表中已售罄商品使用"-"表示,想要剔除"-",统计剩余商品总价,该怎样计算呢?</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-51.png” alt=“” /></p>
<p>这时,需要使用 if 语句,先判断再计算。</p>
<p>如图所示,逐个取出列表中的元素,使用 if 判断,元素不等于"-"时,再进行累加。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-52.png” alt=“” /></p>
<p>整理前面的思路,剔除"-"计算列表 jdList 的商品总价代码如图。</p>
<p>第4行,if 判断 price 不等于 "-" 时,使用累加计算总价。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-53.png” alt=“” /></p>
<p>在 for 循环中使用 if 语句时,需要注意缩进。</p>
<p>第一个缩进,上节课学过 for 循环中的代码需要增加缩进,表明是一个代码块。</p>
<p>第二个缩进,使用 if 语句时,语句里面的内容也需要增加缩进。</p>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-54.png” alt=“” /></p>
<p>使用 for 循环和 if 语句时,需要注意 print() 的位置。</p>
<ol>
<li>当 print() 在 for 循环中缩进四个空格时,按照代码执行顺序,遍历每个元素后再输出。</li>
</ol>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-55.png” alt=“” /></p>
<ol start=“2”>
<li>当 print() 位置在 if 语句的代码中时,表明 print() 是 if 代码块中的内容。
只有在 if 判断的情况成立时,才会执行 print() 。</li>
</ol>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-56.png” alt=“” /></p>
<ol start=“3”>
<li>当 print() 位置与 if 语句缩进相同,按照代码执行的顺序,先执行 if 语句块,然后执行 print() 。
因此,这里输出的内容也是列表中所有的元素。</li>
</ol>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-57.png” alt=“” /></p>
<ol start=“4”>
<li>当 print() 位置与 for 循环缩进相同时,按照代码执行顺序,循环结束后,再执行 print() 语句。
因此,输出的内容为最终结果。</li>
</ol>
<p><img src=“https://assets.moshanghua.net/images/2022/06/msh-2533-58.png” alt=“” /></p>
<h3>小练习 - 奇数的个数</h3>
<p>要求:</p>
<ol>
<li>
<p>定义变量 count ,初始值为0,用于计算奇数的个数;</p>
</li>
<li>
<p>使用 for 循环遍历列表,在循环中使用 if 语句判断,当元素为奇数时,将计数器 count 的值加一。</p>
</li>
<li>
<p>循环结束后,使用 print() 输出 count 。</p>
</li>
</ol>
<pre><code class=“language-python”># 定义numbers存储
numbers = [33.2, 4, 5, 7, 1, 2.8, 7, 5]

定义count初始值为0

count = 0

遍历列表,使用 if 判断num取模等于1时

count计数加1,输出最终个数

for num in numbers:
if num % 2 == 1:
count = count + 1
print(count)</code></pre>
<h3>小练习 - 奇数的和</h3>
<p>要求:</p>
<ol>
<li>
<p>定义变量 result ,初始值为0,用于存储所有奇数的和;</p>
</li>
<li>
<p>使用 for 循环遍历列表,在循环中使用 if 语句判断,当元素为奇数时,将元素进行累加。</p>
</li>
<li>
<p>循环结束后,使用 print() 输出 result 。</p>
</li>
</ol>
<pre><code class=“language-python”># 定义列表numbers
numbers = [33.2, 4, 5, 7, 1, 2.8, 7, 5]

定义变量result,初始值为0

result = 0

for循环遍历列表

for num in numbers:
# 使用if判断,num取模的值等于1时
if num % 2 == 1:
# result和num相加,赋值给result
result = result + num

使用print()输出结果

print(result)</code></pre>