比较用户输入和关键词列表

时间:2018-12-18 02:21:52

标签: python

我想通过功能接收用户输入并将其与关键字列表进行比较,如果用户输入的任何单词与关键字匹配,则满足条件并中断循环。如果没有一个单词与关键字匹配,则控制台再次要求输入。我一直在操纵该循环,或者不管是否遇到关键字都让它不断地要求输入,或者验证每个输入的单词。任何有关如何纠正它的建议将不胜感激。

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

3 个答案:

答案 0 :(得分:0)

此功能将继续获取用户输入,直到输入匹配“ kwrd1”,“ kwrd2”或“ kwrd3”为止:

def get_input():
    keywords = ['kwrd1', 'kwrd2', 'kwrd3']
    user_input = None
    while True:
        user_input = input()
        if user_input in keywords:
            break
    return user_input

如果您将其与python关键字匹配,则有一个内置的keyword模块:

import keyword

def get_input():
    user_input = None
    while True:
        user_input = input()
        if keyword.iskeyword(user_input):
            break
    return user_input

答案 1 :(得分:0)

如果valid_list中的第一个元素不是user_complaint字符串的子字符串,则始终会到达else语句。这意味着您总是在打破for循环并重新进入无限的while循环。尝试以下方法:

def validated_response(user_complaint):
    valid_list = user_complaint.split()
    if user_complaint == "stop":
        return
    inp = input("Enter response: ")
    while inp.lower() not in valid_list:
        inp = input("Enter response: ")

答案 2 :(得分:0)

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

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

第二,您正在将valid_list的各个部分与user_complaint.lower()的内容进行比较,但这意味着您要将一个字符串与另一个字符串中的字符进行比较,而不是您想要的。< / p>

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

最后,您以一种无效的方式混合了continuebreakreturncontinue告诉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'))