5.7. 深入条件控制 5.8. 比较序列和其它类型

5.7. 深入条件控制

whileif语句中使用的条件不仅可以用比较,还能包含任意的操作。
比较操作符innot in审核的是值是否在一个区间之内。
操作符isis not比较两个对象是否相同;这只和列表这样的可变对象有关。所有的比较操作符具有想用的优先级,低于所有的数值操作。

比较操作可以传递。例如a < b == c是在审核是否a小于b并且b等于c。

比较操作可以通过逻辑操作符and和or来组合,比较的结果是可以用not来取反义。这些操作符的优先级又低于比较操作符,在它们之中,not具有最高的优先级,or优先级最低,所以A and not B or C等于(A and (not B)) or C。当然,括号也可以用于比较表达式。

逻辑操作符and 和or 也称作短路操作符:它们的参数从左向右解析,一旦结果可以确定就停止。例如,如果AC为真而B为假,A and B and C就会在B处结束,不会解析C。作用于一个普通的非逻辑值(除了True,False之外的值)时,短路操作符的返回值通常是最后一个变量。

可以把比较或其他逻辑表达式的返回值赋给一个变量,例如:

string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
non_null = string1 or string2 or string3
non_null
"" or "123" and "1234" or "" and "2"
#这里值得深究
'1234'

5.8. 比较序列和其它类型

序列对象可以与相同类型的其他对象比较。比较操作按lexicographical顺序进行。先比较第一个元素,如果不同,则它俩的比较结果就为此次比较的总结果。如果相同,就比较第二个元素,以此类推,直到所有元素比较完成。如果两个元素本身又是序列对象,那么还是按这个比较法比较。如果两个序列的所有元素都相同,就认为序列相等。如果一个序列是另一个序列的子序列,那短的那个序列就小于另一个。字符串的比较方法是按照单字符的ASCII顺序。下面是一些同类序列比较的例子:

print((1,2,3) < (1,2,4)) #True 比到第三个元素,分出大小,4比三大
print([1,2,3] < [1,2,4]) #True 同上
print('ABC' < 'C' < 'Pascal' < 'Python') #True P的ACSII为80,A为65,C为67, y121,a97
print((1, 2, 3, 4) < (1, 2, 4)) #True 比到第三个元素,就分出大小,4比3大
print((1, 2) < (1, 2, -1)) #True 比到第三个,没数可比了,这时候就比长短,后比前长
print((1, 2, 3) == (1.0 , 2.0, 3.0))# True数值相同
print((1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4))#推到最后比较的是a与b,True
True
True
True
True
True
True
True

注意通过<>比较的对象只要具有合适的比较方法就是合法的。比如int和float是通过数值进行比较的,所以0等于0.0。否则解释器将会出发一个TypeError异常,而不是提供一个随意的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值