1. 布尔相关
1.1 布尔类型(bool)
布尔类型的字面量:
True: 表示真. (对, 肯定, 是.)
False: 表示假. (错, 否定, 否.)
print(type(True))
<class 'bool'>
print(type(False))
<class 'bool'>
Python中的布尔类型实际上是数字类型的子类型.
True本质上是一个数字1. False是数字0.
print(True + 1)
print(False + 1)
我们可以通过变量直接定义一个bool类型. 如:
bool_true = True
bool_false = False
我们可以通过bool函数来查询某个变量的bool值.
PS: 数字类型的真假值测试: 非0即真,哪怕是-1也是真
print(bool(1)) T
print(bool(0)) F
print(bool(-1)) T
print(bool(0.00)) F
PS: 字符串类型的真假值测试: 只要不是空就是真,否则就假
字符串中有一个空格也不是空,注意空和空格是不一样的,空格也是一个字符
print(bool("a"))T
print(bool(" "))T.
print(bool(""))F
print(bool("True"))T
print(bool("False"))T
在 Python 中,所有的对象都可以进行真假值的测试,包括字符串、元组、列表、字典、对象等,后续遇到时会做详细的介绍.
1.2 比较运算符
比较运算符 | 说明 |
---|---|
> | 大于,如果> 前面的值大于后面的值,则返回 True,否则返回 False。 |
< | 小于,如果< 前面的值小于后面的值,则返回 True,否则返回 False。 |
== | 等于,如果== 两边的值相等,则返回 True,否则返回 False。 |
>= | 大于等于(等价于数学中的 ≥),如果>= 前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
<= | 小于等于(等价于数学中的 ≤),如果<= 前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
!= | 不等于(等价于数学中的 ≠),如果!= 两边的值不相等,则返回 True,否则返回 False。 |
is | 用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样 ,而 == 是用来检查两个对象是否相等 |
比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回 True(真),反之则返回 False(假)
2. 条件组合
2.1 逻辑运算符
运算符 | 描述 |
---|---|
and | 与运算, 假设x,y为两个表达式,x and y表示当x,y两个表达式都为真时,运算的结果为真,and通俗的理解成并且 |
or | 或运算,假设x,y为两个表达式,x or y表示当x,y两个表达式只要一个为真,运算的结果就为真,当两个都为假时,则运算结果为假。or通俗的理解成或者 |
not | 非运算, 假设x为表达式,当x为真时,运算的结果就为假,当x为假时,运算结果为真。not通俗理解为取反 |
a = True
b = False
print(a and b) F
print(a or b) T
print(not (a and b)) T
a = 3
b = 4
c = 5
print(a > b and b < c)
print(a > b or b < c)
print(not (a > b))
print(not (a > b) and b > c)
a = 20
b = 30
print(a and b) 30
print(b and a) 20
print(a or b) 20
print(not 3 > 2 and 3 < 4 or 4 > 5 and 9 < 8)
print(3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2)
注意点: 短路求值
与运算and: 从左到右,若所有值均为真,则返回最后一个值,只要有一个假的值,则返回第一个假的值.
或运算or: 从左到右, 返回第一个为真的值, 若全为假, 则返回最后一个为假的值.
2.2 成员运算符
运算符 | 描述 |
---|---|
in | 当在指定的序列中找到对应的值时返回True, 否则返回False |
not in | 当在指定的序列中没有找到对应的值时返回True, 否则返回False |
hello_string = 'Hello Python'
# 判断字符串中是否存在Hello,如果存在则返回True,否则False
print('Hello' in hello_string)
# 判断python是不是不在字符串hello_string中
print('python' not in hello_string)
# 列表也是如此
fruits = ['apple', 'orange', 'banana']
print('purple' in fruits)
print('apple' not in fruits)
2.3 条件表达式
# 需求是求出a, b两个数中较大的那一个.
a = 3
b = 4
if a > b:
max_num = a
else:
max_num = b
print(max_num)
语法:
variable = expr1 if condition else expr2
这与 if 语句形式不同,因为它不是程序执行流程的控制结构,
而更像是定义表达式的运算符
这种语法,条件表达式的中间他首先会评估
conditon,如果为 True,则表达式返回值为 expr1
否则,表达式返回值为expr2
max_num = a if a > b else b
3. 判断语句
3.1 if-else语句
# pass 是空语句,是为了保持程序结构的完整性
# pass 不做任何事情,一般用做占位语句
if 判断条件:
# 当条件成立时, 需要做的事情.
pass
else:
# 当条件不成立时, 需要做的事情.
pass
# 什么叫做条件成立呢.
# 条件成立即 bool(判断条件的运算结果)为True. 即为条件成立.
- 不要忘记写判断条件后的冒号. 且一定要是英文冒号.
- if语句下的代码, 要缩进一次. 缩进一次是4个空格.
- else不是必须写的. 如果条件不成立时没有要做的事情, 可以不写.
3.2 if-elif-else语句
if 判断条件1:
# 当条件1成立时, 需要做的事情.
pass
elif 判断条件2:
# 当条件2成立时, 需要做的事情.
pass
elif 判断条件3:
# 当条件3成立时, 需要做的事情.
pass
elif 判断条件4:
# 当条件4成立时, 需要做的事情.
pass
else:
# 当以上条件都不成立时, 需要做的事情.
pass
- elif语句可以写多个.
条件判断是互斥且有序的.
满足条件1, 将不会执行2,3,4.
不满足条件1, 才会进入条件2, 如果条件2满足, 则不会执行3,4. 依次类推.
- else不是必须写的.
3.3 if语句的嵌套
在很多场景下, 会有满足前提条件下, 再进行二次判断的多层次需求.
而不仅仅是多个条件并列.
if 判断条件1:
# 满足条件1做的事情.
pass
if 判断条件2:
# 满足条件2做的事情
pass
嵌套if语句的关键在于缩进. 通过缩进来决定多个if之间的层级关系.
4. 补充学习: 判断非布尔变量
有时候我们需要判断一个变量对象是否为: 数字0、空字符串、空列表、空元组、空字典,当然可以这样写
if var == 0 : # 判断是否为数字0
if var == '' : # 判断是否为空字符串
if var == [] : # 判断是否为空列表
if var == () : # 判断是否为空元组
if var == {} : # 判断是否为空字典
上面的情况可以有另外一种更简单的写法,直接就是:
if not var :
当变量var 作为数字 是 0 , 或者作为字符串、列表、元组、字典 为 空 , 或者为 None , 效果就类似于 False
那么,结果这个 if not var 就等同于 if not False, 也就是等同于 if True , 判断条件就会成立,
反之 if var 就等同于 if False , 判断条件自然就不成立。
如果这样写
if var :
当变量var 作为数字不是0 或者 None, 作为字符串、列表、元组、字典 非空 , 效果就类似于 True
那么,结果这个 if var 就等同于 if True, 判断条件就会成立