检查是否是同花扑克 python
Checking if a flush poker python
我正在尝试附加随机值并将其保存在字典中的另一个值中。
至于同花顺,你需要弄清楚花色,所以我对字典这样做了,然后我想为一手五张牌添加 1-14 之间的随机值,看看它们是否都是相同的花色。
然后,如果是这样,则打印出同花顺,然后使用计数来打印获得同花顺所用手数的概率。
我遇到的问题是附加随机字典值,然后检查它是否刷新,我不确定我的代码是否会正确执行,因为它现在用于硬编码值而不是随机生成器。
def flush():
count = 0
while (True):
values = {"2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":11, "Q":12, "K":13, "A":14}
for i in range (5):
hand = values.append(random.choice([2,3,4,5,6,7,8,9,10,11,12,13,14]))
stop = False
for value in values:
suits = [h[1] for h in hand]
if len(set(suits)) == 1:
return True
else:
return False
if stop:
break
else:
count+=1
print(f'Count is {1/count}')
你的卡上似乎连 "Suit" 都没有,那你怎么检测同花呢?
这是一个很好的 "Deck Of Cards" 和检测同花顺的例子。
将其与我在您的其他问题中建议的 collections.Counter
相结合,
你将拥有大部分组合。
我建议阅读对象和 类
(例如 http://introtopython.org/classes.html)
我会留给你创建一个 class Hand
,它在 __init__
中有 5 张牌,并且有像 is_flush()
...
这样的方法
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
while not flush:
deck = Deck()
while len(deck.cards) > 5:
hand = deck.deal(5)
# (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"No Flush: {hand}")
continue
print(f"Yay, it's a Flush: {hand}")
flush = True
break
# No Flush: (Card(suit='♠', rank='K'), Card(suit='♣', rank='6'), Card(suit='♦', rank='6'), Card(suit='♣', rank='4'), Card(suit='♠', rank='Q'))
# No Flush: (Card(suit='♠', rank='J'), Card(suit='♥', rank='9'), Card(suit='♥', rank='3'), Card(suit='♣', rank='2'), Card(suit='♠', rank='6'))
# No Flush: (Card(suit='♣', rank='7'), Card(suit='♥', rank='5'), Card(suit='♦', rank='5'), Card(suit='♦', rank='Q'), Card(suit='♦', rank='K'))
# Yay, it's a Flush: (Card(suit='♣', rank='3'), Card(suit='♣', rank='A'), Card(suit='♣', rank='J'), Card(suit='♣', rank='9'), Card(suit='♣', rank='5'))
我正在尝试附加随机值并将其保存在字典中的另一个值中。 至于同花顺,你需要弄清楚花色,所以我对字典这样做了,然后我想为一手五张牌添加 1-14 之间的随机值,看看它们是否都是相同的花色。 然后,如果是这样,则打印出同花顺,然后使用计数来打印获得同花顺所用手数的概率。
我遇到的问题是附加随机字典值,然后检查它是否刷新,我不确定我的代码是否会正确执行,因为它现在用于硬编码值而不是随机生成器。
def flush():
count = 0
while (True):
values = {"2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":11, "Q":12, "K":13, "A":14}
for i in range (5):
hand = values.append(random.choice([2,3,4,5,6,7,8,9,10,11,12,13,14]))
stop = False
for value in values:
suits = [h[1] for h in hand]
if len(set(suits)) == 1:
return True
else:
return False
if stop:
break
else:
count+=1
print(f'Count is {1/count}')
你的卡上似乎连 "Suit" 都没有,那你怎么检测同花呢?
这是一个很好的 "Deck Of Cards" 和检测同花顺的例子。
将其与我在您的其他问题中建议的 collections.Counter
相结合,
你将拥有大部分组合。
我建议阅读对象和 类 (例如 http://introtopython.org/classes.html)
我会留给你创建一个 class Hand
,它在 __init__
中有 5 张牌,并且有像 is_flush()
...
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
while not flush:
deck = Deck()
while len(deck.cards) > 5:
hand = deck.deal(5)
# (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"No Flush: {hand}")
continue
print(f"Yay, it's a Flush: {hand}")
flush = True
break
# No Flush: (Card(suit='♠', rank='K'), Card(suit='♣', rank='6'), Card(suit='♦', rank='6'), Card(suit='♣', rank='4'), Card(suit='♠', rank='Q'))
# No Flush: (Card(suit='♠', rank='J'), Card(suit='♥', rank='9'), Card(suit='♥', rank='3'), Card(suit='♣', rank='2'), Card(suit='♠', rank='6'))
# No Flush: (Card(suit='♣', rank='7'), Card(suit='♥', rank='5'), Card(suit='♦', rank='5'), Card(suit='♦', rank='Q'), Card(suit='♦', rank='K'))
# Yay, it's a Flush: (Card(suit='♣', rank='3'), Card(suit='♣', rank='A'), Card(suit='♣', rank='J'), Card(suit='♣', rank='9'), Card(suit='♣', rank='5'))