我在和一个机器人玩扑克游戏,把牌号列在一个列表里。当玩家或机器人得到一张牌时,我显然需要将该牌从列表中删除,这样它就不会再被发牌了。你知道吗
def dealPlayer():
cardSuit = random.randrange(1, 5) #Decide card suit#
if cardSuit == 1:
cardNum = random.randrange(0, 13) #Decide card num#
if cardNum == 11: #Make sure it prints the name not position in list#
cardNum = "jack"
elif cardNum == 12:
cardNum = "queen"
elif cardNum == 13:
cardNum = "king"
elif cardNum == 0:
cardNum = "ace"
print ("Your first card is the", cardNum, "of clubs.")
del Clubs[cardNum] #Problem#
print(Clubs) #Debugging#
我遇到的问题是在倒数第二行。下面是它给我带来的错误:
TypeError: list indices must be integers or slices, not str
每当
cardNum
随机值为0、11、12或13时,就为cardNum
变量指定一个字符串值。你知道吗当您在
cardNum
变量设置为"king"
之后访问Clubs
列表时,您实际上是这样做的:只能以整数(0、1、2等)访问列表索引,也只能访问列表中填充的索引(有效索引)。你知道吗
因为指定字符串值是为了打印,所以应该使用另一个变量来存储卡名,如下所示:
这样就不会有任何问题,因为
cardNum
保持不变,是一个整数。还要注意,更改为Clubs.remove(cardNum)
。这是从列表中删除项目的正确方法。你知道吗编辑
这里的逻辑也是有缺陷的:一旦你从列表中删除了“三个俱乐部”(在你的例子中,如果
0
是ace,那么列表中的“三个俱乐部”后面的所有卡片都会减少一个索引。这意味着如果你期望你在索引4
上的对象是“四个俱乐部”的话,它实际上就是“五个俱乐部”,因为所有的东西都会被降低一个。你需要改变你的设计来考虑这个问题。你知道吗首先cardNum是一个字符串。你能做到的
但这不会得到您想要的结果,它将从列表中删除索引cardNum。 你想要的是:
所以del按索引删除 列表.删除()按项删除
尝试使用以下代码作为完整代码:
稍微更改一下变量名,这样它就可以工作了。你知道吗
相关问题 更多 >
编程相关推荐