为什么在尝试附加列表时出错?

2024-05-20 20:26:53 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我不断收到此代码的错误:

def pacman(word):
finalword = []
wordlist = list(word)
for c in wordlist:
    if c in 'abcdefijklmnpqruvwxyz':
        finalword = finalword.append('_')
    elif c in 'ghost':
        indicator = word.find('o')
        rest_of_word = wordlist[indicator::]
        finalword = finalword.extend(rest_of_word)
return finalword

对于这段代码,我想让函数在finalword中附加“\”。但是当它在“ghost”中遇到一个字符时,我希望它指示任何字符第一次出现的索引号(使用“o”作为指示符,因为我不知道如何使用)。 然后我想将索引号存储在找到它的位置,并通过字符串切片生成指示字母后面的其余单词。然后用finalword扩展单词的其余部分来创建最终列表

print(pacman('pacmanloses')) # wanted outcome : [_,_,_,_,_,_,_o,s,e,s]

但我得到了错误

  File "C:/Users/mere/Desktop/pacmanINFINITE.py", line 6, in pacman
finalword = finalword.append('_')

AttributeError:“NoneType”对象没有属性“append”


Tags: of代码inrestdef错误pacman字符
3条回答

两者:

finalword = finalword.append('_')

以及:

finalword = finalword.extend(rest_of_word)

你错了。appendextend都会原地对现有的list进行变异,并且与Python中的大多数此类变异方法一样,返回None。你想要:

finalword.append('_')

以及:

finalword.extend(rest_of_word)

所以你不需要修改finalwordlist,然后立即扔掉它,将finalword重新绑定到None并中断它的所有后续使用。你知道吗

问题是,您将数组视为字符串,而不是将其视为包含单个字符的字符串数组。我想你想要的是:

def pacman(word):
finalword = []
wordlist = list(word)
stop = False
for c in wordlist:
    if not stop:
        if c in 'abcdefijklmnpqruvwxyz':
            finalword.append("_")
        elif c in 'ghost':
            indicator = word.find('o')
            rest_of_word = wordlist[indicator::]
            for c2 in rest_of_word:
                finalword.append("" + c2)
                wordlist = list()
                stop = True
return finalword

输出:[''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''

注意,第一个“o”前面没有下划线,就像你说的。你知道吗

有些函数是就地工作的,它们不返回任何内容,并且以原始数据也会更改的方式处理您传递的参数。现在有一件重要的事情需要记住:在python中,即使是就地函数也会返回一些东西,即None。None是python中的类型,这意味着什么都没有(显然:)。像这样更改第6行以消除错误:

#finalword = finalword.append('_')
finalword.append('_')

第11行:

#finalword = finalword.extend(rest_of_word)
finalword.extend(rest_of_word)

我不知道这是什么游戏,我想你应该这样做:

elif c in 'ghost':
     if c == 'g':
        indicator = word.find('g')
        rest_of_word = wordlist[indicator:]
     elif c == 'h':
        indicator = word.find('h')
        rest_of_word = wordlist[indicator:]
     elif c == 'o':
        indicator = word.find('o')
        rest_of_word = wordlist[indicator:]
     elif c == 's':
        indicator = word.find('s')
        rest_of_word = wordlist[indicator:]
     else:
        indicator = word.find('t')
        rest_of_word = wordlist[indicator:]

你似乎是一个python初学者,我不想把你搞糊涂,但是请记住有一种叫做正则表达式的东西,你可以用它来更有效地处理文本。稍后再看。你知道吗

相关问题 更多 >