急-python 程式碼要怎麼100%完成

我現在這個程式碼最低限度完成題目要求
但是要完成100%要怎麼寫
意思是要怎麼讓他判斷所有可能的牌型

img


def cardPoint(playerCardPoint):
    pork=['A','2','3','4','5','6','7','8','9','10','J','Q','K']
    points=['14','2','3','4','5','6','7','8','9','10','11','12','13']
    index=pork.index(playerCardPoint)
    return int(points[index])
def straight(card): #11, 12, 13, 14, 2
    card.sort() #排序
    if(max(card)==14 and min(card)!=10): #有14沒有10表示會跨連續
        for i in range(5):#跨連續小於10均加 13後可連續
            if card[i]<10:
                card[i]=card[i]+13
    card.sort()#排序
    for i in range(4):#判斷連續數字
        if card[i]!=card[i+1]-1:
            return 0
    return 1
def getGrade(card, flow):
    #紀錄幾張卡花色相同
    f = [0, 0, 0, 0, 0, 0]
    #紀錄幾張卡點數相同
    p = [0, 0, 0, 0, 0, 0]
    #檢查幾張卡花色相同
    for c in ['S', 'H', 'D', 'C']:
        f[flow.count(c)]=f[flow.count(c)]+1
    #檢查幾張卡點數相同
    for i in range(2, 15):
        p[card.count(i)]=p[card.count(i)]+1
    
    if straight(card)==1 and f[5]==1: #同花順
        return 8
    if p[4]==1:#四條
        return 7
    if p[3]==1 and p[2]==1: #葫蘆
        return 6
    if (f[5]==1): #同花
        return 5
    if straight(card)==1: #順
        return 4
    if p[3]==1: #三條
        return 3
    if p[2]==2:#兩對
        return 2
    if p[2]==1: #一對
        return 1
    return 0 #散牌

def compute(cards):
    p = [cardPoint(c[0]) for c in cards]
    f = [c[1] for c in cards]
    print(getGrade(p,f))

def test():
    print(getGrade([13, 2, 6, 4, 14], ['S','H','S','D','C'])) #0
    print(getGrade([ 8, 8, 6, 4, 2], ['S','S','S','D','H'])) #1
    print(getGrade([13, 13, 6, 14, 14], ['S','S','S','D','C'])) #2
    print(getGrade([13, 13, 6, 14, 13], ['S','S','S','D','C'])) #3
    print(getGrade([ 7, 8, 6, 4, 5], ['S','S','S','D','C'])) #4
    print(getGrade([14, 8, 6, 4, 5], ['S','S','S','S','S'])) #5
    print(getGrade([13, 13, 14, 14, 13], ['D','D','D','D','D'])) #6
    print(getGrade([13, 13, 13, 14, 13], ['D','D','D','D','D'])) #7
    print(getGrade([12, 2, 13, 3, 14], ['S','S','S','S','S'])) #8


N1,N2,N3,N4,N5=map(str,input().split())


compute([N1,N2,N3,N4,N5])

1.要考虑点数为10的情况,你的代码要如楼上改动。
2.只要你机子跑得动,所有5张牌的情况如下:

# N1,N2,N3,N4,N5=map(str,input(">>>").split())
import itertools as it

pork = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
flow = ['S', 'H', 'D', 'C']
com = [i + j for i in pork for j in flow]
for x in it.combinations(com, 5):
    compute(x)


def compute(cards):
    p = [cardPoint(c[:-1]) for c in cards] # 意外情况:AH 2H 3H 4H 10H 你原来的没考虑
    f = [c[-1] for c in cards]
    print(getGrade(p, f))