代码块一定要缩进,否则就不是代码块,如下面的程序
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/01
# @Author : Laopi
age = input("请输入你的年龄:")
age = int(age)
if age>18:
print("你已经成年了")
上面程序的if条件与下面的 print 语句位于同一条竖线上,这样在if条件下就没有受控制的代码块了。因此,上面程序执行时会报出如下错误。
if条件后的条件执行体一定要缩进。只有缩进后的代码才能算条件执行体。
那到底要缩进多少?
这个没有特殊规定,你可以缩进1个空格、2个空格、3个空格·····或1个Tab位,这都是符合语法要求的。
从习惯上来说,python一般建议是缩进4个空格
有些时候,Python解释器不会报错,但并不代表程序没有错误。例如如下代码
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/01
# @Author : Laopi
age = input("请输入你的年龄:")
age = int(age)
if age>18:
print('你已经大于18岁了')
print("你已经成年了")
解释执行上面程序,程序不会报任何错误。但如果输入一个小于 20的年龄,则可看到如下运行过程。
从运行过程可以看出,我们输入的年龄明明小于20,但运行结果还是会打印“20岁以上······这是为什么呢?就是因为这条print语句没有缩进。如果这行代码不缩进,那么Python就不会把这行代码当成条件执行体,它就不受if条件的控制,因此无论用户输入什么年龄,print语句总会执行。
如果忘记正确地缩进,很可能导致程序的运行结果超出我们的预期。例如如下程序
#定义变量b,并为其赋值
b = 7
if b >4:
#如果b>4,则执行下面的条件执行体,只有一行代码作为代码块
print("b大于4")
else:
#否则,执行下面的条件执行体,只有一行代码作为代码块
b-=1
# 对于下面代码而言,它已经不再是条件执行体的一部分,因此总会执行
print("b不大于4")
上面代码中以第10行:print("b不大于4")总会执行,因为这行代码没有缩进,因此它就不属于else后的条件执行体,else后的条件执行体只有b-=1这一行代码。如果要让print(“b不大于4")语句也处于else控制之下,则需要让这行代码也缩进4个空格if,else,elif后的条件执行体必须使用相同缩进的代码块,将这个代码块整体作为条件执行体。当缩进后有多条语句作为条件执行体时,如果忘记了缩进某一行代码,则会引起语法错误。看下面代码(程序清单同上)。
#定义变量c 并为其赋值
c = 5
if c > 4:
# 如果c>4,则执行下面的条件执行体,只有c-=一行代码为条件执行体
c-=1
# 下面是一行普通代码,不属于条件执行体
print("c大于4")
# 此处的else将没有if语句,因此编译出错
else:
#否则,执行下面的执行体,只有一行代码作为代码块
print("c不大于4")
在上面代码中,因为if后的条件执行体的最后一条语句没有缩进,所以系统只把c-= 1一行代码作为条件执行体,当c-=1语句执行结束后,if语句也就执行结束了。后面的print("c大于4")已经是一行普通代码,不再属于条件执行体,从而导致else 语句没有if语句,引发编译错误。运行上面代码,将看到如下错误。
为了改正上面的代码,需要让print("c大于4")也缩进4个空格。