一、先认识这四个概念
先看一小段真实的 Python 程序。现在还不用全懂,只要先有个印象。
# 这是一个小程序:问名字,然后打招呼
name = input("你叫什么名字?") # name 是变量
if name == "小明": # if 是关键字
print("你好,小明!") # 行首 4 个空格,就是缩进
else: # else 也是关键字
print("你好," + name + "!")
这段代码里,藏着我们要学的四个概念:
| 你看到的 | 它叫什么 | 一句话作用 |
|---|---|---|
| 行首那 4 个空格 | 缩进 | 决定这行代码“归谁管” |
# 后面的话 | 注释 | 写给人的说明,电脑不看 |
name | 变量 | 给数据起的名字 |
if、else | 关键字 | Python 自己留用的词 |
下面四节,我们一个一个拆开讲。
二、缩进:Python 靠“台阶”分层
在别的编程语言里,缩进只是“好看”;在 Python 里,缩进是语法——它不是装饰,是内容本身。
打个比方:写作文时,段落开头空两格,是为了让人一眼看出“新的一段开始了”。Python 的缩进更严格,它靠行首空格的多少,判断这行代码“属于谁”。
三条必须记住的规矩
- 同一层,空格数要一样。大家都缩 4 个空格,就都写 4 个,别有的 4 个、有的 2 个。
- 空格和 Tab 别混着用。看着一样宽,电脑认得不一样,会报错。
- 冒号
:后面的下一行,一定要缩进。if、else、for、while、def结尾的那个冒号,就是在说“下面是它的内部”。
实际用在哪里
凡是“满足条件才做”“重复做几次”的地方,都要靠缩进圈出范围。这是它最主要的用途。
balance = 30
if balance >= 20:
print("余额够,来杯奶茶") # 缩进了 → 只有 balance ≥ 20 才执行
print("再带一杯给室友") # 同样缩进 → 和上一行是同一层
print("结账完成") # 没缩进 → 不管条件如何都会执行
运行结果:
余额够,来杯奶茶
再带一杯给室友
结账完成
如果把 balance 改成 15,前两行都不会打印,只有最后那行“结账完成”还会打印。这就是缩进的威力:它决定了哪几行代码是被“管着”的。
for 循环、def 函数,全靠这个判断。
缩进写错了会怎样
Python 会直接罢工,并在报错信息里给出 IndentationError(缩进错误)。两种最常见的错法:
if balance >= 20:
print("来杯奶茶") # ❌ 忘了缩进,报 IndentationError
if balance >= 20:
print("来杯奶茶") # 缩进 4 个空格
print("再加珍珠") # ❌ 缩进 8 个空格,和上一行不是一层,同样报错
IndentationError,九成是“多按了几下空格”或者“空格和 Tab 混用”。改法很简单:把出问题那几行的行首空白全删掉,再统一敲 4 个空格重新对齐(这也是 Python 官方推荐的做法)。
课程思政|工匠精神与严谨求实 · 缩进就是规矩
在别的语言里缩进只是好看,在 Python 里它是语法本身。同一层要缩一样多,空格和 Tab 不能混用,冒号后面必须缩进——差一个空格,程序就给你颜色看。没人盯着的时候也照样对齐,这种「不用别人管、自己守规矩」的习惯,正是工程素养最朴素的样子。
三、注释:写给人的话
注释就是写在代码里的“小纸条”。它只有一个作用:给人看。程序运行时,计算机会直接跳过它。
为什么值得写
- 提醒自己。过一个月再打开这个文件,还能想起当时在想什么。
- 方便别人。同学或同事接手你的代码,不用一个字母一个字母地猜。
- 临时关掉某段代码。调试时不想删代码,加个符号让它先“停用”。
写法一:单行注释,一个井号 #
从 # 开始,这一行后面的内容全都算注释。
# 下面这行用来记录这周奶茶一共花了多少钱
milk_tea_week = 42.5
cup_price = 12 # 也可以写在代码右边,叫“行尾注释”
# print("这行被注释掉了,不会运行")
习惯上,# 和代码之间留一个空格,读起来更清爽。
写法二:多行注释,三对引号包起来
要写好几行说明,就用三个引号把它们包住,单引号、双引号都可以。
"""
这个脚本用来记录今天的奶茶订单
作者:小林
日期:2026-10-13
说明:练习变量和注释的用法
"""
print("开始记账")
help(函数名) 就能看到。后面学到函数时会经常见到,现在有个印象就好。
写注释的两个好习惯
| 该怎么做 | 例子 |
|---|---|
| ✅ 说清“为什么这么做” | score = score * 0.6 # 期末成绩占六成 |
| ❌ 只是复述代码本身 | a = 1 # 给 a 赋值 1(这是废话) |
| ✅ 代码改了,注释跟着改 | 两处保持一致,别打架 |
| ❌ 注释和代码对不上 | 代码在算加法,注释却写着“求平均” |
AI 助手小贴士|注释是「写给人的话」——好注释和坏注释差在哪,让 AI 用同一段代码摆出来最直观。
打开任意 AI 对话工具(网页版或 App 都可以),试试这样问:给同一段代码写两个版本的注释:一个只重复代码说什么的坏注释,一个解释为什么这么做的好注释,并说明差别在哪
四、变量:给数据起个名字
变量,就是给数据起的名字。你可以把它想成一个贴了标签的盒子:盒子里装东西,标签上写着“这是什么”。
cup_price = 12 # 盒子上写着 cup_price,里面放 12
drinker = "小林" # 盒子上写着 drinker,里面放“小林”
cups = 3 # 盒子上写着 cups,里面放 3
中间那个等号 =,不是数学里的“相等”。它的意思是:把右边的值,放进左边这个名字里。读作“把 12 赋给 cup_price”。
用了有什么好处
看这两段代码,都在算「3 杯自己喝、2 杯帮室友带」的奶茶钱:
# 不用变量:同一个数要写好几遍
print(12 * 3 + 12 * 2)
# 用变量:数据变了只改一行
cup_price = 12
print(cup_price * 3 + cup_price * 2)
如果奶茶涨到 15 元一杯,第二种写法只要改 cup_price = 12 这一行。这就是变量最实在的用处:让数据有个名字,改起来方便,读起来也明白。
必须遵守的规则(违反会报错)
| 规则 | 合法的 | 会报错的 |
|---|---|---|
| 只能用字母、数字、下划线 | name、age18、user_name | user-name(减号)、my name(空格)、user@123(@ 号) |
| 不能用数字开头 | n1、_n1 | 2age、18age |
| 大小写算两个名字 | age 和 Age 是两个不同的盒子 | 定义了 age 却去用 Age,会报“名字没定义” |
| 不能使用关键字 | if_flag(加个下划线绕开) | if、for、class(下一节细讲) |
约定俗成的规矩(不报错,但该守)
这些不是硬性规定,违反了程序照样跑,但代码会显得乱,别人读起来费劲。
| 用在哪儿 | 推荐写法 | 例子 |
|---|---|---|
| 普通变量 | 全小写,单词之间用下划线(蛇形命名法) | user_name、student_age、total_score |
| 常量(不打算改的数) | 全部大写 | PI = 3.14159、MAX_SCORE = 100 |
| 类名 | 每个单词首字母大写(大驼峰) | class StudentInfo: |
apple_price = 5.9 比 a = 5.9 好一百倍。三个月后的你,会感谢现在多敲的那几个字母。
i、j、k 这种单字母名字,只在“数到第几个”的临时场景里用(比如 for i in range(5):),平时别拿它当变量的名字。
姓名 = "小明" 完全合法,程序照跑。不过正式代码里大家还是用英文或拼音命名——文件不乱码、别人看得懂,也不会和关键字撞车。
课程思政|诚信与职业操守 · 变量名里见作风
给数据起名字,看着随意,其实处处见态度。a、b、x1 堆在一起,当时省事,过一周连自己都看不懂。名字起得含糊,多半是想先把眼前糊弄过去——可代码会长期存着,糊弄不了任何人。把每个名字起成一句能读懂的话,是对后来接手的人负责,也是对当时写下它的自己诚实。
五、关键字:Python 的自留词
关键字(也叫保留字),是 Python 提前占下的词。它们都有专门的用途,不能拿来当变量名。
打个比方:就像班里的“班长”“课代表”——这些称呼有专门的意思,你不能再给同学起这个外号,否则一喊就乱套。
Python 3 一共预留了 35 个关键字。想自己看一眼,运行这两行:
import keyword
print(keyword.kwlist) # 一次打印出全部 35 个关键字
按用途归类,其实不难记
| 分类 | 关键字 | 干什么用 |
|---|---|---|
| 逻辑运算 | and、or、not | 把几个条件连起来一起判断 |
| 条件分支 | if、elif、else | 满足条件才做某件事 |
| 循环 | for、while、break、continue | 重复做,或中途跳出、跳过 |
| 定义 | def、class、return、lambda | 自己造函数、造类 |
| 导入工具 | import、from、as | 借用别人写好的功能 |
| 真真假假 | True、False、None | 表示“对”“不对”“还没有值” |
| 判断关系 | in、is | 在不在里面、是不是同一个 |
| 异常处理 | try、except、finally、raise、assert | 出错时不让程序直接崩掉 |
| 其他 | with、pass、global、nonlocal、del、async、await、yield | 文件管理、占位、跨函数改变量等 |
不用一次背完。下面这几个,是你最初几周就会用到的:
| 关键字 | 一句话用途 | 短例子 |
|---|---|---|
if | 如果……就…… | if balance >= 20: print("够买奶茶") |
else | 否则…… | else: print("余额不够") |
for | 挨个处理一遍 | for i in range(3): print(i) |
while | 只要……就一直做 | while n < 5: n = n + 1 |
def | 把一段代码做成工具 | def add(a, b): return a + b |
import | 借别人的工具来用 | import math |
True / False | 对 / 不对 | is_pass = True |
None | 暂时还没有值 | result = None |
print、input、len 这些不是关键字。它们叫内置函数,相当于 Python 送你的现成工具。技术上它们可以被当变量名用,但千万别这么干——一旦盖掉,后面就调不动了。
SyntaxError(语法错误)时,先检查两件事:是不是把关键字当变量名了?是不是少了个冒号或引号?新手绝大多数语法错误都出在这两处。
六、四个概念一起用:BMI 小计算器
把四个概念合起来,写一个完整的小程序:算 BMI(身体质量指数)。
# BMI 小计算器(注释:说明这段程序是干什么的)
print("=== BMI 计算器 ===")
height = float(input("请输入身高(米):")) # 变量:存身高
weight = float(input("请输入体重(公斤):")) # 变量:存体重
bmi = weight / (height * height) # 变量:存算出来的结果
print(f"你的 BMI 是 {bmi:.1f}") # f"..." 能把变量填进文字里
if bmi < 18.5: # 关键字 if:开始判断
print("偏瘦") # 缩进 → 属于 if
elif bmi < 24: # 关键字 elif:接着判断
print("正常") # 缩进 → 属于 elif
else: # 关键字 else:剩下的情况
print("偏胖") # 缩进 → 属于 else
print("计算结束") # 没缩进 → 不管怎样都会执行
运行一次,输入身高 1.70、体重 65:
=== BMI 计算器 ===
请输入身高(米):1.70
请输入体重(公斤):65
你的 BMI 是 22.5
正常
计算结束
回头看看,四个概念各自在哪儿:
| 概念 | 在这段代码里的位置 | 少了它会怎样 |
|---|---|---|
| 变量 | height、weight、bmi | 数据没名字,后面用不了 |
| 注释 | # 开头的那些话 | 程序照样跑,但没人看得懂 |
| 关键字 | if、elif、else(print 是内置函数,别混进来) | 不知道该判断什么、输出什么 |
| 缩进 | 三个 print 前面的 4 个空格 | 直接报错,程序根本跑不起来 |
18.5 和 24 两个分界值,用的是中国成人 BMI 标准(18.5~24 算正常);世界卫生组织的标准是 18.5~25,数字略有出入,查资料时留意看的是哪一套。
AI 助手小贴士|规范意识靠「找茬」练出来最快。
打开任意 AI 对话工具(网页版或 App 都可以),试试这样问:给我出 5 道找茬题:每题一段有命名或缩进问题的短代码,让我先指出问题,再对答案
课程思政|数据安全与法治素养 · 身高体重也是隐私
这个小程序要你输入身高和体重——它们属于个人健康信息,是隐私的一部分。练习时随手敲几个数字没关系,但真到了做「全班健康统计」这类程序,就要多想一步:能采集,不等于可以随便存、随便传。收进来的是数据,背后是一个个具体的人,动手前先想清谁有权看、存到哪儿、留多久。
七、新手最容易踩的坑
下面这几条,几乎每个人都中过招。看一眼,能省你不少时间。
- 忘了缩进,报
IndentationError。冒号下面的代码一定要缩进。删掉行首空白,重新用 4 个空格对齐即可。 - 空格和 Tab 混用,报
TabError。看着一样宽,电脑认得不一样。要么统一用 Tab 键,要么统一敲 4 个空格,别两种都来。 - 写了中文标点。把
if age >= 18:里那个中文冒号当成英文冒号用,会报SyntaxError。写代码时把输入法切回英文。 - 把关键字当变量名。写
if = 1会直接报SyntaxError。改法:加个下划线,写成if_flag = 1。 - 变量名大小写写错。定义了
age,却用Age,会报NameError: name 'Age' is not defined。Python 里这两个名字互不相干。 - 用三引号临时屏蔽代码时打架。如果被屏蔽的代码里本来就有三引号,会乱掉。想屏蔽多行代码,优先用
#一行一行加,最保险。
AI 助手小贴士|代码「能跑」和「好读」是两回事。让 AI 当代码风格检查员,逐条指出不规范的地方,比自己翻规范文档快得多。
打开任意 AI 对话工具(网页版或 App 都可以),试试这样问:请检查下面这段 Python 代码哪些地方不符合规范(命名、缩进、空格、注释),逐条指出并给出修改后的完整代码:<粘贴代码>
八、随堂自测(10 题)
点击选项即可判分,答错的题会立刻显示解析。全部答完后会给出正确率和错题清单。
1在 Python 里,缩进最主要的作用是什么?
- A. 让代码看起来整齐好看
- B. 决定一行代码属于哪个代码块
- C. 影响程序的运行速度
- D. 表示这一行是注释
2下面哪个 if 的写法是正确的?
- A.
if age >= 18:换行后空 4 格写print("成年") - B.
if age >= 18:换行后直接顶格写print("成年") - C.
if age >= 18(末尾没有冒号),换行后空 4 格写 - D.
if age >= 18:换行后第一行空 4 格、第二行空 8 格
3程序一运行就报 IndentationError,最可能的原因是?
- A. 变量名里用了中文
- B. 某个字符串忘了加引号
- C. 少写了一个
print - D. 行首的空格数量不一致
4想给一行代码加说明,又不影响程序运行,正确做法是?
- A. 把说明用一对圆括号包起来
- B. 把说明写在
#后面 - C. 直接把说明写成没有引号的文字
- D. 在说明的前后各加一个分号
# 后面的内容会被 Python 忽略,这是最常用的单行注释。A、C、D 都不是合法写法,程序会直接报语法错误。5用三个双引号 """ 把一段说明括起来,这段内容会怎样?
- A. 会被打印到屏幕上
- B. 会导致程序报错
- C. 会被当成一个字符串,但不会显示出来
- D. 会自动变成注释,用
print也打印不出来
6下面哪个变量名是合法的?
- A.
2name - B.
user-name - C.
user_name - D.
user name
7代码 age = 18 里的等号,正确的理解是?
- A. 判断左右两边是否相等
- B. 把右边的 18 存进名为
age的变量 - C. 让
age永远等于 18,以后不能改 - D. 把 18 打印出来
= 是赋值:把右边放进左边。判断相等要用两个等号 ==(A 错);变量随时能改(C 错);输出要用 print(D 错)。8按 Python 的命名习惯,普通变量最推荐下面哪种写法?
- A.
UserName - B.
userName - C.
user_name - D.
USERNAME
9下面哪个词不能用来当变量名?
- A.
class - B.
score - C.
total_score - D.
score1
class 是 Python 关键字,写 class = 1 会直接报 SyntaxError。想用就加下划线,写成 class_name。10关于 print,下面哪种说法是正确的?
- A. 它是 Python 的关键字
- B. 它既是关键字,也是合法的变量名
- C. 它是注释的另一种写法
- D. 它是内置函数,不是关键字,但也不该拿来当变量名
print 属于内置函数,不在 35 个关键字里。它虽然能被覆盖,但千万别这么干,否则打印功能就废了。