目 录CONTENT

文章目录

Python(二) 基础语法:缩进和代码块

Python(二) 基础语法:缩进和代码块

一、为什么要学习缩进和代码块

学习 Python 时,缩进和代码块是非常重要的基础内容。

在很多编程语言中,代码块通常用大括号 {} 表示。例如有些语言会这样写:

if 条件 {
    条件成立时执行的代码
}

但是 Python 不使用大括号来表示代码块,而是使用缩进。

也就是说,在 Python 中,缩进不只是为了让代码看起来整齐,它本身就是语法的一部分。

如果缩进写错,程序可能会直接报错;即使没有报错,也可能导致程序执行结果和预期不一样。

所以,学习 Python 一定要重视缩进和代码块。


二、缩进的定义

缩进指的是一行代码开头处空出来的距离。

在 Python 中,缩进用来表示代码之间的层级关系。

例如:

if True:
    print("条件成立")

第二行 print("条件成立") 前面有一段空白,这段空白就是缩进。

它表示:

print("条件成立") 这一行属于 if 语句内部。

如果没有缩进:

if True:
print("条件成立")

Python 就不知道 if True: 后面到底要执行哪一行代码,因此会报错。


三、代码块的定义

代码块指的是一组在逻辑上属于同一层级、共同完成某个任务的代码。

在 Python 中,代码块通常出现在冒号 : 后面,并且通过缩进来表示。

常见会产生代码块的语句包括:

  • if 条件判断
  • elifelse
  • for 循环
  • while 循环
  • def 函数定义
  • class 类定义
  • tryexceptfinally 异常处理
  • with 上下文管理

例子:

age = 18

if age >= 18:
    print("已成年")
    print("可以参加活动")

这里:

print("已成年")
print("可以参加活动")

这两行都缩进了,所以它们共同组成 if age >= 18: 的代码块。


四、缩进和代码块的关系

在 Python 中,可以这样理解:

缩进决定代码属于哪个代码块。

也就是说:

  • 缩进相同的代码,通常属于同一个代码块。
  • 缩进更多的代码,通常表示进入了更里面的一层代码块。
  • 缩进减少的代码,通常表示退出了当前代码块。

例子:

age = 20

if age >= 18:
    print("已成年")
    print("可以办理成人业务")

print("程序结束")

这段代码中:

print("已成年")
print("可以办理成人业务")

有相同的缩进,所以都属于 if 代码块。

而:

print("程序结束")

没有缩进,所以它不属于 if 代码块。无论 if 条件是否成立,这一行都会执行。


五、缩进的基本使用方法

1. 冒号后面通常要缩进

在 Python 中,很多语句后面会有冒号 :。冒号表示“下面要开始一个代码块了”。

例如:

if score >= 60:
    print("及格")

冒号后面的下一行,一般要缩进。

再看几个例子:

for i in range(3):
    print(i)
def hello():
    print("你好")
while True:
    print("循环中")
    break

这些冒号后面的代码都需要缩进。


2. 同一个代码块中的缩进要保持一致

同一个代码块里的代码,缩进必须保持一致。

正确:

if True:
    print("第一行")
    print("第二行")

错误:

if True:
    print("第一行")
      print("第二行")

第二个例子中,两行 print 的缩进不一致,Python 可能会报缩进错误。

课堂上可以提醒学生:

同一组代码要站在同一条“起跑线”上。


3. 推荐使用 4 个空格作为一级缩进

Python 官方推荐每一级缩进使用 4 个空格。

例如:

if age >= 18:
    print("已成年")

这里 print("已成年") 前面有 4 个空格。

虽然有些编辑器也支持按 Tab 键缩进,但在教学和实际开发中,建议统一使用 4 个空格。

很多代码编辑器中,按一次 Tab 键会自动转换成 4 个空格。这样既方便输入,又符合规范。


4. 嵌套代码块需要继续增加缩进

如果一个代码块里面还有另一个代码块,就需要继续增加缩进。

例如:

