我已经使用Python创建了一个简单的聊天机器人,但是当我尝试使用它时,它会给我一个错误:TypeError: list indices must be integers, not str
。
我稍后会遇到错误,但首先我会解释机器人应该做什么。机器人有一个由字典表示的数据库,其中存储了所有用户和机器人的响应。
(对不起,如果解释很糟糕,但也许如果你继续阅读,你可能会理解。)
所以,这是一个机器人应该做的例子。
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)
我不知道发生了什么,所以我不知道应该做些什么来尝试修复它。我认为代码可以正常工作,但它没有......有人能给我一点帮助吗?
答案 0 :(得分:1)
self.database
是一个列表。可以通过指定列表中的位置来访问列表项,例如,第一项为self.database[0]
,第五项为self.database[4]
。
您尝试使用text
作为列表位置,这没有任何意义。
如果要基于文本键而不是整数位置存储项目,请使用字典而不是列表。
答案 1 :(得分:0)
您提到数据库是字典,但您正在创建列表
self.database = []
dict
由花括号
self.database = {}