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

Rus*_*ams 1 python

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

有没有办法让我能够充分接受答案,这些答案不是他们在第一次设置测验时输入的输入的完整答案?

问:"谁是苏格拉底."

答:"希腊哲学家."


我想过使用类似的东西:

if input in answer:
    print "That's correct."
Run Code Online (Sandbox Code Playgroud)

但这根本不起作用.

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

---更新---

我刚刚遇到了一个非常出色的Python模块,它被称为FuzzyWuzzy,这里有一个链接到它的描述以及它能做些什么http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-匹配功能于蟒

jim*_*ark 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,Python自然语言工具包来实现一种模糊短语匹配,您尝试匹配词性而不是提供的确切短语.请注意,这不是微不足道的.

  • 是的,确切地说,问题作者将提供一组答案.你还怎么做?(除非你有IBM的Watson并且它并不忙于赢得Jeopardy.) (2认同)