逻辑运算符用于操作 bool类型的变量、常量或表达式,逻辑运算的返回值也是bool值。
Python的逻辑运算符有如下三个
and:与,前后两个操作数必须都是True才返回True;否则返回False。
or:或,只要两个操作数中有一个是True,就可以返回True:否则返回False。
not:非,只需要一个操作数,如果操作数为True,则返回False;如果操作数为False,则返回True。
下面代码示范了与、或、非这三个逻辑运算符的使用
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/01
# @Author : Laopi
#直接对False求非运算,将返回True
print(not False)
#6>5 返回True,7.0大于3,因此结果返回True
print(6>5 and 7.0>3)
#3>=7返回False,"b">"a" 返回True,因此或后的结果返回True
print(3>=7 or "b">"a")
有些时候,程序需要使用多个逻辑运算符来组合复杂的逻辑。例如,假设想表达如下逻辑:需要购买一本书名必须以“Python”结尾的图书,且图书价格小于50元或该图书是基于正式版的。假如使用如下程序。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/01
# @Author : Laopi
bookName ="由浅入深学习python"
price = 100
version ="正版"
if bookName.endswith('python') and price<50 or version =='正版':
print("考虑买下这本书")
else:
print("不买了")
编译、运行上面程序,可以看到程序输出“考虑买下这本书”。那么上面程序是否有问题呢?
其实问题是存在的,这是因为程序会先计算bookName.endswith('python') and price<50即使该逻辑表达式中的两个条件都是False,但只要后面的version =="正版"返回True,整个表达式就会返回 True,从而导致程序依然会输出“考虑买下这本书”。
因此,即使把上面程序中的bookName改为不以“Python”结尾程序也依然会输出“打算购买这本Python图书”运算结果显然与逻辑需求并不一致,逻辑需求是:需要购买一本书名以“Python”结尾的图书。此时应该使用圆括号来保证程序先对 price<50 version=="正式版"求值,然后再与ookNameendswith(Python)的结果求与。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/01
# @Author : Laopi
bookName ="由浅入深学习python"
price = 100
version ="正版"
if bookName.endswith('python') and price<50 or version =='正版':
print("考虑下买这本书")
else:
print("不买了")
if bookName.endswith('python') and (price<50 or version =='正版'):
print("考虑下买这本书")
else:
print("不买了")
从上面代码可以看出,对于组合逻辑来说,使用圆括号保证运算顺序非常重要。需要说明的是,即使不是为了保证逻辑运算的顺序,且有括号和没括号的输出结果是一样的,本书也依然建议使用圆括号来提高程序的可读性。
本文详细介绍了Python中的逻辑运算符(and,or,not)以及它们在条件语句中的应用。特别强调了在复杂逻辑表达中使用括号调整运算顺序的重要性,以确保程序按预期执行。
2万+

被折叠的 条评论
为什么被折叠?



