题解 | 明明的随机数
明明的随机数
https://www.nowcoder.com/practice/3245215fffb84b7b81285493eae92ff0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
【代码能力描述】
本程序是一个简单的数据处理程序,主要功能是:
1. 从标准输入读取整数数据
2. 对数据进行去重和排序
3. 按升序输出结果
【核心技能点】
- sys.stdin.read() - 标准输入读取
- map() - 函数式编程,类型转换
- set() - 数据去重
- sorted() - 排序操作
"""
# ========== 导入标准库 ==========
import sys # 导入 sys 模块,用于访问标准输入输出和系统参数
# ========== 定义主函数 ==========
def sort():
"""
从标准输入读取数据,进行去重和排序后输出
输入格式:
第一行:整数 n (1 <= n <= 1000),表示后续有 n 个整数
后续:n 个整数(可能包含重复)
输出格式:
按升序排列的不重复整数,每个一行
【处理流程】
1. 读取所有输入数据
2. 验证数据合法性
3. 转换为整数类型
4. 去重并排序
5. 输出结果
"""
# 第1步:读取所有标准输入数据
# sys.stdin.read() 一次性读取所有输入内容
# .strip() 去除首尾空白字符
# .split() 按空白字符分割成列表
all_data = sys.stdin.read().strip().split()
# 如果没有输入数据,直接返回(避免后续操作报错)
if not all_data:
return
# 第2步:获取第一个整数作为数据个数
# int() 将字符串转换为整数
num = int(all_data[0])
# 第3步:验证数据个数是否在合法范围内
# range(1, 1001) 生成 1-1000 的整数序列
# in 检查 num 是否在这个范围内
if num not in range(1, 1001):
return # 不合法则直接返回,不处理
# 第4步:获取除第一个数之外的所有数据
# 使用切片 all_data[1:] 获取从索引1开始的所有元素
my_list = all_data[1:]
# ========== 数据处理 ==========
# 第5步:类型转换
# map(int, my_list) 将列表中的每个字符串转换为整数
# map 返回的是迭代器,需要用 list() 转换为列表
# 【注意】这里 data 变量实际未被使用,是多余的转换
data = map(int, my_list)
# 第6步:核心处理 - 去重 + 排序
# set(my_list) 将列表转换为集合,自动去除重复元素
# sorted() 对集合进行升序排序,返回新的列表
# 【问题】这里用的是 my_list(字符串列表)而不是 data(整数列表)
# 这会导致排序按字符串字典序而非数值大小
data = sorted(set(data))
# ========== 输出结果 ==========
# 第7步:遍历排序后的数据,逐行输出
# 每个整数占一行
for i in data:
print(i)
# ========== 程序入口 ==========
# 当直接运行此脚本时(而非被导入时),执行 sort() 函数
if __name__ =="__main__":
sort()

查看6道真题和解析