2

大家好,我这里有一小段代码让我很头疼。在这个函数中,我定义了一个名为的列表word,然后列表突然变成了一个字符串。我不知道这怎么可能:

def find_best_shift(wordlist, text):
    words = []
    word = []
    for x in range(0, 27):
        apply_shift(text, x)
        for character in text:
            print (type(word))
            if (character in ALPHABET) or (character in alphabet):
                word.append(character)
            else:
                wor = ''.join(word)
                words.append(wor)
                word = []
        for word in words:
            y = is_word(wordlist, word)
            if y == True:
                return x

你们注意到打印声明print(type(word))。使用此语句,我得到以下输出:

<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'str'>

然后它给了我以下错误:

File "C:\Users\usuario\Documents\Python Projects\ps4\ps4.py", line 264, in    find_best_shift
word.append(character)
AttributeError: 'str' object has no attribute 'append'

我将不胜感激任何帮助!

4

1 回答 1

8
for word in words:

将相同的名称 ( word) 重新分配为列表的一个元素,words然后再转到 的下一个值x。将此更改为其他内容。

for item in words:

重用名称可能会引起一些有趣的头痛:(

别忘了更新

y = is_word(wordlist, word)

y = is_word(wordlist, item)

我会简化

if y == True:

简单来说

if y:

如果您开始将条件链接在一起,则显式比较布尔文字可能会导致一些有趣的结果。

于 2013-09-05T02:51:33.357 回答