在前面,你遇到了很多真值,现在终于需要他们了。真值也称布尔值。
用做布尔表达式(如用作if语句中的条件)时,下面的值都将被解释器视为假:
False None 0 "" () [] {}
换而言之,标准值False和None.各种类型(包括浮点数,复数等)的数值0,空序列(如空字符串,空元组,空列表)以及空映射(如空字典)都被视为假,而其他各种值都被视为真,包括特殊值True
这意味着任何python值都可以解释为真值。乍一看这有点令人迷惑,但很有用.虽然可供选择的真值很多,但是标准真值为True和False.实际上,True和False不过是0和1的别名,虽然看起来不同,但作用是相同的
>>> True
True
>>> False
False
>>> True ==1
True
>>> False==0
True
>>> True +False+42
43
因此如果你看到一个返回1或0的表达式,就知道这实际上意味着True和False。
布尔值True属于类型Bool,而bol和list和str,tuple一样,可用来转换其他的值。
>>> bool('dasddas')
True
>>> bool(42)
True
>>> bool('')
False
>>> bool(0)
False
鉴于任何值都可以用作布尔值,因此你几乎不需要显示的进行转换(python会自动进行转换)。
>>> if 3>2:
... print("you are right")
...
you are right
这就是一个if语句,让你有条件地执行代码。这意味着如果条件(if和冒号之间的表达式)为真,就执行后续代码块(这里是一条print语句);如果条件为假,就不执行(你应该已经猜到了)
else是表示判断条件为假时候所执行的语句,切记之所以叫子句是因为它不能单独存在,是if语句的一部分
>>> if 3<2:
... print("you are tallent")
... else:
... print("you are stupid")
...
you are stupid
在这个示例中因为条件为假,所以执行了else语句很容易理解对吧.
还有一个和if语句很像的亲戚,他就是条件表达式 ——c语言三目运算符的python版本.
下面的表达式使用if和else确定其值:
>>> a=3
>>> b=4
>>> maxmun=a if a>b else b
>>> maxmun
4
要检查多个条件,可使用elif。elif是else if的缩写。由一个if子句和一个else子句组合而成,也就是包含条件的ekse子句
num=int(input())
if num>0:
print("是正数")
elif num<0:
print("是负数")
else:
print("是零")
表达式 | 描述 |
---|---|
x==y | x等于y |
x<y | x小于y |
x>y | x大于y |
x>=y | x大于或等于y |
x<=y | x小于或等于y |
x!=y | x不等于y |
x is y | x和y是同一个对象 |
x is not y | x和y是不同的对象 |
x in y | x是容器y的成员 |
x not in y | x不是容器y的成员 |
与赋值一样,python也支持链式比较:可同时使用多个比较运算符,如0<age<100
有些比较运算符需要特别注意,下面就来详细介绍.
要确定俩个对象相等,可使用比较运算符,用俩个等号表示。(如果一个等号会导致赋值,如果是一个变量和常量比较最好把常量写左边)
这个运算符很有趣,其作用看似与==一样,但实际上并非如此.
>>> x=y=[1,2,3]
>>> z=[1,2,3]
>>> x==y
True
>>> x==z
True
>>> x is y
True
>>> x is z
False
在前几个示例中,看不出什么问题,但最后一个示例的结果很奇怪:x和z相等,但是x is z 的结果为False。为何会这样呢,因为is 检查俩个对象是否等同。x和y指向一个列表,而z指向另一个列表(其中包含的值以及这些值的排列顺序都与前一个列表相同)。这俩个列表虽然相等,但并非同一个对象.
总之,==用来检查俩个对象是否相等,而is用来检查俩个对象是否相同(是同一个对象)
警告:你要将is 用于数和字符串等不可变的基本值。鉴于python在内部处理这些对象的方式,这样做的结果不可预测(基于Python 3.10.10 测试 数值和字符串 上 is和,==基本相同)
字符串是根据字符的字母序列顺序进行比较的。
>>> a='adsdasd'
>>> b='b'
>>> b>a
True
更具体的说是按照unicode字符编码的大小进行比较的
字符是根据顺序值排列的。要获悉字母的顺序值可使用函数ord。这个函数的作用于函数chr相反:
>>> ord('a')
97
>>> ord('王')
29579
>>> chr(29579)
'王'
运算符and是一个布尔运算符。它接受俩个真值,并在这俩个值都为真时返回真,否则返回假。还有另外俩个布尔运算符:or和nor ,or是俩个有一个为真就返回真,not就是真变假,假变真。
使用这三个运算符,能以任何方式组合真值
注意and和or这俩个在使用中都遵循短路逻辑,例如当and左侧表达式已经为假的时候,右边就不看了,or也是类似,如果你有在判断条件上写赋值语句的习惯,一定要注意,还是建议尽量不要过于利用短路,哪怕要多写条件语句。
if语句有一个很有用的“”亲戚“”,其工作原理类似下面的伪代码:
if not condition
crash program
断言的存在就是为了让程序在错误条件出现时立刻崩溃,胜过以后再崩溃。基本上,你可要求某些条件得到满足(如核实函数参数满足要求或为初始测试和调试测试提供帮助),为此可在语句中使用关键字assert。
>>> age=10
>>> assert 0 <=age<=100
>>> age=-1
>>> assert 0 <=age<=100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
如果知道必须满足特定条件,程序才能正常地运行,可在程序中添加assert语句充当检查点,这很有帮助。
还可在条件后面添加一个字符串,对断言做出说明。
>>> age=-1
>>> assert 0 <=age<=100 ,'年龄不符合范围'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: 年龄不符合范围