Python 扑克手-如何在使用后从列表中删除

Python 扑克手-如何在使用后从列表中删除,python,arrays,poker,Python,Arrays,Poker,我有那个密码。如果我输入n的参数是3,它将是3只手。 但是我只想用一次任何一张卡。 总共有52张卡片。每张卡只能使用一次。 使用后如何删除卡片 顺便说一下,stdio.writeln就像印刷品一样。同样的事情 n = int(sys.argv[1]) SUITS = ["Clubs", "Diamonds", "Hearts", "Spades"] RANKS = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen",

我有那个密码。如果我输入n的参数是3,它将是3只手。 但是我只想用一次任何一张卡。 总共有52张卡片。每张卡只能使用一次。 使用后如何删除卡片

顺便说一下,stdio.writeln就像印刷品一样。同样的事情

n = int(sys.argv[1])

SUITS = ["Clubs", "Diamonds", "Hearts", "Spades"]
RANKS = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen",
         "King", "Ace"]


rank = random.randrange(0, len(RANKS))
suit = random.randrange(0, len(SUITS))


deck = []
for rank in RANKS:
    for suit in SUITS:
        card = rank + " of " + suit
        deck += [card]

for i in range(n):
    a = len (deck)

    for i in range(a):
        r = random.randrange(i, a)
        temp = deck[r]
        deck[r] = deck[i]
        deck[i] = temp

    for i in range(5):
        stdio.writeln(deck[i] + " ")
    stdio.writeln()

利用List Comprenshion组合一整叠卡片, 从它那里得到一张混合卡的副本,使用它来抽卡,这样会自动移除卡

我稍微减少了
等级
,以缩短打印输出:

SUITS = ["Clubs", "Diamonds", "Hearts", "Spades"]
RANKS = ["2", "3", "4", "5", "6"] #,'7", "8", "9", "10", "Jack", "Queen", "King", "Ace"]

import random
# in order
StackOfCards = [ f'{r} of {s}' for r in RANKS for s in SUITS]

# return random.sample() of full length input == random shuffled all cards 
mixedDeck = random.sample(StackOfCards, k = len(StackOfCards))

print("Orig:",StackOfCards)
print()
print("Mixed:",mixedDeck)
print()

# draw 6 cards into "myHand" removing them from "mixedDeck":
myHand = [mixedDeck.pop() for _ in range(6)]

print("Hand:",myHand) 
print()
print("Mixed:",mixedDeck)
输出:

Orig: ['2 of Clubs', '2 of Diamonds', '2 of Hearts', '2 of Spades', '3 of Clubs', 
       '3 of Diamonds', '3 of Hearts', '3 of Spades', '4 of Clubs', '4 of Diamonds', 
       '4 of Hearts', '4 of Spades', '5 of Clubs', '5 of Diamonds', '5 of Hearts', 
       '5 of Spades', '6 of Clubs', '6 of Diamonds', '6 of Hearts', '6 of Spades']

Mixed: ['2 of Clubs', '3 of Diamonds', '6 of Hearts', '4 of Spades', '5 of Clubs', 
        '3 of Hearts', '6 of Spades', '5 of Hearts', '4 of Diamonds', '3 of Spades', 
        '2 of Spades', '6 of Clubs', '4 of Clubs', '5 of Spades', '6 of Diamonds', 
        '2 of Diamonds', '3 of Clubs', '2 of Hearts', '5 of Diamonds', '4 of Hearts']

Hand: ['4 of Hearts', '5 of Diamonds', '2 of Hearts', 
       '3 of Clubs', '2 of Diamonds', '6 of Diamonds']

Mixed: ['2 of Clubs', '3 of Diamonds', '6 of Hearts', '4 of Spades', '5 of Clubs', 
        '3 of Hearts', '6 of Spades', '5 of Hearts', '4 of Diamonds', '3 of Spades', 
        '2 of Spades', '6 of Clubs', '4 of Clubs', '5 of Spades']

使用
.pop()
可以减少删除某些内容的需要,如果您确实不喜欢它(为什么要删除?)。您可以通过以下方式重新创建一个列表,而不需要其他列表的元素:

l = [1,2,3,4,5,6]
p = [2,6]
l[:] = [ x for x in l if x not in p] # inplace modifies l to [1,3,4,5]

你认为在我的代码中,因为我在范围(5):stdio.writeln(deck[i]+“”)deck.pop(i)stdio.writeln()是正确的吗???@Njx可能更像是范围(5):stdio.writeln(deck.pop())-之后你的
deck
将短5张牌-前5张牌将被pop()删除打印时打印它们。@njx您可能还需要跟踪手部,因此将卡片放入列表(
myHand
)中,然后打印。