without haste but without rest

[python/계프] 3주차 과제 - 포커 본문

Homework

[python/계프] 3주차 과제 - 포커

JinungKim 2020. 4. 4. 16:11

포커

import random
# 스트레이트: 연속된 네개 숫자, A432나 AKQ2도 연속이라고 봄
# 숫자 부분을 'AKQJ98765432'에서의 위치로 정렬, 연속인가 검사
def strait(hand):
    nlist = []
    for s, a in hand:
        nlist.append(numbers.index(a))
    nlist.sort()
    for i in range(1, 4):
        if nlist[i] == 0 and nlist[i - 1] == 11:
            continue
        if nlist[i] != nlist[i - 1] + 1:
            return False
    # print(' ', nlist, end=' ')
    return True

# 플러시: 같은 모양 네장
def flush(hand):
    for a in range(0, 3):
        if hand[a][0] != hand[a+1][0]:
            return False
    return True

# 포카드: 같은 숫자 네장       4
# 트리플 : 세 장이 같은 숫자   3
# 투페어: 두장씩 같은 숫자     22
# 원페어: 두장만 같은 숫자     2
def num_cards(hand):
    res = {1: 'one-pair', 2: 'triple', 3: 'four-cards', 4: 'two-pair'}
    count = 0
    tmp = [x[1] for x in hand]
    tmp.sort()
    p1, p2 = tmp[:2], tmp[2:]       # check for two-pair
    if p1 != p2 and p1[0] == p1[1] and p2[0] == p2[1]:
        print(res[4])
        return True
    for a in range(0, 3):
        if tmp[a] == tmp[a+1]:
            count += 1
    if count > 0:
        print(res[count])
        return True
    return False

# main
numbers = 'AKQJ98765432'
shapes = '◇♡♤♧'
deck = [(s, a) for a in numbers for s in shapes]  # tuple
# print(deck)
for indx in range(0, 48, 4):
    for card in deck[indx:indx + 4]:
        print(''.join(card), end=' ')
    print()
print()

while True:
    random.shuffle(deck)  # 덱을 섞어서
    for indx in range(0, 48, 4):  # 네 장씩 패를 돌림
        hand = deck[indx:indx + 4]  # 각 패에 대해
        hand.sort()  # 문자열 순서대로 소팅
        for card in hand:
            print(''.join(card), end=' ')  # 패를 출력
        if strait(hand):
            print('strait')
        elif flush(hand):
            print('flush')
        elif num_cards(hand):
            continue
        else:
            print('none')
    print()
    input()

 

 

Comments