[英]TypeError: 'int' object does not support item assignment?
為什么會出現此錯誤?
playerHand[1] = randint(1,11)
TypeError: 'int' object does not support item assignment
這是代碼。 我認為它看起來不錯,但我可能會犯一些非常嚴重的錯誤。 對不起這個愚蠢的問題:
print ("********* WELCOME TO A BLACKJACK GAME *********")
endProgram = False
from random import randint
computerHand1 = randint(1,11)
computerHand2 = randint(1,11)
print ("Dealer's cards: " + "X and " + str(computerHand2))
totalcomputerHand = computerHand1 + computerHand2
playerHand = randint(1,11)
playerHand[1] = randint(1,11)
playerHand[2] = randint(1,11)
print ("Your cards are: " + str(playerHand[1]) + " , " + str(playerHand[2]))
while endProgram == False:
totalplayerHand = playerHand[1] + playerHand[2] + playerHand[3] + playerHand[4] + playerHand[5] + playerHand[6] + playerHand[7] + playerHand[8] + playerHand[9] + playerHand[10] + playerHand[11] + playerHand[12] + playerHand[13] + playerHand[14] + playerHand[15] + playerHand[16] + playerHand[17] + playerHand[18] + playerHand[19] + playerHand[20] + playerHand[21]
if totalplayerHand == (21):
if totalcomputerHand == (21):
endProgram = True
print ("Dealer's hand equals 21 and your hand equals 21. This is a draw")
if totalcomputerHand < (21):
endProgram = True
print ("Dealer's hand equals " + str(totalcomputerHand) + " and your hand equals 21. You have won the game")
counter = 3
我試圖做數組(這是第一次在python中列出),而且我對編碼和python還是陌生的。
這里:
playerHand = randint(1,11)
您為playerHand分配randint的返回randint
,它是一個int
。 然后在這里:
playerHand[1] = randint(1,11)
您嘗試索引到playerHand
就像它是一個數組一樣。 因此,錯誤。
問題是您將playerHand
設置為一個數字。
playerHand = randint(1,11)
如果將上述行輸入到終端,您會發現它是一個數字而不是列表。
playerHand[1] = randint(1,11)
playerHand[2] = randint(1,11)
您正在執行的分配類型在此處,其中[1]
和[2]
用於列表或字典元素(以及其他支持項目分配的元素,如錯誤消息所述)。
您可能打算做類似的事情
computerHand1 = randint(1,11)
computerHand2 = randint(1,11)
在這種情況下,正確的代碼是
playerHand1 = randint(1,11)
playerHand2 = randint(1,11)
現在...這真的是解決問題整體的正確方法嗎? 我認為我們可以在數據結構方面做得更好,但是這種小的調整將消除您的錯誤。
這是一個int(不是列表):
playerHand = randint(1,11)
要列出您要像這樣開始的列表:
playerHand = []
然后,您可以嘗試將值分配給索引:
playerHand[1] = randint(1,11)
playerHand[2] = randint(1,11)
雖然,python從0
而不是1
開始列表索引。
請注意,第一次將新項目添加到列表的最簡單方法是使用extend
或append
:
playerHand.append(randint(1,11))
只有當列表中已有項目時,索引編制才有效-您可以在其中指定小於len(playerHand)
的索引。
當您有:
playerHand = randint(1,11)
現在, playerHand
是變量正確嗎? 當您嘗試:
playerHand[1] = randint(1,11)
playerHand[2] = randint(1,11)
您現在將變量playerHand
視為列表,從而產生錯誤。 為防止出現此錯誤,您可能需要使playerHand
成為一個列表,如下所示:
playerHand = []
以防止錯誤。 您也可以這樣做:
playerHand1 = randint(1, 11)
playerHand2 = randint(1, 11)
您可以使用@Wally Beaver的答案,但需要修復一件事。 由此:
playerHand[1] = randint(1,11)
playerHand[2] = randint(1,11)
對此:
playerHand[0] = randint(1,11)
playerHand[1] = randint(1,11)
為什么? 因為所有列表都以0開頭,而不是以1開頭。如果不這樣做,則會出現另一個錯誤。 要將內容添加到列表中,請執行以下操作:
playerHand1 = randint(1, 11)
playerHand2 = randint(1, 11)
playerHand.append (playerHand1)
playerHand.append (playerHand2)
這將消除您的列表分配錯誤。 您可以通過在以下位置添加此內容來查看操作方法:
print playerHand1, playerHand2
我希望這可以幫助你!
您需要列出清單。
版本錯誤:
playerHand = randint(1,11) ## return list
playerHand[1] = randint(1,11) ## playerHand is not a list
playerHand[2] = randint(1,11)
正確的版本:
playerHand = []
playerHand[1] = randint(1,11) ## playerHand is a list !!
playerHand[2] = randint(1,11)
這段代碼有一些錯誤的時刻,例如,在行中:
while endProgram == False:
totalplayerHand = playerHand[1] + playerHand[2] + playerHand[3] + playerHand[4] + playerHand[5] + playerHand[6] + playerHand[7] + playerHand[8]
因此,除了前兩個之外, playerHand數組中沒有任何值。
並將playerHand設為數組,因為現在您有一個整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.