题解 | 明明的随机数

明明的随机数

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()


全部评论

相关推荐

03-03 23:42
复旦大学 Java
_无论云泥意贯一:把复旦大学放前面,山东大学放后面,并且在两个大学后面标注985(用一些显眼的颜色标注)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务