我正在编写一个程序,允许用户设置个人测验(如记录卡类型系统).在进行测验时,用户会在每个问题上进行计时.答案不会是多项选择,但它们将由用户输入.
有没有办法让我能够充分接受答案,这些答案不是他们在第一次设置测验时输入的输入的完整答案?
问:"谁是苏格拉底."
答:"希腊哲学家."
我想过使用类似的东西:
if input in answer:
print "That's correct."
Run Code Online (Sandbox Code Playgroud)
但这根本不起作用.
有没有办法做到这一点?或者接近它的东西.
---更新---
我刚刚遇到了一个非常出色的Python模块,它被称为FuzzyWuzzy,这里有一个链接到它的描述以及它能做些什么http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-匹配功能于蟒
这取决于你正在尝试做什么.你的尝试听起来像是在试图匹配"希腊哲学家"的任何子串,所以"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,Python自然语言工具包来实现一种模糊短语匹配,您尝试匹配词性而不是提供的确切短语.请注意,这不是微不足道的.