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
解决方案
提供的代码有许多问题。该示例也没有显示如何调用该函数,但我假设您希望使用包含您要查找的所有关键字的文本来调用它。
第一个问题是您正在调用输入,但没有存储它的返回值,因此您实际上并没有收集用户输入。
其次,您将 的各个部分与valid_list
的内容进行user_complaint.lower()
比较,但这意味着您将一个字符串与另一个字符串中的字符进行比较 - 而不是您想要的。
第三,您在循环内的条件的单个子句中要求新输入,因此这将导致重复打印消息,并且用户必须在所有比较完成之前输入新文本。
最后,您正在混合continue
,break
并且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'))
推荐阅读
- java - 如何从android java中的另一个活动访问asyntask的返回值
- c# - 我将如何使用 C# 导航这种 XML 结构?
- latex - \Printbibliography 不显示参考文献列表
- reporting-services - 使用 SSRS 中的表达式设置组的边框宽度
- geocoding - 反向地理编码不适用于中国
- java - Spring Boot 启动失败且没有错误
- javascript - 我可以使用 eval 的 jQuery global eval intsead 来逃避内容安全策略吗
- reactjs - 使用打字稿创建反应应用程序 - 如何将类型放在单独的文件中
- ios - 动态设置 navigationItem.prompt 时获取 LayoutConstraints 警告
- javascript - jQuery在解析json中的数组时保留顺序