Python测验 - 如何接受大多数正确的答案

时间:2013-02-03 01:37:25

标签: python

我正在编写一个程序,允许用户设置个人测验(如记事卡式系统)。在进行测验时,用户会在每个问题上进行计时。答案不会是多项选择,但它们将由用户输入。

有没有一种方法可以让我足够接受答案,这些答案不是他们第一次设置测验时输入的输入的完整答案?

实施例

问:“谁是苏格拉底。”

答:“希腊哲学家。”


我想过使用类似的东西:

if input in answer:
    print "That's correct."

但这根本不起作用。

有没有办法做到这一点?或者接近它的东西。

--- ---更新

我刚刚遇到了一个非常出色的Python模块,它叫做FuzzyWuzzy,这里有一个链接到它的描述以及它可以做什么http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python

1 个答案:

答案 0 :(得分:5)

这取决于你正在尝试做什么。你的尝试听起来像是在试图匹配“希腊哲学家”的任何子串,所以“ee”将是一个正确的答案。这听起来不对。

您可以为每个问题设置一个(或列表)可能正确的答案。对于你的例子,也许你也会接受“哲学家”。

如果您想忽略拼写错误,您可以测试输入的内容是否“接近”任何已知的正确答案。这需要一个能够计算匹配程度的函数。一种流行的方法是使用Levenshtein距离。参见:

http://en.wikipedia.org/wiki/Levenshtein_distance
http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance
http://code.activestate.com/recipes/576874-levenshtein-distance/
http://pypi.python.org/pypi/python-Levenshtein/

更新

如果你想允许不准确的拼写,Levenshtein距离很好。但如果你想允许不同的短语,即“来自古希腊的哲学家”,则需要采用不同的方法。如果您真的很有动力,可以尝试使用NLTK, Natural Language Toolkit for Python来实现一种模糊短语匹配,在这种情况下,您尝试匹配词性而不是提供的确切短语。请注意,这并非无足轻重