例如如下程序。

 
 

运行上面代码,如果输入年龄小于20,将会看到如下运行结果。

 
 

从上面代码可以看出,如果输入的年龄大于20,则程序会执行整体缩进的代码块。

再次重复:Python不是格式自由的语言,因此你不能随心所欲地缩进,必须按Python语法要求缩进。下面详细介绍在缩进过程中可能导致的错误。

不要忘记缩进

代码块一定要缩进,否则就不是代码块。例如如下程序。

 
 

上面程序的if条件与下面的print语句位于同一条竖线上,这样在if条件下就没有受控制的代码块了。因此,上面程序执行时会报出如下错误。

 
 

注意:if条件后的条件执行体一定要缩进。只有缩进后的代码才能算条件执行体。

接下来读者会产生一个疑问:代码块(条件执行体)到底要缩进多少呢?这个随意。你可以缩进1个空格、2个空格、3个空格……或1个Tab位,这都是符合语法要求的。但从编程习惯来看,Python通常建议缩进4个空格。

有些时候,Python解释器不会报错,但并不代表程序没有错误。例如如下代码

 
 

解释执行上面程序,程序不会报任何错误。但如果输入一个小于20的年龄,则可看到如下运行过程。

 
 

从运行过程可以看出,我们输入的年龄明明小于20,但运行结果还是会打印“20岁以上……”。这是为什么呢?就是因为这条print语句没有缩进。如果这行代码不缩进,那么Python就不会把这行代码当成条件执行体,它就不受if条件的控制,因此无论用户输入什么年龄,print语句总会执行。

如果忘记正确地缩进,很可能导致程序的运行结果超出我们的预期。例如如下程序。

 
 

面代码中以粗体字标识的代码行:print("b不大于4")总会执行,因为这行代码没有缩进,因此它就不属于else后的条件执行体,else后的条件执行体只有b - =1这一行代码。

如果要让print("b不大于4")语句也处于else控制之下,则需要让这行代码也缩进4个空格。

if、else、elif后的条件执行体必须使用相同缩进的代码块,将这个代码块整体作为条件执行体。当if后有多条语句作为条件执行体时,如果忘记了缩进某一行代码,则会引起语法错误。看下面代码(程序清单同上)。

 
 

在上面代码中,因为if后的条件执行体的最后一条语句没有缩进,所以系统只把c - = 1一行代码作为条件执行体,当c -= 1语句执行结束后,if语句也就执行结束了。后面的print("c大于4")已经是一行普通代码,不再属于条件执行体,从而导致else语句没有if语句,引发编译错误。在学习中有迷茫不知如何学习的朋友小编推荐一个学Python的学习q u n 227  -435-  450可以来了解一起进步一起学习!免费分享视频资料

运行上面代码,将看到如下错误。

 
 

为了改正上面的代码,需要让print("c大于4")也缩进4个空格。

不要随意缩进

需要说明的是,虽然Python语法允许代码块随意缩进N个空格,但同一个代码块内的代码必须保持相同的缩进,不能一会缩进2个空格,一会缩进4个空格。

例如如下代码。

 
 

上面程序中第二条print语句缩进了5个空格,在这样的情况下,Python解释器认为这条语句与前一条语句(缩进了4个空格)不是同一个代码块(这就是游标卡尺笑话的由来),因此Python解释器会报错。运行上面代码,将会报出如下错误。

 
 

把代码改为如下形式。

 
 

上面程序中第二条print语句只缩进了3个空格,它与前一条print语句(缩进了4个空格)同样不属于同一个代码块,因此Python解释器还是会报错。运行上面代码,则会报出如下错误。

 
 

通过上面介绍可以看出,Python代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。

注意:位于同一个代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。

另外,需要说明的是,对于不需要使用代码块的地方,千万不要随意缩进,否则程序也会报错。例如如下简单的程序。

 
 

上面程序只有两条简单的执行语句,并没有包括分支、循环等流程控制,因此不应该使用缩进。解释执行上面代码,将会看到如下错误。

 

  

来源:https://www.jianshu.com/p/253fcbfc0fde

