检查谜语答案的Python程序

时间:2019-09-12 14:00:10

标签: python

我正在为whatsapp创建一个基于python的聊天机器人。它的功能之一是给用户一个谜题来解决。然后,用户回答,程序将检查答案是否正确。但是,我很难定义代码来正确检查答案是否正确。

现在,我检查用户的答案是否是实际答案的子字符串,但这会产生非常简单的答案,例如仅字母“ e”经常是正确的,因为它经常出现在答案中。例如: “一分钟一次,一次两次,但是一千年来却没有?” 答案是“字母M”,使用我当前的代码,但是输入“ e”也将被视为正确。我只想将“ M”,“ Letter M”和“ The Letter M”作为正确答案,但是我不想那样对所有答案进行硬编码。

另一个例子,“不持有时有什么坏处?”。答:“一个承诺”。 我希望“ Promise”或“ A Promise”是正确的,但是仅将字母“ m”作为输入将根据我当前的代码给出正确的响应。

这是发生代码的部分:

    if answer.lower() in answers[randomNumber].lower():
        text_box = browser.find_element_by_class_name("_3u328")
        response = "Wow, you got it correct, nice one! \n"
        text_box.send_keys(response)
    else:
        text_box = browser.find_element_by_class_name("_3u328")
        response = "Nice try, but you didn't get it correct, try again later.\n"
        text_box.send_keys(response)

“答案”是一个字符串,即用户的答案。 “答案”是一个字符串列表,每个项目都是一个谜语字符串。 “ randomNumber”是一个整数,即当前谜语的编号。

所以我的问题是,比以下哪种方法更好地检查答案

if answer.lower() in answers[randomNumber].lower():

再次参考示例,对于“字母M”的答案,我希望“ M”,“字母M”,“字母M”以及它们的小写字母等效项被接受。但不是'e',例如,这是一种可以接受的答案。

我已经考虑了一段时间,但我想不出一种方法来对每个答案进行硬编码。

1 个答案:

答案 0 :(得分:0)

我认为您无法避免需要明确定义您认为正确答案的事实。没有一种算法可以读懂你的思想。

话虽如此,我认为对接受的答案进行“硬编码”没有任何问题。在某些JSON-y格式下,这可能尤其可爱:

questions = {
    "What comes once in a minute," \
    " twice in a moment but never" \
    " in a thousand years?": ["The Letter M", "Letter M", "M"],

    "What is broken when it's not held?": ["A Promise", "Promise"]
}

for question, correct_answers in questions.items():
    user_answer = input(f"{question}: ")
    if any(user_answer.lower() == answer.lower() for answer in correct_answers):
        print("Correct!")
    else:
        print("Sorry, that was incorrect.")