Python自学之路五:分支,循环,迭代

在前面,我们用到很多关于数据的例子,但是没有对它们进行复杂的操作。大多数的示例代码都很短,并且使用交互式解释器进行解释执行。今天,我们将介绍如何组织代码和数据。许多计算机编程语言使用字符或者关键字来划分代码段,在这些语言中,使用一致的代码缩进可以增加代码的可读性,并且有很多便利的工具整理缩进代码。而Python语言里,是使用代码缩进来区分代码块结构,避免输入太多的花括号和关键字。Python使用空白来区分代码结构,即键盘上的“Tab”空四格,所以Python可以编写简洁的代码来进行大量的编程工作。

一、条件分支语句if

到目前为止,我们几乎一直在讨论数据结构。现在,我们将开始探讨代码结构。下面第一个例子是应该Python小程序,判断一个布尔变量a的值,然后打印输出合适的取值:

程序中,if和else两行是Python用来声明判断条件是否满足的语句,也就是“逻辑表达式”;冒号后面的是语句块,就是条件满足后执行的一组语句;冒号表示语句层次,语句块都得缩进,在Python中,代码缩进决定了if和else是如何配对的,例如下面这个程序:(注意:判断语句结尾必须要输入冒号,否则Python解释器会报错。)

在第一个判断age中,因为age的值不在[0, 6],所以程序跳转执行判断else,而age还是不属于[7, 17],所以程序继续跳转执行判断else,这一次age属于[18, 40],因此程序输出20,青年

如果要检查超过两个条件,可以用if、elif(即else if)和else:

如果想同时进行多重比较判断,可以用布尔操作符and、or或者not连接来决定表达式的取值,布尔操作符的优先级没有比较表达式的代码搞,也就是说,表达式要先计算然后再比较:

什么是真值

一个成假赋值不一定明确表示为False,下面的情况也会被认为是False:

布尔 False
null类型 Name
浮点型 0.0
空字符串 ""
空列表 []
空元组 ()
空字典 {}
空集合 set()

剩下的都会被认为是True。Python程序中使用定义“真值”的方式来判断数据结构是否为空以及成假条件,如果你在判断一个表达式而不是一个简单的变量,Python会先计算表达式的值,然后返回布尔型结果。

二、条件循环语句while

使用if、elif和else条件判断的例子是自顶向下执行的,但是有时候我们需要重复一些操作——循环。Python中最简单的循环机制是while。

循环结构

  1. 根据需要对一系列操作进行设定次数或者设定条件的重复,这样的控制流程就称作循环结构。它能持续对大量数据进行处理,在长时间里对一些未知状况进行连续监测循环结构。
  2. 基本要素是循环前提和执行语句,在执行这组语句之前,计算机会检查循环前提是否存在,只要存在,就会反复执行这组语句,直到循环前提消失。
  3. 循环前提的类型:从某个容器或者潜在的数据集中逐一获取数据项,什么时候取不到数据项了,循环的前提就消失。只要逻辑表达式计算结果为真(True),循环的前提就存在,什么时候逻辑表达式计算结果为假(False),循环的前提就消失了。
  4. 与条件分支结构的区别:循环结构会多次检查循环前提。
  5. 扩展要素:当循环前提消失,停止执行这组语句的时候,执行一次另一组语句。

while循环语法

例如下面,打开shell,执行下面的从1打印到5的简单循环:

首先将变量count的值赋为1,while循环比较count的值和5的大小关系,如果count小于等于5的话继续执行。在循环内部,打印count变量的值,然后使用语句count += 1对count进行自增操作,返回到循环的开始位置,继续比较count和5的大小关系。现在,count变量的值为2,因此while循环内部的代码会被再次执行,count值变为3。在count从5自增到6之前循环一直进行,然后下次判断时,count <= 5的条件不满足,while循环结束,Python跳到循环下面的代码。

break语句和continue语句

使用break跳出循环

如果你想让循环在某一条件下停止,但是不确定在哪次循环跳出,可以在无限循环中声明break语句跳出循环。例如下面将变量n赋值为5,n在大于0时自减1。当n小于2时,跳出循环:

使用continue跳到循环开始

有时我们并不想结束整个循环,仅仅想跳到下一轮循环的开始,就使用continue。同时,如果while循环正常结束(没有使用break跳出),程序将进入到可选的else段。例如下面我们依旧将变量n赋值为5,n在大于0时自减1。当n等于1时,就会执行continue,也就是略过print回到循环开始,循环下来n等于0,还是略过print回到循环开始,此时n > 0不成立,那么循环的前提就不存在,它就会跳出来。因为有一个else语句,那么它就会执行else后面的print语句。

三、迭代循环for

Python频繁地使用迭代器。它允许在数据结构长度未知和具体实现未知的情况下遍历整个数据结构,并且支持迭代快速读写其中的数据,以及允许不能一次读入计算机内存的数据流的处理。for语句是一种极其优雅、具有Python风格的遍历方式。列表、字符串、元组、字典、集合等都是Python中可迭代对象,它可以和while循环引用使用break、continue、else,用法一样。

元组或者列表在一次迭代过程中产生一项
字符串迭代会产生一个字符
对一个字典进行迭代将返回字典的键
如果想对字典的值进行迭代,可以使用字典的values()函数
为了以元组的形式返回键值对,可以使用字典的items函数。元组只能被初始化一次,它的值不能改变

使用range()生成自然数序列

range()函数返回在特定区间的自然数序列,不需要创建和存储复杂的数据结构,例如列表或者元组。这允许在不使用计算机全部内存的情况下创建较大的区间,也不会使你的程序崩溃。range()函数的用法类似于使用切片:range(start, stop, step),start的默认值是0,step的默认值是1,在它们分别是0和1时,可以省略不写,range()函数产生的最后一个数的值是stop的前一个,也就是说它是一个左闭右开区间;step的值可以为负数,相当于反向创建自然序列。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注