7 p094扑克排序 PTA Python

7 p094扑克排序 PTA Python

牌面大小:2>A>K>Q>J>10>9>……>4>3
相同牌面的按照花色(h>s>d>c)顺序排。

输入格式:

多组数据。每组数据一行,表示当前摸到的n张牌(1<=n<=52)。

输出格式:

针对每组数据,输出一行,即排序后的结果,每张扑克后面有一个空格。

输入样例:

h7 c10 h4 s7 c5 cA dA c4 sJ h9 hQ d8 h2 s2 d9 sA dQ c6 hA
h7 s8 s7 c5 c8 cK sQ d2 s3 hQ d8 s10 sA d5 h10 hA
输出样例:
h2 s2 hA sA dA cA hQ dQ sJ c10 h9 d9 d8 h7 s7 c6 c5 h4 c4
d2 hA sA cK hQ sQ h10 s10 s8 d8 c8 h7 s7 d5 c5 s3

实现思路:

创建一个二维数组,数组中的第一个元素,用来保存卡牌的英文加数字的缩写(即输入的内容),第二个元素表示的是该卡牌对应的权重,
3-3,4-4… 10-10、J-11、Q-12、K-13、A-14、2-15
h>s>d>c --> h+0.4,s+0.3,d+0.2,c+0.1
再使用二维数组进行排序

def cal_weight(card):
    """
    计算卡牌对应的数字加字母对应的权重
    :param card: 每一个卡牌都对应的字符串
    :return: 卡牌对应的权重值(float类型)
    """
    weight = 0
    hua_se = card[0]
    if hua_se == 'h':
        weight += 0.4
    elif hua_se == 's':
        weight += 0.3
    elif hua_se == 'd':
        weight += 0.2
    elif hua_se == 'c':
        weight += 0.1
    weight_letter = card[1:]
    if len(weight_letter) == 1 and ord('3') <= ord(weight_letter) <= ord('9'):
        weight += int(weight_letter)
    elif weight_letter == '10':
        weight += 10
    elif weight_letter == 'J':
        weight += 11
    elif weight_letter == 'Q':
        weight += 12
    elif weight_letter == 'K':
        weight += 13
    elif weight_letter == 'A':
        weight += 14
    elif weight_letter == '2':
        weight += 15
    return weight


def sort_arr(res_arr):
    """
    [[a,b]] 根据二维数组中的b 的值对 [a,b] 整个数组进行排序,返回排序之后的数组
    :param res_arr:
    :return:
    """
    # 冒泡排序-排序二维数组
    for i in range(len(res_arr) - 1):
        for j in range(len(res_arr) - 1 - i):
            if res_arr[j][1] < res_arr[j + 1][1]:
                mid = res_arr[j + 1]
                res_arr[j + 1] = res_arr[j]
                res_arr[j] = mid
    return res_arr

def deal_input(input_str):
    """
    处理输入数据
    :param input_str: 每行输入的字符串
    :return: 排序之后的输出文本字符串
    """
    card_arr = input_str.split()
    res_arr = []
    for item in card_arr:
        mid_arr = [item, cal_weight(item)]
        res_arr.append(mid_arr)
    res_arr = sort_arr(res_arr)
    res_txt = ''
    for item in res_arr:
        res_txt = res_txt + item[0] + " "
    return res_txt

# 存放输出结果字符串,最后一块输出!!!
res_txt_arr = []
while True:
    try:
        # 接收每行的数据并存入列表中
        row = input()
        if len(row) <= 2:
            break
        res_txt_arr.append(deal_input(row))
    except:
        break
for item in res_txt_arr:
    print(item)

提交结果 截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥创江湖

你的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值