我正在编写一个程序,允许用户设置个人测验(如记事卡式系统)。在进行测验时,用户会在每个问题上进行计时。答案不会是多项选择,但它们将由用户输入。
有没有一种方法可以让我足够接受答案,这些答案不是他们第一次设置测验时输入的输入的完整答案?
答:“希腊哲学家。”
我想过使用类似的东西:
if input in answer:
print "That's correct."
但这根本不起作用。
有没有办法做到这一点?或者接近它的东西。
--- ---更新
我刚刚遇到了一个非常出色的Python模块,它叫做FuzzyWuzzy,这里有一个链接到它的描述以及它可以做什么http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python
答案 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/