当前位置: 首页 > news >正文

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.com

macOS / 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'>

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

题目:请从“是否可变”、“是否有序”、“元素是否唯一”三个维度,对比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转换为二进制、八进制、十六进制的方法。浮点数转整数时会发生什么?以下代码的输出是什么?

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

四种进制表示

进制前缀示例对应十进制
二进制(Binary)0b0B0b11111111255
八进制(Octal)0o0O0o377255
十进制(Decimal)255255
十六进制(Hex)0x0X0xFF255

进制转换

num=255print(bin(num))# 0b11111111print(oct(num))# 0o377print(hex(num))# 0xff

浮点数转整数

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

布尔类型与真值测试

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

代码输出

print(int(3.99))# 3print(float(10))# 10.0print(bool(0))# Falseprint(bool([]))# False

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

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

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

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

///的区别

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

混合运算的类型提升规则

当不同类型的数字混合运算时,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 > bTrueor直接返回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的计算过程

  1. 确定补码:9 是正数,正数的原码 = 反码 = 补码,所以 9 的补码为00001001
  2. 对补码取反:得到新的补码11110110
  3. 将补码转换为原码
    • 符号位(最高位)为 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 编程的基石,建议通过反复练习加深理解。

— Compiled and Authored by Whisky — July 12th, 2026
http://www.jsqmd.com/news/1178539/

相关文章:

  • 开源!我用 Python 造了个 AI 视频生成框架,输入一句话自动出片
  • Nano Banana2:基于Gemini 3.1 Flash的AI图像生成工具实战指南
  • Unidbg+IDA逆向魔改SHA1算法:绕过反调试的SO模拟执行实战
  • 《造梦之家》电影技术解析:4K画质与手持拍摄的情感叙事
  • C++插件机制实战:从动态链接到工业级架构设计
  • C++矩阵转置性能优化:从基础实现到缓存友好与并行计算
  • Unity微信小游戏包体瘦身实战:代码剪裁与TMP字体优化指南
  • 思科交换机VLAN间通信:Access与Trunk端口配置的2个关键区别与1个常见误区
  • 幻兽帕鲁存档编辑完全指南:如何安全修改游戏数据实现个性化体验
  • Python自动化实战指南:从工具选型到工作流构建
  • JSON数组超10万条时Cursor智能跳转失灵?用这4个自定义Snippet+1个AST解析宏实现毫秒级字段定位
  • 《阿甘正传》深度解析:纯粹人生与历史隐喻的经典启示
  • 2026年7月最新常州欧米茄官方售后客户服务热线与维修网点地址汇总 - 欧米茄服务中心
  • TK1开发板WiFi自动连接实战指南:从配置到自愈
  • C++构造函数初始化列表:从原理到实战的深度解析
  • UVM重载实战:Transaction、Sequence、Component 3类对象替换场景与代码示例
  • 影栈:全平台视频一键下载工具,自媒体人的素材神器(2026最新测评)
  • Honey Select 2终极汉化指南:3步解锁完整中文体验与上百个实用插件
  • Android真机Frida调试环境搭建与实战指南
  • 深入解析WonderTrader内存对象池:C++高性能量化交易系统的核心优化
  • PIC18F27K42驱动EPT-14A4005P压电蜂鸣器方案详解
  • 2026年7月最新苏州百达翡丽官方售后热线及客户服务网点地址 - 百达翡丽服务中心
  • C++观察者模式:从原理到现代实现,解决对象间松耦合通知
  • eNSP 与 VirtualBox 5.2.12 虚拟网络配置:解决“###”与错误代码40的2个核心要点
  • Subtitle Edit完全指南:从新手到专家的免费字幕编辑解决方案
  • C++并发编程实战指南:从内存模型到线程池与无锁队列
  • Anbox社区贡献指南:如何参与openEuler Android中间件开发
  • 轻量级AI模型在代码安全审计中的应用:从SQL注入检测到自动化修复
  • 【ElevenLabs企业级部署白皮书】:单日10万次请求压测实录,负载均衡+缓存策略+Webhook异常熔断三重保障
  • NumPy新手实战指南:从报错到交付的四大高频场景