Python 按洗牌顺序翻开52张牌时检查具体情况

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)更改

一副牌中有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)更改为等于
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个,突然错误消失了!!!