首页 > 解决方案 > 将用户输入与关键词列表进行比较

问题描述

我想通过函数将用户输入与关键字列表进行比较,如果用户输入的任何单词与关键字匹配,则满足条件并中断循环。如果没有一个词与关键字匹配,那么控制台会再次要求输入。我一直在操纵这个循环,要么让它不断地请求输入,无论是否满足关键字,要么验证每个输入的单词。任何有关如何纠正它的建议将不胜感激。

def validated_response(user_complaint):
    valid_list = user_complaint.split()

    while True:
           if user_complaint == "stop":
                    break
           for valid in valid_list:
                    if valid.lower() not in user_complaint.lower():
                           print("Response not recognized, please try again")
                           input("Enter response: ")
                           continue

                    else:
                           print("response validated: ")
            break
        return True

标签: python

解决方案


提供的代码有许多问题。该示例也没有显示如何调用该函数,但我假设您希望使用包含您要查找的所有关键字的文本来调用它。

第一个问题是您正在调用输入,但没有存储它的返回值,因此您实际上并没有收集用户输入。

其次,您将 的各个部分与valid_list的内容进行user_complaint.lower()比较,但这意味着您将一个字符串与另一个字符串中的字符进行比较 - 而不是您想要的。

第三,您在循环内的条件的单个子句中要求新输入,因此这将导致重复打印消息,并且用户必须在所有比较完成之前输入新文本。

最后,您正在混合continuebreak并且return以一种不起作用的方式。continue告诉 Python 进入循环的下一个循环,跳过当前循环中的任何剩余代码。break告诉 Python 退出当前块(在本例中为循环)。return告诉 Python 完全退出函数并返回一个提供的值(或者None如果没有提供)。

这是一个或多或少遵循您设置的结构的示例,但已解决所有问题:

def validated_response(keywords):
    valid_list = keywords.split()

    while True:
        user_input = input('Enter response: ').lower().split()
        if user_input == ['stop']:
            return False
        for valid in valid_list:
            if valid.lower() in user_input:
                print('response validated: ')
                return True
        print('Response not recognized, please try again')


print(validated_response('trigger test'))

推荐阅读