파이썬에서 포커 게임의 여러 값 비교

사용자 3182395

질문은 다음과 같습니다. 포커 게임의 경우 여러 변수를 효율적으로 비교할 수 있기를 원합니다. 이것은 코드의 본문이며 가장 높은 값 (ace = 1, king = 13)부터 시작하여 5 개의 카드를 입력해야합니다.

print("*********")
print("P O K E R")
print("*********")
print("Type in your cards starting from the highest value: ")
print()
#values going from 1 (ace) to 13 (king) and suits: 1 (spades), 2 (hearts), 3 (diamonds) and 4 (clubs)
value1 = int(input("1. Value: "))
suit1 = int(input("1. Suit: "))
value2 = int(input("2. Value: "))
suit2 = int(input("2. Suit: "))
value3 = int(input("3. Value: "))
suit3 = int(input("3. Suit: "))
value4 = int(input("4. Value: "))
suit4 = int(input("4. Suit: "))
value5 = int(input("5. Value: "))
suit5 = int(input("5. Suit: "))

if포커 핸드를 평가하고 순위를 결정하기 위해 진술을 사용 하고 있습니다. 나에게는 가장 쉬운 방법 인 것 같습니다. 평가의 예는 다음과 같습니다.

#Evaluating the hand and comparing the cards
c = [value1, value2, value3, value4, value5]

#four of a kind
if c[0] == c[1] == c[2] == c[3] != c[4] or c[0] == c[1] == c[2] == c[4] != c[3] or c[0] == c[1] == c[3] == c[4] != c[2] or c[0] == c[2] == c[3] == c[4] != c[1]  or c[1] == c[2] == c[3] == c[4] != c[0]:
    print("You have Four Of A Kind!")
#three of a kind
#two pairs
#one pair
#highest card

이 코드는 5 개 조합 중 1 개가 참인지 확인합니다. 비효율적이고 시간이 많이 걸립니다. 그리고 "3 종", "2 쌍"및 "1 쌍"옵션을 추가로 코딩하고 싶을 때 조합이 더 커집니다. if진술 을 단축 할 수있는 방법이 있습니까?

Aidenhjj

OOP를 사용하지 않는 이유는 무엇입니까? 진행하면서 프로젝트를 변경하는 것이 훨씬 더 쉬워 질 것이라고 생각합니다. 나는 여기서 뭔가를 해냈다- 완전히 테스트되지 는 않았지만 당신에게 아이디어를 줄 것입니다.

import random

class Card(object):
    card_values = {'ace' : 13, 'king' : 12, 'queen' : 11, 'jack' : 10,
                    '10' : 9, '9' : 8, '8' : 7, '7' : 6, '6' : 5,
                    '5' : 4, '4' : 3, '3' : 2, '2' : 1}
    card_suits = {'spades' : u'♤', 'diamonds' : u'♦', 'clubs': u'♧', 'hearts' : u'♥'}
    def __init__(self, suit, name):
        self.name = name
        self.value = self.card_values[name]
        if suit in self.card_suits.keys():
            self.suit = suit

    def __lt__(self, other):
        return self.value < other.value

    def __gt__(self, other):
        return self.value > other.value

    def __eq__(self, other):
        return (self.value == other.value) and (self.suit == other.suit)

    def __str__(self):
        return self.__repr__()

    def __repr__(self):
        return u"{" + unicode(self.name, "utf-8") + u" " + self.card_suits[self.suit] + u"}"

    def get_value(self):
        return self.value

    def get_suit(self):
        return self.suit

    def get_name(self):
        return self.name

    def same_suit(self, other):
        return self.suit == other.suit

class Hand(object):
    def __init__(self, card_list):
        assert len(card_list) == 5
        self.cards = sorted(card_list)

    def determine_strength(self):
        score = self.high_card()
        if self.royal_flush():
            print "royal_flush"
            score += 1000
            return score
        elif self.straight_flush():
            print "straight_flush"
            score += 900
            return score
        elif self.four_of_a_kind():
            print "four_of_a_kind"
            score += 800
            return score
        elif self.full_house():
            print "full_house"
            score += 700
            return score
        elif self.flush():
            print "flush"
            score += 600
            return score
        elif self.straight():
            print "straight"
            score += 500
            return score
        elif self.three_of_kind():
            print "three_of_kind"
            score += 400
            return score
        elif self.two_pair():
            print "two_pair"
            score += 300
            return score
        elif self.one_pair():
            print "one_pair"
            score += 200
            return score
        print "high card"
        return score

    def flush(self):
        suit = self.cards[0].get_suit()
        return all([card.get_suit() == suit for card in self.cards])

    def straight(self):
        start = self.cards[0].get_value()
        for card in self.cards[1:]:
            if card.get_value() == (start + 1):
                start = card.get_value()
            else:
                return False
        return True

    def straight_flush(self):
        return (self.straight() and self.flush())

    def royal_flush(self):
        return ((self.cards[0].get_name() == '10') and self.straight_flush())

    def _pair(self):
        count = 0
        names = [card.get_name() for card in self.cards]
        for i in range(len(names)):
            if (names[0:i] + names[i+1:]).count(names[i]) == 1:
                count += 1
        return count

    def one_pair(self):
        return self._pair() == 2

    def two_pair(self):
        if self.three_of_kind():
            return False
        return self._pair() == 4

    def _of_a_kind(self):
        count = {}
        names = [card.get_name() for card in self.cards]
        for name in names:
            if name not in count:
                count[name] = 1
            else:
                count[name] += 1
        return max(count.values())

    def three_of_kind(self):
        return self._of_a_kind() == 3

    def four_of_a_kind(self):
        return self._of_a_kind() == 4

    def full_house(self):
        return (self.one_pair() and self.three_of_kind())

    def high_card(self):
        return max([card.get_value() for card in self.cards])

    def __str__(self):
        return self.__repr__()

    def __repr__(self):
        return u'<>'.join([repr(card) for card in self.cards]).encode('utf-8')



