例如如下程序。

 
 

运行上面代码,如果输入年龄小于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. C#获取文件版本、文件大小等信息

    使用以下C#程序代码可以非常方便地获取Windows系统中任意一个文件(尤其是可执行文件)的文件版本.文件大小.版权.产品名称等信息.所获取到的信息类似于在Windows操作系统中右键点击该文件,然后 ...

  2. [原创] rtrim() 格式化中文问题

    先看以下代码 var_dump(rtrim("互联网产品.", ".")); 我们以为会得到结果 "互联网产品", 但实际上获得的是 &qu ...

  3. VSTO学习(五)——创建Word解决方案

    一.引言 在上一个专题中主要为大家介绍如何自定义我们的Excel 界面的,然而在这个专题中,我将为大家介绍如何用VSTO来创建Word项目,对于Word的VSTO开发和Excel的开发很类似,你同样也 ...

  4. Pycharm常用快捷键,以及设置

    工欲善其事必先利其器,Python开发利器Pycharm常用快捷键以及配置如下,相信有了这些快捷键,你的开发会事半功倍 一 常用快捷键 编辑类: Ctrl + D             复制选定的区 ...

  5. java.lang.NoSuchMethodError: org.json.JSONArray.iterator()Ljava/util/Iterator 阿里云短信

    请尝试使用 <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk ...

  6. 远程通信机制RPC与RMI的关系

     1.RPC RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC不依赖于具体的网 ...

  7. ruby大神与菜鸟的代码区别

    之前Brand类   has_and_belongs_to_many :categories, index: true 现在在Category类 增加 has_and_belongs_to_many ...

  8. MongoDB之集合管理二

    上一博客写了集合的管理,集合里面存放的是文档,因此聪明的你应该能想到这篇是学习文档管理.要说标题应该是文档管理,不过对于文档的管理都是先获得集合对象,在集合对象上调用方法管理文档,所以标题还是对集合的 ...

  9. [转]微信小程序支付简单小结与梳理

    本文转自:https://www.cnblogs.com/onetwo/p/6667424.html 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物 ...

  10. JavaScript shift()函数移出数组第一个数据

    pop() 函数用来移出数组中最后一个元素.如果想要移出第一个元素要怎么办呢? .shift() 就是专门用来处理这类型需求的.它的工作原理类似 .pop(),但它移除的是第一个元素,而不是最后一个.