更多关于Python的相关技术点,敬请:CTO Plus后续的发文,有问题欢迎后台留言交流。
接下来的一段时间我将总结下关于【Python进阶系列】的一系列开发技术知识点的分享文章,主要为初学者从零基础到进阶再到高级和项目实战,结合目前最新的Python版本3.12来做代码示例的样式,并同时也会标注出与Python2的一些异同点。
然后关于Python的Web开发、爬虫开发、操作系统开发、网络安全开发应用领域这块,可以分别参考我的公众号CTO Plus【Flask进阶系列】、【Django进阶系列】、【DRF进阶系列】、【互联网分布式爬虫系列】和【网络安全系列】的内容,敬请关注,欢迎交流。
以下是【Python3进阶系列】的部分内容
在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的单词,像if和else就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。关于关键字的详细介绍和使用可以参考文章《看这一篇就够了 Python的35个关键字的含义、作用、特性以及使用方式详解》。Python3 的条件判断和分支结构是编写高效、灵活和可读性强的代码的关键。
需要说明的是和C/C++、Java等语言不同,Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。缩进可以使用任意数量的空格,但通常使用4个空格(一个tab为4个空格的话,那么一个tab键也可以),但建议大家不要使用制表键或者设置你的代码编辑工具自动将制表键变成4个空格。
关于Python相关的开发特点和规范可以参考前面的文章《通读Python3 PEP8代码规范》。
本篇文章适用于Python初学者,在本篇文中,我将为大家详细介绍 Python3 中条件判断和分支结构的各种用法和技巧,以及特性,并注明了使用过程中的一些坑,最后结合条件判断分享了三个应用案例:变量类型判断、真假值判断和用户身份验证。
条件判断(if)语句与分支结构
首先我介绍下Python3的条件判断语句,所谓条件判断语句,顾名思义,就是依据某个条件,满足这个条件后就执行下面的内容。条件判断语句也称为分支结构,分支结构也是根据不同的条件执行不同的代码块。Python3 中的分支结构主要有两种形式:if-else 结构(if 语句、elif 语句和 else 语句)和三元运算符。
Python3中的条件判断语句if、if-else、if-elif-else是程序中常用的控制结构,它们能够根据条件的真假来执行相应的代码块。在使用这些条件判断语句时,我们需要注意一些技巧和避免一些坑,以保证程序的正确性和可读性。
简单的if
if语句是最基本的条件判断语句,它用于判断一个条件是否为真,如果为真则执行相应的代码块。if语句的语法如下:
if condition:
# do something
在这里,condition是一个表达式,如果它的值为True,则执行缩进的代码块。在使用if语句时,我们需要注意以下几点:
1. 注意缩进:Python是通过缩进来表示代码块的范围,因此在if语句中,缩进是非常重要的。如果缩进不正确,就会导致语法错误或者逻辑错误。
2. 注意条件的布尔值:在条件中使用布尔值,而不是用等号来判断是否相等。比如,应该使用if x == 10: 而不是if x = 10:。
代码示例
下面是一个简单的例子:
# @author:SteveRocket
# @Date:2023/6/24
# @File:if_expr
# @Email:rocket_2014@126.com
# @CSDN:https://blog.csdn.net/zhouruifu2015/
from FeaturesVersion import AGE
# 数值类型的判断
if AGE:
print("age =", AGE) # age = 28
# bool类型的判断
if True:
print("is true")
# 字符串的判断
if "SteveRocket":
print("nyname is steverocket")
# 列表的判断
if [1,2,3,4]:
print("is list")
# 集合的判断
if {1,2,3}:
print('is set')
# 字典的判断
if {1:1,2:2}:
print('is dict')
# 对象的判断
if object:
print('is object')
# 比较运算符判断
if AGE == 28:
print('等于28')
if AGE > 18:
print('大于18')
# 使用逻辑非判断
if not AGE < 18:
print('大于18')
除了比较运算符(如 >、<、== 等),我们还可以使用逻辑运算符(如 and、or、not)来组合多个条件。例如:
x = 10
y = 5
if x > 0 and y > 0:
print("Both x and y are positive")
在上面的例子中,我们使用 and 运算符来判断 x 和 y 是否都大于 0。如果是,则输出 "Both x and y are positive"。
输出结果
更多关于Python的相关技术点,敬请:CTO Plus后续的发文,有问题欢迎后台留言交流。
if-else结构
if-else语句用于在条件为真时执行一个代码块,在条件为假时执行另一个代码块。它的语法如下:
if condition:
# do something
else:
# do something else
在使用if-else语句时,我们需要注意以下几点:
1. 注意条件的排列顺序:在使用if-else语句时,要注意将最有可能发生的情况放在前面,这样可以提高程序的效率。
2. 使用三元运算符:在某些情况下,可以使用三元运算符来简化if-else语句的写法,比如 result = x if x > y else y。
我们先直接来看下下面的两个例子,分别演示了如何构造一个分支结构。
代码示例1
age = 25
if age >= 18:
print("您已经成年了!") # 您已经成年了!
else:
print("您还未成年!")
上述代码中,根据变量`age`的值,通过条件判断来确定输出的结果。如果`age`大于等于18,则输出"您已经成年了!",否则输出"您还未成年!"。
代码示例2
一个使用 if-else 结构的例子:
number = 10
if number % 2 == 0:
print("number is even") # x is even
else:
print("number is odd")
在上面的例子中,我们使用 if-else 结构来判断number是否为偶数。如果是,则输出 "number is even",否则输出 "number is odd"。由于数字10是偶数,所以这段代码输出结果为“number is even”。
上述代码我们还可以进一步简化,如下:
if number % 2:
print('number is odd') # number is odd
else:
print('number is even')
if-elif-else结构
在进行条件判断的时候,有时候只有if,往往是不够的。比如下图所示的流程
这个流程图表示:输入一个数字,然后根据条件判断输入的内容符合哪种情况,然后输出满足条件的结果。这里如果这个数字大于10,那么输出more than 10。如果小于10,则输出less than 10。如果等于10,就输出you are smart。最后程序结束。
从图中就已经显示出来了,仅仅用if来判断,是不足的,还需要其它分支。这就需要引入别的条件判断了。所以,有了if...elif...else语句。if-elif-else语句用于在多个条件中选择一个执行的代码块。它的语法如下:
if 条件1:
执行的内容1
elif 条件2:
执行的内容2
elif 条件3:
执行的内容3
else:
执行的内容4
注意:elif用于多个条件时使用,也可以没有。另外,也可以没有else,只有if。
代码示例1:判断输入的值
特别提醒py3中已经遗弃了raw_input()函数,py3这里使用input()函数,这个是获得用户在界面上输入的信息,而通过它得到的是字符串类型的数据,然后通过类型转换,转成可用于计算和比较的int类型。这里的AGE是一个全局变量,是int类型,number也是int类型。关于其他类型的类型转换参考前面的文章《Python3基础之写给初学者看的变量和数据类型》。
上述程序,依据条件进行判断,不同条件下做不同的事情。需要提醒的是在条件中:number == AGE,为了阅读方便和统一的编码规范,在number和==,以及==和AGE之间最好需要有一个空格。这属于Python编码的一种规范,具体可以参考文章《通读Python PEP8代码规范》。
这里的“条件”,指的就是前面文章中提到的各种条件运算表达式,如果是True,就执行该条件下的语句,否则就跳过。
代码示例1:变量值的判断
x = 10
if x > 0:
print("x is positive")
elif x == 0:
print("x is zero")
else:
print("x is negative")
在上面的例子中,我们根据变量 x 的值输出不同的字符串。如果 x 大于 0,则输出 "x is positive";如果 x 等于 0,则输出 "x is zero";否则输出 "x is negative"。注意,每个代码块都需要缩进,这是 Python3 中的一个重要规则。
上述的代码由于10满足大于0这个条件,所以输出结果为"x is positive"。
最后,在使用if-elif-else语句时,我们需要注意以下几点:
1. 注意条件的排列顺序:在使用if-elif-else语句时,要注意将最有可能发生的情况放在前面,这样可以提高程序的效率。
2. 使用多个条件:在某些情况下,可以使用多个条件来判断,比如 if x > 0 and y > 0:。
三元操作符
除了 if-else 结构,我们还可以使用三元运算符来简化代码。三元运算符的语法是:value_if_true if condition else value_if_false。例如:
number = 10
result = "number is even" if number % 2 == 0 else "number is odd"
print(result) # number is even
result = "number is odd" if number % 2 else "number is even"
print(result) # number is even
在上面的例子中,我们使用三元运算符来判断number是否为偶数,并将结果赋给变量 result。然后我们输出 result 的值。
三元操作符,是条件语句中比较简练的一种赋值方式:result = value1 if express else value2
我们可以简单的理解为:如果express为真,那么就执行result=value1,如果express为假,就执行result=value2。
接下来,让我们来看一些使用三元运算符时需要注意的坑:
1. 注意可读性:虽然三元运算符可以简化代码,但有时会降低代码的可读性,特别是对于复杂的条件判断。在使用三元运算符时,需要权衡代码的简洁性和可读性。
2. 避免过度使用:虽然三元运算符可以简化代码,但过度使用会使代码难以理解。在使用三元运算符时,需要考虑代码的整体结构,避免过度使用。
3. 注意优先级:三元运算符的优先级较低,因此在使用时需要注意加上括号来明确表达式的优先级,以避免出现意外的结果。
更多关于Python的相关技术点,敬请:CTO Plus后续的发文,有问题欢迎后台留言交流。
嵌套的if与代码示例
有时候,我们需要对多个条件进行判断,这时候就需要使用嵌套的if语句。
1. 嵌套的if语句概述
嵌套的if语句是指在一个if语句的代码块中再次使用if语句,用于对更复杂的条件进行判断和处理。嵌套的if语句可以有多个层次,每一层都可以有自己的条件和代码块。
2. 嵌套的if语句使用技巧
(1)注意缩进:在Python中,缩进是非常重要的,它决定了代码块的边界。因此,在使用嵌套的if语句时,需要注意缩进的层次,确保每个代码块都有正确的缩进。
(2)使用逻辑运算符:在嵌套的if语句中,可以使用逻辑运算符(and、or、not)来组合多个条件。这样可以使代码更加简洁和易读。
(3)使用elif语句:在嵌套的if语句中,可以使用elif语句来处理多个条件。这样可以避免代码的嵌套层次过深,提高代码的可读性。
(4)使用布尔变量:在嵌套的if语句中,可以使用布尔变量来存储条件的真假值。这样可以使代码更加简洁和易读。
3. 嵌套的if语句示例
下面是一个使用嵌套的if语句的示例,用于判断一个数是否为质数:
num = int(input("请输入一个整数:"))
# 判断是否为质数
if num > 1:
# 判断是否为2
if num == 2:
print(f"{num}是质数")
else:
# 判断是否能被2整除
if num % 2 == 0:
print(f"{num}不是质数")
else:
# 判断是否能被奇数整除
for i in range(3, int(num ** 0.5) + 1, 2):
if num % i == 0:
print(f"{num}不是质数")
break
else:
print(f"{num}是质数")
else:
print(f"{num}不是质数")
在上面的代码中,首先判断输入的数是否大于1,如果大于1,则继续进行判断。然后,判断这个数是否等于2,如果是,则输出结果。如果不是2,则判断这个数是否能被2整除,如果能,则输出结果。如果不能被2整除,则使用for循环遍历奇数,判断这个数是否能被奇数整除,如果能,则输出结果。如果不能被奇数整除,则说明这个数是质数。
进一步深入条件控制
while 和 if 语句中使用的条件不仅可以使用比较,而且可以包含任意的操作。比较操作符in 和 not in 审核值是否在一个元素集合之内。操作符 is 和 is not是比较两个对象是否相同,这只和诸如列表这样的可变对象有关。所有的比较操作符具有相同的优先级,低于所有的数值操作。
关于while语句的详细介绍和使用参考下一篇文章《Python3基础之掌握循环结构(for、while)与逻辑控制的必备技能》。
比较操作可以传递,例如 a < b == c 审核是否 a 小于 b 并且 b 等于 c。比较操作可以通过逻辑操作符 and 和 or 组合,比较的结果可以用 not 来取反义。这些操作符的优先级又低于比较操作符,在它们之中,not 具有最高的优先级,or优先级最低,所以 A and not B or C 等于 (A and (notB)) or C。当然,括号也可以用于比较表达式。
逻辑操作符 and 和 or 也称作短路操作符:它们的参数从左向右解析,一旦结果可以确定就停止。例如,如果 A 和 C 为真而 B 为假, A and B and C 不会解析 C。作用于一个普通的非逻辑值时,短路操作符的返回值通常是最后一个变量。
可以把比较或其它逻辑表达式的返回值赋给一个变量,例如:
name1, name2, name3 = "", "steverocket", "SteveRocket"
result = name1 or name2 or name3
print(result) # steverocket
需要注意的是 Python 与 C 不同,在表达式内部不能赋值,它避免了一种在C程序中司空见惯的错误,也就是如果想要在解析式中使用 == 时误用了 = 操作符。
案例1:判断某个值的类型
接下来实现一个常用的案例,那就是判断变量的类型,下面我将使用两种方法来分别实现。
方法1:使用isinstance
isinstance(object, classinfo),如果object参数是classinfo参数的实例,或者classinfo参数的子类的实例,则isinstance(object, classinfo)返回True。
Python有以下这些内置的构造函数:bool()、int()、float()、str()、list()、dict()、object()、range()、set()、slice()、tuple()、bytearray()、bytes()、complex()、frozenset()等。
var1 = 123
var2 = 123.45
var3 = "CTO Plus"
var4 = {12,3,4}
var5 = [11,22]
var6 = {"name":"SteveRocket"}
print(isinstance(var1, int)) # True
print(isinstance(var2, float)) # True
print(isinstance(var3, str)) # True
print(isinstance(var4, set)) # True
print(isinstance(var5, list)) # True
print(isinstance(var6, dict)) # True
关于isinstance及其他方法的具体详细使用,参考文章《Python基础必备之最新的73个内置函数(4)》
方法2:使用type
另外一个内置函数type()可以用于返回对象的类型,当然,我们在进行对象类型判断的时候推荐使用isinstance,因为它考虑到了子类。
print(type(var6) == dict) # True
print(type(var1) == int) # True
关于isinstance及其他方法的具体详细使用,参考文章《Python基础必备之最新的73个内置函数(4)》
更多关于Python的相关技术点,敬请:CTO Plus后续的发文,有问题欢迎后台留言交流。
案例2:判断某值是否为真
这个案例,我们来进行真值检测。当在 if或者 while语句中,或者在作为下面的布尔运算的操作数的时候,一个对象会被检查值是否为真。
默认情况下,一个对象,如果它的类定义了一个返回False的__bool__()函数,或者是一个返回0的 __len__()函数,那它就会被判定为假,其余情况下,他都是真。
在判断真假值时我们需要明白哪些是属于假的,以下我总结了大部分为假的情况
-
None、False都是假的。 -
任何数字类型的零都是假的:0, 0.0, 0j, Decimal(0), Fraction(0, 1) -
空的序列和集合是假的:'', "", (), [], {}, set(), range(0)
print(0 == False) # True
print("" == False) # False
print(() == False) # False
print([] == False) # False
print({} == False) # False
print(None == False) # False
print(False == False) # True
if not 0:
print("假")
if not "":
print("假")
if not ():
print("假")
if not []:
print("假")
if not {}:
print("假")
if not None:
print("假")
if not False:
print("假")
布尔运算:
运算 |
结果 |
x or y |
如果x为假,返回y,否则返回x |
x and y |
如果x为假,返回x,否则返回y |
not x |
如果x为假,返回True,否则返回False |
or、and、not这三个布尔运算符的优先级依次升高。not的优先级最高,a and b or not c 的评估顺序是:(a and b) or (not c),先评估not c、然后是(a and b),然后是整体。
x and y和x or y都有短路的作用,也就是说如果说从x已经能得到结果了,就不会再评估y。比如x and y如果x的值为假,那么x and y一定为假,不用评估y就能得到结果了,直接返回x了,操作数y不会执行。
x or y,如果x为真,那么x or y就一定为真了,不用评估y就能得到结果,直接返回x,表达式y不会执行。
代码示例
x = []
def y():
print('this is fucntion y')
return 1
a = x and y()
b = bool(x and y())
print(a, b) # [] False
案例3:用户身份验证
当我们在实现用户身份验证时,就避免不了使用一些判断语句来进行判断,下面的代码示例实现了根据用户的输入,然后对输入的用户名和密码进行校验。
更多关于Python的相关技术点,敬请:CTO Plus后续的发文,有问题欢迎后台留言交流。
总结
最后我们来总结下,条件判断语句if、if-else、if-elif-else是Python程序中非常常用的控制结构,我们需要注意一些技巧和避免一些坑,以保证程序的正确性和可读性。根据PEP8的规定,我们必须使用4个空格表示每级的缩排(通过缩进方式来表示语句块的开始和结束)。使用tab和其他数目的空格虽然都可以编译通过,但是不符合编码规范。支持tab字符和其他数目的空格仅仅是为兼容很久的Python代码和某些有问题的编辑方式,我们不提倡这种方式。
在本文中,我们详细介绍了 Python3 中的条件判断、分支结构的各种用法和技巧。条件判断用于根据条件的真假执行不同的代码块,分支结构用于根据不同的条件执行不同的代码块,逻辑控制用于决定代码的执行顺序和循环次数。了解和熟练运用这些技巧对于编写高效、灵活和可读性强的 Python3 代码非常重要。希望本文能够帮助大家更好地理解和使用条件判断语句。
Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543
欢迎CTO Plus,有问题欢迎后台留言交流。
更多精彩,关注我公号,一起学习、成长
标准库系列-推荐阅读:
-
Python基础之开发必备-标准库(内置模块)汇总详细介绍(持续更新……) -
Python标准库1. abc类的定义规范模块实践 -
Python标准库44. datetime模块实践 -
Python标准库45. math模块实践 -
Python标准库46. random模块实践 -
Python标准库48. json模块处理JSON数据和JSON文件实践
-
Python标准库87. typing模块实践 -
Python标准库88. 数据库 (sqlite3) 实践 -
Python标准库89. signal模块实践以及与Linux的信号 -
看这一篇就够了Python的35个关键字的含义、作用、特性以及使用方式详解
推荐阅读:
-
Python3基础之写给初学者看的变量和数据类型
-
Python3基础之运算符的一些开发使用注意事项和代码示例详解
-
Python3进阶之命令行参数化实现的几种方式总结
-
Python3基础之语句的开发使用注意事项和代码示例详解(文末加群)
-
Python3进阶之开发必备的知识点-模块(包)的作用和使用详解
-
Python基础之开发必备-标准库(内置模块)汇总详细介绍(持续更新……) -
看这一篇就够了Python的35个关键字的含义、作用、特性以及使用方式详解 -
Python基础之最新的73个内置函数(1)
最后,不少粉丝后台留言问加技术交流群,之前也一直没弄,所以为满足粉丝需求,现建立了一个关于Python相关的技术交流群,加群验证方式必须为本公众号的粉丝,群号如下:
发表评论