要学习的知识点
- 列表与下标切片
- input、split 和 int 的分步输入转换
- for 循环与 if 条件筛选
- 偶数判断与平方
- list.sort() 排序
题目
练习 3:筛选整数列表中的偶数,将它们平方后升序输出。
输入:第一行 n,第二行 n 个整数(空格分隔)。
完整代码
以下内容与 ex03.py 一致,可对照右侧讲解阅读。
"""练习 3:筛选整数列表中的偶数,将它们平方后升序输出。
输入:第一行 n,第二行 n 个整数(空格分隔)。
学习说明:
- int(input()) 读入元素个数;split() 把第二行拆成数字文本。
- for 循环逐个把数字文本转为整数,再用 append() 放进列表。
- 再用一个 for 循环检查偶数;符合条件时计算平方并保存到新列表。
- list.sort() 把平方列表升序排列;最后逐个打印列表中的数。
"""
n = int(input())
number_texts = input().split()
values = []
for index in range(n):
number_text = number_texts[index]
value = int(number_text)
values.append(value)
squares = []
for value in values:
if value % 2 == 0:
square = value * value
squares.append(square)
squares.sort()
for square in squares:
print(square)
进阶写法
这版与初学版解决同一道题,写法更精炼。先读代码,再看下面的简要说明。
进阶源码文件:ex03_adv.py
"""练习 3 进阶版:用 map 转换输入,并用列表解析筛选、平方和排序。"""
n = int(input())
values = list(map(int, input().split()))
squares = sorted([value * value for value in values[:n] if value % 2 == 0])
print(*squares)
map(int, ...) 把 int 函数逐项应用到输入文本;list() 将结果保存为列表。列表解析可按“结果 for 元素 in 列表 if 条件”理解,sorted() 返回新排序列表;print(*squares) 将列表拆成多个参数,以空格输出。
运行结果
示例输入:
6
5 2 -4 3 0 7程序输出:
0
4
16逐个认识函数
下面只列出本程序实际用到的写法;先看参数如何传入,再看返回值怎样保存或输出。
| 函数/写法 | 功能与返回值 | 注意事项 |
|---|---|---|
input() | 读取一行并返回字符串。 | 本题分两行读取 n 和数字列表。 |
str.split() | 按空白拆分字符串,返回字符串列表。 | 拆分得到的每项仍是文本。 |
int(text) | 把整数字符串转换为整数。 | 循环中逐个转换数字文本。 |
range(n) | 产生从 0 到 n-1 的整数。 | 适合重复 n 次并按下标读取输入项。 |
list.append(value) | 把一个值追加到列表末尾;返回 None。 | 会直接修改原列表。 |
list.sort() | 将列表原地按升序排序;返回 None。 | 排序后仍使用原来的 squares 列表。 |
print(value) | 输出一个值并换行;返回 None。 | 本程序每个平方数单独一行输出。 |
分步读取输入
input() 读入一整行文本;split() 把这一行拆成多个数字文本。然后 for 循环每次取一个文本,用 int() 转成整数,再用 append() 加入 values 列表。
number_texts = input().split()
values = []
for index in range(n):
number_text = number_texts[index]
value = int(number_text)
values.append(value)这样每一步都有单独的变量,方便检查转换前后的内容。
循环筛选与平方
- 先创建空列表 squares,用来保存符合条件的结果。
- 循环逐个读取 values 中的整数 value。
value % 2 == 0表示除以 2 的余数为 0,也就是偶数。- 遇到偶数时先计算
square = value * value,再用 append() 保存。 - 负偶数和 0 也符合条件;奇数则跳过。
排序并输出
squares.sort() 会直接修改 squares,把元素从小到大排列;它没有返回新的列表。之后用 for 循环逐个 print,每个数单独一行。
本题刻意使用初学者容易跟踪的普通循环。列表解析和 sorted() 可以等学会循环后再回来比较。
代码如何运行
- 先按左侧题目给出的格式输入数据;程序通过 input() 读取,并在需要时转换数据类型。
- 程序自上而下执行语句;遇到条件、循环或函数调用时,按照右侧算法说明更新变量和处理数据。
- 最后由 print() 输出计算结果。可将左侧示例输入与输出逐项对照。
先自己跟踪一组小数据,记录循环前后变量的值;这比只看最终答案更容易理解程序。
自己动手试一试
测试没有偶数、所有数都是偶数、包含负偶数和 0 的情况。
先在 lx03.py 中独立完成,再运行参考程序比较结果。修改程序时一次只改一个条件或步骤。