Python测验-如何接受大部分正确答案

Python测验-如何接受大部分正确答案,python,Python,我正在编写一个程序,允许用户设置个人测验(如记事卡类型的系统)。在进行测验时,用户会对每个问题进行计时。答案不会是多项选择,而是由用户输入 有没有一种方法可以让我充分接受那些不是他们第一次设置测验时输入的完整答案的答案 实例 问:“苏格拉底是谁?” 答:“希腊哲学家。” 我考虑过使用类似于: if input in answer: print "That's correct." 但这根本不起作用 有什么可能的方法可以做到这一点吗?或者类似的东西 ---更新--- 我最近遇到了一个Py

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

有没有一种方法可以让我充分接受那些不是他们第一次设置测验时输入的完整答案的答案

实例 问:“苏格拉底是谁?”

答:“希腊哲学家。”


我考虑过使用类似于:

if input in answer:
    print "That's correct."
但这根本不起作用

有什么可能的方法可以做到这一点吗?或者类似的东西

---更新---


我最近遇到了一个Python模块,它在这方面做得非常出色,它被称为FuzzyWzzy,这里有一个链接,指向它的描述以及它能做什么,这完全取决于您正在尝试做什么。你的尝试听起来像是试图匹配“希腊哲学家”的任何子串,所以“ee”将是正确的答案。听起来不对

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

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




使现代化
如果您想允许拼写不准确,Levenshtein距离是很好的。但如果你想使用不同的短语,例如“古希腊哲学家”,那么就需要使用不同的方法。如果你真的很有动力,你可以尝试使用来实现一种模糊短语匹配,你可以尝试匹配词性而不是提供的确切短语。请注意,这不是小事,这完全取决于您要做什么。你的尝试听起来像是试图匹配“希腊哲学家”的任何子串,所以“ee”将是正确的答案。听起来不对

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

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




使现代化
如果您想允许拼写不准确,Levenshtein距离是很好的。但如果你想使用不同的短语,例如“古希腊哲学家”,那么就需要使用不同的方法。如果你真的很有动力,你可以尝试使用来实现一种模糊短语匹配,你可以尝试匹配词性而不是提供的确切短语。请注意,这不是一件小事。您必须使用自然语言处理或模糊匹配来比较答案。谢谢,之前不知道模糊匹配这个词,但快速搜索后,似乎已经有了Levenshtein模块,还有另一个模块,如果其他人感兴趣的话,称为“水母”。你必须使用自然语言处理或模糊匹配来比较答案。谢谢你,之前不知道模糊匹配这个词,但快速搜索后,似乎已经有了Levenshtein模块,还有一个模块,声称如果其他人感兴趣的话,它会更快一点,叫做水母。是的,唯一的问题是用户会输入答案,所以我不能真正建立一个列表,除非我让他们这么做。你提供的链接看起来很有趣,所以谢谢你。是的,没错,问题作者会提供一组答案。否则你会怎么做?(除非你有IBM的Watson,而且它并不忙着赢得Jeopardy。)这取决于你所说的
这个
是什么意思。原始问题的确切要求并不清楚。如果你的意思是忽略简单的拼写错误,或者省略一些小的连接词,那么是的。但我说的是词组变化,对单词重新排序,可能有不同但相关的单词。Levenshtien不是一个很好的选择。NLTK工具包看起来很棒,如果我尝试开发这个应用程序,我不仅仅是为了自己,我一定会研究这个。谢谢。是的,唯一的问题是用户会输入答案,所以我不能真正建立一个列表,除非我让他们这样做。你提供的链接看起来很有趣,所以谢谢你。是的,没错,问题作者会提供一组答案。否则你会怎么做?(除非你有IBM的Watson,而且它并不忙着赢得Jeopardy。)这取决于你所说的
这个
是什么意思。原始问题的确切要求并不清楚。如果你的意思是忽略简单的拼写错误,或者省略一些小的连接词,那么是的。但我说的是词组变化,对单词重新排序,可能有不同但相关的单词。Levenshtien不是一个很好的选择。NLTK工具包看起来很棒,如果我尝试开发这个应用程序,我不仅仅是为了自己,我一定会研究这个。非常感谢。