0
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()

当我通过时,lexicon.scan('north south east')我期待着回报给我[('direction','north'),('direction','south'),('direction','east')]。相反,我得到['north']. 这是我希望程序总体上做的事情。

  1. 取一句。
  2. 对该句子使用扫描并将句子拆分为不同的单词。
  3. 对几个列表进行扫描检查句子中的所有单词(这只是单个列表中的第一个测试)。
  4. 如果在列表中找到一个单词,那么我想创建一个元组,第一个术语是列表的名称,第二个是单词。
  5. 我想为不在列表中的单词创建一个元组,就像以前一样,但使用“错误”而不是列表名称。
  6. 我想返回一个名为 term 的元组列表,其中包含所有不同的单词,它们的列表名称或错误在元组的第一部分
4

3 回答 3

5

这个:

self.term.append(word)

应该是这样的:

self.term.append(part)

您正在丢弃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

输出:

[('direction', 'north'), ('direction', 'south'), ('direction', 'east')]
于 2013-05-20T16:19:36.843 回答
4

此处的这一行缩进得太远了:

return self.term

它是循环体的一部分for,因此您的循环过早返回。将其降低一个缩进级别。

您还可以使用列表推导:

self.term = [('direction', word) for word in self.words if word in direction]
于 2013-05-20T16:18:56.790 回答
0

我会在其他答案之上补充一点,这不是获得两组交集的最佳方法。为什么不简单地使用Python 集

    class Lexicon(object):

        def bar(self, sentence):
            return set(sentence.split()) & set(direction)   

我发现这更清晰,更有效。

于 2013-05-20T17:15:51.530 回答