使用variab从列表中删除项

2024-09-27 02:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在和一个机器人玩扑克游戏,把牌号列在一个列表里。当玩家或机器人得到一张牌时,我显然需要将该牌从列表中删除,这样它就不会再被发牌了。你知道吗

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

Tags: the列表ifnot机器人randomcardlist
3条回答

每当cardNum随机值为0、11、12或13时,就为cardNum变量指定一个字符串值。你知道吗

当您在cardNum变量设置为"king"之后访问Clubs列表时,您实际上是这样做的:

Clubs["king"]  # Invalid access (str as list index)

只能以整数(0、1、2等)访问列表索引,也只能访问列表中填充的索引(有效索引)。你知道吗

因为指定字符串值是为了打印,所以应该使用另一个变量来存储卡名,如下所示:

def dealPlayer():
    cardSuit = random.randrange(1, 5) #Decide card suit#
    if cardSuit == 1:
        cardNum = random.randrange(0, 14) # Decide card number [0,14), upper exclusive
        if cardNum == 11:
            cardName = "jack"
        elif cardNum == 12:
            cardName = "queen"
        elif cardNum == 13:
            cardName = "king"
        elif cardNum == 0:
            cardName = "ace"
        else:
            cardName = cardNum

        print ("Your first card is the", cardName, "of clubs.")
        Clubs.remove(cardNum)

这样就不会有任何问题,因为cardNum保持不变,是一个整数。还要注意,更改为Clubs.remove(cardNum)。这是从列表中删除项目的正确方法。你知道吗

编辑

这里的逻辑也是有缺陷的:一旦你从列表中删除了“三个俱乐部”(在你的例子中,如果0是ace,那么列表中的“三个俱乐部”后面的所有卡片都会减少一个索引。这意味着如果你期望你在索引4上的对象是“四个俱乐部”的话,它实际上就是“五个俱乐部”,因为所有的东西都会被降低一个。你需要改变你的设计来考虑这个问题。你知道吗

首先cardNum是一个字符串。你能做到的

del Clubs[int(cardNum)]

但这不会得到您想要的结果,它将从列表中删除索引cardNum。 你想要的是:

Clubs.remove(cardNum)

所以del按索引删除 列表.删除()按项删除

尝试使用以下代码作为完整代码:

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]
        print(Clubs)

稍微更改一下变量名,这样它就可以工作了。你知道吗

相关问题 更多 >

    热门问题