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