Python 按洗牌顺序翻开52张牌时检查具体情况
一副牌中有52张牌,我试着让它通过随机的每张牌,所以一副52张牌的洗牌牌,在第一种情况下,它会找到2张a,一旦它发现它将循环并打印出它需要多少张牌。 然后是另一个功能,用于检查下一个黑桃是否有5个黑桃,以执行相同的操作 然后是13颗心脏的另一个功能 因此,将有3个单独的函数,其中第一个函数将是Python 按洗牌顺序翻开52张牌时检查具体情况,python,Python,一副牌中有52张牌,我试着让它通过随机的每张牌,所以一副52张牌的洗牌牌,在第一种情况下,它会找到2张a,一旦它发现它将循环并打印出它需要多少张牌。 然后是另一个功能,用于检查下一个黑桃是否有5个黑桃,以执行相同的操作 然后是13颗心脏的另一个功能 因此,将有3个单独的函数,其中第一个函数将是def2aces()检查2个ACE def 5spades检查5个spades def 13颗心检查13颗心 因此,通过将len(set(card.suit for card in hand))==1)更改
def2aces()
检查2个ACE
def 5spades
检查5个spades
def 13颗心
检查13颗心
因此,通过将len(set(card.suit for card in hand))==1)更改为等于
2个A
或5个黑桃
或13颗心
它可以被分成3个独立的功能
这里的问题是我需要在52张牌的混合牌组中进行。因此,我将使用for循环遍历该组,并检查语句。但我不知道如何用西装和卡片来做
至于13颗心的情况,这就是为什么我想洗牌52张牌,然后使用for语句检查列表中的每个元素,如果是一颗心,则将其拉出,直到所有13颗心都被拉出或翻转。然后一旦你在所有的红心中找到13张红心牌,这是王牌,然后它就会断开,并显示需要多少张牌才能达到这一点
2 aces
5 spades
13 hearts
所以,不管你将不得不使用面向对象,分类西装然后编号?
我正在努力寻找解决这个问题的最佳方法
一旦我能做到这一点,我只需要打印出翻页获得其中一个选项所需的预期卡片数量
我有一个程序,如果它是一个使用面向对象的刷新打印出来,但我不知道如何调整它,使之适合其他特定的选项。我可以编辑它,把它放在这里,看看我是否可以修改它
下面是一个例子,我用它来判断这些卡片是否是同花顺的
from collections import namedtuple
from random import shuffle
Card = namedtuple("Card", "suit, rank")
class Deck:
suits = '♦♥♠♣'
ranks = '23456789JQKA'
def __init__(self):
self.cards = [Card(suit, rank) for suit in self.suits for rank in self.ranks]
shuffle(self.cards)
def deal(self, amount):
return tuple(self.cards.pop() for _ in range(amount))
flush = False
count = 0
while not flush:
deck = Deck()
while len(deck.cards) > 52:
hand = deck.deal(52)
# (Card(suit='♣', rank='7'), Card(suit='♠', rank='2'), Card(suit='♥', rank='4'), Card(suit='♥', rank='K'), Card(suit='♣', rank='3'))
if len(set(card.suit for card in hand)) == 1:
print(f"Yay, it's a Flush: {hand}")
flush = True
break
else:
#print(f"No Flush: {hand}")
count +=1
print(f'Count is {count}')
但这是5张牌的抽签。我想让它穿过52张被洗牌的牌,然后它检查每一张牌,如果找到2张A,它会循环出来,说从洗牌牌组中得到2张A需要多少张牌。然后,上述其他选项也是如此。这些选项应该可以做到:
def _2_aces():
deck, counter, draws = Deck(), 0, 0
while counter < 2:
draw = deck.deal(1)[0]
draws += 1
if draw.rank == 'A':
counter += 1
return draws
def _5_spades():
deck, counter, draws = Deck(), 0, 0
while counter < 5:
draw = deck.deal(1)[0]
draws += 1
if draw.suit == '♠':
counter += 1
return draws
def _13_hearts():
deck, counter, draws = Deck(), 0, 0
while counter < 13:
draw = deck.deal(1)[0]
draws += 1
if draw.suit == '♥':
counter += 1
return draws
def_2_aces():
deck,counter,draws=deck(),0,0
当计数器<2时:
抽签=甲板。交易(1)[0]
绘图+=1
如果draw.rank='A':
计数器+=1
回扣
def_5_黑桃():
deck,counter,draws=deck(),0,0
当计数器<5时:
抽签=甲板。交易(1)[0]
绘图+=1
如果draw.suit=='♠':
计数器+=1
回扣
def_13_hearts():
deck,counter,draws=deck(),0,0
当计数器<13时:
抽签=甲板。交易(1)[0]
绘图+=1
如果draw.suit=='♥':
计数器+=1
回扣
顺便说一句,
10
/T
不在你的队伍中吗?当10
/T
我在你的代码中添加了交易方法并删除了冲销部分时,你是什么意思。然后这个错误代码出现了返回元组(self.cards.pop(),用于uuu in range(amount))索引器。错误代码:从空列表中弹出。它从9跳到杰克。所以返回方法有点不对劲,我想哇!!!它起作用了,实际上是你们俩说的。我加了10个,突然错误消失了!!!