Python if else对缩进的要求
大家在编写代码过程中仍然要注意一些细节,尤其是代码块的缩进,这对if else选择结构极其重要。
Python是以缩进来标记代码块的,代码块一定要有缩进,没有缩进的不是代码块。另外,同一个代码块的缩进量要相同,缩进量不同的不属于同一个代码块。
不要忘记缩进
if、elif和else后面的代码块一定要缩进,而且缩进量要大于if、elif和else本身。例如,下面的代码就是一个反面教材:
age = int( input("请输入你的年龄:") )if age < 18 : print("警告:你还未成年,不能使用该软件!")else: print("你已经成年,可以使用该软件。")12345复制代码类型:[python]
本例中的print()函数和if、else语句是对齐的,在同一条竖线上,都没有缩进,所以print()就不是if、else的代码块了,这会导致Python解释器找不到if、else的代码块,从而报出如下错误:
SyntaxError: expected an indented block1复制代码类型:[python]
翻译过来就是:
语法错误:需要一个缩进的代码块1复制代码类型:[python]
总之,if、else后面的代码一定要缩进,否则就不能构成if、else的执行体。
缩进多少合适?
Python要求代码块必须缩进,但是却没有要求缩进量,你可以缩进n个空格,也可以缩进n个Tab键的位置。
但是从编程习惯的角度看,我建议缩进1个Tab键的位置,或者缩进4个空格;它们两者其实是等价的,很多编辑器都可以将Tab键设置为4个空格,比如,IDLE中默认Tab键就是4个空格。
所有语句都要缩进
一个代码块的所有语句都要缩进,而且缩进量必须相同。如果某个语句忘记缩进了,Python解释器并不一定会报错,但是程序的运行逻辑往往会有问题。请看下面的代码:
age = int( input("请输入你的年龄:") )if age < 18 : print("你还未成年,建议在家人陪同下使用该软件!") print("未成年人如果得到了家长的同意,请忽略以上提示。") #忘记缩进1234复制代码类型:[python]
这段代码并没有语法错误,但是它的运行逻辑是不对的,比如,输入16的运行结果如下:
请输入你的年龄:24↙ 未成年人如果得到了家长的同意,请忽略以上提示。12复制代码类型:[python]
用户的年龄分明大于18,但是却出现了“未成年人”的提示,画面非常尴尬,这是因为第二个print()语句没有缩进,if没有把它和第一个print()语句当做同一个代码块,所以它不是if执行体的一部分。解决这个错误也很容易,让第二个print()缩进4个空格即可。
同一代码块缩进量要相同
Python虽然不限制代码块的缩进量,你可以随意缩进n个空格,但是,同一个代码块内的所有语句都必须拥有相同的缩进量,不能一会缩进2个空格,一会缩进4个空格。下面的代码是一个反面教材:
age = int( input("请输入你的年龄:") )if age < 18 : print("你还未成年,建议在家人陪同下使用该软件!") print("未成年人如果得到了家长的同意,请忽略以上提示。") #缩进量不对1234复制代码类型:[python]
运行这段代码,Python解释器会报出语法错误:
SyntaxError:unexpected indent
翻译过来就是:
语法错误:意外的缩进1复制代码类型:[python]
这段代码中,第一个print()语句缩进了4个空格,第二个print()语句缩进了6个空格,缩进量不同导致它们不是同一个代码块。Python会认为第一个print()语句是if的执行体,而第二个print()是一个意外的存在,不知道该把它当做谁的代码块,所以解析失败,报错。
总之,位于同一个代码块中的所有语句必须拥有相同的缩进量,多一个空格或者少一个空格都不行。
不要随便缩进
另外需要注意的是,不需要使用代码块的地方千万不要缩进,一旦缩进就会产生一个代码块。下面的代码是一个反面教材:
纯文本复制
info = "Python教程的网址是:https://topic.kaikeba.com/biancheng/python/jiaocheng" print(info)12复制代码类型:[html]
这两条简单的语句没有包含分支、循环、函数、类等结构,不应该使用缩进。