def run_hand(h):
    H = Hand(h)
    print H
    print H.determine_strength()


rand_hand = []

while len(rand_hand) < 5:
    c = Card(random.choice(Card.card_suits.keys()), random.choice(Card.card_values.keys()))
    if c not in rand_hand:
        rand_hand.append(c)




rf = [Card('hearts', 'ace'), Card('hearts', 'king'), Card('hearts', 'queen'),
           Card('hearts', 'jack'), Card('hearts', '10')]
sf = [Card('spades', '9'), Card('spades', '8'), Card('spades', '7'),
           Card('spades', '6'), Card('spades', '5')]
foak = [Card('spades', 'ace'), Card('hearts', 'ace'), Card('clubs', 'ace'),
           Card('diamonds', 'ace'), Card('spades', '5')]
fh = [Card('spades', 'ace'), Card('hearts', 'ace'), Card('clubs', 'ace'),
           Card('diamonds', 'king'), Card('spades', 'king')]
f = [Card('spades', 'ace'), Card('spades', '10'), Card('spades', '2'),
           Card('spades', '5'), Card('spades', '7')]
s = [Card('spades', '6'), Card('spades', '5'), Card('clubs', '4'),
           Card('diamonds', '3'), Card('hearts', '2')]
toak = [Card('spades', 'ace'), Card('diamonds', 'ace'), Card('clubs', 'ace'),
           Card('diamonds', 'king'), Card('spades', '10')]
tp = [Card('spades', 'ace'), Card('diamonds', 'ace'), Card('clubs', 'king'),
           Card('diamonds', 'king'), Card('spades', '10')]
op = [Card('spades', 'ace'), Card('diamonds', 'ace'), Card('clubs', '9'),
           Card('diamonds', 'king'), Card('spades', '10')]
hc = [Card('spades', 'ace'), Card('diamonds', '10'), Card('clubs', '9'),
           Card('diamonds', 'king'), Card('spades', '5')]

run_hand(rand_hand)
print "-----Royal Flush-----"
run_hand(rf)
print "-----Straight Flush-----"
run_hand(sf)
print "-----Four of a Kind-----"
run_hand(foak)
print "-----Full House-----"
run_hand(fh)
print "-----Flush-----"
run_hand(f)
print "-----Straight-----"
run_hand(s)
print "-----Three of a Kind-----"
run_hand(toak)
print "-----Two Pairs-----"
run_hand(tp)
print "-----One Pair-----"
run_hand(op)
print "-----High Card-----"
run_hand(hc)

NB : 이것은 python2.7입니다. 필요한 경우 python3으로 변환 해 보겠습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파이썬에서리스트의 요소의 값을 비교하여 목록을 비교

분류에서Dev

파이썬에서 두 데이터 프레임 값 비교

분류에서Dev

파이썬에서 두 튜플의 부분 값 비교

분류에서Dev

파이썬의 If 문에서 여러 부동 값을 비교하는 더 효율적인 방법이 있습니까?

분류에서Dev

데이터 프레임의 행 값을 다른 데이터 프레임의 여러 행과 비교하는 방법 (계산 포함)

분류에서Dev

Perl에서 여러 숫자 값 비교

분류에서Dev

파이썬에서 if 조건 만 사용하여 목록의 값과 함수 값을 어떻게 비교할 수 있습니까?

분류에서Dev

numpy 배열의 여러 값 비교

분류에서Dev

파이썬에서 파일의 여러 값 바꾸기

분류에서Dev

Kotlin에서 한 줄의 값을 다른 여러 값과 비교하는 방법

분류에서Dev

여러 값에서 여러 값을 비교하는 MySQL

