Python 模拟考试 7 — 解析
📝 一、单选题¶
第1题¶
表达式 ord('A') 的结果是()。
| 选项 | 内容 |
|---|---|
| A | 'A' |
| B | 65 ✅ |
| C | 97 |
| D | 报错 |
答案
B
📖 解析:
ord()函数返回字符对应的ASCII码(整数)'A'的ASCII码是 65'a'的ASCII码是 97ord()的逆函数是chr(),chr(65)→'A'
🔑 知识点:ord() 与 chr() 函数
| 函数 | 功能 | 示例 |
|---|---|---|
ord(c) |
字符→ASCII码 | ord('A') → 65 |
chr(n) |
ASCII码→字符 | chr(65) → 'A' |
常用ASCII码:'A'=65, 'Z'=90, 'a'=97, 'z'=122, '0'=48, '9'=57
📌 记忆要点
ord()字符转数字,chr()数字转字符- 大写字母 A=65,小写字母 a=97,数字 0=48
- 大写转小写:
chr(ord('A') + 32)→'a'
第2题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 10 20 |
| B | 20 10 ✅ |
| C | 10 10 |
| D | 20 20 |
答案
B
📖 解析:
a, b = 10, 20:多重赋值,a=10, b=20a, b = b, a:Python 的变量交换语法- 右侧先求值:(b, a) = (20, 10)
- 然后同时赋值给左侧:a=20, b=10
🔑 知识点:多重赋值与变量交换
- Python 支持多重赋值:
a, b, c = 1, 2, 3 - 右侧表达式先全部求值,再统一赋值给左侧
- 这是 Python 最优雅的变量交换方式
📌 记忆要点
a, b = b, a是 Python 交换变量的标准写法- 右侧先求值,再同时赋值给左侧
- 不需要临时变量
第3题¶
下列关于Python元组的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | 元组只有一个元素时,写法为 (1) |
| B | 元组可以通过索引修改元素 |
| C | 元组是不可变序列,创建后不能修改元素 ✅ |
| D | 元组不支持 len() 函数 |
答案
C
📖 解析:
- A 错误:
(1)是整数 1,不是元组。单元素元组必须加逗号:(1,) - B 错误:元组不可变,不能通过索引修改,
t[0] = 10会报 TypeError - C 正确:元组是不可变(immutable)序列,创建后不能增删改
- D 错误:元组支持
len(),如len((1, 2, 3))→ 3
| Python | |
|---|---|
🔑 知识点:元组的特性
| 特性 | 说明 |
|---|---|
| 不可变 | 创建后不能增删改 |
| 单元素写法 | (1,) 必须加逗号 |
| 支持索引 | t[0]、t[-1] |
| 支持切片 | t[1:3] |
| 支持len | len(t) |
| 可做字典键 | 因为不可变(hashable) |
📌 记忆要点
- 元组不可变,创建后不能修改
- 单元素元组必须加逗号:
(1,)不是(1) - 元组支持索引、切片、len()等操作
第4题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 7 |
| B | 5 |
| C | 6 ✅ |
| D | 8 |
答案
C
📖 解析:
逐步分析:
lst = [1, 2, 3]→ 列表长度3lst.append([4, 5])→ 将[4, 5]作为一个整体追加 →[1, 2, 3, [4, 5]],长度4lst.extend([6, 7])→ 将[6, 7]逐个追加 →[1, 2, 3, [4, 5], 6, 7],长度6
| Python | |
|---|---|
🔑 知识点:append() 与 extend() 的区别
| 方法 | 行为 | 示例 | 结果 |
|---|---|---|---|
append(x) |
将x作为一个整体追加 | [1,2].append([3,4]) |
[1,2,[3,4]] |
extend(x) |
将x中元素逐个追加 | [1,2].extend([3,4]) |
[1,2,3,4] |
+= |
等价于extend | [1,2]+=[3,4] |
[1,2,3,4] |
📌 记忆要点
append()整体追加,extend()逐个追加append([4,5])加1个元素,extend([4,5])加2个元素lst += [6, 7]等价于lst.extend([6, 7])
第5题¶
表达式 3 > 2 > 1 的结果是()。
| 选项 | 内容 |
|---|---|
| A | True ✅ |
| B | False |
| C | 报错 |
| D | 不确定 |
答案
A
📖 解析:
- Python 支持链式比较(chained comparison)
3 > 2 > 1等价于(3 > 2) and (2 > 1)3 > 2→ True,2 > 1→ True- True and True → True
| Python | |
|---|---|
🔑 知识点:链式比较
| 表达式 | 等价于 | 结果 |
|---|---|---|
3 > 2 > 1 |
(3>2) and (2>1) |
True |
3 > 2 > 2 |
(3>2) and (2>2) |
False |
1 < 2 < 3 |
(1<2) and (2<3) |
True |
Python 的链式比较比数学表达式更直观,其他语言(如C/Java)不支持。
📌 记忆要点
- Python 支持链式比较:
a < b < c等价于(a<b) and (b<c) - 每个比较独立计算,再用 and 连接
- 不是先算
a < b得 True 再与 c 比较
第6题¶
下列关于 dict.get() 方法的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | dict.get(key) 在key不存在时会报KeyError |
| B | dict.get(key, default) 在key不存在时返回default ✅ |
| C | dict.get(key) 与 dict[key] 功能完全相同 |
| D | dict.get() 只能获取值,不能设置默认返回值 |
答案
B
📖 解析:
- A 错误:
get()在key不存在时返回 None,不会报错 - B 正确:
get(key, default)在key不存在时返回 default 值 - C 错误:
dict[key]在key不存在时报 KeyError,get()不会 - D 错误:
get()支持第二个参数设置默认值
| Python | |
|---|---|
🔑 知识点:字典访问方式对比
| 方式 | key不存在时 | 示例 | 结果 |
|---|---|---|---|
d[key] |
抛出KeyError | d['c'] |
KeyError |
d.get(key) |
返回None | d.get('c') |
None |
d.get(key, default) |
返回default | d.get('c', 0) |
0 |
📌 记忆要点
d[key]访问不存在的键 → KeyErrord.get(key)访问不存在的键 → None,不报错d.get(key, default)可以指定默认返回值
第7题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 1 ✅ |
| B | 3 |
| C | [1, 3] |
| D | 报错 |
答案
A
📖 解析:
list.index(value)返回列表中第一个值为value的元素的索引- 列表
x = [1, 2, 3, 2, 1],值2出现在索引1和索引3 x.index(2)只返回第一个匹配的索引,即1- 如果值不存在,会抛出 ValueError
| Python | |
|---|---|
🔑 知识点:列表查找方法
| 方法 | 功能 | key不存在时 |
|---|---|---|
lst.index(val) |
返回第一个val的索引 | ValueError |
lst.count(val) |
返回val出现的次数 | 返回0 |
val in lst |
判断val是否在列表中 | False |
📌 记忆要点
index()只返回第一个匹配的索引- 值不存在时抛出 ValueError,不是返回 -1
- 查找所有位置需用列表推导式
第8题¶
表达式 "Hello".center(11, "*") 的结果是()。
| 选项 | 内容 |
|---|---|
| A | "Hello" ✅ |
| B | "*Hello" |
| C | "Hello*" |
| D | "*Hello" |
答案
A
📖 解析:
str.center(width, fillchar)将字符串居中,用fillchar填充两侧"Hello"长度为5,目标宽度为11,两侧各填充 (11-5)/2 = 3 个字符- 结果为
"***Hello***"
| Python | |
|---|---|
🔑 知识点:字符串对齐方法
| 方法 | 功能 | 示例 |
|---|---|---|
center(w, c) |
居中对齐 | "Hi".center(6,"-") → --Hi-- |
ljust(w, c) |
左对齐 | "Hi".ljust(6,"-") → Hi---- |
rjust(w, c) |
右对齐 | "Hi".rjust(6,"-") → ----Hi |
zfill(w) |
左侧填0 | "42".zfill(5) → 00042 |
📌 记忆要点
center()居中,ljust()左对齐,rjust()右对齐- 总宽度不足时返回原字符串
- 奇数多余字符填充在右侧
第9题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | {1} ✅ |
| B | {4} |
| C | {1, 4} |
| D | 报错 |
答案
A
📖 解析:
- 集合的
-运算是差集操作 s1 - s2:在s1中但不在s2中的元素- s1 = {1, 2, 3},s2 = {2, 3, 4}
- 在s1中但不在s2中:{1}
| Python | |
|---|---|
🔑 知识点:集合运算
| 运算符 | 方法 | 含义 | 示例 |
|---|---|---|---|
\| |
union() |
并集 | {1,2}\|{2,3} → {1,2,3} |
& |
intersection() |
交集 | {1,2}&{2,3} → {2} |
- |
difference() |
差集 | {1,2}-{2,3} → {1} |
^ |
symmetric_difference() |
对称差集 | {1,2}^{2,3} → {1,3} |
📌 记忆要点
-差集:左边有但右边没有&交集:两边都有|并集:所有元素^对称差集:只在一边有
第10题¶
以下关于Python函数参数的说法,错误的是()。
| 选项 | 内容 |
|---|---|
| A | *args 用于接收任意数量的位置参数 |
| B | **kwargs 用于接收任意数量的关键字参数 |
| C | 函数调用时关键字参数必须在位置参数之后 |
| D | 默认参数可以放在非默认参数之前 ✅ |
答案
D
📖 解析:
- A 正确:
*args将多余的位置参数收集为元组 - B 正确:
**kwargs将多余的关键字参数收集为字典 - C 正确:调用函数时,位置参数在前,关键字参数在后
- D 错误:默认参数必须放在非默认参数之后,否则会报语法错误
| Python | |
|---|---|
🔑 知识点:函数参数顺序
参数定义顺序:普通参数 → 默认参数 → *args → **kwargs
📌 记忆要点
- 默认参数必须在非默认参数之后
*args收集多余位置参数为元组**kwargs收集多余关键字参数为字典- 调用时位置参数在前,关键字参数在后
第11题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | Python |
| B | Java ✅ |
| C | 报错 |
| D | None |
答案
B
📖 解析:
- 这是Python的三元条件表达式(条件表达式)
- 语法:
值1 if 条件 else 值2 - 条件为True返回值1,条件为False返回值2
3 > 5→ False,所以返回"Java"
| Python | |
|---|---|
🔑 知识点:三元条件表达式
| 语法 | 说明 |
|---|---|
值1 if 条件 else 值2 |
条件为True返回值1,否则返回值2 |
注意:Python的三元表达式顺序与C/Java不同!
- Python: A if cond else B
- C/Java: cond ? A : B
📌 记忆要点
- 语法:
值1 if 条件 else 值2 - 条件为True取值1,False取值2
- 必须有
else部分,不能省略
第12题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 完成 3 |
| B | 完成 4 |
| C | 3 ✅ |
| D | 4 |
答案
C
📖 解析:
for...else结构中,else块只在循环正常结束(未被break中断)时执行- 当
i == 3时,break跳出循环,else块不会执行 - 循环结束时
i = 3,打印3
| Python | |
|---|---|
🔑 知识点:for...else 结构
| 情况 | else是否执行 |
|---|---|
| 循环正常结束 | ✅ 执行 |
| 循环被break中断 | ❌ 不执行 |
| 循环被return中断 | ❌ 不执行 |
| 空循环(range(0)) | ✅ 执行 |
while...else 同理。
📌 记忆要点
for...else的else在循环未被break中断时执行- break 跳出 → else 不执行
- 正常遍历完成 → else 执行
第13题¶
表达式 chr(97) 的结果是()。
| 选项 | 内容 |
|---|---|
| A | 97 |
| B | 'a' ✅ |
| C | 'A' |
| D | 报错 |
答案
B
📖 解析:
chr()函数将整数(ASCII码/Unicode码位)转换为对应的字符chr(97)→'a'(小写字母a的ASCII码是97)chr(65)→'A'(大写字母A的ASCII码是65)
🔑 知识点:chr() 函数
| 函数 | 功能 | 示例 |
|---|---|---|
chr(n) |
整数→字符 | chr(97) → 'a' |
ord(c) |
字符→整数 | ord('a') → 97 |
两者互为逆函数:chr(ord('a')) → 'a'
📌 记忆要点
chr()数字转字符,ord()字符转数字chr(97)= 'a',chr(65)= 'A'- 支持Unicode:
chr(20013)= '中'
第14题¶
下列关于 list.sort() 和 sorted() 的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | sort() 返回排序后的新列表 |
| B | sorted() 会修改原列表 |
| C | sort() 是列表方法,会修改原列表 ✅ |
| D | sorted() 只能排序列表,不能排序字符串 |
答案
C
📖 解析:
- A 错误:
sort()是原地排序,返回 None,不返回新列表 - B 错误:
sorted()返回新列表,不修改原列表 - C 正确:
sort()是列表的内置方法,直接修改原列表 - D 错误:
sorted()可以排序任何可迭代对象(字符串、元组等)
🔑 知识点:sort() 与 sorted() 对比
| 特性 | lst.sort() |
sorted(iterable) |
|---|---|---|
| 适用对象 | 仅列表 | 任何可迭代对象 |
| 返回值 | None | 新列表 |
| 是否修改原列表 | 是 | 否 |
| 参数 | reverse, key |
reverse, key |
📌 记忆要点
sort()原地排序,返回None,修改原列表sorted()返回新列表,不修改原列表sorted()可排序字符串、元组等可迭代对象
第15题¶
以下代码的运行结果是()。
| Python | |
|---|---|
| 选项 | 内容 |
|---|---|
| A | "2024" |
| B | "2:0:2:4" ✅ |
| C | 报错 |
| D | "2:0:24" |
答案
B
📖 解析:
str.join(iterable)将可迭代对象中的元素用指定字符串连接"2024"是字符串,可迭代,遍历得到'2', '0', '2', '4'- 用
":"连接:"2" + ":" + "0" + ":" + "2" + ":" + "4"→"2:0:2:4"
| Python | |
|---|---|
🔑 知识点:join() 方法
- 调用者是分隔符,参数是可迭代对象
- 元素必须是字符串,否则报错
📌 记忆要点
join()的调用者是分隔符,参数是要连接的序列- 字符串是可迭代对象,每个字符是元素
- 元素必须是字符串类型
第16题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | [0, 2, 4, 6, 8] |
| B | [2, 6] ✅ |
| C | [1, 3] |
| D | [2, 4, 6, 8] |
答案
B
📖 解析:
逐步分析列表推导式 [i * 2 for i in range(5) if i % 2 != 0]:
range(5)→ 0, 1, 2, 3, 4if i % 2 != 0筛选奇数 → 1, 3i * 2对筛选结果乘以2 → 2, 6- 结果:
[2, 6]
| Python | |
|---|---|
🔑 知识点:列表推导式
语法:[表达式 for 变量 in 可迭代对象 if 条件]
| 部分 | 说明 | 本题 |
|---|---|---|
| 表达式 | 对每个元素的计算 | i * 2 |
| for | 遍历 | for i in range(5) |
| if | 筛选条件(可选) | if i % 2 != 0 |
📌 记忆要点
- 列表推导式 = for循环 + 条件筛选 + 表达式
- 执行顺序:遍历 → 筛选 → 表达式
- if条件可选,不加则不过滤
第17题¶
以下关于Python字符串格式化的说法,错误的是()。
| 选项 | 内容 |
|---|---|
| A | f"值是{val}" 是f-string格式化 |
| B | "值是{}".format(val) 是format方法 |
| C | "值是%d" % val 是%格式化 |
| D | 三种格式化方式中,%格式化是Python 3.6新增的 ✅ |
答案
D
📖 解析:
- A 正确:f-string 以
f开头,用{}嵌入变量 - B 正确:
format()方法用{}占位符 - C 正确:
%格式化是老式格式化方式 - D 错误:
%格式化是最早的格式化方式,f-string 才是 Python 3.6 新增的
| Python | |
|---|---|
🔑 知识点:字符串格式化三种方式
| 方式 | 版本 | 示例 |
|---|---|---|
% 格式化 |
最早 | "Hello %s" % "World" |
str.format() |
Python 2.6 | "Hello {}".format("World") |
| f-string | Python 3.6 | f"Hello {name}" |
推荐使用 f-string,更简洁直观。
📌 记忆要点
%格式化是最早的方式,不是3.6新增format()是 Python 2.6 引入- f-string 是 Python 3.6 新增,推荐使用
第18题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | ["a", "b", "c"] ✅ |
| B | [1, 2, 3] |
| C | [("a", 1), ("b", 2), ("c", 3)] |
| D | 报错 |
答案
A
📖 解析:
d.keys()返回字典所有键的视图对象list()将视图对象转换为列表- 结果为
["a", "b", "c"]
| Python | |
|---|---|
🔑 知识点:字典的 keys/values/items 方法
| 方法 | 返回类型 | 内容 |
|---|---|---|
d.keys() |
dict_keys | 所有键 |
d.values() |
dict_values | 所有值 |
d.items() |
dict_items | 所有键值对(元组) |
注意:Python 3 中返回的是视图对象,不是列表。需要列表时用 list() 转换。
📌 记忆要点
keys()返回键的视图,values()返回值的视图,items()返回键值对视图- Python 3 返回视图对象,需要列表时用
list()转换 - 视图对象会随字典变化而动态更新
第19题¶
表达式 0.1 + 0.2 == 0.3 的结果是()。
| 选项 | 内容 |
|---|---|
| A | True |
| B | False ✅ |
| C | 报错 |
| D | 不确定 |
答案
B
📖 解析:
- 浮点数在计算机中使用二进制存储,存在精度问题
0.1 + 0.2的实际结果是0.30000000000000004- 所以
0.1 + 0.2 == 0.3为 False
| Python | |
|---|---|
🔑 知识点:浮点数精度问题
- 浮点数采用IEEE 754标准,某些十进制小数无法精确表示为二进制
- 不要直接用
==比较浮点数 - 推荐使用
math.isclose()或判断差值是否足够小
📌 记忆要点
0.1 + 0.2 != 0.3,这是浮点数精度问题- 不要用
==直接比较浮点数 - 使用
math.isclose()或差值比较
第20题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 6 ✅ |
| B | 报错 |
| C | None |
| D | 123 |
答案
A
📖 解析:
- 函数定义中
*后面的参数是仅限关键字参数(keyword-only) a和b是位置参数,c是仅限关键字参数- 调用时
c必须用关键字方式传递 func(1, 2, c=3)→ a=1, b=2, c=3 → 1+2+3=6
| Python | |
|---|---|
🔑 知识点:仅限关键字参数
| 参数类型 | 定义方式 | 调用方式 |
|---|---|---|
| 位置参数 | def f(a, b) |
f(1, 2) |
| 默认参数 | def f(a, b=2) |
f(1) 或 f(1, 3) |
| 仅限关键字参数 | def f(a, *, b) |
f(1, b=2),b必须用关键字 |
| 可变位置参数 | def f(*args) |
f(1, 2, 3) |
| 可变关键字参数 | def f(**kwargs) |
f(x=1, y=2) |
📌 记忆要点
*后面的参数是仅限关键字参数- 仅限关键字参数必须用
参数名=值的方式传递 - 不能通过位置传递仅限关键字参数
第21题¶
下列关于 list.remove() 和 list.pop() 的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | remove() 按索引删除,pop() 按值删除 |
| B | remove() 按值删除第一个匹配项,pop() 按索引删除并返回该元素 ✅ |
| C | remove() 和 pop() 功能完全相同 |
| D | pop() 不指定索引时删除第一个元素 |
答案
B
📖 解析:
- A 错误:说反了,
remove()按值,pop()按索引 - B 正确:
remove(value)按值删除第一个匹配项,pop(index)按索引删除并返回 - C 错误:两者功能不同
- D 错误:
pop()不指定索引时删除并返回最后一个元素
| Python | |
|---|---|
🔑 知识点:列表删除方法对比
| 方法 | 按什么删 | 返回值 | 元素不存在时 |
|---|---|---|---|
remove(val) |
值 | None | ValueError |
pop(idx) |
索引 | 被删除的元素 | IndexError |
pop() |
最后一个 | 被删除的元素 | IndexError(空列表) |
del lst[idx] |
索引 | 无 | IndexError |
📌 记忆要点
remove(值)→ 按值删除第一个匹配项,无返回值pop(索引)→ 按索引删除,返回被删元素pop()不指定索引 → 删除并返回最后一个元素
第22题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | "Hello World" ✅ |
| B | "HELLO WORLD" |
| C | "Hello world" |
| D | "hELLO wORLD" |
答案
A
📖 解析:
str.title()将字符串中每个单词的首字母大写,其余字母小写"hello world"→"Hello World"
| Python | |
|---|---|
🔑 知识点:字符串大小写方法
| 方法 | 功能 | 示例 |
|---|---|---|
upper() |
全部大写 | "Hello".upper() → "HELLO" |
lower() |
全部小写 | "Hello".lower() → "hello" |
title() |
每个单词首字母大写 | "hello world".title() → "Hello World" |
capitalize() |
只有首字母大写 | "hello world".capitalize() → "Hello world" |
swapcase() |
大小写互换 | "Hello".swapcase() → "hELLO" |
📌 记忆要点
title()每个单词首字母大写capitalize()只大写字符串的第一个字符upper()全大写,lower()全小写
第23题¶
以下关于Python中 is 运算符的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | is 比较的是两个对象的值是否相等 |
| B | is 比较的是两个对象的内存地址是否相同 ✅ |
| C | is 和 == 功能完全相同 |
| D | [1,2] is [1,2] 的结果为True |
答案
B
📖 解析:
- A 错误:
is比较的是身份(内存地址),不是值 - B 正确:
is判断两个变量是否指向同一个对象(内存地址相同) - C 错误:
==比较值,is比较身份 - D 错误:两个独立的列表对象即使值相同,内存地址也不同
| Python | |
|---|---|
🔑 知识点:is 与 == 的区别
| 运算符 | 比较内容 | 示例 |
|---|---|---|
== |
值是否相等 | [1,2] == [1,2] → True |
is |
是否同一对象(内存地址) | [1,2] is [1,2] → False |
is 等价于 id(a) == id(b)
📌 记忆要点
==比较值,is比较身份(内存地址)[1,2] is [1,2]为 False(两个独立对象)- 小整数(-5~256)和小字符串有缓存机制,
is可能为 True
第24题¶
以下代码的运行结果是()。
| Python | |
|---|---|
| 选项 | 内容 |
|---|---|
| A | [4, 5, 9, 6] ✅ |
| B | [3, 1, 1, 2] |
| C | [4, 5, 9] |
| D | 报错 |
答案
A
📖 解析:
filter(func, iterable)过滤可迭代对象,保留使函数返回True的元素lambda x: x > 3是匿名函数,判断元素是否大于3- 遍历列表:3(✗), 1(✗), 4(✓), 1(✗), 5(✓), 9(✓), 2(✗), 6(✓)
- 大于3的元素:4, 5, 9, 6
filter()返回迭代器,需要用list()转换为列表
| Python | |
|---|---|
🔑 知识点:filter() 与 map()
| 函数 | 功能 | 示例 |
|---|---|---|
filter(func, iter) |
保留使func为True的元素 | filter(lambda x:x>3, [1,4,2,5]) → [4,5] |
map(func, iter) |
对每个元素应用func | map(lambda x:x*2, [1,2,3]) → [2,4,6] |
注意:Python 3 中 filter() 和 map() 返回迭代器,需用 list() 转换。
📌 记忆要点
filter()过滤,保留使函数返回True的元素map()映射,对每个元素应用函数- Python 3 中返回迭代器,需
list()转换 lambda匿名函数:lambda 参数: 表达式
✅ 二、判断题¶
第1题 ❌ 错¶
题目: Python中,list.sort() 方法会返回排序后的新列表,不会修改原列表。
答案:✘ 错
📖 解析:
list.sort()是原地排序,直接修改原列表,返回值为Nonesorted()才是返回新列表,不修改原列表
| Python | |
|---|---|
🔑 知识点:sort() vs sorted()
sort():原地排序,返回None,只能用于列表sorted():返回新列表,不修改原列表,可用于任何可迭代对象
📌 记忆要点
sort()修改原列表,返回Nonesorted()不修改原列表,返回新列表- 题目说"不会修改原列表"是错误的
第2题 ✅ 对¶
题目: Python中,字符串可以通过 + 运算符进行拼接,但拼接后会创建一个新的字符串对象。
答案:✔ 对
📖 解析:
- 字符串是不可变(immutable)类型
+拼接字符串会创建新的字符串对象,原字符串不变- 大量拼接时推荐使用
join()方法,效率更高
| Python | |
|---|---|
📌 记忆要点
- 字符串不可变,
+拼接创建新对象 - 大量拼接用
join()更高效 - 字符串的任何"修改"操作都创建新对象
第3题 ✅ 对¶
题目: 在Python中,只包含一个元素的元组必须写成 (1,) 的形式,(1) 会被当作整数1。
答案:✔ 对
📖 解析:
(1)中的括号是数学运算的括号,不是元组的括号(1,)中的逗号才是元组的标志- 空元组
()不需要逗号
| Python | |
|---|---|
📌 记忆要点
(1)是整数,(1,)才是元组- 元组的标志是逗号,不是括号
- 空元组
()不需要逗号
第4题 ✅ 对¶
题目: Python中,字典的键必须是唯一的,如果对已有的键赋值,旧值会被覆盖。
答案:✔ 对
📖 解析:
- 字典的键具有唯一性
- 对已有键赋值会覆盖旧值(更新)
- 对新键赋值会新增键值对
| Python | |
|---|---|
📌 记忆要点
- 字典键唯一,重复赋值会覆盖
d[key] = value:有则改,无则增
第5题 ❌ 错¶
题目: break 语句可以用于 if 语句中,用来跳出 if 代码块。
答案:✘ 错
📖 解析:
break只能用于循环语句(for和while),不能用于ifbreak的作用是跳出最近的循环,不是跳出ifif中可以包含break,但break跳出的是外层循环,不是if
| Python | |
|---|---|
📌 记忆要点
break只能用于循环(for/while)break跳出最近的循环,不是跳出 ifbreak不能单独在 if 中使用(unless if在循环内)
第6题 ✅ 对¶
题目: Python中,字符串的比较是按照字典序(lexicographic order)进行的。
答案:✔ 对
📖 解析:
- 字符串比较按照字典序(Unicode码位顺序)逐字符比较
- 先比较第一个字符,如果相同再比较第二个,以此类推
| Python | |
|---|---|
📌 记忆要点
- 字符串按字典序逐字符比较(Unicode码位)
- 大写字母 < 小写字母('A'=65 < 'a'=97)
- 字符串比较不是数值比较,
"10" < "2"
第7题 ❌ 错¶
题目: None 和 0 在Python中是等价的,None == 0 的结果为 True。
答案:✘ 错
📖 解析:
None是Python中的空值对象,表示"没有值"0是整数零,是一个具体的数值None == 0的结果为FalseNone只与None相等:None == None→True
| Python | |
|---|---|
📌 记忆要点
None不等于0,None == 0为 FalseNone是空值,0是数值,类型不同None只等于None
第8题 ✅ 对¶
题目: Python中,一个函数可以返回多个值,实际上返回的是一个元组。
答案:✔ 对
📖 解析:
- 函数用
return a, b, c返回多个值时,实际返回的是元组(a, b, c) - 调用方可以用多个变量接收(元组解包)
| Python | |
|---|---|
📌 记忆要点
return a, b实际返回元组(a, b)- 接收时可用元组解包:
x, y = func() - 函数本质只能返回一个对象,多值返回是元组的语法糖
第9题 ✅ 对¶
题目: def 语句定义函数时,函数体不会被执行,只有调用函数时才会执行。
答案:✔ 对
📖 解析:
def只定义函数,不执行函数体- 只有调用函数时,函数体才会被执行
- 函数定义时的默认参数值会在定义时计算一次
| Python | |
|---|---|
📌 记忆要点
def定义函数不执行函数体- 调用函数时才执行函数体
- 默认参数在函数定义时计算一次(可变默认参数陷阱)
第10题 ✅ 对¶
题目: Python中,float 类型的运算可能存在精度误差,因此不建议直接用 == 比较两个浮点数。
答案:✔ 对
📖 解析:
- 浮点数在计算机中采用二进制存储,无法精确表示某些十进制小数
0.1 + 0.2 == 0.3的结果为False- 推荐用
math.isclose()或差值比较
| Python | |
|---|---|
📌 记忆要点
- 浮点数存在精度误差
- 不用
==比较浮点数 - 用
math.isclose()或差值阈值比较
第11题 ❌ 错¶
题目: 字符串的 split() 方法如果不指定分隔符,默认按逗号分割。
答案:✘ 错
📖 解析:
split()不指定参数时,默认按空白字符分割(空格、制表符、换行等)- 不是按逗号分割
- 连续空白字符视为一个分隔符
| Python | |
|---|---|
📌 记忆要点
split()无参数时按空白字符分割,不是逗号- 连续空白字符视为一个分隔符
split(",")指定逗号分割
第12题 ✅ 对¶
题目: Python中,and 和 or 运算符具有短路求值特性。
答案:✔ 对
📖 解析:
- 短路求值(short-circuit evaluation):从左到右计算,能确定结果时立即停止
and:如果第一个为False,直接返回第一个值,不再计算第二个or:如果第一个为True,直接返回第一个值,不再计算第二个
| Python | |
|---|---|
📌 记忆要点
and遇到第一个False就停止,返回该值or遇到第一个True就停止,返回该值- 返回的是实际值,不一定是True/False
第13题 ✅ 对¶
题目: enumerate() 函数可以同时获取列表元素的索引和值。
答案:✔ 对
📖 解析:
enumerate()将可迭代对象组合为索引-值对- 常用于
for循环中同时获取索引和元素
📌 记忆要点
enumerate(iterable, start=0)返回 (索引, 值) 对- 常用于 for 循环同时获取索引和值
start参数可指定起始索引
第14题 ✅ 对¶
题目: 在Python中,del 语句既可以删除变量,也可以删除列表中的元素。
答案:✔ 对
📖 解析:
del可以删除变量,使其不再存在del可以删除列表中的元素(按索引)del还可以删除字典中的键值对
| Python | |
|---|---|
📌 记忆要点
del 变量→ 删除变量del 列表[索引]→ 删除列表元素del 字典[键]→ 删除字典键值对
✏️ 三、程序填空题¶
第1题:凯撒密码加密¶
题目: 实现凯撒密码加密,将字符串中每个字母向后移动3位(如A→D,x→a),非字母字符不变。
✅ 填空答案:
- begin1:
ord('A') if ch.isupper() else ord('a') - begin2:
(ord(ch) - base + shift) % 26 + base - begin3:
caesar_encrypt(text)
完整正确代码
📖 解析:
- 填空1:需要根据字母是大写还是小写确定基准ASCII码。大写字母基准为
ord('A')(65),小写字母基准为ord('a')(97) - 填空2:凯撒密码的核心公式。先求字母在字母表中的位置(0~25),加上偏移量,对26取模保证循环,再加上基准码转回字符
- 填空3:调用函数,传入用户输入的明文
运行示例:
🔑 知识点:凯撒密码原理
| 步骤 | 说明 | 示例(A→D,shift=3) |
|---|---|---|
| 1. 确定基准 | 大写用A(65),小写用a(97) | ord('A') = 65 |
| 2. 计算偏移 | 字母位置 + 偏移量 | 0 + 3 = 3 |
| 3. 取模循环 | 对26取模 | (0+3)%26 = 3 |
| 4. 转回字符 | 偏移 + 基准码→chr | chr(3+65) = 'D' |
📌 记忆要点
- 大写小写字母分别处理,基准码不同
% 26保证字母循环(z→c)ord()字符转数字,chr()数字转字符
第2题:二维列表求每行最大值¶
题目: 给定一个二维列表(矩阵),找出每行的最大值并存入新列表。
✅ 填空答案:
- begin1:
m = max(row) - begin2:
row_max
完整正确代码
运行结果: 每行最大值: [7, 9, 6]
📖 解析:
- 填空1:使用
max()函数求每行的最大值,row是每行的列表 - 填空2:输出最终的结果列表
row_max
🔑 知识点:二维列表遍历
📌 记忆要点
- 二维列表 = 列表的列表
- 外层循环遍历行,内层循环遍历列
max()可直接对列表求最大值
第3题:递归求各位数字之和¶
题目: 使用递归函数计算一个正整数各位数字之和。例如:123 → 1+2+3 = 6。
✅ 填空答案:
- begin1:
n < 10(或n // 10 == 0) - begin2:
n % 10 + digit_sum(n // 10)
完整正确代码
运行示例:
📖 解析:
递归执行过程(以123为例):
| Text Only | |
|---|---|
- 填空1:递归终止条件,当n为个位数(n < 10)时,直接返回n
- 填空2:递归关系,
n % 10取最后一位,n // 10去掉最后一位,递归求剩余各位之和
🔑 知识点:递归三要素
| 要素 | 说明 | 本题 |
|---|---|---|
| 终止条件 | 何时停止递归 | n < 10 时返回n |
| 递归关系 | 如何分解问题 | n % 10 + digit_sum(n // 10) |
| 返回值 | 返回什么 | 各位数字之和 |
📌 记忆要点
- 递归必须有终止条件(基线条件)
n % 10取个位数,n // 10去掉个位数- 递归 = 当前处理 + 子问题递归
🔧 四、程序改错题¶
第1题:最大公约数¶
题目: 使用辗转相除法求两个正整数的最大公约数。
原始代码(含错误):
| Python | |
|---|---|
✅ 三处错误及修正:
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | while a / b != 0: |
while b != 0: |
应判断b是否为0,且用整除逻辑 |
| begin2 | return a |
return a |
返回值正确,但循环条件修复后逻辑才通 |
| begin2 | print("最大公约数为:", gcd(num1, num2) |
print("最大公约数为:", gcd(num1, num2)) |
缺少右括号 |
完整正确代码
运行示例:
📖 解析:
- 错误1:
a / b是浮点除法,可能出现浮点精度问题。辗转相除法的正确条件是判断b != 0 - 错误2:
print语句缺少右括号
🔑 知识点:辗转相除法(欧几里得算法)
📌 记忆要点
- 辗转相除法:
gcd(a, b) = gcd(b, a % b) - 终止条件:
b == 0时,a即为最大公约数 a, b = b, a % b是 Python 多重赋值的经典应用
第2题:统计单词频率¶
题目: 统计一段英文中每个单词出现的次数,并按次数从高到低输出。
原始代码(含错误):
| Python | |
|---|---|
✅ 三处错误及修正:
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | word_count = [] |
word_count = {} |
统计频率应使用字典而非列表 |
| begin2 | for w in word_count: |
for w in sorted(word_count, key=word_count.get, reverse=True): |
需按频率降序输出 |
完整正确代码
| Python | |
|---|---|
运行结果:
📖 解析:
- 错误1:用列表存储单词频率无法用字符串作为索引,应使用字典
{} - 错误2:原代码只遍历字典键,没有按频率排序。需要用
sorted()配合key=word_count.get按值排序
🔑 知识点:字典按值排序
📌 记忆要点
- 统计频率用字典
{},不是列表[] sorted(dict, key=dict.get)按值排序reverse=True降序排列
第3题:冒泡排序优化¶
题目: 对列表进行升序排序,并输出排序后的结果。
原始代码(含错误):
| Python | |
|---|---|
✅ 三处错误及修正:
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | for j in range(n): |
for j in range(0, n - i - 1): |
内层循环范围错误,应逐步缩小 |
| begin1 | if lst[j] > lst[j + 1]: |
索引正确 | (这部分逻辑正确,但范围需修正才能避免越界) |
| begin2 | print("排序后:" + lst) |
print("排序后:", lst) |
字符串与列表不能直接用+拼接 |
完整正确代码
运行结果: 排序后: [11, 12, 22, 25, 34, 64, 90]
📖 解析:
- 错误1:内层循环应为
range(0, n - i - 1),否则j + 1会越界,且未利用冒泡排序的优化(每轮已排好的末尾元素无需再比较) - 错误2:字符串和列表不能直接用
+拼接,应使用逗号分隔或str(lst)转换
🔑 知识点:冒泡排序
📌 记忆要点
- 冒泡排序内层循环:
range(0, n - i - 1) - 每轮将最大值"冒泡"到末尾
- 字符串与列表不能直接
+,用,或str()转换
第4题:猜数字函数¶
题目: 编写函数判断猜的数字与目标数字的大小关系。
原始代码(含错误):
| Python | |
|---|---|
✅ 三处错误及修正:
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | def guess(target, guess_num) |
def guess(target, guess_num): |
函数定义缺少冒号 |
| begin2 | elseif guess_num < target: |
elif guess_num < target: |
Python用elif,不是elseif |
| begin3 | result = guess target, 50 |
result = guess(target, 50) |
函数调用必须用括号 |
完整正确代码
📖 解析:
- 错误1:函数定义末尾缺少冒号
:,这是Python语法的常见错误 - 错误2:Python中用
elif而不是elseif,这是从其他语言转Python的常见误区 - 错误3:函数调用必须用括号
(),不能省略
🔑 知识点:Python语法常见易错点
| 易错点 | 错误写法 | 正确写法 |
|---|---|---|
| 函数定义冒号 | def f() |
def f(): |
| else if | elseif |
elif |
| 函数调用 | f a, b |
f(a, b) |
| 条件判断 | if x = 1 |
if x == 1 |
📌 记忆要点
- 函数/类定义、if/elif/else、for/while 后都要加冒号
- Python 用
elif,不是else if或elseif - 函数调用必须使用括号
💻 五、程序设计题¶
第1题:密码强度检测¶
题目: 编写程序检测密码强度。
完整正确代码
运行示例:
| Text Only | |
|---|---|
📖 解析:
- 使用字典存储各项检测结果,便于统一管理和统计
any()函数判断是否存在满足条件的字符ch.isupper()判断是否大写,ch.islower()判断是否小写ch.isdigit()判断是否数字,not ch.isalnum()判断是否特殊字符sum(checks.values())统计满足条件的数量
🔑 知识点:字符串检测方法
| 方法 | 功能 | 示例 |
|---|---|---|
isupper() |
是否全大写 | 'A'.isupper() → True |
islower() |
是否全小写 | 'a'.islower() → True |
isdigit() |
是否全数字 | '1'.isdigit() → True |
isalpha() |
是否全字母 | 'a'.isalpha() → True |
isalnum() |
是否字母或数字 | 'a1'.isalnum() → True |
any() |
是否有任一为True | any([True, False]) → True |
📌 记忆要点
any()判断是否有元素为Truenot ch.isalnum()判断特殊字符- 用字典统一管理多项检测结果
第2题:简单计算器¶
题目: 编写程序实现简单的四则运算计算器。
完整正确代码
运行示例:
| Text Only | |
|---|---|
📖 解析:
- 使用
while True循环实现重复输入 - 输入
q时用break退出循环 - 除法运算需要检查除数是否为0
- 使用
float()转换输入,支持小数运算 - 将计算逻辑封装为函数,提高代码可读性
🔑 知识点:循环与异常处理
📌 记忆要点
while True+break实现循环输入- 除法必须检查除数是否为0
float()转换输入支持小数- 将计算逻辑封装为函数,主循环处理输入输出