Python不允许我从列表中删除对象作为变量

时间:2017-08-28 22:23:03

标签: python python-3.x

我正在用Python创建texas holdem,我遇到了第一个问题。我从牌组中随机地给了玩家一个手牌,现在,我想要移除手中的牌以防止重复。由于手是随机的,我需要从列表中删除卡作为变量。这就是我所拥有的。 deck是列表的名称(我在常规套牌中列出了每张卡)

hand = random.sample((deck),2)
print('your hand is', hand)
deck.remove(hand)

4 个答案:

答案 0 :(得分:1)

使用一组表示指针,如@COLDSPEED所述,或者如果您将牌组表示为一个列表,并假设牌组中的所有牌都是唯一的,则在生成牌时将其弹出。

E.G。

deck = ['JS','QS','KS','AS' ....]

画一张卡片:

card = deck.pop()

修改

这是更完整的示例,包括随机性

import random

deck = ['JS','QS','KS','AS']

def draw(num_cards,deck):
    hand = []
    for n in range(num_cards):
        card = random.choice(deck)
        hand.append(card)
        deck.remove(card)
    return hand

print(draw(2,deck))
print(deck)

根据要求使用集合的版本:

import random

class Poker:
    def __init__(self):
        self.deck =  {'JS','QS','KS','AS'}

    def draw(self,num_cards):
        hand = set(random.sample(self.deck,num_cards))
        self.deck = self.deck.difference(hand)
        return hand

game = Poker()
hand = game.draw(2)
print(hand)
print(game.deck)

答案 1 :(得分:1)

您正在尝试在另一个列表对象中找到列表对象。你实际需要做的是使用一个循环,所以你应该这样做而不是deck.remove(hand)

for x in hand:
  deck.remove(x)

答案 2 :(得分:1)

由于您正在使用参数2的随机样本,因此您将获得两个元素的列表。因此,最好像这样过滤列表:

hand = random.sample((deck),2)
print('your hand is', hand)
deck = [i for i in deck if i not in hand]

答案 3 :(得分:0)

deck.remove期望deck中存在单个项目。您无法传递一个项目列表,希望它会删除列表中的每个项目。它会尝试在deck内找到传递的列表。

您需要执行以下任一操作:

for x in hand:
    deck.remove(x)

或:

deck.remove(hand[0])
deck.remove(hand[1])

更好的是,让它更像我们通常想到的那种卡片。

random.shuffle(deck)
hand = [deck.pop(), deck.pop()]