我想通过功能接收用户输入并将其与关键字列表进行比较,如果用户输入的任何单词与关键字匹配,则满足条件并中断循环。如果没有一个单词与关键字匹配,则控制台再次要求输入。我一直在操纵该循环,或者不管是否遇到关键字都让它不断地要求输入,或者验证每个输入的单词。任何有关如何纠正它的建议将不胜感激。
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
答案 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>
第三,您在循环内的条件的单个子句中请求新输入,因此这将导致消息重复打印,并且用户必须在完成所有比较之前输入新文本。
最后,您以一种无效的方式混合了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'))