【问题标题】:Chat-robot that will take input and response in Python将在 Python 中接受输入和响应的聊天机器人
【发布时间】:2016-09-10 18:39:04
【问题描述】:

我目前正在尝试创建一个小型版本的聊天机器人,它将响应终端中的不同关键字输入。例如,如果我写inv,它将打印出它当前的库存,它可能看起来像这样:

Item: sword
Place in inventory: 1
Item: axe
Place in inventory: 2
Item: shield
Place in inventory: 3
Item: bow
Place in inventory: 4
Item: flower
Place in inventory: 5

那部分我已经解决了。当我要提供inv pick hammerinv drop hammer 之类的输入时,就会出现问题。现在我必须以某种方式处理相同的开始关键字可能在多种情况下出现。

我创建了某种处理程序,它接受一个参数(来自用户的输入)并将其拆分为一个列表。看起来像这样:

def splitIntoWords(argOne):
"""
Function that splits list into words
"""
#list to keep and split up the user input
inputList = []
inputList = argOne.split()
#print(str(inputList) + "splitIntoWords")
#term we want to search for
term = "citat"
quitOne = "q"
replyHej = "hej"
replyLunch = "lunch"
inventory = "inv"
invPick = "pick"

#invDrop = "drop"
lenght = len(inputList)
nextWord = inputList[lenght-1]



if term in inputList:
    return term
elif quitOne in inputList:
    return quitOne
elif replyHej in inputList:
    return replyHej
elif replyLunch in inputList:
    return replyLunch
elif inventory in inputList:
    if invPick in inputList:
        return ("q")
    else:
        return inventory
else:
    return result

如您所见,我已经开始在 elif 中执行 if 并尝试对同一个列表进行多次检查,但这对我不起作用。 有没有其他方法可以检查列表中是否出现了多个关键字?

【问题讨论】:

  • @UnknownDeveloper,感谢您编辑我的帖子
  • 没问题 :) @anderssinho
  • 如何确定拆分数组的大小,如果用户输入了 3 个单词并且第一个单词是“inv”,那么你就去检查下一个等等。
  • @DZDomi,所以不是 inputList 中的 elif 库存:如果 inputList 中的 invPick:你的意思是我应该尝试类似: elif inventory in inputList: if len(inputlist) == 3 Or?

标签: python list python-3.x


【解决方案1】:

我对代码进行了格式化和测试,它可以工作。

def splitIntoWords( argOne):

    result = "hej"
    """
    Function that splits list into words
    """
    # list to keep and split up the user input
    inputList = []
    inputList = argOne.split()
    print(str(inputList) + "splitIntoWords")
    # term we want to search for
    term = "citat"
    quitOne = "q"
    replyHej = "hej"
    replyLunch = "lunch"
    inventory = "inv"
    invPick = "pick"

    # invDrop = "drop"
    lenght = len(inputList)
    nextWord = inputList[lenght - 1]

    if term in inputList:
        return term
    elif quitOne in inputList:
        return quitOne
    elif replyHej in inputList:
        return replyHej
    elif replyLunch in inputList:
        return replyLunch
    elif inventory in inputList:
        if invPick in inputList:
            return ("q")
        else:
            return inventory
    else:
        return result

print splitIntoWords("inv pick sword")

测试

python inventory.py 
['inv', 'pick', 'sword']splitIntoWords
q

上面的q 是预期的结果。

【讨论】:

  • 好吧,那我一定是做错了什么。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多