Python 学习笔记(第一期与第二期)——基础语法——核心知识点自测与详解
Python 学习笔记(第一期与第二期)——基础语法——核心知识点自测与详解
本自测解析针对 Python 学习笔记系列第一期(基础语法·上篇:环境搭建与数据基石)和第二期(基础语法·下篇:运算符全解与实战演练)的核心内容。共 10 题,每题包含题目回顾、考查知识点、详细解答与分析,帮助读者巩固 Python 基础语法与运算符的核心技能。
文章索引:
[Python 学习笔记(第一期)——基础语法(上篇):环境搭建与数据基石
Python 学习笔记(第二期)——基础语法(下篇):运算符全解与实战演练更多自我检测系列欢迎浏览:每日知识点小问答
我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
第一期与第二期:基础语法(第 1-5 题)
题目一:Python 环境安装与 pip 镜像源配置
题目:Python 安装完成后,如何在命令行验证安装是否成功?如果在执行pip install时出现下载超时错误,原因是什么?请写出永久配置国内镜像源(以清华源为例)的具体步骤。
考查知识点
- Python 多平台安装与验证 —— 第一期 §1
- pip 镜像源配置 —— 第一期 §2.2
详细解答
验证安装是否成功:
在命令提示符(CMD)或终端中执行以下命令:
python--versionpip--version如果配置正确,会分别输出 Python 版本号和 pip 版本号。例如:
Python 3.12.0 pip 23.2.1 from C:\Python312\Lib\site-packages\pip (python 3.12)pip 安装超时的原因:
- 默认连接的是国外官方源(
pypi.org),国内网络访问速度慢,容易超时 - 根本解决方法是永久配置国内镜像源
永久配置清华源(Windows):
| 步骤 | 操作 |
|---|---|
| 1. 定位配置文件目录 | 打开文件资源管理器,在地址栏输入%APPDATA%并回车,进入当前用户的 AppData/Roaming 目录 |
| 2. 创建 pip 文件夹 | 在该目录下新建一个名为pip的文件夹 |
| 3. 创建 pip.ini 文件 | 进入pip文件夹,新建一个名为pip.ini的文本文档(注意扩展名必须是.ini) |
| 4. 填入配置内容 | 用记事本打开pip.ini,复制以下内容并保存 |
[global] timeout = 40 index-url = https://pypi.tuna.tsinghua.edu.cn/simple extra-index-url = https://mirrors.aliyun.com/pypi/simple/ https://pypi.douban.com/simple/ [install] trusted-host = pypi.tuna.tsinghua.edu.cn mirrors.aliyun.com pypi.douban.commacOS / Linux 用户:在家目录(~)下创建隐藏文件夹.pip,然后在其中创建pip.conf文件,填入相同内容。
配置完成后,再次执行pip install <包名>即可体验到飞升的下载速度。
题目二:Python 代码格式规范——缩进与注释
题目:Python 中推荐的缩进方式是什么?为什么不能混用 Tab 和空格?单行注释和多行注释(文档字符串)分别如何编写?请指出以下代码中的格式错误并修正。
ifTrue:print("缩进错误")else:print("正确缩进")考查知识点
- 代码缩进规则 —— 第一期 §3.2
- 注释规范 —— 第一期 §3.1
详细解答
缩进规范:
- Python 官方推荐使用4 个空格作为一级缩进
- 主流 IDE 均支持按 Tab 键自动转换为 4 个空格
- 严禁混用 Tab 和空格,否则会报错:
IndentationError: unindent does not match any outer indentation level注释规范:
| 注释类型 | 语法 | 说明 |
|---|---|---|
| 单行注释 | # 注释内容 | #和内容之间建议空一格;行尾注释与代码间至少空两格 |
| 多行注释(文档字符串) | """注释内容""" | 使用三对双引号或单引号包裹,通常放在函数/类开头 |
错误代码修正:
# ❌ 错误:if 语句下面的代码块没有缩进ifTrue:print("缩进错误")# ✅ 修正ifTrue:print("缩进正确")# 4 个空格缩进else:print("也正确")# 4 个空格缩进题目三:变量本质与动态类型
题目:请解释 Python 中“变量是贴在值上的便利贴”这一比喻的含义。Python 是静态类型还是动态类型语言?以下代码执行后,num的类型分别是什么?
num=100print(type(num))num="Hello"print(type(num))num=3.14print(type(num))考查知识点
- 变量本质与内存模型 —— 第一期 §5
- 动态类型特性 —— 第一期 §5
详细解答
“便利贴”比喻的含义:
- 变量本身不存储数据,而是指向内存中存储数据的位置
- 可以将变量理解为贴在数据上的“标签”或“便利贴”
- 当执行
num = 100时,系统在内存中创建整数 100,然后将标签num贴在该内存空间上 - 执行
num = "Hello"时,将标签num从整数 100 上揭下来,贴到字符串"Hello"上 - 原来的 100 如果没有其他标签引用,会被垃圾回收机制清理
动态类型:
Python 是动态类型语言。变量本身没有类型,变量所指向的数据才有类型。同一变量可以在不同时刻指向不同类型的值。
代码类型追踪:
num=100print(type(num))# <class 'int'>num="Hello"print(type(num))# <class 'str'>num=3.14print(type(num))# <class 'float'>题目四:六大组合数据类型对比
题目:请从“是否可变”、“是否有序”、“元素是否唯一”三个维度,对比list、tuple、set、dict、str五种数据类型,并各举一个创建示例。为什么字典的键不能使用列表类型?
考查知识点
- 六大组合数据类型 —— 第一期 §6
- 可变与不可变类型 —— 第一期 §6
详细解答
五种数据类型对比表:
| 类型 | 是否可变 | 是否有序 | 元素是否唯一 | 创建示例 |
|---|---|---|---|---|
| list(列表) | ✅ 可变 | ✅ 有序 | ❌ 允许重复 | [1, 2, "hello"] |
| tuple(元组) | ❌ 不可变 | ✅ 有序 | ❌ 允许重复 | (1, 2, "hello") |
| str(字符串) | ❌ 不可变 | ✅ 有序 | ❌ 允许重复 | "Python" |
| set(集合) | ✅ 可变 | ❌ 无序 | ✅必须唯一 | {1, 2, 3} |
| dict(字典) | ✅ 可变 | ❌ 无序(Py3.7+ 按插入顺序) | 键必须唯一 | {"name": "Tom"} |
为什么字典的键不能使用列表:
- 字典的键必须是不可变类型(hashable)
- 列表是可变类型(可以增删改元素),其哈希值会变化
- 如果用列表作为键,一旦列表内容变化,字典将无法正确定位该键值对
- 因此,
{[1, 2]: "value"}会抛出TypeError
白话理解:
- 列表:购物车,可随意增减,有顺序
- 元组:密封档案盒,放入后不可更改
- 集合:自动去重的收纳盒,无序摆放
- 字典:新华字典,通过“键”快速查找对应的“值”
题目五:数字类型与进制转换
题目:Python 中整型支持哪四种进制表示?请写出将十进制数255转换为二进制、八进制、十六进制的方法。浮点数转整数时会发生什么?以下代码的输出是什么?
print(int(3.99))print(float(10))print(bool(0))print(bool([]))考查知识点
- 整型的四种进制 —— 第一期 §7.1
- 进制转换函数 —— 第一期 §7.1
- 数字类型转换 —— 第一期 §7.5
- 布尔类型与真值测试 —— 第一期 §7.4
详细解答
四种进制表示:
| 进制 | 前缀 | 示例 | 对应十进制 |
|---|---|---|---|
| 二进制(Binary) | 0b或0B | 0b11111111 | 255 |
| 八进制(Octal) | 0o或0O | 0o377 | 255 |
| 十进制(Decimal) | 无 | 255 | 255 |
| 十六进制(Hex) | 0x或0X | 0xFF | 255 |
进制转换:
num=255print(bin(num))# 0b11111111print(oct(num))# 0o377print(hex(num))# 0xff浮点数转整数:
- 使用
int()将浮点数转换为整数时,直接截断小数部分,不进行四舍五入 int(3.99)→3
布尔类型与真值测试:
bool是int的子类,True等价于 1,False等价于 0- 以下情况会被视为
False:None、False、任何数字类型的 0、任何空序列(''、[]、())、任何空字典({})
代码输出:
print(int(3.99))# 3print(float(10))# 10.0print(bool(0))# Falseprint(bool([]))# False第一期与第二期:基础语法(第 6-10 题)
题目六:算术运算符与类型提升
题目:Python 中/和//运算符的区别是什么?10 / 3和10 // 3的输出分别是什么?混合运算时,Python 的类型提升规则是什么?以下代码的输出是什么?
print(10/2.0)print(10-(3+5j))考查知识点
- 算术运算符 —— 第二期 §1
- 混合运算类型提升 —— 第二期 §1
详细解答
/与//的区别:
| 运算符 | 名称 | 示例 | 结果 | 说明 |
|---|---|---|---|---|
/ | 真除法 | 10 / 3 | 3.333... | 结果总是浮点数 |
// | 整除(地板除) | 10 // 3 | 3 | 向下取整,返回整数部分 |
混合运算的类型提升规则:
当不同类型的数字混合运算时,Python 会自动向“更高精度”的类型提升:
- 整型 + 浮点型 → 浮点型
- 整型 + 复数 → 复数
- 浮点型 + 复数 → 复数
代码输出:
print(10/2.0)# 5.0(整型 10 提升为浮点型)print(10-(3+5j))# (7 - 5j)(整型 10 提升为复数)题目七:赋值运算符(含海象运算符)
题目:以下代码的执行结果是什么?请解释海象运算符:=的作用,并与传统写法对比。
# 代码段一x=y=z=1a,b=1,2print(x,y,z,a,b)# 代码段二num=5num+=2num*=3print(num)# 代码段三(海象运算符)while(data:=input("请输入内容:"))=="":print("内容不能为空!")考查知识点
- 链式赋值与平行赋值 —— 第二期 §2.1
- 复合赋值运算符 —— 第二期 §2.2
- 海象运算符
:=—— 第二期 §2.3
详细解答
代码段一:链式赋值与平行赋值
x = y = z = 1:三个变量同时赋值为 1(链式赋值)a, b = 1, 2:a 赋值为 1,b 赋值为 2(平行赋值/元组解包)- 输出:
1 1 1 1 2
代码段二:复合赋值
num=5num+=2# num = 5 + 2 = 7num*=3# num = 7 * 3 = 21print(num)# 21代码段三:海象运算符:=
海象运算符允许在表达式内部为变量赋值,因形似海象的眼睛和长牙而得名。
传统写法(需先赋值再判断):
data=input("请输入内容:")whilelen(data)==0:print("内容不能为空!")data=input("请输入内容:")海象运算符写法(在 while 条件中同时完成赋值和判断):
while(data:=input("请输入内容:"))=="":print("内容不能为空!")运行效果:如果用户直接按回车(输入空字符串),会提示“内容不能为空!”并再次询问;如果输入了有效内容,则退出循环。
⚠️ 注意:海象运算符优先级较低,与比较运算符混用时必须加括号
()。
题目八:比较运算符、逻辑运算符与短路求值
题目:请写出以下代码的输出,并解释逻辑运算符的短路求值原则。
a,b,c=10,5,0print(a>b)# ①print(a<b)# ②print(5<=a<=15)# ③print(canda/c)# ④print(a>borc>a)# ⑤print(not(a==10))# ⑥考查知识点
- 比较运算符与链式比较 —— 第二期 §3
- 逻辑运算符与短路求值 —— 第二期 §4
详细解答
代码输出:
a,b,c=10,5,0print(a>b)# True(10 > 5)print(a<b)# False(10 < 5)print(5<=a<=15)# True(链式比较:5 <= 10 <= 15)print(canda/c)# 0(c=0 为假,短路,不执行 a/c,避免除零错误)print(a>borc>a)# True(a > b 为 True,or 短路,不再计算 c > a)print(not(a==10))# False(a == 10 为 True,取反为 False)短路求值原则:
| 运算符 | 原则 | 返回规则 |
|---|---|---|
and | 如果左边为假,不再计算右边 | 返回第一个假值,或最后一个真值 |
or | 如果左边为真,不再计算右边 | 返回第一个真值,或最后一个假值 |
代码④详解:c and a / c中,c = 0为假,and直接返回0,不执行a / c,因此避免了ZeroDivisionError。
代码⑤详解:a > b为True,or直接返回True,不执行c > a。
题目九:成员运算符与位运算
题目:请写出以下代码的输出。位运算~9的结果为什么是-10?请简述按位取反的计算过程。
print('o'in'Python')# ①print(3in[1,2,3])# ②print("name"in{"name":"Tom","age":18})# ③print(9&3)# ④print(9|3)# ⑤print(9^3)# ⑥print(~9)# ⑦print(9<<1)# ⑧print(9>>1)# ⑨考查知识点
- 成员运算符
in/not in—— 第二期 §5 - 位运算符 —— 第二期 §6
详细解答
代码输出:
print('o'in'Python')# True(字符串中查找字符)print(3in[1,2,3])# True(列表中查找元素)print("name"in{"name":"Tom","age":18})# True(字典中判断的是键,不是值)位运算结果:
print(9&3)# 1 (00001001 & 00000011 = 00000001)print(9|3)# 11 (00001001 | 00000011 = 00001011)print(9^3)# 10 (00001001 ^ 00000011 = 00001010)print(~9)# -10print(9<<1)# 18 (左移一位 = 9 * 2)print(9>>1)# 4 (右移一位 = 9 // 2)按位取反~9 = -10的计算过程:
- 确定补码:9 是正数,正数的原码 = 反码 = 补码,所以 9 的补码为
00001001 - 对补码取反:得到新的补码
11110110 - 将补码转换为原码:
- 符号位(最高位)为 1,表示负数
- 其余位取反:
00001001 - 再 +1:
00001010= 10 - 最终结果为
-10
记忆口诀:
~x等价于-x - 1。例如~9 = -10,~(-9) = 8。
题目十:运算符优先级与综合实战
题目:请写出以下代码的输出,并说明运算符的优先级如何影响计算结果。然后回答:如果表达式中包含多种运算符且不确定优先级时,最佳实践是什么?
a,b,c=2,3,4result1=c**b*a result2=c**(b*a)result3=10+5*2**3-4result4=(10+5)*(2**3)-4print(result1)print(result2)print(result3)print(result4)考查知识点
- 运算符优先级 —— 第二期 §7
- 实战最佳实践 —— 第二期 §7
详细解答
代码输出:
a,b,c=2,3,4result1=c**b*a# 4**3 * 2 = 64 * 2 = 128result2=c**(b*a)# 4**(3*2) = 4**6 = 4096result3=10+5*2**3-4# 10 + 5 * 8 - 4 = 10 + 40 - 4 = 46result4=(10+5)*(2**3)-4# 15 * 8 - 4 = 120 - 4 = 116print(result1)# 128print(result2)# 4096print(result3)# 46print(result4)# 116优先级分析:
| 表达式 | 优先级顺序 | 计算过程 |
|---|---|---|
c ** b * a | **先于* | (4**3) * 2 = 64 * 2 |
c ** (b * a) | 括号最高 | 4 ** (3*2) = 4**6 |
10 + 5 * 2 ** 3 - 4 | **→*→+- | 10 + (5*(2**3)) - 4 |
(10 + 5) * (2 ** 3) - 4 | 括号最高 | (15) * (8) - 4 |
最佳实践:
当不确定运算符优先级时,直接使用括号
()明确计算顺序。
括号不仅能确保计算逻辑与预期一致,还能大幅提升代码可读性:
# ❌ 难以理解total=a+b*c**d//e-f# ✅ 一目了然total=a+(b*(c**d)//e)-f附:知识点对应总表
| 题号 | 主要考查知识点(对应笔记章节) |
|---|---|
| 1 | 第一期 §1 环境安装验证;第一期 §2.2 pip 镜像源配置 |
| 2 | 第一期 §3.2 缩进规则;第一期 §3.1 注释规范 |
| 3 | 第一期 §5 变量本质与动态类型 |
| 4 | 第一期 §6 六大组合数据类型对比 |
| 5 | 第一期 §7.1 进制与转换;第一期 §7.5 类型转换;第一期 §7.4 布尔与真值测试 |
| 6 | 第二期 §1 算术运算符与类型提升 |
| 7 | 第二期 §2 赋值运算符(链式/复合/海象) |
| 8 | 第二期 §3 比较运算符;第二期 §4 逻辑运算符与短路求值 |
| 9 | 第二期 §5 成员运算符;第二期 §6 位运算符 |
| 10 | 第二期 §7 运算符优先级与最佳实践 |
学习建议:对于答错的题目,请回看第一期或第二期对应章节,并动手在 Python 交互式环境中执行相关命令。基础语法和运算符是 Python 编程的基石,建议通过反复练习加深理解。