Python if else语句用法规范 图片看不了?点击切换HTTP 返回上层
在使用 if elif else 条件语句时,需要初学者根据实际应用场景,自行设计表达式和代码块,而在这两部分中,有些细节需要初学者注意。
可能读者会产生一个疑问,条件执行体到底要缩进多少呢?这个随意。你可以缩进 1 个空格、2 个空格、3 个空格…… 或 1 个 Tab 位,这都是符合语法要求的。但从编程习惯来看,Python 通常建议缩进 4 个空格。
有些时候,Python 解释器不会报错,但并不代表程序没有错误。例如如下代码:
如果忘记正确地缩进,很可能导致程序的运行结果超出我们的预期。例如如下程序:
如果要让 print("b不大于4") 语句也处于 else 控制之下,则需要让这行代码也缩进 4 个空格。
if、else、elif 后的条件执行体必须使用相同缩进的代码块,将这个代码块整体作为条件执行体。当 if 后有多条语句作为条件执行体时,如果忘记了缩进某一行代码,则会引起语法错误。看下面代码:
运行上面代码,将看到如下错误:
例如如下代码:
把代码改为如下形式:
通过上面介绍可以看出,Python 代码块中的所有语句必须保持相同的缩进,换句话说,位于同一个代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。
另外,需要说明的是,对于不需要使用代码块的地方,千万不要随意缩进,否则程序也会报错。例如如下简单的程序:
如果程序遗忘了冒号,那么 Python 解释器就无法识别代码块的开始点。例如如下程序:
1) 代码块不要忘记缩进
代码块一定要缩进,否则就不是代码块。例如如下程序:s_age = input("请输入您的年龄:") age = int(s_age) if age > 20 : print("年龄已经大于20岁了")上面程序的 if 条件与下面的 print 语句位于同一条竖线上,这样在 if 条件下就没有受控制的代码块了。因此,上面程序执行时会报出如下错误:
IndentationError: expected an indented block
if 条件后的条件执行体(代码块)一定要缩进。只有缩进后的代码才能算条件执行体。可能读者会产生一个疑问,条件执行体到底要缩进多少呢?这个随意。你可以缩进 1 个空格、2 个空格、3 个空格…… 或 1 个 Tab 位,这都是符合语法要求的。但从编程习惯来看,Python 通常建议缩进 4 个空格。
有些时候,Python 解释器不会报错,但并不代表程序没有错误。例如如下代码:
s_age = input("请输入您的年龄:") age = int(s_age) if age > 20 : print("年龄已经大于20岁了") print("20岁以上的人应该学会承担责任...")解释执行上面程序,程序不会报任何错误。但如果输入一个小于 20 的年龄,则可看到如下运行过程:
请输入您的年龄:12
20岁以上的人应该学会承担责任...
如果忘记正确地缩进,很可能导致程序的运行结果超出我们的预期。例如如下程序:
#定义变量b,并为其赋值 b = 5 if b > 4 : #如果b>4,则执行下面的条件执行体,只有一行代码作为代码块 print("b大于4") else: #否则,执行下面的条件执行体,只有一行代码作为代码块 b -= 1 #对于下面代码而言,它己经不再是条件执行体的一部分,因此总会执行 print("b不大于4")上面代码中,最后一行代码总会执行,因为这行代码没有缩进,因此它就不属于 else 后的条件执行体,else 后的条件执行体只有
b -= 1
这一行代码。如果要让 print("b不大于4") 语句也处于 else 控制之下,则需要让这行代码也缩进 4 个空格。
if、else、elif 后的条件执行体必须使用相同缩进的代码块,将这个代码块整体作为条件执行体。当 if 后有多条语句作为条件执行体时,如果忘记了缩进某一行代码,则会引起语法错误。看下面代码:
# 定义变量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 语句,引发编译错误。运行上面代码,将看到如下错误:
SyntaxError : invalid syntax
为了改正上面的代码,需要让 print("c大于4") 也缩进 4 个空格。2) if 代码块不要随意缩进
需要说明的是,虽然 Python 语法允许代码块随意缩进 N 个空格,但同一个代码块内的代码必须保持相同的缩进,不能一会缩进 2 个空格,一会缩进 4 个空格。例如如下代码:
s_age = input("请输入您的年龄:") age = int(s_age) if age > 20 : print("年龄已经大于20岁了") print("20岁以上的人应该学会承担责任...")上面程序中第 2 个 print 语句缩进了 5 个空格,在这样的情况下,Python 解释器认为这条语句与前一条语句(缩进了 4 个空格)不是同一个代码块(这就是游标卡尺笑话的由来),因此 Python 解释器会报错。运行上面代码,将会报出如下错误:
IndentationError : unexpected indent
把代码改为如下形式:
s_age = input("请输入您的年龄:") age = int(s_age) if age > 20 : print("年龄已经大于20岁了") print("20岁以上的人应该学会承担责任...")上面程序中第二条 print 语句只缩进了 3 个空格,它与前一条 print 语句(缩进了 4 个空格)同样不属于同一个代码块,因此 Python 解释器还是会报错。运行上面代码,则会报出如下错误:
IndentationError: unindent does not match any outer indentation level
通过上面介绍可以看出,Python 代码块中的所有语句必须保持相同的缩进,换句话说,位于同一个代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。
另外,需要说明的是,对于不需要使用代码块的地方,千万不要随意缩进,否则程序也会报错。例如如下简单的程序:
msg = "Hello, Charlie" print(msg)上面程序只有两条简单的执行语句,并没有包括分支、循环等流程控制,因此不应该使用缩进。解释执行上面代码,将会看到如下错误:
Indentat ionError:unexpected indent
3) if 表达式不要遗忘冒号
从 Python 语法解释器的角度来看,Python 冒号精确表示代码块的开始点这个功能不仅在条件执行体中如此,后面的循环体、方法体、类体全部遵守该规则。如果程序遗忘了冒号,那么 Python 解释器就无法识别代码块的开始点。例如如下程序:
age = 24 if age > 20 print("年龄已经大于20岁了") print("20岁以上的人应该学会承担责任...")上面 if 条件后忘了写冒号,因此 Python 就不知道条件执行体的开始点。运行上面程序,将会报出如下错误:
SyntaxError : invalid syntax
上面介绍的有关代码块的知识,不仅适用于 if 分支的代码块,也适用于作为循环体的代码块等。后面我们还会见到大量的 Python 代码块缩进、代码块必须以冒号开头的示例。