題目:五張牌,數字用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)