4.1 判断语句
第4章 判断与循环
判断和循环是我们控制程序运行的常用手段。在大多数编程语言中,判断通常用if语句
,循环通常用while或for语句
。在Python中,通过if语句
来判断一系列条件的状态,并据此决定采取什么行动。在本章中,你将学习到if、while、for语句
的简单使用和一些相关代码的示例。
4.1 判断语句
先来一个简单的示例:假设你有一个英文图书列表,你想将其中每本书的名称打印出来。对于大多数图书,都应以首字母大写的方式打印其名称。但是你只想把图书名为rpa in python
以全大写的方式打印。
下面的代码将遍历这个列表,并以首字母大写的方式打印其中的图书名称,但对于图书名为rpa in python
,以全大写的方式打印。
如果您的电脑安装了ipython,直接在terminal输入
ipython
即可进入如下命令行界面
In [1]: books = ["thinking in java", "rpa in python", "mathematies for computer", "robotFrameWork in python"]In [2]: for book in books: ...: if book == "rpa in python": ...: print(book.upper()) ...: else: ...: print(book.title())
输入完以上代码后,直接回车([enter]/[return])即可执行代码。
执行代码后,输出内容如下:
可以看到图书名为rpa in python
,以全大写的方式被打印出来了;
其他的图书则以首字母大写的方式被打印
Thinking In JavaRPA IN PYTHONMathematies For ComputerRobotframework In Python
说明:在上面的示例代码中,
for循环
(注:for语句
将在后面的4.2 循环语句章节详细介绍)首先检查当前的图书名是否是rpa in python
。如果是,就以全大写的方式打印它;否则就以首字母大写的方式打印。
4.1.1 if语句
每条if语句的核心其实就是判断真假(True/False
)的表达式。Python语言中,根据if语句
的真假来决定是否执行if语句中的代码。如果if语句
的值为真(True
),那么就执行if语句
中的代码,如果为假(False
),则忽略这些代码。
什么是可以判断真假(True/False)的表达式?
- 比如:判断两个值是否相等
In [3]: book1 = "RPA IN PYTHON"In [4]: book2 = "RPA IN PYTHON"In [5]: book1 == book2Out[5]: True
说明:
=
一个等于号,表示给变量赋值。比如上面的book1 = "RPA IN PYTHON"
即给变量book1
赋值为RPA IN PYTHON
。同理book2 = "RPA IN PYTHON"
即变量book2
赋值为RPA IN PYTHON
。
==
两个等于号,表示判断左右两边的值是否相等。比如上面的book1 == book2
就是一个判断两个字符串是否相等的表达式 即 变量book1
和变量book2
的值相等吗?如果相等该表达式即为True
,反之False
。
如果将变量book2
赋值为 RPA IN JAVA
,那么上述表达式将返回false
:
In [3]: book1 = "RPA IN PYTHON"In [6]: book2 = "RPA IN JAVA"In [7]: book1 == book2Out[7]: False
- 比如:判断两个值是否相等时区分大小写
In [3]: book1 = "RPA IN PYTHON"In [9]: book2 = "rpa in python"In [10]: book1 == book2Out[10]: False
说明:在大多数语言中,默认都是区分大小写的,如上面的示例:
book1 == book2
表达式为False
。但是我们在实际的生活中,会遇到很多不想区分大小写的情况,比如:用户想在RPA之家注册一个账号,用户名输入ABC
和abc
的效果应该是一样的,因为为了确保用户名的唯一性,需要把用户输入的所有英文字母都转成小写然后去后台校验是否已有一样的用户名存在。比如下面的示例,userName1.lower() == userName2
表达式为True
。其中:lower()
方法不会改变userName1
变量本身的值,只会将变量的值转变为全小写的结果,然后将该结果和userName2
变量的值去比较是否相等,如果相等说明用户名tomas已存在,将驳回用户的注册提交申请。
In [1]: userName1 = "Tomas"In [2]: userName2 = "tomas"In [3]: userName1.lower() == userName2Out[3]: TrueIn [4]: userName1.lower()Out[4]: tomasIn [5]: userName1Out[5]: Tomas
- 比如:判断两个值是否不相等
In [3]: book1 = "RPA IN PYTHON"In [13]: book2 = "THINKING IN JAVA"In [14]: book1 != book2Out[14]: True
说明:如果想要判断两个值是否不相等,使用英文惊叹号(!)表示
不
的意思,不相等即!=
。比如:上面的代码示例就是判断book1
和book2
是否不相等,显然是不相等的,所以表达式book1 != book2
为True
。具体的业务场景代码中,可以根据不同的情况来使用判断相等或使用判断不相等。
- 比如:比较两个数的大小
In [16]: page1 = 15In [17]: page2 = 15In [18]: page1 == page2Out[18]: TrueIn [19]: page2 = 20In [20]: page1 == page2Out[20]: FalseIn [21]: page1 != page2Out[21]: True
说明:比较两个数值的大小比较简单,如上代码示例:比较一本图书的两个页码是否相等或是否不相等。其实比较两个数字的大小,不仅仅可以用等于(
==
)和不等于(!=
),还可以用小于(<
)、小于等于(<=
)、大于(>
)、大于等于(>=
)。
比如下面的代码示例:
In [16]: page1 = 15In [19]: page2 = 20In [22]: page1 < page2Out[22]: TrueIn [23]: page1 <= page2Out[23]: TrueIn [24]: page1 > page2Out[24]: FalseIn [25]: page1 >= page2Out[25]: False
- 比如:同时判断多个条件的真假
在实际的业务代码中,很多时候我们需要同时判断两个(或以上)的条件,当他们都为True时我们才执行相关操作,而有时候我们只需要两个(或以上)的条件中有一个为True,就执行我们想要的操作。这时候,我们就需要用到关键字and
和or
了。
- 使用 and 关键字判断多个条件
In [16]: page1 = 15In [19]: page2 = 20In [26]: page1 < 18 and page2 >=20Out[26]: TrueIn [27]: page1 < 10 and page2 >=20Out[27]: FalseIn [28]: page1 < 18 and page2 >=30Out[28]: False
说明:
and
关键字的含义就是,当两个(或以上)的条件同时为True,整个条件才为True,反之有一个条件不为True,整个条件即为False。比如上面的代码示例:page1 < 18
表达式为True,page2 >=20
表达式为True,所以page1 =20
表达式为True。page1 < 10
表达式为False,所以page1 =20
表达式为False。page1 < 18
表达式为True,page2 >=30
表达式为False,所以page1 =30
表达式为False。
- 使用 or 关键字判断多个条件
In [16]: page1 = 15In [19]: page2 = 20In [29]: page1 < 18 or page2 >=20Out[29]: TrueIn [30]: page1 < 10 or page2 >=20Out[30]: TrueIn [31]: page1 < 18 or page2 >=30Out[31]: TrueIn [32]: page1 < 10 or page2 >=30Out[32]: False
说明:
or
关键字的含义就是,当两个(或以上)的条件有1个条件为True,整个条件即为True,反之没有一个条件为True,整个条件才为False。比如上面的代码示例:page1 < 18
表达式为True,所以page1 =20
表达式为True。page1 < 10
表达式为False,page2 >=20
表达式为True,所以page1 =20
表达式为True。page1 < 10
表达式为False,page2 >=30
表达式为False,所以page1 =30
表达式为False。
if语句与表达式
注意:如果使用if、else、elif、for、while
等关键字开始的代码行,要以冒号结束,并且其后所有代码缩进相同的量直到结束。
- 最简单的
if语句
In [16]: page1 = 15In [33]: if page1 > 10: ...: print("当前图书页码大于10!")Out[33]: 当前图书页码大于10!
说明:最简单的if语句即1个条件,1个执行。比如上面的示例代码:因为当前页码大于10,所以就执行缩进的print方法来打印输出“当前图书页码大于10!”。在python语言中,if语句为True,就会执行紧跟if语句下的代码块(注意缩进,缩进通常在输入完if语句最后一个冒号(:)后回车就会自动缩进);反之,如果为False,则不会执行该代码块。读者朋友可以重新给变量
page1
赋值为6,再次执行In [33]: 的if语句,那么你会发现命令行将不会有任何输出。
if-else 语句
In [34]: page1 = 5In [35]: if page1 > 10: ...: print("当前图书页码大于10!") ...: else: ...: print("当前图书页码不大于10!")Out[35]: 当前图书页码不大于10!
说明:结合上面最简单的
if语句
来看,我们通常都会在满足1个条件时,执行某个操作;反之,不满足时,执行另一个不同的操作。此时,我们就需要用到if-else 语句
。比如上面的示例代码:因为当前页码不大于10,所以if语句下的print不会被执行,而会执行else语句中的缩进的print方法来打印输出“当前图书页码不大于10!”。
if-elif-else 语句
In [34]: page1 = 5In [37]: if page1 > 10: ...: print("当前图书页码大于10!") ...: elif page1 > 5: ...: print("当前图书页码大于5!") ...: else: ...: print("当前图书页码不大于10也不大于5!")Out[37]: 当前图书页码不大于10也不大于5!
说明:在现实的业务中,我们通常都会遇到多个条件的情况,并根据多个条件的不同来执行不同的操作。此时,我们就需要用到
if-elif-else 语句
或者if-elif-elif-elif-else 语句
。
- 多个
elif语句
In [38]: page1 = 50In [39]: if page1 > 90: ...: print("当前图书页码大于90!") ...: elif page1 > 80: ...: print("当前图书页码大于80!") ...: elif page1 > 70: ...: print("当前图书页码大于70!") ...: elif page1 > 60: ...: print("当前图书页码大于60!") ...: elif page1 >= 50: ...: print("当前图书页码大于等于50!") ...: else: ...: print("当前图书页码小于50!")Out[39]: 当前图书页码大于等于50!
- 复杂
if语句
In [40]: page1 = 15In [41]: page2 = 20In [42]: if page1 < 10 and page2 >=20: ...: print("page1小于10 且 page2大于等于20!") ...: elif page1 < 18 or page2 >=20: ...: print("page1小于18 或 page2大于等于20!") ...: else: ...: print("其他未知情况1")Out[42]: page1小于18 或 page2大于等于20!In [42]: if page1 < 10 or page2 >=20: ...: print("page1小于10 或 page2大于等于20!") ...: elif page1 < 18 and page2 >=20: ...: print("page1小于18 且 page2大于等于20!") ...: else: ...: print("其他未知情况2")Out[42]: page1小于18 且 page2大于等于20!
读者朋友可以重新给变量
page1
和page2
赋值,来让每一个条件下的print均被执行至少1次。
4.1.2 if嵌套
if嵌套
,其实就是将4.1.1 中的多种类型的if语句
组合使用。
In [43]: status = 1In [44]: code = 'code5'In [45]: name = 'name1'In [46]: if status == 1: ...: print("如果状态是1,那么就执行print操作1。") ...: if code == 'code1': ...: print("如果状态是1 且 code是code1,那么打印这条语句1。") ...: else if code == 'code2': ...: print("如果状态是1 且 code是code2,那么打印这条语句2。") ...: else: ...: if name == 'name1': ...: print("如果状态是1 但 code 未知 且 name是name1,那么打印这条语句3。") ...: else if name == 'name2': ...: print("如果状态是1 但 code 未知 且 name是name2,那么打印这条语句4。") ...: else: ...: print("状态是1,但是其他未知,什么也不做!") ...: elif status == 2: ...: print("如果状态是1,那么就执行print操作2。") ...: else: ...: print("状态未知,什么也不做!")Out[46]: 如果状态是1 但 code 未知 且 name是name1,那么打印这条语句3。In [47]: status = 1In [48]: code = 'code5'In [49]: name = 'name2'# 然后再执行In [46]: 的语句In [50]: #同In [46]: 的语句 Out[50]: 如果状态是1 但 code 未知 且 name是name2,那么打印这条语句4。
说明:if嵌套其实就是在if条件中内嵌多个if条件,比如上面代码示例。这里不再过多赘述,读者朋友可以自己通过给变量
status
、code
、name
赋不同的值来,将所有打印语句都至少执行一次。(值得一提的是:In [50]: 不必再手动输入一遍In [46]: 的语句 ,此处可以通过方向键盘的上下箭头
来选中之前已经执行过的if语句
)