Python 3.x 使用while循环无限期地重新分配变量,直到该变量不再属于列表?

Python 3.x 使用while循环无限期地重新分配变量,直到该变量不再属于列表?,python-3.x,random,while-loop,Python 3.x,Random,While Loop,本程序的目的是从标准52张牌组中打出一张5张牌 我是Python新手。最后我想写一个5张牌的抽牌扑克程序,但首先我想知道如何发5张随机的非重复牌。这些卡被发出去并打印回给用户,但有时会发重复的卡。也就是说,我的牌是AH2D 8h Ah Jc。不能有两张红桃王牌 我试着用一个while-True:构造来确保同一张牌不会被发两次。在Python出现之前,我学习过C语言一段时间,在这里我对语法/构造感到困惑。do-while循环似乎很方便,它可以无限期地将该卡重新分配为随机整数,只要该卡尚未绘制 代码

本程序的目的是从标准52张牌组中打出一张5张牌

我是Python新手。最后我想写一个5张牌的抽牌扑克程序,但首先我想知道如何发5张随机的非重复牌。这些卡被发出去并打印回给用户,但有时会发重复的卡。也就是说,我的牌是AH2D 8h Ah Jc。不能有两张红桃王牌

我试着用一个while-True:构造来确保同一张牌不会被发两次。在Python出现之前,我学习过C语言一段时间,在这里我对语法/构造感到困惑。do-while循环似乎很方便,它可以无限期地将该卡重新分配为随机整数,只要该卡尚未绘制

代码也是超长的,我刚刚展示了分配前几张卡的过程。使用52个if语句似乎是个问题,但首先我想看看它是否可以使用这种结构运行,只是修复while循环

import random


# track a list of cards used
dealt_cards = ["Joker", "Joker2"]

for n in range (5):
    # generate a random int between 1 and 52 representing card
    card = random.randint(1,52)

    #check to see if this card has already been dealt,  
    #and if so, re-deal
    while True:
        if card in dealt_cards:
            card = random.randint(1,52)
        else:
            break


    #assign each random int generation to a specific card in the 
    deck,
    #and add the new card to dealt_cards

    #spades
    if card == 1:
        card = str(card)
        card = 'As'
        dealt_cards.append(card)
    if card == 2:
        card = str(card)
        card = '2s'
        dealt_cards.append(card)
    if card == 3:
        card = str(card)
        card = '3s'
        dealt_cards.append(card)
    if card == 4:
        card = str(card)
        card = '4s'
        dealt_cards.append(card)
    if card == 5:
        card = str(card)
        card = '5s'
        dealt_cards.append(card)
    if card == 6:
        card = str(card)
        card = '6s'
        dealt_cards.append(card)

我希望该程序能向用户返回5张独特的非重复扑克牌,但有时它会在同一手牌中返回(交易)同一张牌两次。

您可以从2张列表(套装、面孔)中创建所有牌

您可以制作一副牌组的洗牌副本,也可以随机抽取5张牌而不替换(random.sample):

输出:

# five
[('6', 'pikes'), ('T', 'heart'), ('Q', 'pikes'), ('3', 'tiles'), ('J', 'clubs')]

# seven
[('A', 'tiles'), ('7', 'tiles'), ('8', 'tiles'), ('3', 'heart'), ('9', 'pikes'),
 ('6', 'heart'), ('T', 'clubs')]
Deckbuilding的灵感来自:

从预先洗牌的
牌组
副本中取出,可以轻松处理牌。只需从前面选择“交易”并列出。pop(0)此元素

Doku:

  • 从2个列表创建组的步骤
  • 用于对列表进行就地洗牌

Itertools产品是一个fance多重for循环:

d = []
for s in suits:
    for f in faces:
        d.append((s,f))

print(d)

[('heart', 'A'), ('heart', '2'), ('heart', '3'), ('heart', '4'), ('heart', '5'), 
 ('heart', '6'), ('heart', '7'), ('heart', '8'), ('heart', '9'), ('heart', 'T'), 
 ('heart', 'J'), ('heart', 'Q'), ('heart', 'K'), ('tiles', 'A'), ('tiles', '2'), 
 ('tiles', '3'), ('tiles', '4'), ('tiles', '5'), ('tiles', '6'), ('tiles', '7'), 
 ('tiles', '8'), ('tiles', '9'), ('tiles', 'T'), ('tiles', 'J'), ('tiles', 'Q'),
 ('tiles', 'K'), ('clubs', 'A'), ('clubs', '2'), ('clubs', '3'), ('clubs', '4'), 
 ('clubs', '5'), ('clubs', '6'), ('clubs', '7'), ('clubs', '8'), ('clubs', '9'), 
 ('clubs', 'T'), ('clubs', 'J'), ('clubs', 'Q'), ('clubs', 'K'), ('pikes', 'A'), 
 ('pikes', '2'), ('pikes', '3'), ('pikes', '4'), ('pikes', '5'), ('pikes', '6'), 
 ('pikes', '7'), ('pikes', '8'), ('pikes', '9'), ('pikes', 'T'), ('pikes', 'J'), 
 ('pikes', 'Q'), ('pikes', 'K')]

你真的需要好好看看。
d = []
for s in suits:
    for f in faces:
        d.append((s,f))

print(d)

[('heart', 'A'), ('heart', '2'), ('heart', '3'), ('heart', '4'), ('heart', '5'), 
 ('heart', '6'), ('heart', '7'), ('heart', '8'), ('heart', '9'), ('heart', 'T'), 
 ('heart', 'J'), ('heart', 'Q'), ('heart', 'K'), ('tiles', 'A'), ('tiles', '2'), 
 ('tiles', '3'), ('tiles', '4'), ('tiles', '5'), ('tiles', '6'), ('tiles', '7'), 
 ('tiles', '8'), ('tiles', '9'), ('tiles', 'T'), ('tiles', 'J'), ('tiles', 'Q'),
 ('tiles', 'K'), ('clubs', 'A'), ('clubs', '2'), ('clubs', '3'), ('clubs', '4'), 
 ('clubs', '5'), ('clubs', '6'), ('clubs', '7'), ('clubs', '8'), ('clubs', '9'), 
 ('clubs', 'T'), ('clubs', 'J'), ('clubs', 'Q'), ('clubs', 'K'), ('pikes', 'A'), 
 ('pikes', '2'), ('pikes', '3'), ('pikes', '4'), ('pikes', '5'), ('pikes', '6'), 
 ('pikes', '7'), ('pikes', '8'), ('pikes', '9'), ('pikes', 'T'), ('pikes', 'J'), 
 ('pikes', 'Q'), ('pikes', 'K')]