在纸牌游戏Python中,将一个列表中的项移到另一个列表中

2024-10-02 12:32:29 发布

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

好吧,我试着用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)

while函数是我的问题所在。有时我打印卡片时也能得到同样的卡片。我该怎么解决?我的错误在哪里?提前谢谢


Tags: ofin列表ifcardelseuseddeck
3条回答

您只需将绘制的卡片附加到used列表中,而不是返回到deck

^{1}$
^{1}$

已使用。追加(抽卡)

简单的解决方法是按照其他人的建议使用used.append(drawn_card)。 更好的方法是随机洗牌,然后从中切出所需数量的牌:

^{1}$

不过,你可能是在同一副牌上处理多手牌。你可以通过在无序牌堆中跟踪偏移量来处理这个问题,然后从那里进行切片,但这很麻烦。或者你可以复制一张deck,洗牌,然后为每只牌弹出所需数量的牌:

^{pr2}$

可能最干净的方法是使用^{}从迭代器中获取第一个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.

相关问题 更多 >

    热门问题