Python chatbot - TypeError:list indices必须是整数,而不是str

时间:2016-05-25 14:07:23

标签: python dictionary chatbot

我已经使用Python创建了一个简单的聊天机器人,但是当我尝试使用它时,它会给我一个错误:TypeError: list indices must be integers, not str

我稍后会遇到错误,但首先我会解释机器人应该做什么。机器人有一个由字典表示的数据库,其中存储了所有用户和机器人的响应。

  1. 首先,它输出"嗨!"
  2. 要求用户输入。
  3. 每个输出都有一些与之相关的响应。输出存储在字典中的键中,响应位于列表中,这是键的值。
  4. 机器人的输出是从与用户输入相关的响应列表中随机选择的。
  5. 如果输入不在字典中,则会添加。此外,输入将由机器人回显。
  6. 永远重复此事。
  7. (对不起,如果解释很糟糕,但也许如果你继续阅读,你可能会理解。)

    所以,这是一个机器人应该做的例子。

    BOT> Hi!
    YOU> Hello!
    BOT> Hello!
    YOU> How do you do?
    BOT> How do you do?
    YOU> I'm fine, thanks.
    BOT> I'm fine, thanks.
    YOU> Hello!
    BOT> How do you do?
    YOU> I'm fine thanks.
    BOT> Hello!
    

    这是我使用的代码(我排除了不需要的部分)

    import pickle
    import random
    
    class Bot:
        def __init__(self, current, database, saveFile):
            self.current = "Hi!"
            self.database = []
    
        def say(self, text):
            print("BOT> " + text)
            self.current = text
    
        def evaluate(self, text):
            if text in self.database:
                self.say(random.choice(self.database[text]))
    
            else:
                self.database[text] = []
                self.say(text)
    
    bot = Bot("", {})
    bot.say("Hi!")
    
    while 1:
        bot.evaluate(input("YOU> "))
    

    现在,解决我遇到的问题。

    当我尝试与机器人交谈时,我收到错误TypeError: list indices must be integers, not str。它指向代码行self.database[text] = []。 这是一个例子:

    BOT> Hi!
    YOU> Hello!
    (error)
    

    我不知道发生了什么,所以我不知道应该做些什么来尝试修复它。我认为代码可以正常工作,但它没有......有人能给我一点帮助吗?

2 个答案:

答案 0 :(得分:1)

self.database是一个列表。可以通过指定列表中的位置来访问列表项,例如,第一项为self.database[0],第五项为self.database[4]

您尝试使用text作为列表位置,这没有任何意义。

如果要基于文本键而不是整数位置存储项目,请使用字典而不是列表。

答案 1 :(得分:0)

您提到数据库是字典,但您正在创建列表

self.database = []

dict由花括号

创建
self.database = {}