私はPythonを使って単純なチャットボットを作成しましたが、使用しようとすると、エラー:TypeError: list indices must be integers, not str
が返されます。Pythonのchatbot - TypeError:リストのインデックスは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)
私は何が起こっているのか分からないので、私は、私はそれを試してみて、修正するために何をすべきかを知りません。私はコードが正しく動作すると思ったが、それは...誰も私に少し助けを与えることができませんでしたか?
データベースの種類リストため、エラーのある中括弧で
dict
が作成されたリストを作成しています。おそらくそこに辞書が必要です。 – fusionのように、 'self.database [text]'は 'self。database'はLISTです。これは 'text'のような文字列があなたのインデックスになることを許しません。あなたは何をしようとしているのかははっきりしていませんが、['dicts'](https://docs.python.org/2/library/stdtypes.html#mapping-types-dict)を調べることをお勧めします。 –
@fusion OK、ありがとう!私はそれを逃したとは信じられない:P – m654