Python 模拟考试 3 — 解析
📝 一、单选题(每题2分,共40分)¶
第1题¶
以下哪个是Python合法的变量名?()
| 选项 | 内容 |
|---|---|
| A | 3name |
| B | my-name |
| C | _score ✅ |
| D | class |
答案
C
📖 解析:
-
A 不合法:变量名不能以数字开头,
3name以数字3开头,语法错误 -
B 不合法:变量名只能包含字母、数字和下划线,
my-name含有连字符-(会被解析为减法运算) -
C 合法:下划线开头的变量名完全合法,常用于表示私有变量
-
D 不合法:
class是Python关键字,不能用作变量名
🔑 知识点:Python标识符规则
-
只能包含字母、数字、下划线
_ -
不能以数字开头
-
不能使用关键字(如
class、if、for、while等) -
区分大小写
📌 记忆要点
数字不能开头,连字符不能用,关键字不能当变量名,下划线开头合法
第2题¶
表达式 type("3.14") 的返回值是()。
| 选项 | 内容 |
|---|---|
| A | \<class 'int'> |
| B | \<class 'float'> |
| C | \<class 'str'> ✅ |
| D | \<class 'number'> |
答案
C
📖 解析:
-
"3.14"被引号包裹,是字符串(str)类型,不是数值 -
type()函数返回变量的实际类型,不看"内容像什么",看"定义是什么"
| Python | |
|---|---|
🔑 知识点:type() 函数与数据类型
| 字面量 | 类型 |
|---|---|
3 |
int |
3.14 |
float |
"3.14" |
str |
True |
bool |
[1, 2] |
list |
📌 记忆要点
引号包裹的都是字符串,不管内容是什么;Python没有 number 类型
第3题¶
下列运算符中,优先级最高的是()。
| 选项 | 内容 |
|---|---|
| A | + |
| B | * |
| C | ** ✅ |
| D | // |
答案
C
📖 解析:
-
四个运算符的优先级从高到低:
**>*、//>+ -
**(幂运算)优先级最高 -
*(乘法)和//(整除)优先级相同 -
+(加法)优先级最低
| Python | |
|---|---|
🔑 知识点:运算符优先级
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 1(最高) | ** |
幂运算 |
| 2 | +x、-x、~x |
正负号、按位取反 |
| 3 | *、/、//、% |
乘除、整除、取余 |
| 4 | +、- |
加法、减法 |
| 5 | ==、!=、>、<等 |
比较运算符 |
| 6 | not |
逻辑非 |
| 7 | and |
逻辑与 |
| 8(最低) | or |
逻辑或 |
📌 记忆要点
幂运算 ** 优先级最高,算术运算高于比较运算,比较运算高于逻辑运算
第4题¶
表达式 "hello" + "world" 的结果是()。
| 选项 | 内容 |
|---|---|
| A | 报错 |
| B | "helloworld" ✅ |
| C | "hello world" |
| D | 5 |
答案
B
📖 解析:
-
+运算符用于字符串时表示拼接,将两个字符串连接在一起 -
"hello" + "world"="helloworld"(注意:不会自动添加空格) -
如果想加空格:
"hello" + " " + "world"="hello world"
| Python | |
|---|---|
🔑 知识点:字符串运算
| 运算符 | 功能 | 示例 | 结果 |
|---|---|---|---|
+ |
拼接 | "a" + "b" |
"ab" |
* |
重复 | "a" * 3 |
"aaa" |
📌 记忆要点
字符串 + 是拼接(无空格),* 是重复;数字和字符串不能直接 +
第5题¶
已知 a = [1, 2, 3],执行 a.insert(1, 5) 后,a 的值为()。
| 选项 | 内容 |
|---|---|
| A | [5, 1, 2, 3] |
| B | [1, 5, 2, 3] ✅ |
| C | [1, 2, 5, 3] |
| D | [1, 2, 3, 5] |
答案
B
📖 解析:
-
insert(index, value)在指定索引处插入元素 -
a.insert(1, 5)表示在索引1的位置插入5 -
原列表:
[1, 2, 3],索引1的位置是元素2 -
插入后:
[1, 5, 2, 3](5插入到2的前面)
| Python | |
|---|---|
🔑 知识点:列表插入方法
| 方法 | 功能 | 示例 |
|---|---|---|
append(x) |
末尾添加 | [1,2].append(3) → [1,2,3] |
insert(i, x) |
索引i处插入 | [1,3].insert(1,2) → [1,2,3] |
extend(seq) |
末尾追加序列 | [1,2].extend([3,4]) → [1,2,3,4] |
📌 记忆要点
insert(索引, 值) 在指定位置前面插入,原有元素依次后移
第6题¶
表达式 True and not False or True 的结果是()。
| 选项 | 内容 |
|---|---|
| A | True ✅ |
| B | False |
| C | 报错 |
| D | 不确定 |
答案
A
📖 解析:
-
逻辑运算符优先级:
not>and>or -
计算步骤:
-
not False→True(先算 not) -
True and True→True(再算 and) -
True or True→True(最后算 or)
-
| Python | |
|---|---|
🔑 知识点:逻辑运算符优先级
| 优先级 | 运算符 | 含义 |
|---|---|---|
| 1(最高) | not |
非 |
| 2 | and |
与 |
| 3(最低) | or |
或 |
短路求值规则:
-
and:遇 False 则停止,返回该 False 值 -
or:遇 True 则停止,返回该 True 值
📌 记忆要点
优先级:not > and > or,和算术中的 负号 > 乘法 > 加法 类比
第7题¶
下列关于元组的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | 元组中的元素可以修改 |
| B | 元组使用方括号定义 |
| C | 元组是不可变序列 ✅ |
| D | 元组不能包含列表元素 |
答案
C
📖 解析:
-
A 错误:元组是不可变的,创建后不能修改元素
-
B 错误:元组使用圆括号
()定义,方括号[]是列表 -
C 正确:元组是不可变序列,这是元组最核心的特征
-
D 错误:元组可以包含列表等可变对象作为元素
| Python | |
|---|---|
🔑 知识点:元组特性
| 特性 | 元组 | 列表 |
|---|---|---|
| 符号 | () |
[] |
| 可变性 | 不可变 | 可变 |
| 速度 | 较快 | 较慢 |
| 可做字典键 | 可以 | 不可以 |
| 元素类型 | 可含可变对象 | 任意 |
📌 记忆要点
元组不可变、用圆括号、可含列表元素;列表可变、用方括号
第8题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 1 |
| B | 2 ✅ |
| C | 3 |
| D | 报错 |
答案
B
📖 解析:
-
d = {"name": "Tom", "age": 18}创建字典,有2个键值对 -
d["age"] = 20修改已有键"age"的值(从18改为20),不是新增键值对 -
修改值不改变字典的长度,
len(d)仍然是 2
| Python | |
|---|---|
🔑 知识点:字典操作对长度的影响
| 操作 | 对len的影响 |
|---|---|
修改已有键的值 d[key] = val |
不变 |
新增键值对 d[new_key] = val |
+1 |
删除键值对 del d[key] |
-1 |
📌 记忆要点
修改已有键的值不影响字典长度,只有增删键值对才改变长度
第9题¶
表达式 max([3, 1, 4, 1, 5, 9]) 的结果是()。
| 选项 | 内容 |
|---|---|
| A | 1 |
| B | 5 |
| C | 9 ✅ |
| D | [9] |
答案
C
📖 解析:
-
max()函数返回可迭代对象中的最大值 -
列表
[3, 1, 4, 1, 5, 9]中最大值是 9 -
返回值是数值本身,不是列表
| Python | |
|---|---|
🔑 知识点:max() 和 min() 函数
| 函数 | 功能 | 示例 |
|---|---|---|
max(iterable) |
返回最大值 | max([1,3,2]) → 3 |
min(iterable) |
返回最小值 | min([1,3,2]) → 1 |
max(a, b, c) |
多个参数取最大 | max(1, 3, 2) → 3 |
📌 记忆要点
max() 返回最大值(数值),不是列表;空序列调用会报错
第10题¶
下列关于Python注释的说法,错误的是()。
| 选项 | 内容 |
|---|---|
| A | 单行注释以#开头 |
| B | 多行注释使用三引号 |
| C | 注释不会被执行 |
| D | 注释只能写在代码行末尾 ✅ |
答案
D
📖 解析:
-
A 正确:单行注释以
#开头,#后面的内容不会被Python执行 -
B 正确:多行注释使用三引号
'''或"""包裹(严格说是多行字符串,但常用作注释) -
C 正确:注释是给程序员看的,Python解释器会忽略注释
-
D 错误:注释可以写在代码行的任意位置——单独一行、代码行末尾、多行注释,不限于行末
🔑 知识点:Python 注释
| 注释类型 | 符号 | 位置 |
|---|---|---|
| 单行注释 | # |
任意行 |
| 多行注释 | ''' 或 """ |
任意位置 |
| 行末注释 | # |
代码行末尾 |
📌 记忆要点
注释可以写在代码的任意位置,不限于行末
第11题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 3 ✅ |
| B | 4 |
| C | 报错 |
| D | 不确定 |
答案
A
📖 解析:
-
x.copy()创建列表的浅拷贝,y 是一个独立的新列表 -
y.append(4)只修改 y,不影响 x -
x 仍然是
[1, 2, 3],len(x)= 3
| Python | |
|---|---|
🔑 知识点:拷贝方式对比
| 方式 | 代码 | 是否独立 |
|---|---|---|
| 引用赋值 | y = x |
❌ 共享同一对象 |
| 浅拷贝 | y = x.copy() 或 y = x[:] |
✅ 顶层独立 |
| 深拷贝 | y = copy.deepcopy(x) |
✅ 完全独立 |
📌 记忆要点
copy() 创建浅拷贝(新列表),修改拷贝不影响原列表;直接赋值 y = x 是引用,修改会互相影响
第12题¶
表达式 int("101", 2) 的结果是()。
| 选项 | 内容 |
|---|---|
| A | 101 |
| B | 5 ✅ |
| C | 2 |
| D | 报错 |
答案
B
📖 解析:
-
int(string, base)将指定进制的字符串转换为十进制整数 -
int("101", 2)将二进制101转换为十进制 -
二进制
101= 1×2² + 0×2¹ + 1×2⁰ = 4 + 0 + 1 = 5
| Python | |
|---|---|
🔑 知识点:进制转换
| 函数 | 功能 | 示例 |
|---|---|---|
int(s, base) |
指定进制转十进制 | int("101", 2) → 5 |
bin(n) |
十进制转二进制 | bin(5) → '0b101' |
oct(n) |
十进制转八进制 | oct(8) → '0o10' |
hex(n) |
十进制转十六进制 | hex(255) → '0xff' |
📌 记忆要点
int("字符串", 进制) 将指定进制字符串转为十进制数
第13题¶
下列哪个方法可以删除字典中指定的键值对?()
| 选项 | 内容 |
|---|---|
| A | dict.remove() |
| B | dict.delete() |
| C | del dict[key] |
| D | dict.pop(key) |
答案
C
📖 解析:
-
A 错误:字典没有
remove()方法(那是列表的方法) -
B 错误:字典没有
delete()方法 -
C 正确:
del dict[key]可以删除指定键值对,这是最常用的删除方式 -
D 也可行:
dict.pop(key)也可以删除并返回对应值,但题目问"哪个方法可以删除",del是关键字语句,pop()是方法
注意:C 和 D 都能删除字典键值对。
del dict[key]是最基础的删除方式,dict.pop(key)是方法调用。本题选 C 是因为del是最常用、最直接的删除方式。
| Python | |
|---|---|
🔑 知识点:字典删除操作
| 方式 | 功能 | 返回值 |
|---|---|---|
del d[key] |
删除键值对 | 无 |
d.pop(key) |
删除并返回值 | 被删除的值 |
d.pop(key, default) |
删除并返回值,键不存在返回默认值 | 值或默认值 |
d.popitem() |
删除最后插入的键值对 | 键值对元组 |
d.clear() |
清空字典 | 无 |
📌 记忆要点
字典删除:del d[key] 最直接,pop() 可获取返回值,字典没有 remove() 和 delete()
第14题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | 2 |
| B | 3 ✅ |
| C | 4 |
| D | 0 |
答案
B
📖 解析:
-
s.lower()将字符串转为小写:"Hello World"→"hello world" -
.count("l")统计小写字母"l"出现的次数 -
"hello world"中"l"出现在索引 2、3、9,共 3 次
| Python | |
|---|---|
🔑 知识点:字符串方法链式调用
-
方法链:
s.lower().count("l")先调用lower()返回新字符串,再对结果调用count() -
lower()不修改原字符串(字符串不可变),返回新字符串 -
count()区分大小写
📌 记忆要点
字符串方法可以链式调用,lower() 后再 count() 统计小写字母
第15题¶
Python中,用于捕获异常的关键字是()。
| 选项 | 内容 |
|---|---|
| A | catch |
| B | except ✅ |
| C | handle |
| D | error |
答案
B
📖 解析:
-
A 错误:
catch是 Java/JavaScript 等语言的异常捕获关键字,Python 中不使用 -
B 正确:Python 使用
except关键字捕获异常 -
C 错误:
handle不是 Python 关键字 -
D 错误:
error不是 Python 异常捕获关键字
| Python | |
|---|---|
🔑 知识点:Python 异常处理结构
| 关键字 | 作用 |
|---|---|
try |
尝试执行的代码块 |
except |
捕获异常 |
else |
无异常时执行 |
finally |
无论是否异常都执行 |
raise |
手动抛出异常 |
📌 记忆要点
Python 用 except 捕获异常,不是 catch(Java/JS 用 catch)
第16题¶
下列程序的输出结果是()。
| 选项 | 内容 |
|---|---|
| A | 报错 |
| B | [1, 2, 3, 4] |
| C | 10 ✅ |
| D | (1, 2, 3, 4) |
答案
C
📖 解析:
-
*args收集所有位置参数为元组 -
func(1, 2, 3, 4)→args = (1, 2, 3, 4) -
sum((1, 2, 3, 4))= 1 + 2 + 3 + 4 = 10
| Python | |
|---|---|
🔑 知识点:可变参数 args 和 *kwargs
| 语法 | 功能 | 收集类型 |
|---|---|---|
*args |
收集多余位置参数 | 元组 |
**kwargs |
收集多余关键字参数 | 字典 |
📌 记忆要点
*args 收集位置参数为元组,**kwargs 收集关键字参数为字典
第17题¶
关于字符串格式化,下列说法错误的是()。
| 选项 | 内容 |
|---|---|
| A | "Hello %s" % "World" 使用%格式化 |
| B | "Hello {}".format("World") 使用format方法 |
| C | f字符串只能在Python 3.6及以上使用 |
| D | 三种格式化方式中,%格式化功能最强 ✅ |
答案
D
📖 解析:
-
A 正确:
%s、%d、%f等是旧式格式化,语法:"模板" % 值 -
B 正确:
str.format()是 Python 2.6+ 引入的格式化方法 -
C 正确:f-string(f字符串)是 Python 3.6 引入的特性
-
D 错误:三种格式化方式中,f-string 功能最强、最推荐,
%格式化是最古老、功能最弱的方式
| Python | |
|---|---|
🔑 知识点:字符串格式化方式对比
| 方式 | 版本 | 推荐度 | 示例 |
|---|---|---|---|
% 格式化 |
所有版本 | ⭐ | "%s %d" % ("hi", 3) |
format() |
2.6+ | ⭐⭐ | "{} {}".format("hi", 3) |
| f-string | 3.6+ | ⭐⭐⭐ | f"{name} {age}" |
📌 记忆要点
f-string 功能最强最推荐,% 格式化最老最弱;f-string 需要 Python 3.6+
第18题¶
下列关于列表推导式的说法,正确的是()。
| 选项 | 内容 |
|---|---|
| A | 列表推导式只能生成列表 |
| B | 列表推导式不能包含条件判断 |
| C | [x**2 for x in range(5)] 生成 [0, 1, 4, 9, 16] ✅ |
| D | 列表推导式执行效率比for循环低 |
答案
C
📖 解析:
-
A 错误:推导式不仅可以生成列表,还有字典推导式
{k:v for ...}和集合推导式{x for ...} -
B 错误:列表推导式可以包含
if条件,如[x for x in range(10) if x % 2 == 0] -
C 正确:
range(5)生成 0,1,2,3,4,各自平方得 0,1,4,9,16 -
D 错误:列表推导式通常比等价的 for 循环更快(底层用 C 实现)
| Python | |
|---|---|
🔑 知识点:推导式
| 类型 | 语法 | 示例 |
|---|---|---|
| 列表推导式 | [expr for x in iter] |
[x**2 for x in range(5)] |
| 带条件 | [expr for x in iter if cond] |
[x for x in range(10) if x%2==0] |
| 字典推导式 | {k:v for x in iter} |
{x:x**2 for x in range(5)} |
| 集合推导式 | {expr for x in iter} |
{x%3 for x in range(10)} |
📌 记忆要点
推导式可生成列表/字典/集合,可含条件判断,通常比 for 循环更高效
第19题¶
以下代码的运行结果是()。
| 选项 | 内容 |
|---|---|
| A | {3} |
| B | {1, 2, 4, 5} |
| C | {1, 2, 3, 4, 5} ✅ |
| D | 报错 |
答案
C
📖 解析:
-
|是集合的并集运算符 -
a | b={1, 2, 3} | {3, 4, 5}={1, 2, 3, 4, 5} -
重复元素 3 只出现一次(集合自动去重)
| 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} |
📌 记忆要点
| 并集、& 交集、- 差集、^ 对称差集
第20题¶
下列关于Python类的说法,错误的是()。
| 选项 | 内容 |
|---|---|
| A | __init__ 是构造方法 |
| B | self 代表实例对象本身 |
| C | 类属性被所有实例共享 |
| D | Python类不支持继承 ✅ |
答案
D
📖 解析:
-
A 正确:
__init__是初始化方法(构造方法),在创建对象时自动调用 -
B 正确:
self是实例对象的引用,类似于其他语言的this -
C 正确:类属性定义在类中方法外,被所有实例共享
-
D 错误:Python 完全支持继承,包括单继承和多继承
| Python | |
|---|---|
🔑 知识点:Python 类的继承
| 特性 | 说明 |
|---|---|
| 单继承 | class B(A): |
| 多继承 | class C(A, B): |
| 重写方法 | 子类定义同名方法覆盖父类 |
super() |
调用父类方法 |
isinstance() |
判断实例关系 |
📌 记忆要点
Python 支持单继承和多继承,class 子类(父类): 定义继承关系
✅ 二、判断题(每题1分,共14分)¶
第1题¶
Python中,整数和浮点数相乘,结果一定是浮点数。
答案
✅ 正确
解析: 整数和浮点数运算时,整数会自动提升为浮点数,结果为浮点数。
📖 拓展
Python 的隐式类型转换规则:int 与 float 运算 → float;int 与 complex 运算 → complex。
记忆要点: 整数与浮点数运算,结果一定是浮点数
第2题¶
print(1, 2, 3, sep="-") 的输出是 1-2-3。
答案
✅ 正确
解析: sep 参数指定多个输出值之间的分隔符,默认是空格。sep="-" 将分隔符设为 -。
| Python | |
|---|---|
📖 拓展
print() 的 end 参数控制结尾字符,默认是换行符 \n。
记忆要点: sep 控制分隔符,end 控制结尾字符
第3题¶
在Python中,None 等价于 0。
答案
❌ 错误
解析: None 是 Python 中的空值对象,表示"没有值",与 0 完全不同。
| Python | |
|---|---|
None表示"不存在"或"未赋值"0是整数零,是一个有效的数值
📖 拓展
None 常用于函数没有返回值时的默认返回,或表示变量"未设置"的状态。
记忆要点: None 是空值,不是 0;None 只与 None 相等,判断用 is None
第4题¶
字典的键值对是有序的(Python 3.7+)。
答案
✅ 正确
解析: Python 3.7 开始,字典保证插入顺序,即键值对按照插入的顺序排列。Python 3.6 中已实现但未作为语言规范保证。
| Python | |
|---|---|
📖 拓展
如果需要有序字典且兼容旧版本,可使用 collections.OrderedDict。
记忆要点: Python 3.7+ 字典有序(插入顺序),3.7 之前不保证
第5题¶
while 循环的条件表达式可以是任意类型。
答案
✅ 正确
解析: while 的条件表达式不限于布尔值,Python 会自动将任意类型的值转换为布尔值进行判断。
| Python | |
|---|---|
记忆要点: while 条件可以是任意类型,Python 自动进行布尔转换
第6题¶
使用 pop() 方法删除列表元素时,必须指定索引。
答案
❌ 错误
解析: pop() 不指定索引时,默认删除并返回列表的最后一个元素。
| Python | |
|---|---|
| 用法 | 功能 |
|---|---|
lst.pop() |
删除并返回最后一个元素 |
lst.pop(i) |
删除并返回索引i的元素 |
记忆要点: pop() 不传参数时默认删除最后一个元素
第7题¶
字符串 s = "" 的布尔值是 False。
答案
✅ 正确
解析: 空字符串 "" 是 Python 中的假值(Falsy),布尔值为 False。
| Python | |
|---|---|
📖 拓展
所有空容器都是 Falsy:""、[]、()、{}、set()、range(0)。所有非空容器都是 Truthy。
记忆要点: 空字符串 "" 是 Falsy,非空字符串(包括 " "、"0")都是 Truthy
第8题¶
在函数中定义的变量,在函数外部也可以访问。
答案
❌ 错误
解析: 函数内部定义的变量是局部变量,只在函数内部有效,函数外部无法访问。
| Python | |
|---|---|
📖 拓展
LEGB 规则:Python 变量查找顺序为 Local → Enclosing → Global → Built-in。
记忆要点: 函数内定义的变量是局部变量,外部无法访问;修改全局变量需要 global 声明
第9题¶
isinstance(3, int) 的返回值是 True。
答案
✅ 正确
解析: isinstance(obj, class) 检查对象是否是指定类的实例。3 是 int 类型的实例,所以返回 True。
| Python | |
|---|---|
📖 拓展
isinstance() 支持继承检查,type() 不支持。isinstance(True, int) 返回 True,因为 bool 是 int 的子类。
记忆要点: isinstance() 检查实例关系,考虑继承;type() 严格比较类型
第10题¶
sorted() 函数会修改原列表的顺序。
答案
❌ 错误
解析: sorted() 返回一个新的排序列表,不修改原列表。而 list.sort() 是原地排序,会修改原列表。
| Python | |
|---|---|
| 方法 | 是否修改原列表 | 返回值 |
|---|---|---|
sorted(lst) |
否 | 新排序列表 |
lst.sort() |
是 | None |
记忆要点: sorted() 返回新列表不改原列表,sort() 原地排序改原列表
第11题¶
Python中,pass 语句在语法上必须有语句但逻辑上暂时不需要操作时使用。
答案
✅ 正确
解析: pass 是空操作占位语句,用在语法上需要语句但逻辑上暂不需要操作的地方。
| Python | |
|---|---|
📖 拓展
pass 与注释的区别:注释会被解释器忽略,而 pass 是一个合法的语句(什么也不做)。在语法要求有语句的地方(如函数体、类体、if体)不能只有注释,但可以用 pass。
记忆要点: pass 是占位符,语法需要语句但暂时无操作时使用
第12题¶
os 模块是Python的第三方库,需要用pip安装。
答案
❌ 错误
解析: os 模块是 Python 的标准库,随 Python 一起安装,无需用 pip 额外安装。直接 import os 即可使用。
| Python | |
|---|---|
标准库 vs 第三方库:
| 类型 | 示例 | 安装方式 |
|---|---|---|
| 标准库 | os、sys、math、json、random |
随Python安装 |
| 第三方库 | numpy、pandas、requests |
pip install |
记忆要点: os 是标准库,不需要 pip 安装;第三方库才需要 pip
第13题¶
for i in "Python": 可以遍历字符串中的每个字符。
答案
✅ 正确
解析: 字符串是可迭代对象,for 循环可以逐个遍历字符串中的字符。
📖 拓展
所有可迭代对象都可以用 for 遍历:字符串、列表、元组、字典、集合、range()、文件对象等。
记忆要点: 字符串是可迭代对象,for 循环逐字符遍历
第14题¶
列表切片操作返回的是原列表的一个副本,修改切片结果不会影响原列表。
答案
✅ 正确
解析: 切片操作创建新列表(浅拷贝),修改切片结果不影响原列表。
| Python | |
|---|---|
📖 拓展
切片是浅拷贝,嵌套的可变对象仍然是引用。如需完全独立的副本,使用 copy.deepcopy()。
记忆要点: 切片创建新列表(浅拷贝),修改顶层元素不影响原列表,但嵌套可变对象仍共享引用
✏️ 三、程序填空题(每题10分,共30分)¶
第1题:求列表最大值¶
题目: 找出列表中的最大值并输出。
| Python | |
|---|---|
✅ 填空答案
-
begin1:
lst[0] -
begin2:
max_val = num
完整正确代码
运行结果: 最大值为: 89
🔑 知识点:求最大值的遍历算法
-
初始值设为列表第一个元素(不能用0,因为列表可能全为负数)
-
遍历每个元素,如果比当前最大值大则更新
-
时间复杂度 O(n)
📖 拓展
📌 记忆要点
-
求最大值:初始值设为第一个元素,遍历比较更新
-
不能将初始值设为0(列表可能全为负数)
第2题:字符串反转函数¶
题目: 编写函数实现字符串反转,并在主程序中调用。
| Python | |
|---|---|
✅ 填空答案
-
begin1:
return s[::-1] -
begin2:
reverse_string(text)
完整正确代码
运行示例: 输入 Hello → 输出 反转后: olleH
🔑 知识点:字符串反转与函数调用
-
s[::-1]切片反转:步长 -1 表示从后向前取 -
函数调用:
函数名(参数)获取返回值
📖 拓展
📌 记忆要点
-
s[::-1]最简洁的字符串反转方式 -
函数定义
def,调用函数名(参数),返回值用变量接收
第3题:字典统计¶
题目: 统计字符串中每个字符出现的次数,存入字典并输出。
| Python | |
|---|---|
✅ 填空答案
-
begin1:
if ch not in count_dict: -
begin2:
count_dict[ch] += 1
完整正确代码
运行结果: {'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
🔑 知识点:字典统计模式
-
ch not in count_dict判断键是否不存在 -
首次出现初始化为1,后续累加
-
这是经典的"计数器"模式
📖 拓展
📌 记忆要点
-
字典统计:
not in判断首次出现,get(key, 0)更简洁 -
Counter是最方便的计数工具
🔧 四、程序改错题(每题10分,共40分)¶
第1题:素数判断¶
题目: 判断一个数是否为素数(质数)。
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin2 | if n / i == 0: |
if n % i == 0: |
/ 是除法,% 是取余;判断整除应用取余 |
| begin3 | else |
else: |
else 后缺少冒号 |
关于 begin1:
range(2, n)在功能上是正确的(可以正确判断素数),但效率不高。可优化为range(2, int(n**0.5) + 1),只需检查到 √n 即可。此优化不影响正确性,仅提升性能。
完整正确代码
运行示例:
🔑 知识点:取余运算、分支语法
-
/是除法(返回浮点数),%是取余(判断整除) -
n % i == 0表示 n 能被 i 整除 -
else:冒号不能忘
📖 拓展
📌 记忆要点
-
判断整除用
%(取余),不是/(除法) -
if/elif/else/for/while语句末尾必须加冒号: -
素数判断可优化到 √n
第2题:列表元素查找¶
题目: 在列表中查找指定元素,返回其索引,找不到返回-1。
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin2 | else: return -1(在循环体内) |
删除 else 分支,将 return -1 移至循环后 |
else 在循环内部导致只检查第一个元素就返回-1 |
| begin3 | find_element(nums, "30") |
find_element(nums, 30) |
列表元素是整数,"30" 是字符串,类型不匹配 |
关于 begin1:
for i in range(len(lst)):是正确的索引遍历方式,无需修改。
完整正确代码
运行结果: 索引为: 2
📖 解析:
-
错误1(begin2):原代码中
else: return -1在if内部,导致只要第一个元素不匹配就立即返回-1,无法继续检查后续元素。正确的逻辑是只在循环全部结束后才返回-1。 -
错误2(begin3):列表
nums中的元素是整数10, 20, 30...,但传入的是字符串"30"。30 == "30"为False,导致永远找不到。
🔑 知识点:线性查找、类型匹配
-
查找逻辑:找到即返回,未找到在循环结束后返回-1
-
Python 中
==比较时类型必须匹配:30 != "30" -
for-else结构:else在循环未被 break 时执行
📖 拓展
📌 记忆要点
-
查找函数中,"未找到"的返回应在循环之后,不是在循环内部的 else 中
-
注意整数和字符串的类型匹配,
30 != "30"
第3题:矩阵转置¶
题目: 将3×3矩阵转置(行变列,列变行)。
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | range(4) |
range(3) |
3×3矩阵只有3列,外层循环应为3次,4会导致索引越界 |
关于 begin2:
matrix[j][i]是正确的转置操作——取第j行第i列的元素放到新矩阵的第i行第j列。关于 begin3: 遍历打印结果矩阵的方式正确,无需修改。
完整正确代码
运行结果:
📖 解析:
-
错误(begin1):
range(4)会遍历 i = 0,1,2,3,当 i=3 时,matrix[j][3]索引越界(每行只有3个元素,索引0~2),应改为range(3) -
转置原理:原矩阵
matrix[j][i](第j行第i列)→ 新矩阵的第i行第j列 -
原矩阵:行=[1,2,3], [4,5,6], [7,8,9]
-
转置后:行=[1,4,7], [2,5,8], [3,6,9]
🔑 知识点:矩阵转置
-
转置:行变列,列变行
-
matrix[j][i]取原矩阵第j行第i列,放入新矩阵第i行 -
循环范围应与矩阵维度匹配
📖 拓展
📌 记忆要点
-
矩阵转置:交换行列索引
matrix[j][i] -
循环范围必须与矩阵维度匹配,3×3矩阵用
range(3)
第4题:读取文件统计行数¶
题目: 读取文件内容并统计文件行数。
✅ 错误修正
| 错误位置 | 原代码 | 修正后 | 错误原因 |
|---|---|---|---|
| begin1 | open(filename, "w") |
open(filename, "r") |
"w" 是写入模式(会清空文件),读取文件应用 "r" |
| begin2 | return count(缺少关闭文件) |
f.close() + return count |
文件使用后应关闭,否则资源泄露 |
| begin3 | "行数:" + total |
"行数:" + str(total) 或 print("行数:", total) |
total 是整数,不能直接用 + 拼接字符串 |
完整正确代码
📖 解析:
-
错误1(begin1):
"w"模式会清空文件内容再打开,读取文件应使用"r"模式 -
错误2(begin2):打开文件后应调用
f.close()关闭文件,否则可能导致资源泄露 -
错误3(begin3):
total是int类型,不能与字符串用+拼接,需用str()转换
🔑 知识点:文件操作、类型转换
| 模式 | 含义 | 文件存在时 | 文件不存在时 |
|---|---|---|---|
"r" |
只读 | 读取 | ❌报错 |
"w" |
写入 | 清空 | 创建 |
"a" |
追加 | 末尾追加 | 创建 |
-
文件操作后应调用
close()关闭文件 -
字符串与数字拼接需用
str()转换,或用逗号分隔,或用 f-string
📖 拓展
| Python | |
|---|---|
📌 记忆要点
-
读文件用
"r",写文件用"w"(会清空),追加用"a" -
文件操作后必须关闭,推荐用
with语句自动管理 -
整数与字符串拼接需
str()转换
💻 五、程序设计题(每题13分,共26分)¶
第1题:打印菱形星号¶
题目: 编写程序,打印如下菱形星号图案(n=5):
要求:程序能根据输入的奇数n打印对应大小的菱形。
方法1:上下分开打印(推荐,最直观)
方法2:利用对称性(一行循环)
方法3:用字符串格式化
运行示例(n=5):
📖 解析:
-
菱形由上半部分(递增)和下半部分(递减)组成
-
第 i 行(从0开始):空格数 = half - i,星号数 = 2*i + 1
-
n // 2是菱形的半高度 -
利用
" " * n和"*" * n重复字符串简化输出
🔑 知识点
-
字符串乘法:
" " * n生成 n 个空格 -
str.center(width)居中对齐 -
abs()取绝对值,利用对称性简化循环
📖 拓展
| Python | |
|---|---|
📌 记忆要点
-
菱形图案:上三角递增 + 下三角递减
-
空格数 = half - i,星号数 = 2*i + 1
-
字符串乘法
"*" * n简化重复输出
第2题:通讯录管理¶
题目: 编写程序实现简单的通讯录管理,功能如下:
- 添加联系人(姓名和电话)
- 删除联系人(按姓名)
- 查询联系人(按姓名,显示电话)
- 显示所有联系人
- 输入0退出程序
示例交互:
| Text Only | |
|---|---|
参考答案
📖 解析:
-
使用字典
contacts = {}存储姓名-电话对,姓名为键(唯一),电话为值 -
while True+break实现菜单循环 -
每个功能用
if-elif分支处理 -
添加:
contacts[name] = phone(键存在则更新,不存在则新增) -
删除:
del contacts[name](先检查键是否存在) -
查询:
contacts[name]或contacts.get(name) -
显示:
contacts.items()遍历所有键值对
🔑 知识点
| 操作 | 代码 | 说明 |
|---|---|---|
| 添加/更新 | d[key] = value |
键存在则更新,不存在则新增 |
| 删除 | del d[key] 或 d.pop(key) |
删除前应检查键是否存在 |
| 查询 | d[key] 或 d.get(key) |
get() 键不存在时不报错 |
| 遍历 | for k, v in d.items() |
同时获取键和值 |
| 判断存在 | key in d |
检查键是否在字典中 |
📖 拓展
📌 记忆要点
-
字典是通讯录的理想数据结构(键唯一,查找快)
-
while True+break实现交互循环 -
操作前先检查键是否存在,避免 KeyError
-
功能拆分为函数使代码更清晰
知识点覆盖总结
| 题型 | 知识点 |
|---|---|
| 单选1-5 | 变量命名规则、type()函数、运算符优先级、字符串拼接、insert()方法 |
| 单选6-10 | 逻辑运算优先级、元组特性、字典操作、max()函数、注释规则 |
| 单选11-15 | 浅拷贝、进制转换、字典删除、字符串方法链、异常处理 |
| 单选16-20 | 可变参数*args、字符串格式化、列表推导式、集合运算、类继承 |
| 判断1-7 | int*float结果、sep参数、None与0、字典有序、while条件、pop()默认、空字符串布尔值 |
| 判断8-14 | 局部变量作用域、isinstance()、sorted()、pass语句、os模块、字符串遍历、切片拷贝 |
| 填空1-3 | 求最大值算法、字符串反转、字典统计计数 |
| 改错1-4 | 取余vs除法、else语法、查找逻辑、文件操作模式、类型拼接 |
| 编程1-2 | 菱形图案打印、通讯录字典管理 |