课时 34 :关系运算符
#关系运算符。
#关系运算符用于比较两个值之间的关系,总会返回布尔值。如果关系成立,则返回 True ,否则返回 False 。因此关系运算符的返回结果只能是布尔值,即 True 或 False 。
> 比较左侧值和右侧值,确定左侧值是否大于右侧值。如果关系成立,则返回 True ;不成立则返回 False ,这就是大于号。
Result=10>20
#False
如果关系成立,这整个会返回 True ,不成立会整个返回 False 。
print('result=',result)
False 证明 10 不比 20 大。
Result=30>20 #True
证明关系成立
Result=30<20 #False
关系不成立
>= 比较左侧的值是否大于或等于右侧的值
Result=10>=10 #True
<比较左侧值是否小于右侧值
<=比较左侧的值是否小于或等于右侧的值
Result=2>True #True True相当于1,所以成立
Result=2>‘1’ #typeerror
不支持字符串和数字比较
Result=‘2’>‘1’ #True
两个字符串比较是支持的
Result=‘2’>‘11’ #True
Result=‘a’>‘b’ #False
这是 Python 中比较运算的一个特殊情况。在python中可以对两个字符串进行大于(等于)或小于(等于)的运算,当对字符串进行比较时,实际上比较的是字符串的Unicode编码。假设不知道字符串的编码,如果给 A 编为 1 ,肯定给 B 编为 2 ,如果给 A 编码为 4 ,肯定给 B 编码为 5 。显然 B 的编码总比 A 的编码大,这是因为 B 在 A 后面,所以 B 的值应该更大。因此,在比较 A 和 B 的编码时,无论编码的大小如何, B 的编码总是大于 A 的编码,返回 False。
在 Result Setup Package 中,这个编码表位于其中,A 的编号是0061,B 是 0062。比较A和B时,实际上比较的是 0061 和 00602 的大小。0061大于0062,所以比较结果肯定是 False。
Result=‘a’>‘b’ #False
Result=‘c’<‘d’ #True
c 是0063,d 肯定是 0064。
Result=‘ab’>‘b’ #False
请特别注意,比较两个字符串的Unicode编码时,是逐位比较的。
AB 和 B 即比较第一个字符串的首位与第二个字符串的首位比,第一个字符串的第二位和第二个字符串的第二位比,第三位和第三位比,如果有ABC,BCD,比较 B 和 A,C 和 B,B 和 C。比较的是相对位置。但是要注意只有在首位未分出胜负时,才会看第二位。如果首位数字已经比较出大小,后续的比较就不再进行。例如在比较 AB和 B 时,一旦确定 B 大于 A,则不再比较后续数字,即比较的是0061 和 0062,一旦 B 超过 A,后面的数字就不再考虑。
Result=‘abc’>‘ab’ #True
Result=‘2’>‘1’ #True
Result=‘2’>‘11’ #True
刚才的 2 和 1 进行的比较,并不是简单的大小比较,而是UNICODE 编码的比较,无论是 2 还是 1 都是 UNICODE 编码。通过查看编码表,发现“2”的编码是 0032,而“1”的编码是 0031。返回True。在进行大小比较时,仍然是按照字符串的顺序进行的,先比较“2”和“1”,再比较“2”和“1”。
利用该特性对字符串按照字母顺序进行排序,可以直接通过Unicode编码进行排序。中文在Unicode编码表中有一部分是按照康熙字典来的,包含了一些较为特殊和生僻的汉字,这一部分确实是按照笔画的顺序来排的。比如搜索的“理”字,也有一部分是根据偏旁部首进行排列的。因此,若要比较中文字符的大小,可能会遇到不确定性,这可能是因为不同的部首或笔画数造成的。因此,对中文进行比较时,其意义不是特别大。在某些情况下,中文在Unicode中可能具有特殊意义,这需要自行研究。但通常来说中文的比较意义可能不是特别大。还有一点需要注意就是如果不希望比较两个字符串的Unicode编码。则需要将其转换为整数或者转换这个数字再比较。例如,假设比较字符串 2 和 11,但是两个数是字符串形式,可以将字符串转换为整数,例如用 int(2),int(11)。
# print('result =',result) print(int('2')> int('11”))
这样做的目的是为了告诉你如果需要进行比较,可以调用 int() 或float() 进行转换再比较。
==比较两个对象的值是否相等
!=比较两个对象的值是否不相等
如果相等,返回 False;如果不等,返回 True。
result=1== 1 print('result=‘,result)
result=1== 1 result='hello’==‘hello ’ print('result=‘,result)
result=1== 1 result='hello’==‘hello ’ result='abc'=='bcd" print('result=‘,result)
result=1== 1 #True result='hello’==‘hello ’ #True result='abc'=='bcd" #False result='abc'!='bcd" #True print('result=‘,result)
result=1== 1 #True result='hello’==‘hello ’ #True result='abc'=='bcd" #False result='abc'!='bcd" #True result=1==True #True print('result=‘,result)
相等时返回True,不相等时返回False。然而这就引出了一个问题:之前提到对象包含三个数据项——ID、type 和 value相等依据的是值是否相等,而不是 ID。相等和不等比较的是值而不是对象。比如True 和 1 虽然不是同一个对象,但由于它们的值都是一样的,会返回True。
print(id(1),id(True))
#is比较两个对象是否是同一个对象,比较的是对象的id
#is not 比较两个对象是否不是同一个对象,比较的是对象的id
result=1
is True #False
Id 不同,所以返回 False。这一部分需要先注意区分。由于尚未讨论可变对象,暂时不太好理解。通常不会对不可变对象使用 Is 或 Is Not 这样的操作,是对可变对象进行此类操作。先留个印象,后面会深入讲解。相等和不等比较的是值,Is 和 Is Not 相比较的是 Id。
Result=1
Is Not True #True
关系运算符包括大于、小于、等于、不等于、Is、Is Not,需要特别记忆。虽然理论知识可能显得枯燥,但这些内容是必须掌握的,以便于后续的学习和实践,建议花时间去记忆这些内容,并尝试自己编写代码,多写代码。记住,程序语言是通过实际编写来掌握的,不是靠阅读理解。