Python編程題:五張牌判斷最大的類型

題目:五張牌,數字用2,3,4,5,6,7,8,9,10,J,Q,k,A表示,花色用黑桃Spade,梅花Club,方塊Diamonds,紅桃Hearts的首字母表示['S','C','D','H'],輸入爲五張牌的數字大小與花色,需要判斷這副牌的最大的類型,同花順輸出1,4帶1輸出2,3帶一對輸出3,僅僅是同花輸出4,僅僅是順子輸出5,3帶兩個單張輸出6,其他輸出7.

例:

輸入:

2 H

3 C

6 S

5 S

4 S

輸出:

5

'''# n=list(input())
# dic[n[1]]=int(n[0])
#初步思路爲字典通過鍵值對的方式排序,較麻煩,直接列表推導兩種屬性分別判斷即可'''


def card_queues(queues):
    '''#比較數值大小,因爲數值與列表索引一一對應,直接用索引來代替對應原本的數值大小
    #split()默認對所有的空格進行切分 空格,\n,\t,需要考慮到輸入形式的替換
    #下述列表推導,r爲數值,s爲顏色'''
    queues = ['23456789TJQKA'.index(r) for r, s in queues.split()]
    queues.sort()
    return queues


def judge_straight(queues):  
    '''# 判斷是否爲順子,數值相差爲4,利用set去重爲5'''
    queues = card_queues(queues)
    return max(queues) - min(queues) == 4 and len(set(queues)) == 5


def judge_color_only(queues):  # 判斷是否爲同花
    hand_flush = [s for r, s in queues.split()]
    return len(set(hand_flush)) == 1
'''#對於此處的列表推導其實邏輯上更爲清晰,但是語言處理較複雜,可按照如下方式處理
#對於數值:queues = ['23456789TJQKA'.index(r) for r in queues if r in '23456789TJQKA']
#對於花色:hand_flush=['SCDH'.index(s) for s in queues if s in 'SCDH']'''

def judge_32(queues):  # 判斷是否爲3帶2
    for r, s in queues.split():
        if queues.count(r) == 3:
            return True
    return None


def judge_41(queues):
    for r, s in queues.split():
        if queues.count(r) == 4:
            return True
    return None


def type_check(queues):  # 根據基本類型的組合來判斷複合類型
    # 同花順
    if judge_straight(queues) and judge_color_only(queues):
        print(1)
    # 4帶1
    elif judge_41(queues):
        print(2)
    # 葫蘆:3帶1對
    elif judge_32(queues) and len(set(queues)) == 2:
        print(3)
    # 同花
    elif judge_color_only(queues):
        print(4)
    # 順子
    elif judge_straight(queues):
        print(5)
    # 3帶2個單張
    elif judge_32(queues) and len(set(queues)) == 3:
        print(6)
    else:
        print(7)


if __name__ == "__main__":
    n = "2 H" \
        "3 C" \
        "6 S" \
        "5 S" \
        "4 S"
    a = []
    '''對輸入的形式進行轉換,改成2H 3C 6S 5S 4S類型'''
    n.replace('10', 'T')
    for i in range(0, len(n), 3):
        x = str(n[i]) + str(n[i + 2])
        a.append(x)
    str1 = " ".join(a)
    print(str1)
    type_check(str1)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章