第10期 0基础学Python之七:条件语句

Hi 大家好,我是王可乐。前面两节课里,可乐带大家一起学习了 Python 中字符串的概念和相关操作。现在,你应该已经熟悉了数字、字符串、变量、操作符等知识。从今天开始,可乐开始为大家介绍 Python 中的流程控制语句,学习了这些内容之后,我们就可以写出来有着丰富逻辑的程序了。今天这一节课,我们先来介绍一下条件语句。

在前面的课程里,我们见到的语句都很简单。例如我们看下面的例子,打开 Python Shell,依次输入:

我们看到,Python 自上而下依次为我们执行这些语句,最后在屏幕上打印出来了四个连续的 Hello。这类语句属于简单语句,一般来说每个语句占用一行,换行就是开始了新语句。如果一个语句特别长,也可以行尾加上 \ 符号表示语句还没有结束,然后在下一行继续书写。例如,我们输入:

这就是一个语句分成了三行的写法。一个 Python 程序可以由很多个语句组成,然后 Python 解释器自上而下依次执行这些语句,也就是顺序执行。

有一点需要特殊说明的是,在前面的课程里,我们经常在 Shell 里输入一些语句来查看它们的值。例如我们输入 'Hello',回车,Shell 在下方显示 'Hello';或者我们定义了变量 x = 1,然后输入 x + 2 回车,Shell 告诉我们 x + 2 的值为 3。

除了定义 x 的赋值语句之外,其他两个是一种特殊的语句,这种语句只在交互模式下有用,写在 Python 脚本里的话则什么功能都没有。例如,我们用 Sublime 编写这样一个文件:

然后保存为文件 test.py,放在 C:\colecode\ 目录里。然后打开命令行终端,cd 切换到我们的代码目录(输入) cd C:\colecode\,回车;然后执行这个脚本:python test.py。可以看到,Python 什么都没有显示就直接退出了。

事实上,这些语句虽然是合法的语句,但在屏幕上显示结果却不是它们的功能。在 Python 解释器的交互模式下,也就是我们在 Python Shell 里执行这些语句时,解释器会执行这些语句,并把算出来的值打印出来给我们看;但是在Python 解释器的普通模式下,Python 只是执行这些语句,得到它的值,然后就丢掉了,并不 会为我们交互式地打印出来语句的值。

使用前面介绍的简单语句,我们可以完成计算、赋值、执行函数等许多功能,但是我们的程序也只能自上而下一句一句执行。如果程序里需要更复杂的功能逻辑,就需要用到条件语句等流控制语句了。

那么什么是条件语句呢?顾名思义,条件语句就是按照条件来执行的语句。我们还是先来看一个例子。打开你的终端程序,可乐这里是在"运行"对话框里输入 cmd 命令, 打开了 Windows 的命令提示符。然后输入命令 python,回车,进入打开 Shell 模式。输入:

从这个例子开始,可乐将会使用 Python 解释器的 Shell 模式给大家演示代码。这是因为可乐发现,IDLE 的 Shell 模式在书写多行代码的时候对齐很不好看。第一行代码前面有三个大于号的提示符,而第二行代码开始都是顶格对齐的;而 Python 解释器的 Shell 模式则从第二行开始有三个点的提示符,与第一行的三个大于号提示符对应,使得代码书写起来更好看。如果大家习惯了 IDLE,也可以使用它来试验可乐的例子,只是在缩进方面要特别注意哦。

好了,输入完代码,我们按回车,然后再按回车。可以看到,屏幕上打印出来了 10 is greater than 5。我们换一个 x 的值来试试,输入:

回车两次。这一次,屏幕上什么都没有打印出来。

这个例子就是一个典型的条件语句,我们来看一下。if 是条件语句的关键词,表示开始一个条件语句;关键词后面紧跟着的 x > 5 是条件表达式,它是控制条件语句的行为,当条件满足时,就执行后面的语句;条件表达式之后跟一个冒号,表示条件结束;然后在下一行里,我们先打了四个空格,然后写了一个 执行 print 函数的语句。

在这里,四个空格非常重要。和很多其他编程语言不同,Python 语言的发明人非常重视代码的格式,以至于格式不符合规定的代码都无法运行。这里的四个空格表示一层缩进,意思是 print 语句是 if 条件语句的子语句。如果我们想在 if 条件满足时执行多个语句,只需要在同一缩进层级上依次把多个语句顺序写下来就可以了,例如:

这里,两个 print 语句都是 if 条件语句的子语句,他们都只在条件满足时才会执行。Python 通过强制规定使用缩进,使得代码的格式反应了其逻辑层次,代码更容易阅读。这个强制规定也使得 Tab 键与空格混用的情况成为了不可能,虽然很多编辑器里 Tab 键和四个空格看起来都是一样长度的空白,但是混用它们的话,Python 代码就会因为缩进层级混乱而报错。此外,虽然 Python 并没有强行规定使用四个空格,如果所有缩进都使用两个空格或者一个 Tab 符,那也是可行的,但是为了代码美观,我们还是坚持在所有缩进的地方都使用四个空格。

