bol_in 2021-11-24 22:11 采纳率: 62.5%
浏览 117
已结题

急-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])

  • 写回答

2条回答 默认 最新

  • chuifengde 2021-11-25 09:40
    关注

    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)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月1日
  • 已采纳回答 12月1日
  • 创建了问题 11月24日