Python这个缩进让我焦头烂额!最奇葩的缩进...的更多相关文章

  1. 零基础入门学习Python(14)--字符串:各种奇葩的内置方法

    前言 这节课我们回过头来,再谈一下字符串,或许我们现在再来谈字符串,有些朋友可能觉得没必要了,甚至有些朋友就会觉得,不就是字符串吗,哥闭着眼也能写出来,那其实关于字符串还有很多你不知道的秘密哦.由于字 ...

  2. Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)

    一.注释Python中单行注释以 # 开头,实例如下: # 第一个注释 print ("Hello, Python!") # 第二个注释 输出结果为: ============== ...

  3. Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?

    大家好,这是"Python为什么"系列节目的文字稿(文末有观看地址). 本期话题:Python 为什么使用缩进来划分代码块,而不像其它语言使用花括号 {} 或者 "end ...

  4. 【python】python2.x 与 python3.x区别对照+缩进错误解决方法

    仅仅列出我用到的,不全. 划重点: 1. urllib2 用 urllib.request 代替 2. urllib.urlencode 用 urllib.parse.urlencode 代替 3. ...

  5. python代码缩进

    习惯了java,c++之类的宽容,初学python,被它摆了道下马威,写if else,竟然必须要我正确用缩进格式,原来在python里不能用括号来表示语句块,也不能用开始/结束标志符来表示,而是靠缩 ...

  6. Python行和缩进

    Python缩进和冒号 对于Python而言代码缩进是一种语法,Python没有像其他语言一样采用{}或者begin...end分隔代码块,而是采用代码缩进和冒号来区分代码之间的层次. 缩进的空白数量 ...

  7. Python 坑爹之 代码缩进

    建议:统一使用空格!!!!!!!!!不要Tab Python代码缩进   这两天python-cn邮件列表有一条thread发展的特别长,题目是<python的代码缩进真是坑爹>(地址), ...

  8. 缩进(Python很将就格式)

    空白在Python中是重要的.事实上行首的空白是重要的.它称为缩进.在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组.这意味着同一层次的语句必须有相同的缩进.每一组这样 ...

  9. Python代码缩进与测试模块

    一.Python代码缩进 Python 函数没有明显的  begin 和  end ,没有标明函数的开始和结束的花括号.唯一的分隔符是一个冒号 ( : ),接着代码本身是缩进的. 例如:缩进  bui ...

随机推荐

  1. SpringAOP-切面优先级

    项目中有两个切面,这两个切面都作用于同一个方法,哪个先执行哪个后执行呢,所以要定义一个切面的优先级 import java.util.Arrays; import org.aspectj.lang.J ...

  2. 使用SMTP发送邮件

    先定义一个邮件实体: public class EntityMail { /// <summary> /// 发件人 /// </summary> public string ...

  3. Chapter 3 Phenomenon——16

    "Your X-rays look good," he said. "Does your head hurt? Edward said you hit it pretty ...

  4. 4-nginx-反向代理到tomcat及负载均衡

    反向代理相比于正向代理, 比如使用搬瓦工时, 就是位于客户端的正想代理, 而反向代理则是服务器端的代理, 主要用于实现请求分发, 负载均衡等功能 正向代理推荐一个: 搬瓦工, 比较好用.. 反向代理主 ...

  5. Nodejs学习笔记(十三)—PM2

    简介 PM2 pm2是一个内置负载均衡的node.js应用进程管理器(也支持Windows),其它的类似功能也有不少,但是感觉pm2功能更强,更值的推荐 GitHub地址:https://github ...

  6. ASP.NET Core 中的对象映射之 AutoMapper

    目录 AutoMapper 简介 AutoMapper 使用 初始化 Profile设置 扁平化映射 集合映射 投影 条件映射 值转换 设置转换前后行为 配置验证及设置 反向映射 自定义转换器 自定义 ...

  7. 设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP

    一.DIP简介(DIP--Dependency Inversion Principle): 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象.2.抽象不应该依赖于细节,细节应该依赖于抽象.   ...

  8. shellExcute 与shellExcuteex 的一些东西

    最近在做外部调用exe并传给exe相应参数 方法有两种.. 1,用program.start() 2,shell() 3,调用API 以下内容来自http://www.pinvoke.net/defa ...

  9. jquery源码学习笔记(一)jQuery的无new构建

    本人是一名.net程序员..... 你一个.net coder 看什么jQuery 源码啊? 原因吗,很简单.技多不压身吗(麻蛋,前端工作好高...羡慕). 我一直都很喜欢JavaScript,废话不 ...

  10. 让Div居中的方法

    1,设置元素宽度和margin值 div{ width : 90%; margin : 0px auto } 2, 定位元素,并设置其左右距离,但,不能设定宽度 div{ position : abs ...