如何使用字典来验证用户输入?

时间:2017-02-21 20:31:31

标签: python python-3.x

所以我想制作一个可以与用户进行小型对话的小机器人。唯一的问题是,当我输入列表中的一个单词(hello或hi)时,我会收到欢迎用户消息,但如果我输入类似hello计算机的内容,它会给我TESTPHRASE消息。有什么我可以放入,以便它在用户输入的句子中查找并在使用的列表中找到一个单词,以便它可以说出适当的响应。

angular.module('myApp',['ngMaterial'])
.controller('TempController', function($scope){
 $scope.data = [ "Item 1", "Item 2", "Item 3", "Item 4"]
 $scope.toggle = {};
});;

4 个答案:

答案 0 :(得分:5)

当您将in应用于字符串和字典时,它将测试整个字符串是否为密钥。看起来你想检查句子中的第一个单词或句子中的任何单词是否在字典中。

在任何一种情况下,您都希望在空格上分割输入:

words = input('-').split()

如果您想查看第一个单词,请按以前的步骤操作:

if words[0] in user_greetings:
    print("Welcome User")
else:
    print("TESTPHRASE")

如果任何单词应该触发欢迎消息,请使用any和生成器表达式:

if any(x in user_greetings for x in words):
    print("Welcome User")
else:
    print("TESTPHRASE")

答案 1 :(得分:1)

我的代码出现语法错误。尝试将else移动到它自己的行。否则,您的代码适合我。

编辑:

重读问题。你的代码正在检查“hello computer”是否在问候中,这是{'hello','hi'}。 “问候电脑”不在问候中。您可以撤消搜索并执行

for greeting in user_greetings:
    if greeting in user_input:
        # print greeting

否则,您需要在问候列表中添加“hello computer”。

答案 2 :(得分:0)

这样的事情可以做到:

greetings = ['hello', 'hi']
input = 'hello computer'.split()
if set(greetings).intersection(set(input)):
  print('Welcome')

答案 3 :(得分:0)

@Mad Physicist为此提供了一个非常全面的答案,我对他的回答表示赞同。

如果任何单词将触发欢迎消息,无论是否大写,还有另一种方法。

user_greetings = {"hello", "hi"}
user_input = input("-").split()

# set process control.
greeting = None 

for word in user_input:   
    if word.lower() in user_greetings:
        print("Welcome User")  
    else:
        greeting = True

if greeting:
    print("TESTPHRASE")