【问题标题】:How can I use for loop to remove match from a list?如何使用 for 循环从列表中删除匹配项?
【发布时间】:2021-04-05 11:10:05
【问题描述】:

我正在尝试用 Python 制作 Go Fish 纸牌游戏,但我在第一步中遇到了麻烦。每次抽牌时,我都希望它在手中寻找匹配,如果匹配则将两者都删除。本质上,“card”从牌组中弹出一张牌,“for”循环遍历手牌进行匹配。如果找到匹配项,则移除手中的牌,并且永远不会将牌添加到手牌中(真的消失了。)通过使用 dubugger,我发现脚本会自动将弹出的牌放入手牌中到达“for”循环。我有两个问题:为什么它会这样工作?我怎样才能做到这一点?谢谢!

附言我还注意到比较面部卡片很困难,我将其表示为“A”、“K”、“Q”和“J”。如果您有更好的解决方法,我愿意接受建议,否则我可以解决这个问题。

def draw_card(hand):
    # Handles very first card drawn. Adds card if hand is empty
    card = list.pop(cards)
    print('card is',card)
    for i in hand:
        print('Hand is: ',hand)
        if i == card:
            print(i,card)
            print('This value will be removed: ',i)
            hand.remove(i)
        else:
            hand.append(card)
    return hand

【问题讨论】:

    标签: python loops for-loop


    【解决方案1】:

    您不想遍历手牌,只需使用 in 关键字查看手牌是否包含弹出的牌。另外,cards 是什么?我从 pop() 参数中删除了它。这样,它只会从牌组中弹出最后一张牌。最后,永远不要使用 list 作为列表的名称(它被保留为 Python 关键字)。我把它改名为甲板。

    def draw_card(hand):
        # Handles very first card drawn. Adds card if hand is empty
        card = deck.pop()
        print('card is',card)
        if card in hand:
            print('This value will be removed: ',card)
            hand.remove(card)
        else:
            hand.append(card)
        return hand
    

    【讨论】:

    • 我假设“卡片”是整数和字符串的列表。这可以解释后文中提到的斗争。重要的是要提到保留关键字的存在。但是,“list”不是用作变量名,而是用作调用pop方法的类引用。可能需要添加 pop 方法默认删除并返回最后一个列表项。要修改此行为,必须指定索引参数(例如,deck.pop(index=0),以获取第一项)。
    猜你喜欢
    • 2011-01-04
    • 2021-01-12
    • 2018-09-20
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2017-04-17
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多