TypeError:' int'对象不支持项目分配?

时间:2015-02-04 01:42:10

标签: python

为什么我收到此错误?

    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的新手。

6 个答案:

答案 0 :(得分:1)

下面:

playerHand = randint(1,11)

您从randint分配了玩家手册,即int。然后在这里:

playerHand[1] = randint(1,11)

您尝试索引到playerHand,就像它是一个数组一样。因此错误。

答案 1 :(得分:1)

问题是您将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)

现在......这是解决整个问题的正确方法吗?我认为我们可以在数据结构方面做得更好,但这种小调整将消除您的错误。

答案 2 :(得分:1)

这是一个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)的索引。

答案 3 :(得分:1)

当你有:

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

我希望这可以帮到你!

答案 4 :(得分:1)

你需要列一个清单。

错误的版本:

    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)

答案 5 :(得分:0)

此代码有一些错误的时刻,例如,在行中:

while endProgram == False:   
totalplayerHand = playerHand[1] + playerHand[2] + playerHand[3] + playerHand[4] + playerHand[5] + playerHand[6] + playerHand[7] + playerHand[8]

所以,除了前两个,你没有任何值进入 playerHand 数组。

playerHand 设为数组,因为现在你有一个整数。