score = 85

if score >= 60:
    print("成绩及格")

    if score >= 90:
        print("成绩优秀")
    else:
        print("成绩普通")
else:
    print("成绩不及格")

这段代码中有两层判断:

  • 第一层判断:是否及格。
  • 第二层判断:在及格的前提下,是否优秀。

缩进层级可以这样看:

第 0 层:score = 85
第 0 层:if score >= 60:
第 1 层:    print("成绩及格")
第 1 层:    if score >= 90:
第 2 层:        print("成绩优秀")
第 1 层:    else:
第 2 层:        print("成绩普通")
第 0 层:else:
第 1 层:    print("成绩不及格")

每进入一层代码块,就多缩进一级。


六、常见语句中的代码块

1. if 条件判断代码块

if 用来根据条件决定是否执行某段代码。

temperature = 35

if temperature >= 30:
    print("天气很热")
    print("记得多喝水")

当条件成立时,缩进在 if 下面的代码块会执行。

如果条件不成立,这个代码块会被跳过。


2. if...else 代码块

else 表示“否则”。

age = 16

if age >= 18:
    print("已成年")
else:
    print("未成年")

这里有两个代码块:

if age >= 18:
    print("已成年")

和:

else:
    print("未成年")

注意:

ifelse 要对齐,表示它们属于同一组判断结构。


3. if...elif...else 代码块

elif 表示“否则如果”,用于多个条件判断。

score = 76

if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 60:
    print("及格")
else:
    print("不及格")

这里要注意:

  • ifelifelse 要对齐。
  • 每个冒号后面的执行语句要缩进。
  • 哪个条件成立,就执行哪个代码块。

4. for 循环代码块

for 循环用来重复执行某段代码。

for i in range(3):
    print("当前数字是:", i)

缩进在 for 下面的代码就是循环体。

这段代码会输出 3 次。

如果有多行缩进代码,它们都会被重复执行:

for i in range(3):
    print("开始第", i, "次循环")
    print("循环处理中")

print("循环结束")

这里前两行 print 属于循环代码块,会重复执行。

最后一行 print("循环结束") 没有缩进,不属于循环代码块,只会在循环结束后执行一次。


5. while 循环代码块

while 循环会在条件成立时反复执行代码块。

count = 1

while count <= 3:
    print("第", count, "次执行")
    count = count + 1

print("循环结束")

这里:

print("第", count, "次执行")
count = count + 1

属于 while 代码块,会重复执行。

print("循环结束") 不属于循环,只会执行一次。


6. 函数代码块

使用 def 定义函数时,函数体必须缩进。

def greet(name):
    print("你好," + name)
    print("欢迎学习 Python")

函数体就是函数被调用时要执行的代码块。

调用函数:

greet("小明")

执行结果:

你好,小明
欢迎学习 Python

如果函数体没有缩进:

def greet(name):
print("你好," + name)

程序会报错,因为 Python 不知道函数里面到底有哪些代码。


7. 类代码块

使用 class 定义类时,类里面的内容也必须缩进。

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def show_info(self):
        print(self.name, self.score)

这里有多个缩进层级:

  • class Student: 后面缩进的是类的内容。
  • def __init__def show_info 是类里面的方法。
  • 方法里面的代码还要再缩进一级。

七、代码块从哪里开始,到哪里结束

这是教学中很关键的一点。

在 Python 中:

代码块通常从冒号 : 后面的下一行缩进开始。

代码块结束于缩进减少的位置。

例子:

age = 20

if age >= 18:
    print("已成年")
    print("可以进入")
print("检查结束")

这里的 if 代码块是:

print("已成年")
print("可以进入")

因为这两行都比 if 多缩进一级。

当代码回到没有缩进的位置:

print("检查结束")

就表示 if 代码块已经结束了。


八、缩进错误的常见类型

1. 该缩进时没有缩进

错误代码:

if True:
print("Hello")

问题:

if True: 后面需要一个缩进代码块,但 print("Hello") 没有缩进。

