当前位置: 首页 > news >正文

Python if else对缩进的要求

前面的《Python if else》一节展示了选择结构的三种基本形式,并给出了实例演示,但是大家在编写代码过程中仍然要注意一些细节,尤其是代码块的缩进,这对 if else 选择结构极其重要。

Python 是以缩进来标记代码块的,代码块一定要有缩进,没有缩进的不是代码块。另外,同一个代码块的缩进量要相同,缩进量不同的不属于同一个代码块。

不要忘记缩进

if、elif 和 else 后面的代码块一定要缩进,而且缩进量要大于 if、elif 和 else 本身。

例如,下面的代码就是一个反面教材:

age = int( input("请输入你的年龄:") )
if age < 18 :
print("警告:你还未成年,不能使用该软件!")
else:
print("你已经成年,可以使用该软件。")

本例中的 print() 函数和 if、else 语句是对齐的,在同一条竖线上,都没有缩进,所以 print() 就不是 if、else 的代码块了,这会导致 Python 解释器找不到 if、else 的代码块,从而报出如下错误:

SyntaxError: expected an indented block

翻译过来就是:

语法错误:需要一个缩进的代码块

总之,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("未成年人如果得到了家长的同意,请忽略以上提示。")  #忘记缩进

这段代码并没有语法错误,但是它的运行逻辑是不对的,比如,输入 16 的运行结果如下:

请输入你的年龄:24↙
未成年人如果得到了家长的同意,请忽略以上提示。

用户的年龄分明大于 18,但是却出现了“未成年人”的提示,画面非常尴尬,这是因为第二个 print() 语句没有缩进,if 没有把它和第一个 print() 语句当做同一个代码块,所以它不是 if 执行体的一部分。解决这个错误也很容易,让第二个 print() 缩进 4 个空格即可。

同一代码块缩进量要相同

Python 虽然不限制代码块的缩进量,你可以随意缩进 n 个空格,但是,同一个代码块内的所有语句都必须拥有相同的缩进量,不能一会缩进 2 个空格,一会缩进 4 个空格。下面的代码是一个反面教材:

age = int( input("请输入你的年龄:") )
if age < 18 :print("你还未成年,建议在家人陪同下使用该软件!")print("未成年人如果得到了家长的同意,请忽略以上提示。")  #缩进量不对

运行这段代码,Python 解释器会报出语法错误:

SyntaxError: unexpected indent

翻译过来就是:

语法错误:意外的缩进

这段代码中,第一个 print() 语句缩进了 4 个空格,第二个 print() 语句缩进了 6 个空格,缩进量不同导致它们不是同一个代码块。

Python 会认为第一个 print() 语句是 if 的执行体,而第二个 print() 是一个意外的存在,不知道该把它当做谁的代码块,所以解析失败,报错。

总之,位于同一个代码块中的所有语句必须拥有相同的缩进量,多一个空格或者少一个空格都不行。

不要随便缩进

另外需要注意的是,不需要使用代码块的地方千万不要缩进,一旦缩进就会产生一个代码块。下面的代码是一个反面教材:

info = "CSDN的网址是:http://www.CSDN.net/"print(info)

这两条简单的语句没有包含分支、循环、函数、类等结构,不应该使用缩进。

 Python教程,8天python从入门到精通,学python看这套就够了

http://www.lryc.cn/news/7646.html

相关文章:

  • java常用设计模式
  • 死锁(5.1)
  • Python 之 Matplotlib 第一个绘图程序和基本方法
  • 数据结构与算法(一):概述
  • Spring3之Bean的属性详解
  • C语言之结构体内存的计算
  • Java网络编程之UDP和TCP套接字
  • Linux进程信号产生以及捕捉
  • 11. GLSL(OpenGL Shader Language)常用知识点汇总
  • 转发一张网络工程师考试的试卷2021.5.15
  • AMD发布23.2.1 新驱动 支持开年新作《魔咒之地》
  • 开放平台如何做接口的签名和加解密?
  • Mr. Cappuccino的第40杯咖啡——Kubernetes之Pod生命周期
  • 记一次OOM
  • idea插件生成dao类service类controller类以及mapper.xml
  • DML 数据操作语言
  • PySpark实战一之入门
  • 【DockerCE】Docker-CE 23.0.1正式版发布
  • vscode开发的Vue家用电器维修服务系统nodejs+mysql
  • PyQt5数据库开发1 4.2 配置SQL Server 2008 数据源(ODBC编程)
  • 【JavaEE】多线程代码实例:单例模式与阻塞队列BlockingQueue
  • 算法思想 - 搜索算法
  • C#底层库--日期扩展类(上周、本周、明年、前年等)
  • 如何在 Webpack 中开启图片压缩
  • Web-Filter
  • 测试写文章自动保存
  • 云平台搭建实例
  • 【Airplay_BCT】关于Bonjour的概念解答
  • C++深入浅出(九)—— 多态
  • shell学习4