2015-12-10 30 views
1

我查看了所有錯誤以找到解決方案,但找不到工作解決方案!錯誤:列表索引超出範圍Python

我得到列表索引超出範圍錯誤。

「手」和「甲板」都列在這裏。

def draw(self,amount): 
    for x in range(amount): 
     print len(self.deck) 
     if len(self.deck) == 0: 
      self.shuffle 
     else: 
      pass 
     self.hand.append(self.deck[0]) 
     self.deck.remove(self.deck[0]) 

據我所知,它是給錯誤,因爲錯誤通過時,甲板只是[]。爲什麼會發生這種情況,我該如何解決?

+0

這是因爲它們中的一個(或它們兩個)列表是空的(或者在您執行'self.deck.remove(self.deck [0])'時變爲空)。我們可以看到這些列表嗎? –

+0

可能提供完整的代碼。 – nehemiah

+0

需要更多關於手和甲板的信息。 –

回答

0

缺少更多的上下文我會猜測你的意思是調用self.shuffle()而不是self.shuffle

而且,如果甲板只是一個列表,你可以將其替換最後兩行:

self.hand.append(self.deck.pop(0)) 
+0

只是修復了(謝謝!)但錯誤仍然存​​在。 :( –

+0

沒關係......修正了! –

+0

我們需要更多的代碼來看看發生了什麼,'shuffle'的實現是怎麼樣的? – Turn

0
self.hand.append(self.deck[0]) 

如果甲板是空的,這句話應該不會被執行。不幸的是,它不在您爲了檢查甲板是否爲空而編寫的有條件的if語句中。

如果你在考慮到這一點時重構它,它應該爲你解決錯誤。

+0

不是 'if len(self.deck)== 0: self.shuffle' 如果self.deck的值爲0,那麼執行 –

+0

.shuffle只會將項目移動到一個集合中的隨機順序如果集合不包含任何東西,那麼就沒有任何東西可移動,我看到的問題是self.deck [ 0] - 如果列表爲空,則不能處理此語句(因爲在[0]處不會有元素) –