분류에서Dev

비교기를 사용하여 여러 필드의 값에 기반하여 객체를 비교

분류에서Dev

Lua는 여러 테이블 값 비교

분류에서Dev

한 번에 여러 값 비교

분류에서Dev

게임 보드 생성을 위해 파이썬에서 파이 게임을 사용하여 여러 선의 모든 교차점 찾기

분류에서Dev

사전 목록에서 여러 키 값을 어떻게 비교합니까?

분류에서Dev

Javascript를 사용하여 여러 데이터 목록의 값 비교

분류에서Dev

파이썬에서 생성기를 사용하여 이터 러블을 어떻게 비교합니까?

분류에서Dev

파이썬에서 configparser에서 읽을 때 어떻게하면 들여 쓰기가 여러 값에 포함 할 수 있습니까?

분류에서Dev

Perl의 여러 출력 파일이있는 여러 디렉토리에서 스크립트 실행 (해시 키 값 비교 문제)

분류에서Dev

파이썬에서 하나의 x 값에 대해 여러 y 값 플로팅

분류에서Dev

파이썬에서 객체의 속성 값을 어떻게 비교할 수 있습니까?

분류에서Dev

단일 파일의 여러 열을 비교하고 이러한 열에서 값의 발생 횟수를 계산합니다.

분류에서Dev

PHP의 데이터베이스에서 하나의 값을 여러 값과 어떻게 비교할 수 있습니까?

분류에서Dev

파이썬 사전의 값에서 이기종 튜플의 여러 키 정렬

분류에서Dev

여러 값 쌍을 포함하는 두 JavaScript 배열 비교

분류에서Dev

파이썬에서 여러 배열 값을 포함하는 json 객체의 값을 인쇄 할 수 없습니다.

분류에서Dev

파이썬 사전에서 여러 최대 값을 어떻게 얻습니까?

분류에서Dev

메서드의 값 비교

Related 관련 기사

  1. 1

    파이썬에서리스트의 요소의 값을 비교하여 목록을 비교

  2. 2

    파이썬에서 두 데이터 프레임 값 비교

  3. 3

    파이썬에서 두 튜플의 부분 값 비교

  4. 4

    파이썬의 If 문에서 여러 부동 값을 비교하는 더 효율적인 방법이 있습니까?

  5. 5

    데이터 프레임의 행 값을 다른 데이터 프레임의 여러 행과 비교하는 방법 (계산 포함)

  6. 6

    Perl에서 여러 숫자 값 비교

  7. 7

    파이썬에서 if 조건 만 사용하여 목록의 값과 함수 값을 어떻게 비교할 수 있습니까?

  8. 8

    numpy 배열의 여러 값 비교

  9. 9

    파이썬에서 파일의 여러 값 바꾸기

  10. 10

    Kotlin에서 한 줄의 값을 다른 여러 값과 비교하는 방법

  11. 11

    여러 값에서 여러 값을 비교하는 MySQL

  12. 12

    비교기를 사용하여 여러 필드의 값에 기반하여 객체를 비교

  13. 13

    Lua는 여러 테이블 값 비교

  14. 14

    한 번에 여러 값 비교

  15. 15

    게임 보드 생성을 위해 파이썬에서 파이 게임을 사용하여 여러 선의 모든 교차점 찾기

  16. 16

    사전 목록에서 여러 키 값을 어떻게 비교합니까?

  17. 17

    Javascript를 사용하여 여러 데이터 목록의 값 비교

  18. 18

    파이썬에서 생성기를 사용하여 이터 러블을 어떻게 비교합니까?

  19. 19

    파이썬에서 configparser에서 읽을 때 어떻게하면 들여 쓰기가 여러 값에 포함 할 수 있습니까?

  20. 20

    Perl의 여러 출력 파일이있는 여러 디렉토리에서 스크립트 실행 (해시 키 값 비교 문제)

  21. 21

    파이썬에서 하나의 x 값에 대해 여러 y 값 플로팅

  22. 22

    파이썬에서 객체의 속성 값을 어떻게 비교할 수 있습니까?

  23. 23

    단일 파일의 여러 열을 비교하고 이러한 열에서 값의 발생 횟수를 계산합니다.

  24. 24

    PHP의 데이터베이스에서 하나의 값을 여러 값과 어떻게 비교할 수 있습니까?

  25. 25

    파이썬 사전의 값에서 이기종 튜플의 여러 키 정렬

  26. 26

    여러 값 쌍을 포함하는 두 JavaScript 배열 비교

  27. 27

    파이썬에서 여러 배열 값을 포함하는 json 객체의 값을 인쇄 할 수 없습니다.

  28. 28

    파이썬 사전에서 여러 최대 값을 어떻게 얻습니까?

  29. 29

    메서드의 값 비교

뜨겁다태그

보관