Проверка наличия флеш-покера на питоне - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь добавить случайные значения и удерживать их в другом значении из словаря.Что касается флеша, вам нужно уточнить масти, поэтому я сделал это для словаря, затем я хотел добавить случайные значения от 1 до 14 для руки из пяти карт, чтобы посмотреть, все ли они одинаковые масти.Затем, если это так, выведите флеш, а затем используйте count, чтобы вывести вероятность того, сколько раздач потребовалось, чтобы получить флеш.

Проблема, с которой я сталкиваюсь, заключается в добавлении случайных значений словаря, а затем проверке, является ли это сбросом, я не уверен, что мой код будет делать это правильно, потому что теперь он использовался для жестко закодированных значений, а не для генератора случайных чисел.

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}')

1 Ответ

1 голос
/ 25 сентября 2019

Кажется, у вас даже нет "Костюма" на ваших картах, так как вы обнаружите флеш?

Вот пример хорошей колоды карт и обнаружения флеша.Объедините это с collections.Counter, который я предложил в вашем другом вопросе, и у вас будет большинство комбинаций.

Я бы посоветовал прочитать об объектах и ​​классах (например, http://introtopython.org/classes.html)

И я оставлю это вам для создания class Hand, который берет 5 карт в __init__ и имеет такие методы, как 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'))
...