鱼C论坛

 找回密码
 立即注册
查看: 1295|回复: 16

[已解决]enen 魔法方法

[复制链接]
发表于 2020-8-4 07:03:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
LKP9ZXZO0FAI~})I`LH_QGG.png
难道比较的不是length????
最佳答案
2020-8-4 08:14:05
本帖最后由 Twilight6 于 2020-8-4 08:15 编辑
def花 发表于 2020-8-4 08:12
也就是字符串比较只是比较第一个字符的ascii码的大小吗




是依次比较各个字符,但只要途中有分出大小就立马返回比较后的结果

所以如果你第一个字符就比较出大小,就直接返回比较后的结果

反之如果没有得出大小,那么继续比较下一个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-4 07:08:36 | 显示全部楼层
zltzlt 发表于 2020-8-4 07:05
是比较 length,单词 a 的长度是 3,b 的长度是 2(从空格那分分割)

那为什么 ‘3’>'2'返回Flase
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 07:16:56 | 显示全部楼层
zltzlt 发表于 2020-8-4 07:13
字符串是根据 ASCII 码比较的,'3' 比 '2' 的 ASCII 码大,所以 '3' > '2' :

我去,可为什么这样是对的qaq
>>> '3' > '2'
True
>>> a = '3'
>>> b = '2'
>>> a > b
True

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 07:20:58 | 显示全部楼层
def花 发表于 2020-8-4 07:16
我去,可为什么这样是对的qaq

我好像看错了,a > b 这是把 a.length 和 b 作比较,b 的长度更大,所以 a > b 为 False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 07:25:03 | 显示全部楼层
zltzlt 发表于 2020-8-4 07:20
我好像看错了,a > b 这是把 a.length 和 b 作比较,b 的长度更大,所以 a > b 为 False

b的长度不是变成了b.length 吗,b = Word('sc bcd) 他不是会自动执行 __init__
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 07:40:33 | 显示全部楼层
本帖最后由 zltzlt 于 2020-8-4 07:48 编辑
def花 发表于 2020-8-4 07:25
b的长度不是变成了b.length 吗,b = Word('sc bcd) 他不是会自动执行 __init__


我指的是 b(也就是 'sc bcd' 这串),不是 b.length
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 07:54:26 | 显示全部楼层
zltzlt 发表于 2020-8-4 07:40
我指的是 b(也就是 'sc bcd' 这串),不是 b.length

可是 b = Word('sc bcd'),他不会改变吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 07:56:22 | 显示全部楼层
def花 发表于 2020-8-4 07:54
可是 b = Word('sc bcd'),他不会改变吗?

你试试 str(b) 看看会得到什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 07:56:46 | 显示全部楼层
本帖最后由 Twilight6 于 2020-8-4 08:00 编辑



你 __init__ 中将 self.length 转为 str 了,而你重写的比较方法里只有 self.length 而  other 你没带上 length 导致你是比较

字符串 self.length 和 另一个实例对象的字符串,虽然你访问 length 返回的值是比他下小,但是你比较的并不是 length 的大小

而是 字符串 self.length 和 other 字符串的 ASCII 值,你 a > b ,实际上所指的对象是  a.length > b

而你的 a.length = '3' 、b = 'sc bcd' , 通过查表或者 Python 内置函数我们得知  '3' 字符串对应的 ASCII 码值是 51 而 's' 字符串的ASCII 码值是 115

所以 a > b 等价于比较 a.length > b 等价于 '3' > 'sc bcd' 而 's' ASCII 大于 '3' 所以返回了是 False
>>> '3' > 'sc bcd'
False

如果你想比较他们长度,应该将 __init__ 中的 str(self.length) 的 str 去掉

还有下面重写的比较方法 other 改成 other.length
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 07:58:33 | 显示全部楼层
Twilight6 发表于 2020-8-4 07:56
你 __init__ 中将 self.length 转为 str 了,而你重写的比较方法里只有 self.length 而  other 你没带 ...

'3' > 's' ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 08:00:52 | 显示全部楼层


哦哦有个地方写错了,改了哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 08:02:58 | 显示全部楼层
zltzlt 发表于 2020-8-4 07:20
我好像看错了,a > b 这是把 a.length 和 b 作比较,b 的长度更大,所以 a > b 为 False




不是比较长度吧,应该还是比较 ASCII 码,因为两个都是字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 08:08:51 | 显示全部楼层
zltzlt 发表于 2020-8-4 08:05
如果两个长度都一样才比较 ASCII 码



不是吧,都是比较 ASCII 的
>>> 'bcd' < 'abcd'
False

因为 'b' ASCII 大于 'a' 所以返回 False

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 08:09:40 | 显示全部楼层
Twilight6 发表于 2020-8-4 08:08
不是吧,都是比较 ASCII 的

刚刚去试了一下,还真是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 08:11:59 | 显示全部楼层
zltzlt 发表于 2020-8-4 08:09
刚刚去试了一下,还真是

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 08:12:59 | 显示全部楼层
Twilight6 发表于 2020-8-4 08:08
不是吧,都是比较 ASCII 的

也就是字符串比较只是比较第一个字符的ascii码的大小吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 08:14:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-8-4 08:15 编辑
def花 发表于 2020-8-4 08:12
也就是字符串比较只是比较第一个字符的ascii码的大小吗




是依次比较各个字符,但只要途中有分出大小就立马返回比较后的结果

所以如果你第一个字符就比较出大小,就直接返回比较后的结果

反之如果没有得出大小,那么继续比较下一个字符

评分

参与人数 1鱼币 +5 收起 理由
def花 + 5 懂了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 14:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表