Open xuzhengfu opened 4 years ago
循环也是一种常见结构,它代表了一种常见模式:批处理。 计算机特别擅长的就是重复劳动,不知疲倦而且不走样,我们的程序经常是一次处理一组数据,对其中的每个数据做一些操作,然后下一个,然后下一个…… 直到这组数据都处理完,这就是循环的基本概念了。 循环可以用下面的逻辑来表述: 从一组数据 S 中取出下一个数据 x => x 是一个变量,这对应一个赋值语句; 对 x 执行若干操作 => 这对应一个代码段,里面可以有各种操作符和函数; 如果 S 中还有未取出的数据,则回到第 1 步继续 => 这对应一个逻辑判断 if...else,但这个 “回到第 1 步” 是什么呢? 结束。
循环也是一种常见结构,它代表了一种常见模式:批处理。
计算机特别擅长的就是重复劳动,不知疲倦而且不走样,我们的程序经常是一次处理一组数据,对其中的每个数据做一些操作,然后下一个,然后下一个…… 直到这组数据都处理完,这就是循环的基本概念了。
循环可以用下面的逻辑来表述:
if...else
我们前面介绍的 值与变量、操作符与函数、逻辑判断 与 if...else 分支,已经构成了相当完整的程序 “写作工具”,可以从理论上证明这套写作工具能写出任何我们想要的程序(只要是能用计算机解答的问题),不过有些逻辑表述起来会有些麻烦,或者不那么易懂,所以一般的编程语言会针对这些问题再提供一些附加的 “写作工具”,这一章的 循环 和下一章的 异常处理 都是这种性质。
最早的一批编程语言对这个操作的实现真的就是按照 “回到第 1 步” 的字面意思做的,就是使用 goto 指令的跳转语句,这个语句让计算机跳到指定的一行执行,这样我们就可以复用上面的第 1 和第 2 步,不断的循环执行它们。不过后来 goto 语句闯了祸,被人类封印了,说白了就是 goto 太自由太强大了,可以在程序中任意的指定下一个执行的语句,当程序变大变复杂时导致程序的执行顺序非常难以预测,程序就很容易出错。这段历史非常深刻的改变了编程世界的方方面面,我们后面介绍 结构化编程 和 面向对象 时还会讲到这个故事。 人们转而使用一种 “有限制的跳转” 来实现循环,Python 支持两种形式的循环语句,分别是 for 循环 和 while 循环。
最早的一批编程语言对这个操作的实现真的就是按照 “回到第 1 步” 的字面意思做的,就是使用 goto 指令的跳转语句,这个语句让计算机跳到指定的一行执行,这样我们就可以复用上面的第 1 和第 2 步,不断的循环执行它们。不过后来 goto 语句闯了祸,被人类封印了,说白了就是 goto 太自由太强大了,可以在程序中任意的指定下一个执行的语句,当程序变大变复杂时导致程序的执行顺序非常难以预测,程序就很容易出错。这段历史非常深刻的改变了编程世界的方方面面,我们后面介绍 结构化编程 和 面向对象 时还会讲到这个故事。
goto
人们转而使用一种 “有限制的跳转” 来实现循环,Python 支持两种形式的循环语句,分别是 for 循环 和 while 循环。
for
while
Python 的 for 循环可以对一组数据做循环,比如给出一个列表,可以针对列表里每个元素按顺序循环一遍。
[x] 什么是列表?
列表就是方括号括起来的一串数据,里面每个数据可以是任何类型,并且是有序排列的。
primes = [2, 3, 5, 7] for prime in primes: print(prime)
for prime in primes 的意思是,从 primes 中取出下一个元素,将其赋值给 prime(这个变量叫做“循环变量”),然后运行下面缩进的代码段; 在 for 语句最后冒号下面缩进的代码段,叫做“循环体”,是循环中反复执行的片段,这里我们简单地调用 print() 函数打印循环变量 prime 的值; 循环体执行完毕就回到第1步执行 for 那一行,直到 primes 中取不出下一个元素,即列表循环完毕,整个循环结束。
range()
Python 提供有一个内置函数 range() 可以构造任何 整数等差数列,经常拿来和 for 循环一起用。
在官方手册中 range() 函数的参数是这么定义的:
range(stop) range(start, stop[, step])
上面的文档说明 range() 这个函数有两个版本:第一个接受一个参数;第二个接受三个参数,其中最后一个有缺省值,所以可以不提供(方括号括起来的部分表示有缺省值、可提供可不提供的参数,这个方括号和上面表示列表的不是一回事哦): 第一个版本中,唯一的参数是 range() 要构造的数列的上限,range(stop) 会输出从 0 到 stop-1 的 整数列; 第二个版本中,前两个参数分别是 range() 要构造的数列的下限和上限,range(start, stop) 会输出从 start 到 stop-1 的 整数列;如果还提供了第三个参数 step,这是等差数列的公差,range(start, stop, step) 会输出 [start, start+step, start+step*2,...] 这样一列整数,最大不超过 stop-1。
上面的文档说明 range() 这个函数有两个版本:第一个接受一个参数;第二个接受三个参数,其中最后一个有缺省值,所以可以不提供(方括号括起来的部分表示有缺省值、可提供可不提供的参数,这个方括号和上面表示列表的不是一回事哦):
第一个版本中,唯一的参数是 range() 要构造的数列的上限,range(stop) 会输出从 0 到 stop-1 的 整数列; 第二个版本中,前两个参数分别是 range() 要构造的数列的下限和上限,range(start, stop) 会输出从 start 到 stop-1 的 整数列;如果还提供了第三个参数 step,这是等差数列的公差,range(start, stop, step) 会输出 [start, start+step, start+step*2,...] 这样一列整数,最大不超过 stop-1。
range() 输出的是一个 “迭代器(iterator)”,是 Python 非常有特色也非常强大的工具,可惜目前我们还不容易搞清楚这个东西,我们把它放在第四部分中,学完迭代器顺便还能知道 for 循环的本质是什么。
for 可以循环的东西远不止列表,我们在第四部分介绍迭代器的时候会再回来讨论 for 循环。
while 循环是更一般化的一种循环结构,基本上就是我们在本章开头描述的 “只要某条件成立就继续循环,否则结束循环” 的逻辑,那个使得循环继续的条件叫做 “循环条件”。 和 for 循环不一样,while 的循环条件非常自由,完全由我们的代码来控制,这样的好处是可以处理各种情况的循环,坏处是,有可能玩砸掉。 count = 0 while count < 5: print(count) count += 1 试想上面的循环,如果我们在循环体里没有给 count 执行 +1,那么 count 的值就永远也不会达到和超过 5,这个循环就会无限进行下去,直到这个页面挂掉。所以在写 while 循环时要特别小心的检查,确保循环条件是会终止的,避免出现无限循环的情况。
while 循环是更一般化的一种循环结构,基本上就是我们在本章开头描述的 “只要某条件成立就继续循环,否则结束循环” 的逻辑,那个使得循环继续的条件叫做 “循环条件”。
和 for 循环不一样,while 的循环条件非常自由,完全由我们的代码来控制,这样的好处是可以处理各种情况的循环,坏处是,有可能玩砸掉。
count = 0 while count < 5: print(count) count += 1
试想上面的循环,如果我们在循环体里没有给 count 执行 +1,那么 count 的值就永远也不会达到和超过 5,这个循环就会无限进行下去,直到这个页面挂掉。所以在写 while 循环时要特别小心的检查,确保循环条件是会终止的,避免出现无限循环的情况。
在 for 和 while 的循环体里可以执行 break 和 continue 两个命令: break 直接终止整个循环,跳到循环体之后的代码执行; continue 跳过本次循环余下的代码,直接回到 for(取下一个元素)或者 while(进行循环条件检查)。 这两个命令一般用于特定边界情况的处理。
在 for 和 while 的循环体里可以执行 break 和 continue 两个命令:
break
continue
break 直接终止整个循环,跳到循环体之后的代码执行; continue 跳过本次循环余下的代码,直接回到 for(取下一个元素)或者 while(进行循环条件检查)。 这两个命令一般用于特定边界情况的处理。
循环就是反复执行一组特定操作,也是程序中常见的结构; Python 中的 for 循环可以针对一组数据进行循环,而 while 则是根据循环条件成立与否来决定循环是否继续; 可以使用 continue 和 break 语句来改变循环的执行流程。
2020-02-21 01:11:03 initialize
1. 了解 循环的基本概念
2. 了解 for 循环
[x] 什么是列表?
range()
有何用处?range()
函数?range()
输出的是什么?3. 了解 while 循环
4. 了解 break 和 continue
小结
Logging
2020-02-21 01:11:03 initialize