我正在用Python创建texas holdem,我遇到了第一个问题。我从牌组中随机地给了玩家一个手牌,现在,我想要移除手中的牌以防止重复。由于手是随机的,我需要从列表中删除卡作为变量。这就是我所拥有的。 deck是列表的名称(我在常规套牌中列出了每张卡)
hand = random.sample((deck),2)
print('your hand is', hand)
deck.remove(hand)
答案 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()]