为什么我的代码没有正确创建元组列表?

Whe*_*-pi 0 python methods tuples

direction = ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back']
class Lexicon(object):

    def scan(self, sentence):
        self.sentence = sentence
        self.words    = self.sentence.split()
        self.term = []

        for word in self.words:
            if word in direction:
                part = ('direction','%s' % word)
                self.term.append(word)
            return self.term


lexicon = Lexicon()
Run Code Online (Sandbox Code Playgroud)

当我进入时,lexicon.scan('north south east')我期待着回归给我[('direction','north'),('direction','south'),('direction','east')].相反,我得到了['north'].这是我希望程序整体上做的事情.

  1. 判刑.
  2. 对该句子使用扫描并将句子分成不同的单词.
  3. 扫描检查句子中的所有单词与几个列表(这只是单个列表上的第一个测试).
  4. 如果在列表中找到一个单词,那么我想创建一个元组,第一个术语是列表的名称,第二个术语是单词.
  5. 我想为不在列表中的单词创建一个元组,就像前一个但是使用"Error"而不是列表名称.
  6. 我想返回一个名为term的元组列表,其中包含所有不同的单词,其列表名称或错误位于元组的第一部分

Ric*_*dle 5

这个:

self.term.append(word)
Run Code Online (Sandbox Code Playgroud)

应该这样:

self.term.append(part)
Run Code Online (Sandbox Code Playgroud)

你丢弃part而不是添加它self.term.

而且,你是return在循环内而不是在循环之后 - 你需要让你的return陈述变得一致.这是工作代码:

for word in self.words:
    if word in direction:
        part = ('direction','%s' % word)
        self.term.append(part)
return self.term
Run Code Online (Sandbox Code Playgroud)

输出:

[('direction', 'north'), ('direction', 'south'), ('direction', 'east')]
Run Code Online (Sandbox Code Playgroud)