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)