Python chatbot - TypeError: list indices must be integers, not str

Python chatbot - TypeError: list indices must be integers, not str

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

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

  1. 首先输出"Hi!"
  2. 要求用户输入。
  3. 每个输出都有一些与之相关的响应。输出存储在字典中的键中,响应在列表中,这是键的值。
  4. 机器人的输出是从与用户输入相关联的响应列表中随机选择的。
  5. 如果字典中没有输入,则会添加。此外,输入将被机器人回应。
  6. 永远重复这个。

(如果解释不好,请见谅,但如果您继续阅读,您可能会理解。)

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

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)

我不知道发生了什么,所以我不知道我应该做些什么来尝试修复它。我认为代码可以正常工作,但事实并非如此...有人可以帮我一点忙吗?

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

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

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

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

self.database = []

一个dict是由花括号创建的

self.database = {}