尝试附加列表时为什么会出现错误?

时间:2018-11-04 02:08:02

标签: python list pacman

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

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

对于此代码,我希望函数将'_'附加到最终词中。但是,当它在'ghost'中遇到一个字符时,我希望它指示任何字符首次出现的索引号(因为我不知道怎么用'o'作为指示符)。 然后,我想将索引号存储在找到它的位置,并通过字符串切片生成指示符后面的其余单词。然后通过将rest_of_word扩展为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'

3 个答案:

答案 0 :(得分:0)

两者:

finalword = finalword.append('_')

和:

finalword = finalword.extend(rest_of_word)

是错误的。 appendextend都将适当的现有list进行突变,并且像Python中大多数此类突变方法一样,返回None。您想要:

finalword.append('_')

和:

finalword.extend(rest_of_word)

因此,您无需就地修改finalword的{​​{1}},然后立即将其丢弃,将list重新绑定到finalword并中断以后的所有使用。

答案 1 :(得分:0)

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

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','s','e','s']

请注意,您所说的第一个“ o”之前没有下划线。

答案 2 :(得分:0)

某些函数可以就地运行,它们不会返回任何内容,并且不会对您传递的参数进行处理,以使原始数据也会更改。现在需要记住一个重要的事情:在python中,即使是就地函数也会返回某些内容,。 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初学者,但我不想让您感到困惑,但是请记住,有一种叫做正则表达式的东西,您可以使用它来更有效地处理文本。稍后再检查。