课时 34 :关系运算符

简介: 课时34介绍了关系运算符,用于比较两个值之间的关系,返回布尔值True或False。常见的关系运算符包括:大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)。此外,is和is not用于比较对象的身份(ID),而非值。字符串比较基于Unicode编码逐位进行。注意,不同类型的数据(如字符串与数字)不能直接比较,需先转换类型。掌握这些运算符对编程至关重要,建议多编写代码练习。

课时 34 :关系运算符

 

#关系运算符。

#关系运算符用于比较两个值之间的关系,总会返回布尔值。如果关系成立,则返回  True ,否则返回 False 。因此关系运算符的返回结果只能是布尔值,即  True   False

> 比较左侧值和右侧值,确定左侧值是否大于右侧值。如果关系成立,则返回  True ;不成立则返回  False ,这就是大于号。

Result=10>20 #False如果关系成立,这整个会返回  True ,不成立会整个返回 False

print('result=',result)

image.png

False 证明  10  不比  20  大。

Result=30>20  #True证明关系成立

image.png

Result=30<20   #False关系不成立

image.png

>= 比较左侧的值是否大于或等于右侧的值

Result=10>=10  #True

image.png

<比较左侧值是否小于右侧值

<=比较左侧的值是否小于或等于右侧的值

Result=2>True  #True  True相当于1,所以成立

image.png

Result=2>‘1’   #typeerror  不支持字符串和数字比较

image.png

Result=‘2’>‘1’  #True 两个字符串比较是支持的

image.png

Result=‘2’>‘11’ #True

image.png

Result=‘a’>‘b’  #False

image.png

这是  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 0063d 肯定是 0064

Result=‘ab’>‘b’  #False

image.png

请特别注意,比较两个字符串的Unicode编码时,是逐位比较的

AB 和 B 即比较第一个字符串的首位与第二个字符串的首位第一个字符串的第二位和第二个字符串的第比,第三位和第三位比,如果有ABCBCD,比较 B AC BB C。比较的是相对位置。但是要注意只有在首位未分出胜负时,才会看第二位。如果首位数字已经比较出大小,后续的比较就不再进行。例如在比较 AB B 时,一旦确定 B 大于 A,则不再比较后续数字,即比较的是0061  0062一旦  B 超过  A,后面的数字就不再考虑。

Result=‘abc’>‘ab’  #True

image.png

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编码。则需要将其转换整数或者转换这个数字再比较例如,假设比较字符串 211,但是两个数是字符串形式,可以将字符串转换为整数,例如用 int(2),int(11)

# print('result =',result)
print(int('2')> int('11”))

image.png

这样做的目的是为了告诉你如果需要进行比较,可以调用 int() 或float() 进行转换再比较。

==比较两个对象的值是否相等

!=比较两个对象的值是否不相等

如果相等,返回 False;如果不等,返回 True

result=1== 1
print('result=‘,result)

image.png

result=1== 1
result='hello’==‘hello ’
print('result=‘,result)

image.png

result=1== 1
result='hello’==‘hello ’
result='abc'=='bcd"
print('result=‘,result)

image.png

result=1== 1 #True
result='hello’==‘hello ’ #True
result='abc'=='bcd" #False
result='abc'!='bcd" #True
print('result=‘,result)

image.png

result=1== 1 #True
result='hello’==‘hello ’ #True
result='abc'=='bcd" #False
result='abc'!='bcd" #True
result=1==True #True
print('result=‘,result)

image.png

相等时返回True,不相等时返回False。然而这就引出了一个问题:之前提到对象包含三个数据项——ID、type  value相等依据是值是否相等,而不是 ID。相等和不等比较的是值而不是对象。比如True 和 1 虽然不是同一个对象,但由于它们的值都是一样的,会返回True。

print(id(1),id(True))

image.png

#is比较两个对象是否是同一个对象,比较的是对象的id

#is not 比较两个对象是否不是同一个对象,比较的是对象的id

result=1 is True #False

image.png

Id 不同,所以返回 False。这一部分需要先注意区分。由于尚未讨论可变对象,暂时不太好理解。通常不会对不可变对象使用 Is  Is Not 这样的操作,是对可变对象进行此类操作。先留个印象,后面会深入讲解。相等和不等比较的是值,Is  Is Not比较的是 Id。

Result=1 Is  Not True #True

image.png

关系运算符包括大于、小于、等于、不等于Is、Is Not,需要特别记忆。虽然理论知识可能显得枯燥,但这些内容是必须掌握的,以便于后续的学习和实践建议花时间去记忆这些内容,并尝试自己编写代码,多写代码。记住,程序语言是通过实际编写来掌握的,不是靠阅读理解。

相关文章
|
并行计算 Docker 容器
Mamba 环境安装:causal-conv1d和mamba-ssm报错解决办法
Mamba 环境安装:causal-conv1d和mamba-ssm报错解决办法
4733 0
|
缓存 前端开发
Vite 和 Webpack 的区别
Vite 和 Webpack 的区别
574 0
|
7月前
|
人工智能 搜索推荐 机器人
grok官网是什么?这次一定要记好了!GROK3官网入口
grok官网是什么?这次一定要记好了!GROK3官网入口
|
存储 算法 大数据
ZooKeeper的架构
【6月更文挑战第21天】ZooKeeper的架构
440 38
|
11月前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
7月前
|
安全 Java C#
使用try-with-resources实现自动解锁
本文介绍了如何利用Java的`try-with-resources`语法糖实现Redission分布式锁的自动解锁。通过将锁包装为实现了`AutoCloseable`接口的类,在`try`语句块结束时自动释放锁,简化了锁管理,避免了手动解锁的繁琐和潜在错误。示例代码展示了具体的实现方法,并分析了其优点和注意事项。这种模式提高了代码的简洁性、可靠性和可维护性,特别适用于多线程编程中的并发控制。
125 5
|
前端开发 JavaScript
前端 JS 经典:下载的流式传输
前端 JS 经典:下载的流式传输
195 1
|
10月前
|
监控 测试技术 开发者
一行代码改进:Logtail的多行日志采集性能提升7倍的奥秘
一个有趣的现象引起了作者的注意:当启用行首正则表达式处理多行日志时,采集性能出现下降。究竟是什么因素导致了这种现象?本文将探索Logtail多行日志采集性能提升的秘密。
505 57
|
运维 监控 搜索推荐
客户案例 | 识货基于向量检索服务 Milvus 版搭建电商领域的向量数据检索平台
阿里云的Milvus服务以其性能稳定和功能多样化的向量检索能力,为识货团队在电商领域的向量检索场景中搭建业务系统提供了强有力的支持。该服务的分布式扩展能力不仅可靠,而且能够适应日益增长的数据规模。
客户案例 | 识货基于向量检索服务 Milvus 版搭建电商领域的向量数据检索平台
|
机器学习/深度学习 自然语言处理
【绝技揭秘】模型微调与RAG神技合璧——看深度学习高手如何玩转数据,缔造预测传奇!
【10月更文挑战第5天】随着深度学习的发展,预训练模型因泛化能力和高效训练而备受关注。直接应用预训练模型常难达最佳效果,需进行微调以适应特定任务。本文介绍模型微调方法,并通过Hugging Face的Transformers库演示BERT微调过程。同时,文章探讨了检索增强生成(RAG)技术,该技术结合检索和生成模型,在开放域问答中表现出色。通过实际案例展示了RAG的工作原理及优势,提供了微调和RAG应用的深入理解。
327 0