python 进阶语法

Posted 睡着的冰淇淋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 进阶语法相关的知识,希望对你有一定的参考价值。

条件(判断)语句

在 Python 中,条件语句又叫作判断语句,由 if、 elif和 else 3 种语句组成,其中 if 为强制语句,可以独立使用,elif 和 else 为可选语句,并且不能独立使用。

判断语句配合布尔值,通过判断一条或多条语句的条件是否成立(True 或 者 False),从而决定下一步的动作,如果判断条件成立(True),则执行 if 或 elif 语句下的代码;如果判断条件不成立(False),则执行 else 语句下的代码;如果没有 else 语句,则不做任何事情。

布尔值是判断语句不可或缺的部分,在基础语法中讲到的比较运算符、逻辑运算符,以及字符串自带的 startswith()、endswith()、isdigit()、isalpha()等方法,还有下面将会讲到的成员运算符等都会返回布尔值,下面就举例讲解它们各自在 Python 判断语句中的应用场景。

通过比较运算符做判断

因为使用比较运算符后会直接返回布尔值,所以比较运算符在判断语句中会经常被用到,举例如下。

首先我们用脚本模式写一段代码。

[root@CentOS-Python ]# cat lab.py
# coding=utf-8
final_score = input(请输入你的 CCNA 考试分数:)
if int(final_score) > 811:
print (恭喜你通过考试。)
elif int(final_score) == 811:
print (恭喜你压线通过考试。)
else:
print (成绩不及格。)

这段代码需要注意以下几点。

1、写在 if、elif 和 else 下的代码都有做代码缩进,也就是 print()函数的前面保留了 4 个空格。不同于 C/C++/Java 等语言,Python 要求严格的代码缩进,目的是让代码工整并且具有可读性,方便阅读和修改。缩进不一定必须为 4个空格,两个空格甚至 8 个空格都是允许的,目前最常见的是 4 个空格的缩进。

2、if、elif 和 else 语句的结尾必须接冒号 :这点需要注意。

3、input()函数的返回值是字符串,因为要与 811 这个整数做比较,所以需要通过 int()函数先将 final_score 从字符串转换为整数。

4、与 if 和 elif 语句不同,else 后面不需要再给任何判断条件。

运行这段脚本看效果。

[root@CentOS-Python ]# python3.8 lab.py
请输入你的 CCNA 考试分数:1000
恭喜你通过考试。
[root@CentOS-Python ]# python3.8 lab.py
请输入你的 CCNA 考试分数:811
恭喜你压线通过考试。
[root@CentOS-Python ]# python3.8 lab.py
请输入你的 CCNA 考试分数:700
成绩不及格。
[root@CentOS-Python ]#

通过字符串方法+逻辑运算符做判断

当使用 input()函数让用户输入内容时,你无法保证用户输入的内容合乎规范。

比如你给用户 6 个选项,每个选项分别对应一个动态路由协议的名称(选项 1:RIP;选项 2:IGRP;选项 3:EIGRP;选项 4:OSPF;选项 5:ISIS;选项 6:BGP),提示用户输入路由协议的选项号码来查询该路由协议的类型,然后让 Python 根据用户输入的选项号码告诉用户该路由协议属于链路状态路由协议、距离矢量路由协议,还是路径适量路由协议。

这里你无法保证用户输入的肯定是整数,即使用户输入的是整数,也无法保证输入的是 1~6 的数字。

因为 input()函数的返回值是字符串,所以可以首先使用字符串的 isdigit()函数来判断用户输入的内容是否为整数,这是判断条件之一。

然后通过 int()将该字符串数字转换成整数,继续判断该整数是否介于 1 和 6 之间(包含 1 和 6),这是判断条件之二。

再将这两个判断条件通过逻辑运算符 and 来判断它俩是否同时成立。如果成立,则返回相应的答案;如果不成立,则提示用户输入的内容不符合规范并终止程序。代码如下。

