我需要找到一种基于用户输入返回句子的方法,即关键词搜索。
我创建了一个字典,可以根据一个单词返回一个句子但是无法弄清楚我是否可以根据多个单词返回一个句子:
水损坏会在将手机放入水中时返回一句话 我有破解屏幕不会返回任何内容。我知道问题出在我正在使用的.split.strip函数上。
我的下一个问题是我似乎无法创建空条目检查,我已经尝试过常用,而input_1是None,或==''但是strip函数删除了空格,所以我猜测没有空条目可供选择。
similar_words = {
'water': 'you have let water into your phone',
'wet': 'let your phone dry out then try to restrat the phone',
'crack case': 'you have cracked your screen or case, this will need replacing by a specialist',
'cracked screen': 'you have cracked your screen or case, this will need replacing by a specialist',
'turn on': 'your battery may need replacing',
'crack': 'your phone screen has been cracked, you need to contact the technician centre',
}
def check():
if word.lower() in similar_words:
print(similar_words[word.lower()])
input_1 = input("What seems to be the problem with your phone?: ").strip().split()
for word in input_1:
check()
def close():
print ('Please press enter to close the program')
quit()
close_1 = input('Have we addressed your problem, please answer yes or no?: ')
if close_1=='yes':
close()
else:
print ('Lets us move on then')
答案 0 :(得分:1)
如果输入只是“破解屏幕”,则对split()
的调用会返回两个单词的列表:["cracked", "screen"]
。测试word.lower() in similar_words
有效地将每个单词与字典中寻找匹配项的所有键进行比较。
由于你没有“破解”或“屏幕”作为字典中的键,因此无法找到匹配。
如果要将输入分成单个单词列表,则每个键都需要是一个单词。
但是,如果您将“破解”作为一个键,则会报告“我的案例封面被破解”等输入,就好像它是一个破解的屏幕。
您需要更智能的测试,可能需要阅读ngrams。将输入拆分为unigrams,bigrams等,并根据键列表检查每个输入。然后你需要弄清楚如何处理像“我的屏幕被破解”这样的输入。
对于NULL检查,如果输入字符串为空,strip().split()
将返回一个空列表([]
)。检查len(input_1) == 0
。