2016-10-15 6 views
0

私はChatbotを構築しており、私はそれを私に無作為に回答させることができました。私はリスト内のすべての回答を追加し、私がそれを挨拶するたびに、それは私にランダムな答えを撃つ。今これはうまくいきますが、プログラムによって例外がスローされることがあります - IndexError: list index out of range。私はなぜリストのインデックスが範囲外に行くのか分からない。リストには6つの項目があり、random.randint(0,len(slist))を使用するとランダムな応答を得ることができました。ランダムモジュール使用時にリストインデックスが範囲外になるのはなぜですか?

私はこの問題を解決するために例外処理を使用しています。しかし、なぜそれがエラーを起こすのかを知りたい。

if self.Has_user_greeted == False: 
    self.AI_Greet() 
else: 
    # goes out of range here 
    self.AI_respond = random.randint(0,len(self.AI_Greeted)) 
    print(self.AI_Greeted[self.AI_respond]) 

答えて

0

リストインデックスは、あなたが上限とinclusively指定範囲の数を選択します0randintで開始しているためである。

はここで例外処理なしのコードです。この例を守ってください。最高の指数は、実際に2あるので

>>> a[3] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

だから、
>>> a = [1,2,3] 
>>> len(a) 
3 

、今インデックス3で値を取得しよう。あなたはあなたの例では何をしたいのか

は単に-1長さ:

random.randint(0,len(self.AI_Greeted) - 1) 
2

randintは(他のコンピュータ言語に関連する歴史的な理由のために)のPythonの残りの部分のようには作用しません。特に、randint()にはPythonのリストインデックスとは異なり、上限が含まれており、len()です。

randint(0,len(self.AI_Greeted) - 1)を使用してください。

関連する問題