正确写法:

if True:
    print("Hello")

2. 不该缩进时多缩进

错误代码:

name = "小明"
    print(name)

问题:

print(name) 前面突然多了缩进,但它前面没有 iffordef 等需要代码块的语句。

正确写法:

name = "小明"
print(name)

3. 同一个代码块缩进不一致

错误代码:

if True:
    print("第一行")
   print("第二行")

问题:

两行 print 看起来都属于 if,但缩进空格数不一样。

正确写法:

if True:
    print("第一行")
    print("第二行")

4. 混用 Tab 和空格

错误示例:

if True:
	print("这一行可能用了 Tab")
    print("这一行用了空格")

肉眼看起来两行可能差不多,但 Python 可能认为它们的缩进不一致。

建议:

  • 统一使用 4 个空格。
  • 在编辑器中开启“显示空白字符”。
  • 设置 Tab 键自动转换成空格。

5. else、elif 没有和 if 对齐

错误代码:

score = 80

if score >= 60:
    print("及格")
    else:
        print("不及格")

问题:

else 是和 if 配套的,应该和 if 对齐,而不是缩进到 if 代码块里面。

正确写法:

score = 80

if score >= 60:
    print("及格")
else:
    print("不及格")

九、缩进影响程序逻辑

缩进不只是影响程序是否报错,还会影响程序的执行逻辑。

看下面两个例子。

例子 1

score = 50

if score >= 60:
    print("及格")
    print("恭喜你")

因为两个 print 都在 if 代码块里面,所以只有当 score >= 60 成立时,它们才会执行。

score = 50 时,什么都不会输出。


例子 2

score = 50

if score >= 60:
    print("及格")
print("恭喜你")

这一次,只有 print("及格") 属于 if 代码块。

print("恭喜你") 没有缩进,所以它不受 if 控制,始终会执行。

score = 50 时,输出:

恭喜你

这说明:

缩进不同,程序逻辑就可能完全不同。


十、空代码块和 pass

有时候我们暂时还没有想好代码块里面要写什么,但语法上又必须有内容。

这时可以使用 pass

pass 表示“什么也不做”,它是一个占位语句。

例如:

if True:
    pass

再比如,先写函数结构,函数内容以后再补:

def login():
    pass

如果不写 pass

def login():

程序会报错,因为函数后面必须有一个代码块。

课堂上可以这样讲:

pass 就像一个临时占位符,告诉 Python:“这里我知道需要写内容,只是现在先空着。”


十一、缩进和代码风格建议

1. 每一级缩进使用 4 个空格

推荐:

if is_student:
    print("学生")

不推荐一会儿 2 个空格,一会儿 4 个空格。

统一风格能减少错误,也方便别人阅读。


2. 不要写太多层嵌套

嵌套层级太多时,代码会变得难读。

不太推荐:

if user_is_login:
    if user_has_permission:
        if data_is_valid:
            print("可以提交")

可以尝试改得更清楚:

if not user_is_login:
    print("请先登录")
elif not user_has_permission:
    print("没有权限")
elif not data_is_valid:
    print("数据无效")
else:
    print("可以提交")

第二种写法层级更少,更容易看懂。


3. 使用空行分隔不同逻辑

空行不会产生代码块,但可以让代码结构更清晰。

name = input("请输入姓名:")
score = int(input("请输入成绩:"))

if score >= 60:
    print(name, "及格")
else:
    print(name, "不及格")

print("成绩判断完成")

这里空行用于分隔输入、判断和结束输出三个部分。

注意:

空行只是为了阅读方便,不表示代码块。

真正决定代码块的是缩进。


4. 使用编辑器自动格式化

教学或开发时,建议使用支持 Python 的编辑器,例如:

  • PyCharm
  • VS Code
  • IDLE
  • Jupyter Notebook

这些工具通常能自动缩进,也能提示缩进错误。

不过学生仍然要理解缩进规则,不能只依赖工具。


十二、教学中容易出现的误区

