python - 52张洗牌翻牌时的具体情况检查
问题描述
一副牌中有 52 张牌我试图让它穿过每张随机的牌,所以一副 52 张牌的洗牌牌组,然后在第一种情况下,一旦它发现它会循环出来,它就会找到 2 个 A打印这样做需要多少张卡片。然后是另一个检查下一个 5 黑桃的功能来做同样的事情 然后是 13 个红桃的另一个功能
所以这将是 3 个独立的函数,其中第一个函数将def 2aces()
检查 2 个 A
def 5spades
,检查 5 个黑桃
def 13hearts
,检查 13 个红心
因此,通过更改len(set(card.suit for card in hand)) == 1) to equal the conditions of either
2 aces
or 5 spades
or13 hearts
可以将其制成 3 个单独的功能。
这里的问题是我需要在它洗牌的 52 张牌的地方做。因此,我会以使用 for 循环并检查语句为例,遍历整个卡片组。但我不知道如何用西装和卡片做到这一点。
至于有 13 颗红心的条件,这就是为什么我要洗牌一副 52 张牌,然后使用 for 语句检查列表中的每个元素,如果它是一颗心,则将其拉出,直到所有 13 颗红心都被拉出或翻转。然后,一旦你找到 13 张红心牌,即所有红心 A 到王牌,它就会打破并说出达到该点需要多少张牌。
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
顺便说一句,是否有意10
/T
不在您的行列中?
推荐阅读
- python - 在 django 中将解释器设置为 python 3.8.2 时,会出现无法导入 django.urls 等错误?
- postgresql - 在 PostgreSQL 查询中将钱转换为双倍
- python - 无法使用 python 显示错误 502、504 连接到 Interactive Broker API
- c# - .NET Core 3.0 中 AspNetUserToken 和自定义 JWT 令牌之间的区别
- ssh - 公钥认证
- java - 将加密逻辑从 JAVA 转换为 DART
- pandas - 如何遍历熊猫中的选定行
- rest - 由 Heroku 托管后未设置相同的站点 Cookie 属性
- php - 如何在 php 中将 DD/MM/YYYY h:i 转换为 YYYY-MM-DD h:i
- excel - Excel 不同值列表