Python 学习笔记(第一期与第二期)——基础语法——核心知识点自测与详解

Python 学习笔记(第一期与第二期)------基础语法------核心知识点自测与详解

本自测解析针对 Python 学习笔记系列第一期(基础语法·上篇:环境搭建与数据基石)和第二期(基础语法·下篇:运算符全解与实战演练)的核心内容。共 10 题,每题包含题目回顾、考查知识点、详细解答与分析,帮助读者巩固 Python 基础语法与运算符的核心技能。
文章索引:

[Python 学习笔记(第一期)------基础语法(上篇):环境搭建与数据基石

Python 学习笔记(第二期)------基础语法(下篇):运算符全解与实战演练

更多自我检测系列欢迎浏览:每日知识点小问答

我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~

第一期与第二期:基础语法(第 1-5 题)

题目一:Python 环境安装与 pip 镜像源配置

题目 :Python 安装完成后,如何在命令行验证安装是否成功?如果在执行 pip install 时出现下载超时错误,原因是什么?请写出永久配置国内镜像源(以清华源为例)的具体步骤。

考查知识点
  • Python 多平台安装与验证 ------ 第一期 §1
  • pip 镜像源配置 ------ 第一期 §2.2
详细解答

验证安装是否成功

在命令提示符(CMD)或终端中执行以下命令:

bash 复制代码
python --version
pip --version

如果配置正确,会分别输出 Python 版本号和 pip 版本号。例如:

text 复制代码
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,复制以下内容并保存
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.com

macOS / Linux 用户 :在家目录(~)下创建隐藏文件夹 .pip,然后在其中创建 pip.conf 文件,填入相同内容。

配置完成后,再次执行 pip install <包名> 即可体验到飞升的下载速度。

题目二:Python 代码格式规范------缩进与注释

题目:Python 中推荐的缩进方式是什么?为什么不能混用 Tab 和空格?单行注释和多行注释(文档字符串)分别如何编写?请指出以下代码中的格式错误并修正。

python 复制代码
if True:
print("缩进错误")
else:
    print("正确缩进")
考查知识点
  • 代码缩进规则 ------ 第一期 §3.2
  • 注释规范 ------ 第一期 §3.1
详细解答

缩进规范

  • Python 官方推荐使用 4 个空格 作为一级缩进
  • 主流 IDE 均支持按 Tab 键自动转换为 4 个空格
  • 严禁混用 Tab 和空格,否则会报错:
text 复制代码
IndentationError: unindent does not match any outer indentation level

注释规范

注释类型 语法 说明
单行注释 # 注释内容 # 和内容之间建议空一格;行尾注释与代码间至少空两格
多行注释(文档字符串) """注释内容""" 使用三对双引号或单引号包裹,通常放在函数/类开头

错误代码修正

python 复制代码
# ❌ 错误:if 语句下面的代码块没有缩进
if True:
print("缩进错误")

# ✅ 修正
if True:
    print("缩进正确")   # 4 个空格缩进
else:
    print("也正确")     # 4 个空格缩进

题目三:变量本质与动态类型

题目 :请解释 Python 中"变量是贴在值上的便利贴"这一比喻的含义。Python 是静态类型还是动态类型语言?以下代码执行后,num 的类型分别是什么?

python 复制代码
num = 100
print(type(num))
num = "Hello"
print(type(num))
num = 3.14
print(type(num))
考查知识点
  • 变量本质与内存模型 ------ 第一期 §5
  • 动态类型特性 ------ 第一期 §5
详细解答

"便利贴"比喻的含义

  • 变量本身不存储数据,而是指向内存中存储数据的位置
  • 可以将变量理解为贴在数据上的"标签"或"便利贴"
  • 当执行 num = 100 时,系统在内存中创建整数 100,然后将标签 num 贴在该内存空间上
  • 执行 num = "Hello" 时,将标签 num 从整数 100 上揭下来,贴到字符串 "Hello"
  • 原来的 100 如果没有其他标签引用,会被垃圾回收机制清理

动态类型

Python 是动态类型 语言。变量本身没有类型,变量所指向的数据才有类型。同一变量可以在不同时刻指向不同类型的值。

代码类型追踪

python 复制代码
num = 100
print(type(num))      # <class 'int'>

num = "Hello"
print(type(num))      # <class 'str'>

num = 3.14
print(type(num))      # <class 'float'>

题目四:六大组合数据类型对比

题目 :请从"是否可变"、"是否有序"、"元素是否唯一"三个维度,对比 listtuplesetdictstr 五种数据类型,并各举一个创建示例。为什么字典的键不能使用列表类型?

考查知识点
  • 六大组合数据类型 ------ 第一期 §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 转换为二进制、八进制、十六进制的方法。浮点数转整数时会发生什么?以下代码的输出是什么?

python 复制代码
print(int(3.99))
print(float(10))
print(bool(0))
print(bool([]))
考查知识点
  • 整型的四种进制 ------ 第一期 §7.1
  • 进制转换函数 ------ 第一期 §7.1
  • 数字类型转换 ------ 第一期 §7.5
  • 布尔类型与真值测试 ------ 第一期 §7.4
详细解答

四种进制表示

进制 前缀 示例 对应十进制
二进制(Binary) 0b0B 0b11111111 255
八进制(Octal) 0o0O 0o377 255
十进制(Decimal) 255 255
十六进制(Hex) 0x0X 0xFF 255

进制转换

python 复制代码
num = 255
print(bin(num))   # 0b11111111
print(oct(num))   # 0o377
print(hex(num))   # 0xff

浮点数转整数

  • 使用 int() 将浮点数转换为整数时,直接截断小数部分,不进行四舍五入
  • int(3.99)3

布尔类型与真值测试

  • boolint 的子类,True 等价于 1,False 等价于 0
  • 以下情况会被视为 FalseNoneFalse、任何数字类型的 0、任何空序列(''[]())、任何空字典({}

代码输出

python 复制代码
print(int(3.99))   # 3
print(float(10))   # 10.0
print(bool(0))     # False
print(bool([]))    # False

第一期与第二期:基础语法(第 6-10 题)

题目六:算术运算符与类型提升

题目 :Python 中 /// 运算符的区别是什么?10 / 310 // 3 的输出分别是什么?混合运算时,Python 的类型提升规则是什么?以下代码的输出是什么?

python 复制代码
print(10 / 2.0)
print(10 - (3 + 5j))
考查知识点
  • 算术运算符 ------ 第二期 §1
  • 混合运算类型提升 ------ 第二期 §1
详细解答

/// 的区别

运算符 名称 示例 结果 说明
/ 真除法 10 / 3 3.333... 结果总是浮点数
// 整除(地板除) 10 // 3 3 向下取整,返回整数部分

混合运算的类型提升规则

当不同类型的数字混合运算时,Python 会自动向"更高精度"的类型提升:

  • 整型 + 浮点型 → 浮点型
  • 整型 + 复数 → 复数
  • 浮点型 + 复数 → 复数

代码输出

python 复制代码
print(10 / 2.0)          # 5.0(整型 10 提升为浮点型)
print(10 - (3 + 5j))     # (7 - 5j)(整型 10 提升为复数)

题目七:赋值运算符(含海象运算符)

题目 :以下代码的执行结果是什么?请解释海象运算符 := 的作用,并与传统写法对比。

python 复制代码
# 代码段一
x = y = z = 1
a, b = 1, 2
print(x, y, z, a, b)

# 代码段二
num = 5
num += 2
num *= 3
print(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

代码段二:复合赋值

python 复制代码
num = 5
num += 2      # num = 5 + 2 = 7
num *= 3      # num = 7 * 3 = 21
print(num)    # 21

代码段三:海象运算符 :=

海象运算符允许在表达式内部为变量赋值,因形似海象的眼睛和长牙而得名。

传统写法(需先赋值再判断):

python 复制代码
data = input("请输入内容:")
while len(data) == 0:
    print("内容不能为空!")
    data = input("请输入内容:")

海象运算符写法(在 while 条件中同时完成赋值和判断):

python 复制代码
while (data := input("请输入内容:")) == "":
    print("内容不能为空!")

运行效果:如果用户直接按回车(输入空字符串),会提示"内容不能为空!"并再次询问;如果输入了有效内容,则退出循环。

⚠️ 注意 :海象运算符优先级较低,与比较运算符混用时必须加括号 ()

题目八:比较运算符、逻辑运算符与短路求值

题目:请写出以下代码的输出,并解释逻辑运算符的短路求值原则。

python 复制代码
a, b, c = 10, 5, 0

print(a > b)           # ①
print(a < b)           # ②
print(5 <= a <= 15)    # ③

print(c and a / c)     # ④
print(a > b or c > a)  # ⑤
print(not (a == 10))   # ⑥
考查知识点
  • 比较运算符与链式比较 ------ 第二期 §3
  • 逻辑运算符与短路求值 ------ 第二期 §4
详细解答

代码输出

python 复制代码
a, b, c = 10, 5, 0

print(a > b)           # True(10 > 5)
print(a < b)           # False(10 < 5)
print(5 <= a <= 15)    # True(链式比较:5 <= 10 <= 15)

print(c and a / c)     # 0(c=0 为假,短路,不执行 a/c,避免除零错误)
print(a > b or c > 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 > bTrueor 直接返回 True不执行 c > a

题目九:成员运算符与位运算

题目 :请写出以下代码的输出。位运算 ~9 的结果为什么是 -10?请简述按位取反的计算过程。

python 复制代码
print('o' in 'Python')      # ①
print(3 in [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
详细解答

代码输出

python 复制代码
print('o' in 'Python')      # True(字符串中查找字符)
print(3 in [1, 2, 3])       # True(列表中查找元素)
print("name" in {"name": "Tom", "age": 18})  # True(字典中判断的是键,不是值)

位运算结果

python 复制代码
print(9 & 3)   # 1  (00001001 & 00000011 = 00000001)
print(9 | 3)   # 11 (00001001 | 00000011 = 00001011)
print(9 ^ 3)   # 10 (00001001 ^ 00000011 = 00001010)
print(~9)      # -10
print(9 << 1)  # 18 (左移一位 = 9 * 2)
print(9 >> 1)  # 4  (右移一位 = 9 // 2)

按位取反 ~9 = -10 的计算过程

  1. 确定补码 :9 是正数,正数的原码 = 反码 = 补码,所以 9 的补码为 00001001
  2. 对补码取反 :得到新的补码 11110110
  3. 将补码转换为原码
    • 符号位(最高位)为 1,表示负数
    • 其余位取反:00001001
    • 再 +1:00001010 = 10
    • 最终结果为 -10

记忆口诀~x 等价于 -x - 1。例如 ~9 = -10~(-9) = 8

题目十:运算符优先级与综合实战

题目:请写出以下代码的输出,并说明运算符的优先级如何影响计算结果。然后回答:如果表达式中包含多种运算符且不确定优先级时,最佳实践是什么?

python 复制代码
a, b, c = 2, 3, 4

result1 = c ** b * a
result2 = c ** (b * a)
result3 = 10 + 5 * 2 ** 3 - 4
result4 = (10 + 5) * (2 ** 3) - 4

print(result1)
print(result2)
print(result3)
print(result4)
考查知识点
  • 运算符优先级 ------ 第二期 §7
  • 实战最佳实践 ------ 第二期 §7
详细解答

代码输出

python 复制代码
a, b, c = 2, 3, 4

result1 = c ** b * a      # 4**3 * 2 = 64 * 2 = 128
result2 = c ** (b * a)    # 4**(3*2) = 4**6 = 4096
result3 = 10 + 5 * 2 ** 3 - 4   # 10 + 5 * 8 - 4 = 10 + 40 - 4 = 46
result4 = (10 + 5) * (2 ** 3) - 4   # 15 * 8 - 4 = 120 - 4 = 116

print(result1)  # 128
print(result2)  # 4096
print(result3)  # 46
print(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

最佳实践

当不确定运算符优先级时,直接使用括号 () 明确计算顺序。

括号不仅能确保计算逻辑与预期一致,还能大幅提升代码可读性:

python 复制代码
# ❌ 难以理解
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 编程的基石,建议通过反复练习加深理解。
--- Compiled and Authored by Whisky --- July 12 th, 2026

相关推荐
Lhappy嘻嘻3 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
科技道人3 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
向日的葵0065 小时前
langchain的Tools教程(三)
python·langchain·tools
GLDbalala5 小时前
GPU PRO 5 - 4.6 Adaptive Scalable Texture Compression 笔记
笔记
xian_wwq5 小时前
【学习笔记】模型权重管理:Safetensors与私有化Hub(23/35)
笔记·学习
逝水无殇5 小时前
C# 异常处理详解
开发语言·后端·c#
其实防守也摸鱼6 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
ctrl_v助手6 小时前
Halcon学习笔记2
人工智能·笔记·学习
言乐66 小时前
Python实现可运行解密游戏游戏框架
python·游戏·小程序·游戏程序·关卡设计
YUS云生6 小时前
Python学习笔记·第31天:FastAPI入门——路由、路径参数、查询参数与请求体
笔记·python·学习