[英]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.