bol_in 2021-11-15 21:14 采纳率: 64.6%
浏览 39
已结题

求解,撲克牌判斷花色、點數

請問我這個程式碼是那邊有問題
為什麼其他牌型都能判斷出來
就只有同花沒辦法判斷
比如說我輸入
10D AD KD QD 8D
她要輸出
5
附上其他牌行圖片為例

img

img

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条回答 默认 最新

  • -Undefined_ 2021-11-15 21:21
    关注

    'A'对应的点数是 14了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月26日
  • 已采纳回答 11月18日
  • 修改了问题 11月16日
  • 创建了问题 11月15日

悬赏问题

  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题