def花 发表于 2020-8-4 07:03:54

enen 魔法方法


难道比较的不是length????

def花 发表于 2020-8-4 07:08:36

zltzlt 发表于 2020-8-4 07:05
是比较 length,单词 a 的长度是 3,b 的长度是 2(从空格那分分割)

那为什么 ‘3’>'2'返回Flase

def花 发表于 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

zltzlt 发表于 2020-8-4 07:20:58

def花 发表于 2020-8-4 07:16
我去,可为什么这样是对的qaq

我好像看错了,a > b 这是把 a.length 和 b 作比较,b 的长度更大,所以 a > b 为 False

def花 发表于 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__

zltzlt 发表于 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

def花 发表于 2020-8-4 07:54:26

zltzlt 发表于 2020-8-4 07:40
我指的是 b(也就是 'sc bcd' 这串),不是 b.length

可是 b = Word('sc bcd'),他不会改变吗?

zltzlt 发表于 2020-8-4 07:56:22

def花 发表于 2020-8-4 07:54
可是 b = Word('sc bcd'),他不会改变吗?

你试试 str(b) 看看会得到什么

Twilight6 发表于 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

zltzlt 发表于 2020-8-4 07:58:33

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

'3' > 's' ?

Twilight6 发表于 2020-8-4 08:00:52

zltzlt 发表于 2020-8-4 07:58
'3' > 's' ?


哦哦有个地方写错了,改了哈哈

Twilight6 发表于 2020-8-4 08:02:58

zltzlt 发表于 2020-8-4 07:20
我好像看错了,a > b 这是把 a.length 和 b 作比较,b 的长度更大,所以 a > b 为 False



不是比较长度吧,应该还是比较 ASCII 码,因为两个都是字符串

Twilight6 发表于 2020-8-4 08:08:51

zltzlt 发表于 2020-8-4 08:05
如果两个长度都一样才比较 ASCII 码


不是吧,都是比较 ASCII 的

>>> 'bcd' < 'abcd'
False

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

zltzlt 发表于 2020-8-4 08:09:40

Twilight6 发表于 2020-8-4 08:08
不是吧,都是比较 ASCII 的

{:10_245:}刚刚去试了一下,还真是

Twilight6 发表于 2020-8-4 08:11:59

zltzlt 发表于 2020-8-4 08:09
刚刚去试了一下,还真是

{:10_301:}

def花 发表于 2020-8-4 08:12:59

Twilight6 发表于 2020-8-4 08:08
不是吧,都是比较 ASCII 的




也就是字符串比较只是比较第一个字符的ascii码的大小吗

Twilight6 发表于 2020-8-4 08:14:05

本帖最后由 Twilight6 于 2020-8-4 08:15 编辑

def花 发表于 2020-8-4 08:12
也就是字符串比较只是比较第一个字符的ascii码的大小吗



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

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

反之如果没有得出大小,那么继续比较下一个字符
页: [1]
查看完整版本: enen 魔法方法