Python 模拟考试 6 — 解析
📝 一、单选题(每题2分,共48分)¶
第 1 题¶
表达式 int(3.9) 的结果是()。
| 选项 | 内容 |
|---|---|
| A | 3.9 |
| B | 3 ✅ |
| C | 4 |
| D | 报错 |
答案
B
📖 解析:
int()将浮点数转换为整数时,直接截断小数部分(向零取整),不是四舍五入int(3.9)→ 截断小数部分 →3
| Python | |
|---|---|
🔑 知识点:int() 类型转换
| 用法 | 结果 | 说明 |
|---|---|---|
int(3.9) |
3 | 截断小数 |
int(-3.9) |
-3 | 向零取整 |
int("42") |
42 | 字符串转整数 |
int("3.9") |
报错 | 不支持非整数字符串 |
📌 记忆要点
int(3.9)= 3,截断不是四舍五入int(-3.9)= -3,向零取整- 四舍五入用
round()
第 2 题¶
下列关于Python赋值的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | a = b = 5 是非法的 |
| B | a, b = 1, 2 执行后 a=1, b=2 ✅ |
| C | a, b = 1 是合法的 |
| D | Python不支持链式赋值 |
答案
B
📖 解析:
- A 错误:
a = b = 5是链式赋值,完全合法,a 和 b 都为 5 - B 正确:
a, b = 1, 2是多元赋值(解包赋值),a=1, b=2 - C 错误:
a, b = 1会报ValueError,左侧2个变量,右侧只有1个值 - D 错误:Python 支持链式赋值
| Python | |
|---|---|
🔑 知识点:Python 赋值方式
| 方式 | 示例 | 说明 |
|---|---|---|
| 简单赋值 | a = 1 |
最基本形式 |
| 链式赋值 | a = b = 5 |
多个变量同一值 |
| 多元赋值 | a, b = 1, 2 |
同时赋不同值 |
| 交换变量 | a, b = b, a |
无需临时变量 |
📌 记忆要点
a, b = 1, 2是解包赋值,左右数量必须一致a = b = 5链式赋值合法- Python 交换变量:
a, b = b, a
第 3 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | [10, 30] |
| B | [20, 40] ✅ |
| C | [20, 40, 50] |
| D | [10, 30, 50] |
答案
B
📖 解析:
- 切片语法:
lst[start:stop:step],左闭右开 lst[1:4:2]:起始索引1,终止索引4(不含),步长2- 索引1=20,索引1+2=3=40,索引3+2=5超出stop(4)停止
- 结果:
[20, 40]
| Python | |
|---|---|
🔑 知识点:列表切片
| 表达式 | 结果 | 说明 |
|---|---|---|
lst[1:4] |
[20, 30, 40] | 索引1到3 |
lst[1:4:2] |
[20, 40] | 索引1到3,步长2 |
lst[::2] |
[10, 30, 50] | 步长2 |
lst[::-1] |
[50, 40, 30, 20, 10] | 反转 |
📌 记忆要点
- 切片
[start:stop:step]左闭右开 - 步长为2时,每隔一个取一个
- 负步长可反转序列
第 4 题¶
下列哪个表达式的结果为 True?()
| 选项 | 内容 |
|---|---|
| A | "abc" == "ABC" |
| B | "abc" > "abd" |
| C | "9" < "123" |
| D | "hello" in "helloworld" ✅ |
答案
D
📖 解析:
- A:
"abc" == "ABC"→False,字符串比较区分大小写 - B:
"abc" > "abd"→False,逐字符比较,'c'(99) < 'd'(100) - C:
"9" < "123"→False,字符串按字典序比较,首字符 '9'(57) > '1'(49) - D:
"hello" in "helloworld"→True,"hello" 是 "helloworld" 的子串
| Python | |
|---|---|
🔑 知识点:字符串比较
- 字符串比较按字典序(逐字符比较 Unicode 值)
- 区分大小写:
'a' > 'A'→ True in运算符判断子串关系- 字符串比较不是数值比较:
"9" > "10"→ True
📌 记忆要点
- 字符串比较按字典序,区分大小写
"9" < "123"是 False(字符 '9' > '1'),不要混淆为数值in判断子串包含关系
第 5 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | "tho" |
| B | "hon" ✅ |
| C | "Pyt" |
| D | "on" |
答案
B
📖 解析:
s[-3:]:从倒数第3个位置取到末尾- 索引 -3 = 'h',取到末尾 = "hon"
| Python | |
|---|---|
🔑 知识点:负索引与切片
| 表达式 | 结果 | 说明 |
|---|---|---|
s[-3:] |
"hon" |
倒数第3个到末尾 |
s[:-3] |
"Pyt" |
开头到倒数第4个 |
s[-3:-1] |
"ho" |
倒数第3到倒数第2 |
s[-1] |
"n" |
最后一个字符 |
📌 记忆要点
- 负索引从 -1 开始,-1 表示最后一个字符
s[-3:]取最后3个字符s[-3:-1]左闭右开,不包含 -1 位置的字符
第 6 题¶
关于Python字典,下列说法错误的是()。
| 选项 | 内容 |
|---|---|
| A | 字典的键必须是唯一的 |
| B | 字典的值可以是任意类型 |
| C | 对同一个键多次赋值,会保留所有值 ✅ |
| D | 字典是可变数据类型 |
答案
C
📖 解析:
- A 正确:字典的键必须唯一,重复赋值会覆盖
- B 正确:字典的值可以是任意类型
- C 错误:对同一个键多次赋值,后赋的值覆盖前值,只保留最后一个
- D 正确:字典是可变类型
| Python | |
|---|---|
🔑 知识点:字典基本特性
| 特性 | 说明 |
|---|---|
| 键唯一 | 重复键会覆盖 |
| 值任意 | 可以是任何类型 |
| 可变 | 可以增删改 |
| 键不可变 | 键必须是不可变类型 |
📌 记忆要点
- 同一键多次赋值,后值覆盖前值
- 字典键必须唯一且不可变
- 字典是可变类型
第 7 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 100 |
| B | 1 ✅ |
| C | [1, 2, 3] |
| D | 报错 |
答案
B
📖 解析:
a.copy()创建列表的浅拷贝,b 是 a 的独立副本- 修改 b 不会影响 a(对于单层列表)
b[0] = 100只修改了 b,a 不变print(a[0])输出1
| Python | |
|---|---|
🔑 知识点:列表拷贝方式
| 方式 | 是否独立 | 说明 |
|---|---|---|
b = a |
否 | 引用赋值,指向同一对象 |
b = a.copy() |
是(浅拷贝) | 单层独立,嵌套层共享 |
b = a[:] |
是(浅拷贝) | 切片方式 |
b = list(a) |
是(浅拷贝) | 构造函数方式 |
copy.deepcopy(a) |
是(深拷贝) | 完全独立 |
📌 记忆要点
a.copy()是浅拷贝,创建新列表a = b是引用赋值,两个变量指向同一对象- 浅拷贝对单层列表足够,嵌套列表需深拷贝
第 8 题¶
表达式 sum(range(1, 6)) 的结果是()。
| 选项 | 内容 |
|---|---|
| A | 10 |
| B | 15 ✅ |
| C | 5 |
| D | 6 |
答案
B
📖 解析:
range(1, 6)生成序列:1, 2, 3, 4, 5(左闭右开,不包含6)sum(1, 2, 3, 4, 5)= 1+2+3+4+5 = 15
| Python | |
|---|---|
🔑 知识点:range() 与 sum()
| 用法 | 结果 | 说明 |
|---|---|---|
range(1, 6) |
1,2,3,4,5 | 左闭右开 |
sum(range(1, n+1)) |
1到n的和 | 求和公式 n*(n+1)/2 |
sum(range(n)) |
0到n-1的和 | 从0开始 |
📌 记忆要点
range(1, 6)= 1, 2, 3, 4, 5(不含6)sum()可直接对 range 对象求和- 1到n的和 = n*(n+1)/2
第 9 题¶
下列程序的输出结果是()。
| 选项 | 内容 |
|---|---|
| A | Hello, World 和 Hello, Python ✅ |
| B | Hello, Python 和 Hello, World |
| C | 报错 |
| D | Hello, 和 Hello, Python |
答案
A
📖 解析:
greet()不传参数,使用默认值name="World"→ 输出Hello, Worldgreet("Python")传入参数name="Python"→ 输出Hello, Python
| Python | |
|---|---|
🔑 知识点:默认参数
| 调用方式 | 效果 |
|---|---|
greet() |
使用默认值 |
greet("Python") |
使用传入值 |
greet(name="Hi") |
关键字参数 |
注意:默认参数必须放在非默认参数之后。
📌 记忆要点
- 不传参时使用默认值
- 传参时覆盖默认值
- 默认参数放在参数列表末尾
第 10 题¶
以下关于 enumerate() 函数的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | enumerate() 只能用于列表 |
| B | enumerate() 返回索引和值组成的元组 ✅ |
| C | enumerate() 会修改原序列 |
| D | enumerate() 的索引从1开始 |
答案
B
📖 解析:
- A 错误:
enumerate()可用于任何可迭代对象 - B 正确:
enumerate()返回(index, value)元组的迭代器 - C 错误:
enumerate()不修改原序列 - D 错误:默认从 0 开始,可通过
start参数指定起始值
| Python | |
|---|---|
🔑 知识点:enumerate() 函数
| 用法 | 说明 |
|---|---|
enumerate(seq) |
返回 (0, val0), (1, val1), ... |
enumerate(seq, start=n) |
从 n 开始编号 |
list(enumerate(seq)) |
转为列表查看 |
📌 记忆要点
enumerate()返回(索引, 值)元组- 默认索引从 0 开始
- 可用于任何可迭代对象,不修改原序列
第 11 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | [0, 2, 4, 6, 8] ✅ |
| B | [1, 2, 3, 4, 5] |
| C | [2, 4, 6, 8, 10] |
| D | [0, 1, 2, 3, 4] |
答案
A
📖 解析:
range(5)生成 0, 1, 2, 3, 4i * 2对每个元素乘以 2- 结果:[0, 2, 4, 6, 8]
| Python | |
|---|---|
🔑 知识点:列表推导式
| 语法 | 说明 |
|---|---|
[expr for var in seq] |
基本形式 |
[expr for var in seq if cond] |
带条件过滤 |
[expr for v1 in s1 for v2 in s2] |
嵌套循环 |
📌 记忆要点
- 列表推导式:
[表达式 for 变量 in 序列] range(5)从 0 开始- 可加
if条件过滤
第 12 题¶
关于Python异常处理,下列说法正确的是()。
| 选项 | 内容 |
|---|---|
| A | try 语句块可以没有 except ✅ |
| B | 一个 try 只能有一个 except |
| C | finally 块只在发生异常时执行 |
| D | else 块在发生异常时执行 |
答案
A
📖 解析:
- A 正确:
try可以和finally搭配,不需要except(如资源释放场景) - B 错误:一个
try可以有多个except,处理不同类型的异常 - C 错误:
finally块无论是否发生异常都会执行 - D 错误:
else块在没有发生异常时执行
| Python | |
|---|---|
🔑 知识点:异常处理结构
| 子句 | 执行时机 |
|---|---|
try |
尝试执行的代码 |
except |
发生异常时执行 |
else |
没有异常时执行 |
finally |
无论是否异常都执行 |
📌 记忆要点
try可以没有except,但必须有except或finallyelse在没有异常时执行finally总是执行
第 13 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | \<class 'int'> |
| B | \<class 'tuple'> ✅ |
| C | \<class 'list'> |
| D | \<class 'str'> |
答案
B
📖 解析:
(1,)是单元素元组,逗号不能省略- 如果写成
(1),则type((1))→<class 'int'>,因为(1)只是整数 1 加了括号 - 逗号是区分元组和普通括号的关键
| Python | |
|---|---|
🔑 知识点:元组创建
| 写法 | 类型 | 说明 |
|---|---|---|
(1,) |
tuple | 单元素元组,逗号必须 |
(1) |
int | 只是整数1加括号 |
(1, 2) |
tuple | 多元素元组 |
() |
tuple | 空元组 |
1, 2, 3 |
tuple | 省略括号也可 |
📌 记忆要点
- 单元素元组
(1,)的逗号不能省略 (1)是整数,(1,)是元组- 空元组
()不需要逗号
第 14 题¶
表达式 "Hello Python".split() 的结果是()。
| 选项 | 内容 |
|---|---|
| A | ["Hello", "Python"] ✅ |
| B | "Hello", "Python" |
| C | ["Hello Python"] |
| D | 报错 |
答案
A
📖 解析:
split()不传参数时,按任意空白字符分割"Hello Python"以空格分隔,分割为["Hello", "Python"]- 结果是列表类型
| Python | |
|---|---|
🔑 知识点:split() 方法
| 用法 | 结果 | 说明 |
|---|---|---|
s.split() |
按空白分割 | 连续空白视为一个分隔符 |
s.split(" ") |
按单个空格分割 | 严格按一个空格 |
s.split(",") |
按逗号分割 | 指定分隔符 |
s.split(",", 1) |
最多分割1次 | 限制分割次数 |
📌 记忆要点
split()无参数时按任意空白分割- 返回值是列表
split()与split(" ")处理连续空格的结果不同
第 15 题¶
下列关于 global 关键字的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | 在函数外也必须使用 global 声明变量 |
| B | global 用于在函数内声明要修改的全局变量 ✅ |
| C | 使用 global 后局部变量和全局变量互不影响 |
| D | global 可以创建新的局部变量 |
答案
B
📖 解析:
- A 错误:全局变量在函数外定义即可,不需要
global声明 - B 正确:
global的作用是在函数内声明要修改的全局变量 - C 错误:使用
global后,函数内操作的就是全局变量本身 - D 错误:
global声明的是全局变量,不是局部变量
| Python | |
|---|---|
🔑 知识点:global 关键字
| 场景 | 是否需要 global | 说明 |
|---|---|---|
| 读取全局变量 | 不需要 | 直接读取 |
| 修改全局变量 | 需要 | 必须 global 声明 |
| 创建局部变量 | 不需要 | 直接赋值即为局部变量 |
📌 记忆要点
global用于函数内修改全局变量- 只读取全局变量不需要
global - 不用
global直接赋值会创建同名局部变量
第 16 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | "xbcxbc" |
| B | "xbcabc" ✅ |
| C | "abcabc" |
| D | "xXxXbc" |
答案
B
📖 解析:
replace(old, new, count)第三个参数指定替换次数s.replace("a", "x", 1)只替换第1个 "a" 为 "x"- 结果:"xbcabc"
| Python | |
|---|---|
🔑 知识点:字符串 replace() 方法
| 用法 | 说明 |
|---|---|
s.replace(old, new) |
替换所有匹配 |
s.replace(old, new, n) |
只替换前 n 个匹配 |
| 返回值 | 新字符串,原字符串不变 |
📌 记忆要点
replace()第三个参数限制替换次数- 不指定次数则替换所有匹配
- 字符串不可变,
replace()返回新字符串
第 17 题¶
以下哪个方法可以获取字典中所有的值?()
| 选项 | 内容 |
|---|---|
| A | dict.items() |
| B | dict.keys() |
| C | dict.values() ✅ |
| D | dict.all() |
答案
C
📖 解析:
- A:
items()返回所有键值对(key, value)元组 - B:
keys()返回所有键 - C:
values()返回所有值 - D:字典没有
all()方法
| Python | |
|---|---|
🔑 知识点:字典常用方法
| 方法 | 返回内容 | 返回类型 |
|---|---|---|
keys() |
所有键 | dict_keys |
values() |
所有值 | dict_values |
items() |
所有键值对 | dict_items |
get(key) |
指定键的值 | 值或None |
pop(key) |
删除并返回值 | 被删除的值 |
📌 记忆要点
keys()→ 键,values()→ 值,items()→ 键值对- 返回的是视图对象,可用
list()转为列表 - 字典没有
all()方法
第 18 题¶
下列程序的输出结果是()。
| 选项 | 内容 |
|---|---|
| A | [0, 3, 6, 9] ✅ |
| B | [3, 6, 9] |
| C | [1, 2, 4, 5, 7, 8] |
| D | [0, 1, 2, 3] |
答案
A
📖 解析:
range(10)生成 0, 1, 2, 3, 4, 5, 6, 7, 8, 9i % 3 == 0判断 i 是否为 3 的倍数- 满足条件的 i:0, 3, 6, 9
- 注意:0 % 3 == 0,所以 0 也被包含
| Python | |
|---|---|
🔑 知识点:取余运算判断倍数
i % n == 0判断 i 是否为 n 的倍数- 0 是任何非零整数的倍数(0 % 3 == 0)
range(10)从 0 开始
📌 记忆要点
- 0 % 任何非零数 == 0
i % 3 == 0找出3的倍数:0, 3, 6, 9range(10)从0开始到9
第 19 题¶
关于 while 循环,下列说法错误的是()。
| 选项 | 内容 |
|---|---|
| A | while 循环可能一次都不执行 |
| B | while True 是无限循环 |
| C | while 循环条件为假时自动退出 |
| D | while 循环必须使用计数器控制 ✅ |
答案
D
📖 解析:
- A 正确:如果初始条件就为假,循环体一次都不执行
- B 正确:
while True条件永远为真,形成无限循环 - C 正确:条件为假时循环自动退出
- D 错误:
while循环不必须使用计数器,可以用任意条件控制
| Python | |
|---|---|
🔑 知识点:while 循环
| 控制方式 | 示例 | 场景 |
|---|---|---|
| 计数器 | while i < n |
已知循环次数 |
| 标志变量 | while running |
需要灵活控制 |
| 用户输入 | while cmd != 'q' |
交互式程序 |
| 无限循环 | while True + break |
不确定循环次数 |
📌 记忆要点
while循环不必须用计数器- 条件为假时可能一次都不执行
while True需配合break退出
第 20 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 1 (2, 3, 4) ✅ |
| B | 1 [2, 3, 4] |
| C | (1, 2, 3, 4) |
| D | 报错 |
答案
A
📖 解析:
*args是可变位置参数,收集多余的参数为元组func(1, 2, 3, 4)中,a=1,args=(2, 3, 4)args的类型是元组tuple,不是列表
| Python | |
|---|---|
🔑 知识点:可变参数
| 参数 | 收集为 | 说明 |
|---|---|---|
*args |
元组 | 收集多余的位置参数 |
**kwargs |
字典 | 收集多余的关键字参数 |
参数顺序:普通参数 → *args → 默认参数 → **kwargs
📌 记忆要点
*args收集多余参数为元组**kwargs收集关键字参数为字典args和kwargs是约定名称,可自定义
第 21 题¶
下列程序的输出结果是()。
| Python | |
|---|---|
| 选项 | 内容 |
|---|---|
| A | 20 5 ✅ |
| B | 10 5 |
| C | 20 20 |
| D | 报错 |
答案
A
📖 解析:
nonlocal x声明x引用外层(outer)函数的变量inner()中x = 20修改的是outer中的x,不是全局xinner()执行后,outer中的x变为 20- 全局
x不受影响,仍为 5
| Python | |
|---|---|
🔑 知识点:nonlocal vs global
| 关键字 | 作用范围 | 说明 |
|---|---|---|
global |
全局变量 | 在最外层(模块)作用域 |
nonlocal |
外层函数变量 | 在嵌套函数中使用 |
📌 记忆要点
nonlocal修改外层函数的变量global修改全局变量- 两者都不影响各自范围以外的变量
第 22 题¶
表达式 bool("") 的结果是()。
| 选项 | 内容 |
|---|---|
| A | True |
| B | False ✅ |
| C | "" |
| D | 报错 |
答案
B
📖 解析:
""是空字符串,在布尔上下文中为Falsebool("")→False- 任何空容器的布尔值都为
False
| Python | |
|---|---|
🔑 知识点:Python Falsy 值
以下值 bool() 为 False:
| 值 | 说明 |
|---|---|
0, 0.0 |
零值 |
"" |
空字符串 |
[], (), {}, set() |
空容器 |
None |
空值 |
False |
布尔假 |
📌 记忆要点
- 空字符串
""的布尔值为False - 非空字符串(包括
"0"," ")布尔值为True - 所有空容器都是 Falsy
第 23 题¶
以下关于 with 语句的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | with 语句只能用于文件操作 |
| B | with 语句可以确保资源被正确释放 ✅ |
| C | with 语句打开的文件需要手动关闭 |
| D | with 语句不能处理异常 |
答案
B
📖 解析:
- A 错误:
with可用于任何支持上下文管理协议的对象 - B 正确:
with语句的核心功能是确保资源正确释放(即使发生异常) - C 错误:
with语句自动关闭文件,不需要手动close() - D 错误:
with语句本身不处理异常,但即使异常也能保证资源释放
| Python | |
|---|---|
🔑 知识点:with 语句(上下文管理器)
| 特性 | 说明 |
|---|---|
| 自动释放资源 | 即使异常也会执行清理 |
| 不限于文件 | 任何实现 __enter__/__exit__ 的对象 |
| 替代 try-finally | 更简洁的资源管理 |
| 不处理异常 | 异常仍会传播,但资源已释放 |
📌 记忆要点
with确保资源正确释放(自动 close)- 不限于文件,可用于锁、数据库连接等
- 推荐使用
with open()代替手动open()/close()
第 24 题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | [4, 5, 2] |
| B | [1, 5, 9] |
| C | [1, 9, 6] ✅ |
| D | [3, 4, 5, 2] |
答案
C
📖 解析:
lst[3:8:2]:起始索引3,终止索引8(不含),步长2- 索引3=1,索引3+2=5=9,索引5+2=7=6,索引7+2=9超出范围
- 结果:
[1, 9, 6]
| Python | |
|---|---|
🔑 知识点:列表切片详解
| 表达式 | 结果 | 说明 |
|---|---|---|
lst[3:8:2] |
[1, 9, 6] | 索引3,5,7 |
lst[::2] |
[3, 4, 5, 2] | 步长2,从头到尾 |
lst[1::3] |
[1, 5, 6] | 索引1,4,7 |
lst[::-1] |
[6, 2, 9, 5, 1, 4, 1, 3] | 反转 |
📌 记忆要点
- 切片
[start:stop:step]左闭右开 - 步长为2时,每隔一个取一个
- 确定起止索引后按步长跳跃
✅ 二、判断题(每题1分,共14分)¶
第1题 ✅ 对¶
题目: Python中,0 和 0.0 的布尔值相同,都是 False。
答案
✔ 对
解析:
bool(0)→False,bool(0.0)→False- 0 和 0.0 都是零值,布尔值相同
知识点范围: Falsy 值
记忆要点: 所有零值(0, 0.0, 0+0j)的布尔值都是 False
第2题 ❌ 错¶
题目: 字符串方法 upper() 会将原字符串修改为大写形式。
答案
✘ 错
解析:
- 字符串是不可变类型,
upper()返回新字符串,不修改原字符串
| Python | |
|---|---|
知识点范围: 字符串不可变性
记忆要点: 字符串不可变,所有字符串方法返回新字符串,原串不变
第3题 ✅ 对¶
题目: list.pop() 不带参数时,默认删除并返回列表的最后一个元素。
答案
✔ 对
解析:
pop()不带参数时,默认删除并返回最后一个元素(索引 -1)pop(index)带参数时,删除并返回指定索引的元素
| Python | |
|---|---|
知识点范围: 列表 pop() 方法
记忆要点: pop() 默认弹出最后一个元素,pop(i) 弹出指定索引
第4题 ✅ 对¶
题目: Python中,元组内的列表元素是可以修改的。
答案
✔ 对
解析:
- 元组本身不可变,但如果元组内包含可变对象(如列表),该可变对象的内容可以修改
- 这不违反元组的不可变性——元组存储的是列表的引用,引用不变
| Python | |
|---|---|
知识点范围: 元组的不可变性
📖 拓展
元组的不可变性是指元素引用不可变,而非元素内容不可变。这称为"浅不可变"。
记忆要点: 元组不可变是引用不可变,内部可变对象的内容仍可修改
第5题 ❌ 错¶
题目: dict.setdefault(key, default) 方法在键已存在时会修改该键的值。
答案
✘ 错
解析:
setdefault(key, default):如果键存在,返回该键的值,不修改- 如果键不存在,设置键值为 default 并返回
| Python | |
|---|---|
知识点范围: 字典 setdefault() 方法
记忆要点: setdefault() 键存在时不修改,键不存在时才添加
第6题 ✅ 对¶
题目: 在Python中,and 运算符的优先级高于 or 运算符。
答案
✔ 对
解析:
- 逻辑运算符优先级:
not>and>or True or False and False等价于True or (False and False)→True
| Python | |
|---|---|
知识点范围: 逻辑运算符优先级
记忆要点: 优先级顺序:not > and > or
第7题 ✅ 对¶
题目: str.zfill(width) 方法可以在字符串左侧填充0使字符串达到指定宽度。
答案
✔ 对
解析:
zfill(width)在字符串左侧填充'0',使字符串达到指定宽度- 常用于数字字符串的对齐
| Python | |
|---|---|
知识点范围: 字符串对齐方法
📖 拓展
其他对齐方法:ljust(width), rjust(width), center(width)
记忆要点: zfill(width) 左侧补0,负号在0前面
第8题 ✅ 对¶
题目: Python中,float("inf") 表示正无穷大。
答案
✔ 对
解析:
float("inf")表示正无穷大float("-inf")表示负无穷大- 常用于初始化最大值或最小值
| Python | |
|---|---|
知识点范围: 浮点数特殊值
记忆要点: float("inf") 正无穷,float("-inf") 负无穷,常用于初始化极值
第9题 ❌ 错¶
题目: list.sort() 和 sorted(list) 的功能完全相同,都会修改原列表。
答案
✘ 错
解析:
list.sort()是列表方法,原地排序,修改原列表,返回Nonesorted(list)是内置函数,返回新列表,不修改原列表
| Python | |
|---|---|
知识点范围: sort() vs sorted()
| 方法 | 是否修改原列表 | 返回值 | 适用范围 |
|---|---|---|---|
lst.sort() |
是 | None | 仅列表 |
sorted(lst) |
否 | 新列表 | 所有可迭代对象 |
记忆要点: sort() 原地排序返回 None,sorted() 返回新列表不修改原列表
第10题 ✅ 对¶
题目: 函数中如果没有 return 语句,函数将返回 None。
答案
✔ 对
解析:
- 函数没有
return语句,或return后没有值,都返回None
| Python | |
|---|---|
知识点范围: 函数返回值
记忆要点: 无 return 或 return 无值,函数返回 None
第11题 ✅ 对¶
题目: zip() 函数可以将多个可迭代对象的元素按位置打包成元组。
答案
✔ 对
解析:
zip()将多个可迭代对象按位置打包,返回由元组组成的迭代器- 最短的可迭代对象决定打包长度
| Python | |
|---|---|
知识点范围: zip() 函数
记忆要点: zip() 按位置打包,以最短长度为准
第12题 ✅ 对¶
题目: Python中,一个 .py 文件就是一个模块。
答案
✔ 对
解析:
- 每个
.py文件都是一个 Python 模块 - 模块可以被其他文件通过
import导入 - 包是包含
__init__.py的目录
| Python | |
|---|---|
知识点范围: Python 模块
记忆要点: 一个 .py 文件 = 一个模块
第13题 ✅ 对¶
题目: 字典推导式 {k: v for k, v in items} 是Python支持的语法。
答案
✔ 对
解析:
- Python 支持字典推导式,语法为
{key_expr: value_expr for item in iterable}
| Python | |
|---|---|
知识点范围: 字典推导式
记忆要点: 字典推导式语法:{k: v for ... in ...}
第14题 ❌ 错¶
题目: math.floor(-2.3) 的结果是 -2。
答案
✘ 错
解析:
math.floor()是向下取整(向负无穷方向取整)math.floor(-2.3)→-3(不是 -2)math.floor()对负数向下取整,结果比原数更小
| Python | |
|---|---|
知识点范围: math.floor() 与取整函数
| 函数 | 对正数 | 对负数 | 说明 |
|---|---|---|---|
math.floor() |
向下取整 | 向下取整 | 结果 ≤ 原数 |
math.ceil() |
向上取整 | 向上取整 | 结果 ≥ 原数 |
int() |
向零取整 | 向零取整 | 截断小数 |
math.trunc() |
向零取整 | 向零取整 | 同 int() |
记忆要点: floor() 向下取整,floor(-2.3) = -3,不是 -2
✏️ 三、程序填空题(每题10分,共30分)¶
第1题:统计正负数个数¶
题目: 从键盘输入若干整数(输入0结束),统计正数和负数的个数。
| Python | |
|---|---|
✅ 填空答案
- begin1:
if num == 0: - begin2:
if num > 0:
完整正确代码
运行示例:
| Text Only | |
|---|---|
🔑 知识点:while循环、break、条件判断
while True配合break实现不确定次数的循环break立即退出循环- 0 既不是正数也不是负数,作为退出标志
📌 记忆要点
while True+break是常见的循环控制模式- 先判断退出条件,再处理数据
- 0 是正负数的分界点,适合做退出标志
第2题:冒泡排序优化¶
题目: 对列表使用冒泡排序进行升序排列(如果某轮没有交换则提前结束)。
✅ 填空答案
- begin1:
swapped = False - begin2:
swapped = True - begin3:
if not swapped: break
完整正确代码
运行结果: 排序后: [11, 12, 22, 25, 34, 64, 90]
🔑 知识点:冒泡排序优化
- 冒泡排序:相邻元素比较,大的往后冒泡
- 优化:如果某一轮没有发生交换,说明已经有序,提前结束
swapped标志位记录本轮是否有交换
📌 记忆要点
- 每轮开始前设
swapped = False - 发生交换时设
swapped = True - 每轮结束后检查,无交换则
break - 优化后最好情况 O(n),最坏情况 O(n²)
第3题:字符串加密¶
题目: 将字符串中的每个字母替换为字母表中其后一个字母(z替换为a,Z替换为A),非字母字符不变。
| Python | |
|---|---|
✅ 填空答案
- begin1:
result += chr((ord(ch) - ord('a') + 1) % 26 + ord('a')) - begin2:
result += chr((ord(ch) - ord('A') + 1) % 26 + ord('A'))
完整正确代码
运行示例:
🔑 知识点:字符编码、ord()、chr()
| 函数 | 功能 | 示例 |
|---|---|---|
ord(ch) |
字符→ASCII码 | ord('a') → 97 |
chr(n) |
ASCII码→字符 | chr(97) → 'a' |
% 26 |
循环26个字母 | z后移→a |
📌 记忆要点
ord()字符转编码,chr()编码转字符% 26实现字母循环(z→a,Z→A)- 非字母字符直接保留
🔧 四、程序改错题(每题10分,共40分)¶
第1题:求最大公约数¶
题目: 使用辗转相除法求两个正整数的最大公约数。
| Python | |
|---|---|
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | while a / b != 0: |
while b != 0: |
/ 是浮点除法且判断条件应为 b != 0 |
| begin2 | a = b 然后 b = a % b |
a, b = b, a % b |
先赋值a会导致计算b时a已改变 |
| begin3 | print("最大公约数:", a) |
print("最大公约数:", a) |
此行正确,但需确保前面修正后a存结果 |
完整正确代码
运行示例:
辗转相除法过程(48 和 18):
| Text Only | |
|---|---|
🔑 知识点:辗转相除法、while循环、赋值顺序
- 辗转相除法:
gcd(a, b) = gcd(b, a % b),当b == 0时,a即为最大公约数 - 同时赋值
a, b = b, a % b避免中间变量 - 条件
b != 0而非a / b != 0
📌 记忆要点
- 辗转相除法:
while b != 0: a, b = b, a % b - 循环条件是
b != 0,不是a / b != 0 - Python 支持同时赋值:
a, b = b, a % b
第2题:列表去重保持顺序¶
题目: 删除列表中的重复元素,同时保持原始顺序。
| Python | |
|---|---|
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | result = {} |
result = [] |
{} 创建字典,应用 [] 创建列表 |
| begin2 | if item not in lst: |
if item not in result: |
应在 result 中检查,不是在原列表 |
| begin3 | print("去重后:", result) |
print("去重后:", result) |
此行正确(修正前两处后即可) |
完整正确代码
运行结果: 去重后: [3, 1, 4, 5, 9, 2, 6]
🔑 知识点:列表去重、列表与字典的区别
📌 记忆要点
{}创建字典,[]创建列表- 去重时应在新列表中检查,不是原列表
set()去重不保持顺序,手动遍历可保持顺序
第3题:统计元音字母¶
题目: 统计字符串中元音字母(a, e, i, o, u)的个数,不区分大小写。
| Python | |
|---|---|
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | range(1, len(s)) |
range(len(s)) 或 range(0, len(s)) |
索引从1开始会跳过第一个字符 |
| begin2 | s[i].lower |
s[i].lower() |
lower 是方法,调用需要加括号 |
| begin3 | "元音字母个数:" + count |
"元音字母个数:" + str(count) 或 print("元音字母个数:", count) |
字符串和整数不能直接用 + 拼接 |
完整正确代码
运行示例:
错误分析:
🔑 知识点:range起始索引、方法调用、字符串拼接
| 错误类型 | 示例 | 修正 |
|---|---|---|
| 索引从1开始 | range(1, len(s)) |
range(len(s)) |
| 方法缺少括号 | s.lower |
s.lower() |
| 字符串拼接整数 | "x" + n |
"x" + str(n) 或 "x", n |
📌 记忆要点
range(len(s))从0开始,range(1, len(s))从1开始会漏掉首字符- 方法调用必须加括号:
lower()不是lower - 字符串和数字拼接用
str()转换或print()逗号分隔
第4题:斐波那契数列¶
题目: 输出斐波那契数列的前n项。
| Python | |
|---|---|
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin2 | a = b 然后 b = a + b |
a, b = b, a + b |
顺序赋值导致 b = a + b 中 a 已经是新的 b |
完整正确代码
运行示例:
错误分析:
| Python | |
|---|---|
🔑 知识点:斐波那契数列、同时赋值
- 斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, ...
- 规则:F(n) = F(n-1) + F(n-2)
- Python 同时赋值
a, b = b, a + b先计算右边再赋值
📌 记忆要点
a, b = b, a + b是同时赋值,先算右边再赋值- 分两行赋值
a = b; b = a + b会出错,因为 a 已被覆盖 - 斐波那契数列:0, 1, 1, 2, 3, 5, 8, ...
💻 五、程序设计题(每题13分,共26分)¶
第1题:统计单词频率¶
题目: 编写程序,输入一段英文,统计每个单词出现的次数,并按次数从高到低输出。
要求: 1. 不区分大小写("The" 和 "the" 算同一个单词) 2. 忽略标点符号(只保留字母和空格) 3. 按出现次数从高到低排序输出
示例输入: the cat sat on the mat the cat
示例输出:
方法1:字典统计 + sorted排序(推荐)
方法2:使用 collections.Counter
方法3:使用 setdefault 简化统计
🔑 知识点:字符串处理、字典统计、排序
| 步骤 | 方法 | 说明 |
|---|---|---|
| 转小写 | text.lower() |
统一大小写 |
| 去标点 | isalpha() 判断 |
只保留字母和空格 |
| 分词 | split() |
按空格分割 |
| 统计 | 字典 get() 方法 |
计数 |
| 排序 | sorted(items, key=..., reverse=True) |
按值排序 |
📌 记忆要点
- 字符串处理三步:转小写 → 去标点 → 分词
dict.get(key, 0) + 1简化计数sorted(d.items(), key=lambda x: x[1], reverse=True)按值降序排序Counter.most_common()直接获取排序结果
第2题:学生成绩管理¶
题目: 编写程序实现学生成绩管理,功能如下:
- 添加学生(姓名和3科成绩)
- 按姓名查询学生成绩
- 显示所有学生信息及平均分
- 按平均分从高到低排序显示
- 输入0退出
要求:使用字典存储学生信息,字典的键为姓名,值为3科成绩的列表。
示例交互:
| Text Only | |
|---|---|
方法1:基础实现(推荐)
方法2:使用函数封装
🔑 知识点:字典操作、菜单循环、排序
| 操作 | 方法 | 说明 |
|---|---|---|
| 添加 | d[key] = value |
键值对添加 |
| 查询 | key in d / d.get(key) |
判断或获取 |
| 遍历 | d.items() |
键值对遍历 |
| 排序 | sorted(d.items(), key=..., reverse=True) |
按值排序 |
| 格式化 | f"{avg:.2f}" |
保留2位小数 |
📌 记忆要点
- 用字典
{姓名: [成绩列表]}存储学生信息 while True+ 菜单实现交互循环sorted(dict.items(), key=lambda x: ..., reverse=True)按值排序f"{value:.2f}"保留2位小数- 函数封装使代码结构更清晰