我得到一個IndexError,我不確定為什么。
cards = [2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12, 13, 14,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
USER = []
CPU = []
selected = 1
while selected < 26:
CPU.append(cards.pop(random.choice(cards)))
USER.append(cards.pop(random.choice(cards)))
selected = selected 1
我希望將串列中的專案cards附加到串列中USER,并且CPU. 它最初可以作業,但在處理其他事情后它停止作業。我查了為什么,但pop索引說它超出范圍,但我不明白為什么。
uj5u.com熱心網友回復:
問題是random.choice()從串列中回傳一個隨機值,但引數 tocards.pop()必須是一個索引。當串列少于 14 個元素時,一些值將是無效索引,您將收到錯誤訊息。
一種更簡單的方法是對cards串列進行洗牌,然后將一半分配給每個玩家。
random.shuffle(cards)
CPU = cards[:26]
USER = cards[26:]
uj5u.com熱心網友回復:
我會將 while 行更改為:while not cards。如果cards 是一個空串列,則回傳false 并退出回圈。請記住,由于您從串列中取出一張以上的卡片,如果 52/(每次迭代的次數)給出非 0 的余數,這可能會失敗。
uj5u.com熱心網友回復:
由于random.choice(cards)從 list 回傳一個值cards,這意味著如果您將結果傳遞給cards.pop(),它希望您傳遞專案的索引,這意味著您可能會將索引傳遞給pop()超出范圍的索引。例如,如果您的串列在您運行腳本時的某個時間點cards的長度為,并且恰好回傳,那么您將收到有關彈出索引的錯誤。9random.choice(cards)11
如何從串列中彈出隨機項的解決方案已在此處介紹,因此我不會在此答案中重復。從串列中彈出隨機元素的最pythonic方法是什么?
uj5u.com熱心網友回復:
正如我在評論中提到的那樣,這IndexError是因為您將串列的元素而不是它的索引傳遞給pop()方法。避免該問題的一種方法是改為使用random.randrange()來選擇一個有效值來傳遞它:
import random
cards = [2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12, 13, 14,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
USER = []
CPU = []
selected = 1
while selected < 26:
CPU.append(cards.pop(random.randrange(len(cards))))
USER.append(cards.pop(random.randrange(len(cards))))
selected = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/455928.html
