簡體   English   中英

TypeError:'int'對象不支持項目分配?

[英]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開始列表索引。

請注意,第一次將新項目添加到列表的最簡單方法是使用extendappend

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM