Python 为纸牌游戏将一个列表中的项目移动到另一个列表中

Python 为纸牌游戏将一个列表中的项目移动到另一个列表中,python,poker,Python,Poker,好的,我正在尝试用Python制作一个扑克游戏。。我想把用过的卡片从列表中移到另一个列表中,在那里我将存储用过的卡片。我正在使用以下代码: deck = ['AS', 'KS', 'QS', 'JS', '10S', '9S', '8S', '7S', '6S', '5S', '4S', '3S', '2S',\ 'AD', 'KD', 'QD', 'JD', '10D', '9D', '8D', '7D', '6D', '5D', '4D', '3D', '2D',\

好的,我正在尝试用Python制作一个扑克游戏。。我想把用过的卡片从列表中移到另一个列表中,在那里我将存储用过的卡片。我正在使用以下代码:

deck = ['AS', 'KS', 'QS', 'JS', '10S', '9S', '8S', '7S', '6S', '5S', '4S', '3S', '2S',\
         'AD', 'KD', 'QD', 'JD', '10D', '9D', '8D', '7D', '6D', '5D', '4D', '3D', '2D',\
         'AC', 'KC', 'QC', 'JC', '10C', '9C', '8C', '7C', '6C', '5C', '4C', '3C', '2C',\
         'AH', 'KH', 'QH', 'JH', '10H', '9H', '8H', '7H', '6H', '5H', '4H', '3H', '2H']

used = []
p1 = []
p2 = []
a = 0

while (a < 2):
    drawn_card = random.choice(deck)
    deck.append(drawn_card)
    deck = [f for f in deck if f not in used]
    p1.append(drawn_card)
    a+=1

# Don't read anything below this line

card1 = p1[0]
card2 = p1[1]
f_card1 = "Name/Suit"
f_card2 = "Name/Suit"

# Formatting Player1's first drawn card

if card1[0] == "A":
    f_card1 = "Ace"
elif card1[0] == "K":
    f_card1 = "King"
elif card1[0] == "Q":
    f_card1 = "Queen"
elif card1[0] == "J":
    f_card1 = "Jack"
else:
    f_card1 = card1[0]


if card1[1] == "S":
    f_card1 = f_card1 + " of Spades"
elif card1[1] == "D":
    f_card1 = f_card1 + " of Diamonds"
elif card1[1] == "C":
    f_card1 = f_card1 + " of Clubs"
else:
    f_card1 = f_card1 + " of Hearts"

# Formatting Player1's second drawn card

if card2[0] == "A":
    f_card2 = "Ace"
elif card2[0] == "K":
    f_card2 = "King"
elif card2[0] == "Q":
    f_card2 = "Queen"
elif card2[0] == "J":
    f_card2 = "Jack"
else:
    f_card2 = card2[0]


if card2[1] == "S":
    f_card2 = f_card2 + " of Spades"
elif card2[1] == "D":
    f_card2 = f_card2 + " of Diamonds"
elif card2[1] == "C":
    f_card2 = f_card2 + " of Clubs"
else:
    f_card2 = f_card2 + " of Hearts"

print(f_card1)
print(f_card2)
deck=['AS','KS','QS','JS','10S','9S','8S','7S','6S','5S','4S','3S','2S','\
‘AD’、‘KD’、‘QD’、‘JD’、‘10D’、‘9D’、‘8D’、‘7D’、‘6D’、‘5D’、‘4D’、‘3D’、‘2D’\
‘AC’、‘KC’、‘QC’、‘JC’、‘10C’、‘9C’、‘8C’、‘7C’、‘6C’、‘5C’、‘4C’、‘3C’、‘2C’\
‘啊’、‘KH’、‘QH’、‘JH’、‘10H’、‘9H’、‘8H’、‘7H’、‘6H’、‘5H’、‘4H’、‘3H’、‘2H’]
已用=[]
p1=[]
p2=[]
a=0
而(a<2):
抽牌=随机选择(牌组)
卡片组。附加(抽卡)
甲板=[f表示甲板中的f,如果f未使用]
p1.追加(提款卡)
a+=1
#不要在这行下面读任何东西
card1=p1[0]
card2=p1[1]
f_card1=“姓名/套装”
f_card2=“姓名/套装”
#格式化玩家1的第一张抽牌
如果卡1[0]=“A”:
f_card1=“Ace”
elif card1[0]=“K”:
f_card1=“国王”
elif card1[0]=“Q”:
f_card1=“女王”
elif card1[0]=“J”:
f_card1=“杰克”
其他:
f_card1=card1[0]
如果card1[1]=“S”:
f_card1=f_card1+“黑桃”
elif card1[1]=“D”:
f_card1=f_card1+“钻石”
elif card1[1]=“C”:
f_card1=f_card1+“俱乐部”
其他:
f_card1=f_card1+“红心”
#格式化玩家1的第二张抽牌
如果卡片2[0]=“A”:
f_card2=“Ace”
elif card2[0]=“K”:
f_card2=“国王”
elif card2[0]=“Q”:
f_card2=“女王”
elif card2[0]=“J”:
f_card2=“杰克”
其他:
f_card2=card2[0]
如果卡片2[1]=“S”:
f_card2=f_card2+“黑桃”
elif card2[1]=“D”:
f_card2=f_card2+“钻石”
elif card2[1]=“C”:
f_card2=f_card2+“俱乐部”
其他:
f_card2=f_card2+“红心”
打印(f_card1)
打印(f_卡2)

while函数就是我的问题所在。有时我打印卡片时会得到同样的卡片。我该如何解决这个问题?我的错误在哪里?提前感谢

您只需将绘制的卡片附加到您的
已用
列表中,而不必返回到
卡片组中

used.append(drawn_card)   #instead of deck.append(..)
while(a<2):
抽牌=随机选择(牌组)
已使用。追加(提款卡)
甲板=[f表示甲板中的f,如果f未使用]
p1.追加(提款卡)
a+=1

used.append(drawing\u card)简单的解决方法是使用
used.append(drawing\u card)
,就像其他人建议的那样。 更好的方法是随机洗牌,然后从中切出所需数量的牌:

CARDS_PER_HAND = 2

random.shuffle(deck)
hand = deck[:CARDS_PER_HAND]
但是,您可能在同一组牌中处理多手牌。你可以通过跟踪偏移量进入混洗牌组,然后从那里切牌来处理这个问题,但这很麻烦。或者,您可以复制一副
牌组
,将其洗牌,然后为每手牌弹出所需数量的牌:

shuffled_deck = deck[:]    # make a copy of deck
random.shuffle(shuffled_deck)
hand1 = [shuffled_deck.pop() for i in range(CARDS_PER_HAND)]
hand2 = [shuffled_deck.pop() for i in range(CARDS_PER_HAND)]
... etc.
最干净的方法可能是从迭代器中获取前n项:

from itertools import islice

random.shuffle(deck)
shuffled_deck = iter(deck)    # returns an iterator
hand1 = list(islice(shuffled_deck, CARDS_PER_HAND))
hand2 = list(islice(shuffled_deck, CARDS_PER_HAND))
... etc.
from itertools import islice

random.shuffle(deck)
shuffled_deck = iter(deck)    # returns an iterator
hand1 = list(islice(shuffled_deck, CARDS_PER_HAND))
hand2 = list(islice(shuffled_deck, CARDS_PER_HAND))
... etc.