我正在为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',例如,这是一种可以接受的答案。
我已经考虑了一段时间,但我想不出一种方法来对每个答案进行硬编码。
答案 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.")