数字处理——第10届蓝桥杯Python真题详解

[导读]:超平老师的Scratch蓝桥杯真题解读系列广受好评,为回馈大家的支持,特推出《Python蓝桥杯真题解析100讲》系列,这是其中的第三讲。
数字处理是2019年3月24日举办的第10届蓝桥杯青少组Python编程比赛的第三题。该题要求对一组输入数字进行统计、排序及字母映射等操作。
下面我们将逐步分析题目的具体要求。
一. 题目概述
请编写程序实现以下功能:
- 统计输入数字的总个数;
- 找出输入数字中的最小值;
- 将这些数字按降序排列并输出;
- 若数字在1~26范围内,则将其转换为对应的大写字母(1→A,26→Z),否则不输出该字母。超出范围的数字需显示为"[bad]"。
输入格式: 输入N个数字(2 ≤ N ≤ 15),数字间以逗号分隔。
输出格式: 第一行为输入数字的总数; 第二行为最小数字; 第三行为按降序排列的数字; 第四行为对应的字母,超出范围的数字显示为"[bad]"。
示例输入: 9,12,15,22,5,21,214
示例输出: 7 5 214, 22, 21, 15, 12, 9, 5 ILOVEU[bad]
程序文件命名为"lq003"。
评分标准:
- 10分:正确输出数字个数;
- 20分:在上述基础上正确输出最小值;
- 40分:再增加正确排序;
- 50分:完整实现所有功能。
二. 解题思路
本题主要考察Python基础语法和常用函数的灵活使用,包括字符串处理、列表操作、排序和字符转换等。
我们可以将问题拆解为以下几个步骤:
- 输入数据处理;
- 获取列表长度与最小值;
- 实现降序排序;
- 数字转字母。
(1)输入处理
输入内容是以逗号分隔的多个数字字符串,需要将其分割并转为整型列表。
Python中可使用split()方法进行分割,例如:
data = input().split(',')
此时返回的是字符串列表,如 ['9', '12', '15', ...]。
为了获得整数列表,可以采用列表推导式:
nums = [int(x) for x in input().split(',')]
(2)统计与查找
使用len()获取元素个数,min()获取最小值。
(3)排序
题目要求从大到小排序,可使用sorted()函数,它不会修改原列表,返回新的排序后列表。
若使用list.sort()方法,则会直接修改原列表。
(4)数字转字母
可用两种方式实现:
- 使用字典建立映射关系;
- 利用ASCII码,A的ASCII码为65,因此数字n对应字符为
chr(n + 64)。
三. 编程实现
以下是完整的代码实现:
# 读取输入并转换为整数列表
nums = [int(x) for x in input().split(',')]
# 输出数字个数
print(len(nums))
# 输出最小值
print(min(nums))
# 按降序排列并输出
sorted_nums = sorted(nums, reverse=True)
print(','.join(map(str, sorted_nums)))
# 转换为字母
result = ''
for num in nums:
if 1 <= num <= 26:
result += chr(num + 64)
else:
result += '[bad]'
print(result)
四. 总结与思考
本题属于中等难度题目,涉及多个Python核心知识点,包括输入处理、列表操作、排序和字符转换。虽然代码量不大,但对逻辑清晰度和细节处理有较高要求。
需要注意的关键点包括:
sorted()与sort()的区别;- 列表推导式的灵活使用;
- 字符与ASCII码的转换;
- 条件判断与循环结构的结合。
此外,题目中多次强调了列表推导式的重要性,这是Python中高效处理列表的一种方式,值得深入掌握。
思考题:如果使用 arr = nums 进行赋值,再对 arr 排序,会发生什么?为什么?