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
.
稍后我会进入错误,但首先我会解释机器人应该做什么。该机器人有一个数据库,由字典表示,其中存储了所有用户和机器人的响应。
- 首先输出"Hi!"
- 要求用户输入。
- 每个输出都有一些与之相关的响应。输出存储在字典中的键中,响应在列表中,这是键的值。
- 机器人的输出是从与用户输入相关联的响应列表中随机选择的。
- 如果字典中没有输入,则会添加。此外,输入将被机器人回应。
- 永远重复这个。
(如果解释不好,请见谅,但如果您继续阅读,您可能会理解。)
所以,这是一个机器人应该做什么的例子。
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 = {}
我使用 Python 创建了一个简单的聊天机器人,但是当我尝试使用它时,它给我一个错误:TypeError: list indices must be integers, not str
.
稍后我会进入错误,但首先我会解释机器人应该做什么。该机器人有一个数据库,由字典表示,其中存储了所有用户和机器人的响应。
- 首先输出"Hi!"
- 要求用户输入。
- 每个输出都有一些与之相关的响应。输出存储在字典中的键中,响应在列表中,这是键的值。
- 机器人的输出是从与用户输入相关联的响应列表中随机选择的。
- 如果字典中没有输入,则会添加。此外,输入将被机器人回应。
- 永远重复这个。
(如果解释不好,请见谅,但如果您继续阅读,您可能会理解。)
所以,这是一个机器人应该做什么的例子。
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 = {}