误区 1:缩进只是为了好看

这是错误的。

在 Python 中,缩进是语法的一部分。

下面两段代码的逻辑不同:

if True:
    print("A")
    print("B")

和:

if True:
    print("A")
print("B")

第一段中,AB 都属于 if

第二段中,只有 A 属于 ifB 不属于 if


误区 2:冒号后面可以不写缩进代码

这是错误的。

下面代码会报错:

if age >= 18:
print("已成年")

冒号表示代码块开始,下一行通常必须缩进。


误区 3:Tab 和空格可以随便混用

不建议这样做。

因为 Tab 和空格虽然显示效果可能相似,但它们不是同一个字符。

混用后,程序可能出现缩进错误。

建议统一使用 4 个空格。


误区 4:空行可以结束代码块

空行本身不会决定代码块结束。

代码块是否结束,要看下一行的缩进有没有减少。

例子:

if True:
    print("第一行")

    print("第二行")

虽然中间有空行,但两行 print 都是同一级缩进,所以它们都属于 if 代码块。


十三、课堂讲解示例

下面是一段适合课堂演示的完整代码:

score = int(input("请输入成绩:"))

if score >= 90:
    print("优秀")
    print("继续保持")
elif score >= 60:
    print("及格")
    print("还可以继续提高")
else:
    print("不及格")
    print("需要加油")

print("程序结束")

可以这样带学生分析:

  1. if score >= 90: 后面有冒号,表示下面开始一个代码块。
  2. print("优秀")print("继续保持") 缩进相同,所以属于同一个代码块。
  3. elif score >= 60:if 对齐,说明它和 if 是同一组条件判断。
  4. else:ifelif 对齐,表示前面条件都不成立时执行。
  5. print("程序结束") 没有缩进,所以不属于任何一个条件分支,总是会执行。

十四、课堂练习

练习 1:判断代码是否正确

下面代码是否正确?如果不正确,请改正。

age = 18

if age >= 18:
print("已成年")

参考答案:

不正确。if 后面的代码块需要缩进。

age = 18

if age >= 18:
    print("已成年")

练习 2:判断输出结果

阅读下面代码,判断输出结果。

score = 50

if score >= 60:
    print("及格")
print("考试结束")

参考答案:

考试结束

原因:

print("考试结束") 没有缩进,不属于 if 代码块,所以无论成绩是否及格都会执行。


练习 3:找出缩进问题

下面代码有什么问题?

score = 85

if score >= 60:
    print("及格")
      print("继续努力")

参考答案:

第二个 print 的缩进和第一个 print 不一致。

正确写法:

score = 85

if score >= 60:
    print("及格")
    print("继续努力")

练习 4:补全代码块

请使用 pass 补全下面代码,让它暂时不报错。

def register_user():

参考答案:

def register_user():
    pass

练习 5:分析代码块范围

阅读下面代码,指出哪些代码属于 for 循环。

for i in range(3):
    print("循环开始")
    print(i)

print("循环结束")

参考答案:

属于 for 循环的代码是:

print("循环开始")
print(i)

print("循环结束") 没有缩进,不属于循环,只会在循环结束后执行一次。


十五、总结

缩进和代码块是 Python 中非常核心的基础语法。

缩进是代码行开头的空白,用来表示代码层级。代码块是一组属于同一个结构的代码,例如条件判断中的执行语句、循环中的循环体、函数中的函数体。

在 Python 中,代码块通常由冒号 : 引出,并通过缩进表示范围。

教学时可以让学生记住以下几句话:

  1. Python 用缩进表示代码块。
  2. 冒号后面通常要写缩进代码。
  3. 同一个代码块里的缩进必须一致。
  4. 推荐每一级缩进使用 4 个空格。
  5. 缩进改变,程序逻辑也可能改变。
  6. 如果暂时没有代码,可以用 pass 占位。

把缩进规则掌握好,后面学习条件判断、循环、函数、类都会轻松很多。

0
博主关闭了当前页面的评论