条件语句还可以添加一个 ELSE 子句,意思是当条件不满足时,执行 ELSE 子句的内容。例如,我们稍稍修改一下刚才的例子:

我们看到,这个语句打印了 y 的值 2,因为 x > y 条件为 False。书写 EISE 子句时,else 关键字要和对应的 if 关键字保持在同一缩进层级;另外不要忘记了 else 关键词后面的冒号;最后,else 后面跟随的子句和 if 后面跟随的子句一样,都要缩进四个空格。

条件语句还可以嵌套使用,条件语句的子语句也可以是条件语句。我们来看一个稍稍复杂的例子 :

在这个例子里。这个判断 x 是否小于 10 的 if else 语句,嵌套在判断 x 是否小于 5 的 else 语句里;而判断 x 是否小于 50 的 if else 语句,则嵌套在判断 x 是否小于 10 的 else 语句里。得益于 Python 对格式的严格要求,从缩进层级上面,我们也能很清楚的看到这段代码的逻辑。

条件语句可以无限嵌套,因此也可以表达非常复杂的逻辑。不过,过多的嵌套层次也会导致代码的可读性下降,因此可乐建议大家写代码前想清楚要表达的意思,写出逻辑清晰、易维护的代码。

Python 的条件语句还支持另一个关键字 elif,它表示 else if。在条件分支较多时,使用 elif 子句可以避免过多的嵌套层级。我们还是来演示一下,把上面的复杂嵌套语句用 elif 改写一下:

这段代码和前面我们演示的嵌套 if else 代码表达了同样的意思,但是看起来更加整齐,也更加容易理解。其中的 elif 子句可以重复任意多次,只有第一个满足条件的子句才会被执行,而它之后的所有子句都会被忽略。

在前面的条件语句中,我们一直在使用比较表达式来作为条件。一个比较表达式会产生一个 True 或者 False 的值,也就是布尔类型的值(屏幕提示 bool),当表达式为 True 时就是满足了条件,而表达式为 False 时则不满足条件。

条件语句的条件可以更加复杂。首先,我们可以使用更加复杂的比较表达式,或者比较复杂的布尔表达式。例如:

这个 if 语句里的条件包括四部分,使用 and 逻辑运算符连接,也就是只有全部条件都满足时才会执行 print OK 这个语句。总的来说,执行条件语句时,Python 会先对 if 或者 elif 后面的表达式求值,如果求值得到 True,那么就执行 if 或者 elif 子句;如果得到 False,那就向后继续判断 elif 条件,或者执行 else 语句,或者如果没有其他语句了,就结束条件语句的执行。

此外,我们看到,条件里不仅可以用比较表达式,还可以用 'H' in s 等运算来作为条件。这些语句都产生 True 或者 False 的布尔值,实际上,条 件语句的条件不仅可以使用产生布尔值的表达式,还可以用很多其他的表达式,例如:

这句话执行的结果是什么呢?回车,我们看到,是 Not OK。这里,如果条件语句的条件是一个整数,或者产生整数的表达式,那么当结果为非 0 时才算满足了条件,只有结果为 0 时我们认为不满足条件。

其实 Python 条件表达式还可以是其他的很多类型,当表达式为该类型的非零值时,我们认为满足了条件。例如浮点数类型的条件为非 0.0;复数类型的条件为非 0+0j;字符串类型的条件为非空字符串,以及后面我们要讲到的非 None,非空列表和非零列表、元组、字典等。而对于布尔类型的值,它只有两个取值,其中 False 是零值,而 True 则是非零值。

不过,虽然 Python 允许我们灵活使用其他类型的表达式作为条件,但是可乐建议大家坚持使用布尔类型的表达式作为条件。

例如,(打开 Shell)假如我们要判断一个值 x 是否为非 0,并且在 x 为非零时执行一个语句,我们写条件 if x :可以达到这个目的,但是这种写法是不推荐的,因为它并不直观易懂。可乐推荐大家显式的写作 if x != 0 :,这样虽然多打了几个字母,但代码的意图更加清晰了,是更好的写法。

以上介绍这些,就是我们今天的内容。这节课里,可乐 带大家一起学习了如何使用条件语句,有了条件语句这个强大的工具,我们就可以实现一些较为复杂的逻辑了。这节课后,可乐希望大家再回顾一下我们第二节课里猜数字游戏代码,看看那里的条件语句是如何工作的。

下一节课里,可乐会开始为大家介绍一个更加强大的工具,循环语句。计算机的一个优势就是可以快速、精确而又不知疲倦的为我们执行很多重复的工作,循环语句就是实现重复的基本组件,敬请期待哦,我们下期见。

往期课程:

《0基础学Python之四:数字运算(下)》

《0基础学Python之五:字符串(上)》

《0基础学Python之六:字符串(下)》

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180326G18I0A00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券