热心市民K先森 发表于 2021-6-5 05:38:42

关于43课作业编程题1,代码出了问题,想请教一下

题目:

定义一个单词(Word)类继承自字符串,重写比较操作符,当两个Word类对象进行比较时,根据单词的长度来进行比较大小。
加分要求:实例化时如果传入的是带空格的字符串,则取第一个空格前的单词作为参数。

我写的代码就是在“取空格之前部分”出了问题:
class Word(str):
    def __new__(cls,arg=''):
      for i in range(len(arg)):
            print(i)
            if arg.isspace():
                arg = arg[:i]
    return str.__new__(cls,arg)
结果显示索引错误,具体如下:
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/python043比较字符.py", line 23, in <module>
    w2 = word('abcd ef')
File "C:/Users/Administrator/Desktop/python043比较字符.py", line 5, in __new__
    if arg.isspace():
IndexError: string index out of range

我把这段改了一下:
class word(str):
    def __new__(cls,arg=''):
      for i in arg:
            if i.isspace():
                arg = arg[:arg.find(i)]
      return str.__new__(cls,arg)

所以想请教一下,我之前的那一段代码哪里出了问题,为什么会索引错误{:10_243:} ?

qq1151985918 发表于 2021-6-5 08:17:54

你如果是找不同的话,那应该是return的位置不同

逃兵 发表于 2021-6-5 08:28:45

第一种方法
用索引位置的时候,由于出现空格后arg发生改变
原字符'abcd ef'长度为7,索引最大值为6
arg发生改变后变为'abcd'长度为4,索引最大值为3
在第6次迭代的时候,取索引值为5的值时引发报错
arg = 'abcd'
arg
出现索引错误

热心市民K先森 发表于 2021-6-6 07:30:46

逃兵 发表于 2021-6-5 08:28
第一种方法
用索引位置的时候,由于出现空格后arg发生改变
原字符'abcd ef'长度为7,索引最大值为6


感谢解答!
页: [1]
查看完整版本: 关于43课作业编程题1,代码出了问题,想请教一下