繁体   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