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)

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值