[root@CentOS-Python ]# cat lab.py
# coding=utf-8
print (请根据对应的号码选择一个路由协议:
1. RIP
2. IGRP
3. EIGRP
4. OSPF
5. ISIS
6. BGP )
option = input(请输入你的选项(数字 1-6): )
if option.isdigit() and 1 <= int(option) <= 6:
if option == 1 or option == 2 or option == 3:
print (该路由协议属于距离矢量路由协议。)
elif option == 4 or option == 5:
print (该路由协议属于链路状态路由协议。)
else:
print (该路由协议属于路径矢量路由协议。)
else:
print (选项无效,程序终止。)

这里我们用到了嵌套 if 语句。在某一个条件成立(判定为 True)后,如果还需要检查其他子条件,就可以用嵌套 if 语句来完成。在嵌套 if 语句中,一组 if、elif 和 else 可以构造在另一组 if、elif 和 else 中,不过需要注意缩进。

运行代码,测试效果如下。

[root@CentOS-Python ]# python3.8 lab.py
请根据对应的号码选择一个路由协议:
1. RIP
2. IGRP
3. EIGRP
4. OSPF
5. ISIS
6. BGP
请输入你的选项(数字 1-6):1
该路由协议属于距离矢量路由协议。
[root@CentOS-Python ]# python lab.py
请根据对应的号码选择一个路由协议:
1. RIP
2. IGRP
3. EIGRP
4. OSPF
5. ISIS
6. BGP
请输入你的选项(数字 1-6):4
该路由协议属于链路状态路由协议。
[root@CentOS-Python ]# python lab.py
请根据对应的号码选择一个路由协议:
1. RIP
2. IGRP
3. EIGRP
4. OSPF
5. ISIS
6. BGP
请输入你的选项(数字 1-6):6
该路由协议属于路径矢量路由协议。
[root@CentOS-Python ]# python lab.py
请根据对应的号码选择一个路由协议:
1. RIP
2. IGRP
3. EIGRP
4. OSPF
5. ISIS
6. BGP
请输入你的选项(数字 1-6):abc
选项无效,程序终止。
[root@CentOS-Python ]# python lab.py
请根据对应的号码选择一个路由协议:
1. RIP
2. IGRP
3. EIGRP
4. OSPF
5. ISIS
6. BGP
请输入你的选项(数字 1-6):8
选项无效,程序终止。
[root@CentOS-Python ]#

通过成员运算符做判断

成员运算符用于判断是否可以在给定的一组字符串、列表、字典和元组中找到一个给定的值或变量,如果能找到,则返回布尔值 True;如果找不到,则返回布尔值 False。

成员运算符有两种:in 和 not in,举例如下。

>>> netdevops = 网络工程师需要学习 Python 吗?
>>> Python in netdevops
True
>>> Java in netdevops
False
>>> C++ not in netdevops
True
>>>
>>> interfaces = [Gi1/1Gi1/2Gi1/3Gi1/4Gi1/5]
>>> Gi1/1 in interfaces
True
>>> Gi1/10 in interfaces
False
>>> Gi1/3 not in interfaces
False
>>>

依靠成员运算符,我们还可以将类似上一节的脚本简化。

上一节的脚本给出的选项只有 6 种,我们尚且能够使用“if option == 1 or option == 2 or option == 3:”此类的方法来列举所需的选项,但是如果所需选项超过 20 个甚至上百个,那么再使用这种方法岂不是太笨了?

这时可以使用第 2 章讲的 range()函数配合 list()函数创造一个整数列表,然后配合成员运算符来判断用户输入的选项号码是否存在于该整数列表中。

按照这种思路,我们将上一节的脚本做如下简化。

[root@CentOS-Python ]# cat lab.py
# coding=utf-8
print (请根据对应的号码选择一个路由协议:
1. RIP
2. IGRP
3. EIGRP
4. OSPF
5. ISIS
6. BGP )
option = input(请输入你的选项(数字 1-6): )
if option.isdigit() and int(option) in list(range(1, 7)):
if int(option) in list(range(1, 4)):
print (该路由协议属于距离矢量路由协议。)
elif int(option) in list(range(4, 6)):
以上是关于python 进阶语法的主要内容,如果未能解决你的问题,请参考以下文章

Python--列表·进阶使用

Python语法进阶

全面系统Python3入门+进阶课程 ??

Python 8 - Socket编程进阶

Python进阶-XVIII 封装(属性静态方法类方法)语法糖反射

python语法基础-面向对象-进阶-长期维护