【6.18】Python 从绝对零开始 — 不是 “复习“,是真正第一次入门教程!
前言
完全没碰过编程、没装过 Python 的同学,跟着本文一步走,不用提前懂任何 C / 计算机基础,全程实操上手,看完就能写出可运行代码。
第 0 步:先确认你的电脑能跑 Python(Windows)
操作流程
- 快捷键
Win + R,输入cmd回车,打开命令终端 - 在黑框里输入校验命令:
py -3 --version
- 两种结果处理:
- ✅ 正常:输出
Python 3.x.x,代表环境就绪,直接下一步 - ❌ 未安装:浏览器打开 python.org 下载安装包
安装必勾选:
Add Python to PATH,不勾选会导致终端识别不到 python 命令
第 1 步:搞懂 Python 到底是什么
Python 属于解释型语言,和 C 语言最大区别:不用提前编译,写完代码直接运行。
最简演示示例
- 桌面新建文本文档,重命名为
test.py(注意后缀是.py,不是.txt) - 文件内写入一行代码:
print("hello")
- cmd 终端切换到文件所在文件夹,执行运行命令:
py -3 test.py
- 终端直接输出结果:
hello
第 2 步:一张表看懂 Python 和 C 语言六大核心区别
如果你之前接触过 C 语言,这张表能快速帮你转换思维;零基础同学简单浏览有印象即可,不用死记硬背。
| 概念 | C 语言写法 | Python 写法 | 直观感受 |
|---|---|---|---|
| 变量 | int a = 10;必须提前声明数据类型 |
a = 10无需声明,直接赋值 |
Python 代码更懒、更省事 |
| 代码块 | {} 大括号包裹代码段 |
4 个空格缩进划分代码块 | 缩进错一个空格,程序直接报错 |
| 数组 | int arr[5];创建时固定长度,不能变长 |
arr = [1,2,3,4,5]随时增删元素,长度自由变化 |
Python 数据容器更灵活 |
| 函数 | int f(int x){ return x*2; } |
def f(x): return x*2 |
Python 定义函数极简 |
| 循环 | for(int i=0;i<10;i++) |
for i in range(10):range(10) 等价数字 0~9 |
不用手动控制自增,简洁易懂 |
| 打印输出 | printf("%d\n", a); |
print(a) |
一行搞定打印,不用复杂格式化 |
第 3 步:你的第一个完整交互式 Python 程序
新建文件 day5.py,复制下方全部代码,包含注释讲解:
# # 号开头是单行注释,程序运行时会自动忽略
# input() 功能:从键盘读取用户输入的文字
name = input("你叫什么名字?")
# print() 功能:把内容打印输出到终端屏幕
print("你好," + name + "!")
运行 & 效果
- cmd 终端执行:
py -3 day5.py
- 终端提示输入名字,输入后回车,示例交互:
你叫什么名字?謓泽
你好,謓泽!
第 4 步:用 pip 安装第三方功能库(拓展 Python 能力)
Python 自带基础功能有限,串口、绘图、数学计算、仪器控制都需要第三方库,安装工具 pip 随 Python 自带。
通用安装命令模板
py -3 -m pip install 库名
工程常用库实操安装示例
# 串口通信库,对接单片机、MCU硬件
py -3 -m pip install pyserial
# 仪器控制库,程控电源、示波器、网口仪器
py -3 -m pip install pyvisa
# 绘图可视化库,绘制波形、数据图表
py -3 -m pip install matplotlib
# 数值计算库,矩阵、信号、数学运算
py -3 -m pip install numpy
库使用规则
安装完成后,代码开头用 import 导入库才能调用功能,import 作用等价 C 语言里的 #include。
# 示例:导入数值计算库 numpy
import numpy
结尾:入门学习路线小结
- 环境校验:
py -3 --version确认 Python 正常 - 基础语法:变量、print、input、缩进、循环
- 第三方拓展:pip 安装工具库,适配硬件、绘图、算法场景
- 实操优先:每段代码复制运行,直观看到输出效果,比死记理论更快上手!
单独章节:pyserial 串口通信(单片机 / 硬件必备)
1. 库安装命令
打开 cmd 终端执行:
py -3 -m pip install pyserial
给 Python 增加串口读写能力,用来 STM32、51、Arduino 等 MCU 单片机、串口模块交互。
2. 完整可运行代码
# 导入串口库,等价C语言 #include 头文件
import serial
# 1. 初始化串口对象
# 参数说明:
# "COM3":设备管理器里你的串口编号,设备不同数字不一样
# 9600:波特率,必须和单片机程序波特率完全一致
# timeout=1:读取超时1秒,无数据就不再阻塞等待
ser = serial.Serial("COM3", 9600, timeout=1)
# 2. 向单片机发送字符串
# 字符串前面加 b 代表转为字节流,串口只认二进制字节
# \r\n 是串口常用换行结束符,匹配单片机串口接收判断
ser.write(b"hello mcu\r\n")
# 3. 读取单片机发回来的一行数据(读到换行就停止)
recv_data = ser.readline()
# 4. 字节转utf-8字符串并打印到终端
print("串口收到:", recv_data.decode("utf-8"))
# 5. 程序结束必须关闭串口,否则下次打开会报错占用
ser.close()
3. 逐行代码详细讲解
-
import serial引入串口驱动库,不写这行无法调用串口相关函数,和 C 语言引入头文件逻辑一样。 -
ser = serial.Serial("COM3", 9600, timeout=1)创建串口实例ser,三个核心参数:
- 串口号:电脑设备管理器 → 端口 (COM 和 LPT) 查看,比如 COM4、COM5
- 波特率:9600/115200 等,必须和单片机代码配置一模一样,否则乱码
- timeout:超时时间,单位秒;设为 1 代表 1 秒没读到数据直接返回空,不会卡死程序
ser.write(b"hello mcu\r\n")串口发送函数:
- 串口底层只传输字节,普通字符串要加前缀
b转成字节数据 \r\n回车换行,大部分单片机串口程序以换行作为一帧数据结束标记
-
recv_data = ser.readline()按行读取串口数据,只要收到\n就停止读取,返回收到的全部字节;超时无数据返回空字节。 -
recv_data.decode("utf-8")串口返回的是二进制字节,decode("utf-8")将字节转换成我们能看懂的中文 / 英文文本。 -
ser.close()关闭串口释放资源,忘记关闭会出现「串口被占用,无法打开」报错,每次程序结束都要执行。
4. 常见踩坑解决(硬件新手必看)
-
报错
FileNotFoundError: [Errno 2] could not open port COM3解决:串口号写错,去电脑设备管理器确认真实 COM 编号;检查 USB 转串口驱动是否装好。 -
收到全是乱码 解决:Python 代码波特率、单片机波特率不一致;单片机编码不是 UTF-8,可换成
.decode("gbk")尝试。 -
运行一次后再运行报串口占用 解决:代码末尾加
ser.close();关闭其他串口助手、单片机下载软件。 -
收不到任何返回数据 解决:硬件 TX/RX 交叉接线(单片机 TX 接 USB 模块 RX,单片机 RX 接 USB 模块 TX);确认单片机收到指令后有返回数据逻辑。
5. 运行演示效果
单片机收到 hello mcu 后回复 I'm MCU,终端输出:
串口收到: I'm MCU
拓展:循环持续接收数据(硬件调试专用 + 逐行注释讲解)
# 导入串口通信库,用于读写硬件串口
import serial
# 导入时间库,用于循环延时,降低CPU占用
import time
# 初始化串口对象:串口号COM3、波特率9600、读取超时0.5秒
ser = serial.Serial("COM3", 9600, timeout=0.5)
print("串口已打开,持续接收数据,按Ctrl+C停止")
# try-except异常捕获:处理用户按下Ctrl+C强制停止程序的场景
try:
# while True 无限循环,持续监听串口
while True:
# readline() 读取串口一行数据,读到换行符\n返回;超时无数据返回空字节
data = ser.readline()
# 判断:如果data不为空,代表读到了单片机发送的数据
if data:
# decode("utf-8"):二进制字节转可读字符串
# .strip():自动删掉首尾换行、空格、回车,打印更整洁
print("收到:", data.decode("utf-8").strip())
# 延时0.1秒,避免死循环疯狂占用电脑CPU资源
time.sleep(0.1)
# 捕获 KeyboardInterrupt 异常:用户在终端按下 Ctrl+C 终止程序时触发
except KeyboardInterrupt:
# 关闭串口,释放硬件资源,防止串口被占用、下次打不开
ser.close()
print("串口已关闭,程序退出")
逐行分段详细说明
1. 头文件导入
import serial
import time
import serial:串口操作核心库,没有它无法和 USB 转串口、单片机通信import time:提供sleep()延时函数,缓解无限循环对 CPU 的消耗
2. 串口初始化
ser = serial.Serial("COM3", 9600, timeout=0.5)
print("串口已打开,持续接收数据,按Ctrl+C停止")
"COM3":你的 USB 串口设备编号,设备管理器里查看,需要按需修改9600:波特率,必须和单片机代码波特率完全一致,否则乱码timeout=0.5:读取超时 0.5 秒,超过 0.5 秒没收到数据直接返回空,程序不会卡死
3. try 异常保护块
try:
while True:
try:把主循环放进异常捕获区,作用是优雅退出while True:无限循环,实现持续监听串口数据流,不用每次运行一次代码
4. 串口读取 + 打印逻辑
data = ser.readline()
if data:
print("收到:", data.decode("utf-8").strip())
time.sleep(0.1)
ser.readline()按一行读取b串口数据,遇到\n换行符就结束本次读取;0.5 秒没数据返回空字节'b'if data:只有真正读到数据时才打印,避免不停输出空行data.decode("utf-8")串口底层传输二进制字节,这行把字节转换成中文 / 英文可读文本.strip()自动清除字符串前后的\r、\n、空格,打印结果干净整洁,不会出现多余空行time.sleep(0.1)每次循环停顿 0.1 秒,降低循环频率,防止程序满载占用 CPU
5. except 退出处理(重点!硬件调试必加)
except KeyboardInterrupt:
ser.close()
print("串口已关闭,程序退出")
KeyboardInterrupt:专属捕获用户按下Ctrl + C停止程序的异常ser.close():强制关闭串口释放硬件端口 不写这行的坑:直接关终端终止程序,串口会被系统锁住,下次运行代码会报「串口被占用,无法打开」- 最后打印提示文字,告知用户串口正常关闭
使用场景说明
- 适合单片机持续上报数据:温湿度、电压、传感器数值实时打印
- 替代串口助手,用 Python 做自动化数据采集,后续可以扩展:把数据保存到文件、绘图
- 支持随时快捷键退出,不会卡死串口,硬件调试非常稳定
运行效果示例
单片机循环发送 temp:25.5、temp:25.6,终端输出:
串口已打开,持续接收数据,按Ctrl+C停止
收到: temp:25.5
收到: temp:25.6
收到: temp:25.4
# 按下 Ctrl+C 后输出
串口已关闭,程序退出
常见修改点
- 改串口号:
"COM3"→"COM4"(设备管理器查看) - 改波特率:
9600→115200(和单片机程序匹配) - 加快响应速度:
time.sleep(0.1)→time.sleep(0.05) - 中文乱码:
decode("utf-8")→decode("gbk")
更多推荐


所有评论(0)