enen 魔法方法
难道比较的不是length???? zltzlt 发表于 2020-8-4 07:05
是比较 length,单词 a 的长度是 3,b 的长度是 2(从空格那分分割)
那为什么 ‘3’>'2'返回Flase zltzlt 发表于 2020-8-4 07:13
字符串是根据 ASCII 码比较的,'3' 比 '2' 的 ASCII 码大,所以 '3' > '2' :
我去,可为什么这样是对的qaq
>>> '3' > '2'
True
>>> a = '3'
>>> b = '2'
>>> a > b
True
def花 发表于 2020-8-4 07:16
我去,可为什么这样是对的qaq
我好像看错了,a > b 这是把 a.length 和 b 作比较,b 的长度更大,所以 a > b 为 False 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:48 编辑
def花 发表于 2020-8-4 07:25
b的长度不是变成了b.length 吗,b = Word('sc bcd) 他不是会自动执行 __init__
我指的是 b(也就是 'sc bcd' 这串),不是 b.length zltzlt 发表于 2020-8-4 07:40
我指的是 b(也就是 'sc bcd' 这串),不是 b.length
可是 b = Word('sc bcd'),他不会改变吗? def花 发表于 2020-8-4 07:54
可是 b = Word('sc bcd'),他不会改变吗?
你试试 str(b) 看看会得到什么 本帖最后由 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
Twilight6 发表于 2020-8-4 07:56
你 __init__ 中将 self.length 转为 str 了,而你重写的比较方法里只有 self.length 而other 你没带 ...
'3' > 's' ? zltzlt 发表于 2020-8-4 07:58
'3' > 's' ?
哦哦有个地方写错了,改了哈哈 zltzlt 发表于 2020-8-4 07:20
我好像看错了,a > b 这是把 a.length 和 b 作比较,b 的长度更大,所以 a > b 为 False
不是比较长度吧,应该还是比较 ASCII 码,因为两个都是字符串 zltzlt 发表于 2020-8-4 08:05
如果两个长度都一样才比较 ASCII 码
不是吧,都是比较 ASCII 的
>>> 'bcd' < 'abcd'
False
因为 'b' ASCII 大于 'a' 所以返回 False
Twilight6 发表于 2020-8-4 08:08
不是吧,都是比较 ASCII 的
{:10_245:}刚刚去试了一下,还真是 zltzlt 发表于 2020-8-4 08:09
刚刚去试了一下,还真是
{:10_301:} Twilight6 发表于 2020-8-4 08:08
不是吧,都是比较 ASCII 的
也就是字符串比较只是比较第一个字符的ascii码的大小吗 本帖最后由 Twilight6 于 2020-8-4 08:15 编辑
def花 发表于 2020-8-4 08:12
也就是字符串比较只是比较第一个字符的ascii码的大小吗
是依次比较各个字符,但只要途中有分出大小就立马返回比较后的结果
所以如果你第一个字符就比较出大小,就直接返回比较后的结果
反之如果没有得出大小,那么继续比较下一个字符
页:
[1]