01 if条件语句

if语句用于检测某个条件是否成立。如果成立,则执行if语句内的程序;否则,跳过if语句,执行后面的内容。if语句的格式如下。

if(表达式):

语句1

else:

语句2

if语句的执行过程如下:如果表达式的布尔值为真,则执行语句1;否则,执行语句2。其中的else子句可以省略,表达式两侧的括号也可以省略。

在讲解if语句之前,先介绍一下Python中的控制台输入函数。在C语言中,使用scanf()和getchar()捕获用户输入,而Java语言的System.in包提供了控制台输入的方法。Python也提供了类似功能的函数——input(),用于捕获用户的原始输入并将其转为字符串。input()函数的声明如下。

input([prompt]) -> string

参数prompt是控制台中对于输入的提示文字,提示用户输入,返回值为字符串。如果输入的是数字,返回的还是字符串,那么使用前需要调用int()做一下字符串和数字类型的转换。下面这段代码说明了字符串和数字类型的转换。

x = input("x:")

x = int(x)

x = x + 1

如果不调用int()把字符串转换为数字,而直接计算表达式x = x + 1,将提示如下错误。

TypeError: Can't convert 'int' objecttostr implicitly

下面这段代码演示了if语句的执行流程。

1# 执行if语句内的程序

2a = input("a:")

3a = int(a)

4b = input("b:")

5b = int(b)

6if(a > b):

7 print (a, " > ", b)

【代码说明】

第2行代码定义了变量a。

第3行将用户输入的a转换为int类型。

第4行代码定义了变量b。

第5行将用户输入的b转换为int类型。

第6行代码判断变量a、b的大小。

对于第7行代码,假设a=2、b=1,输出结果:2>1。

如果不满足if语句内的条件,程序将跳过if语句,执行后面的内容。

1# 跳过if语句

2a = input("a:")

3a = int(a)

4b = input("b:")

5b = int(b)

6if(a > b):

7 print (a, " > ", b)

8print (a, " < ", b)

【代码说明】

假设a=1、b=2,第6行代码中变量a的值小于变量b的值,因此,程序跳转执行第8行代码。

第8行代码输出结果:1<2。

【例3-1】把上面的代码改写成if… else…结构。

【例3-1.py】

1# if…else…语句

2a = input("a:")

3a = int(a)

4b = input("b:")

5b = int(b)

6if(a > b):

7 print (a, " > ", b)

8else:

9 print (a, " < ", b)

【代码说明】

假设a=1、b=2,第6行代码中变量a的值小于变量b的值。因此,程序跳转到else子句。

第9行代码输出结果:1<2。

注意:else子句后需要加一个冒号,使Python解释器能识别出else子句对应的代码块。Java程序员可能会不习惯这种语法,往往会忽略else子句后的冒号。在Python 2中还可用raw_input()函数接收用户输入,其功能与Python 3的input()相同。而Python 2中的input()接收的值不转换为字符串类型,而是保留原始类型,它在Python 3中已经去除。

02 if…elif…else判断语句

if…elif…else语句是对if…else…语句的补充。当程序的条件分支很多时,可以使用这种语句。if…elif…else语句相当于C、Java中的if…elseif…else语句。该语句的格式如下。

if(表达式1): 语句1

elif(表达式2): 语句2

elif(表达式n): 语句n

else: 语句m

if…elif…else语句的执行过程:首先判断表达式1的值是否为真。如果为真,则执行语句1。否则,程序流转到elif子句,判断表达式2的值是否为真。如果表达式2的值为真,则执行语句2。否则,程序进入下面一个elif子句,以此类推。如果所有的表达式都不成立,则程序执行else子句的代码。其中的else子句可以省略,表达式两侧的括号也可以省略。

下面【例3-2】中的这段代码通过判断学生的分数,确定学生成绩的等级。

【例3-2.py】

1# if elifelse语句

2score = float( input("score:")) # 接收用户输入并将其转换为float类型,当输入为小数时,使用int转换会报错

3if 90 <= score <= 100:

4 print("A")

5elif 80 <= score < 90:

6 print("B")

7elif 60 <= score < 80:

8 print("C")

9else:

0 print("D")

【代码说明】

第2行代码定义了一个变量score,假设输入的值为70。这个变量表示学生的分数。接收用户输入并将其转换为float类型。

第3行代码,分数大于等于90并且小于等于100,则等级评定为“A”。

第5行代码,分数大于等于80并且小于90,则等级评定为“B”。

第7行代码,分数大于等于60并且小于80,则等级评定为“C”。此时条件表达式成立,程序流转到第8行。输出结果为C。

第9行代码,当前面的条件表达式都不成立时,程序流转到else子句。

03 if语句也可以嵌套

if语句的嵌套是指if语句中可以包含一个或多个if语句。嵌套的格式如下所示。

if(表达式1):

if(表达式2): 语句1

elif(表达式3): 语句2

else: 语句3

elif(表达式n):

else:

下面【例3-3】中的这段代码是一个嵌套的条件语句。如果x的值大于0,则y的值等于1;如果x的值等于0,则y的值等于0;如果x的值小于0,则y的值等于-1。

【例3-3.py】

1x = -1

2y = 99

3if(x >= 0):

4 if(x > 0):#嵌套的if语句

5 y = 1

6 else:

7 y = 0

8else:

9 y = -1

0print ("y =", y)

【代码说明】

第2行代码定义了一个变量y。为了不和最终可能的输出结果1、0、-1重复,设置y的初始值为99。

第3行代码判断变量x的值。如果x大于等于0,则执行下面嵌套的if语句。

第4行代码,判读x的值是否大于0。如果大于0,则执行第5行代码;否则,执行第7行代码。

第8行代码,如果变量x的值小于0,则执行第9行代码。

第9行代码,由于变量x的值为-1,因此y的值等于-1。

第10行代码的输出结果为-1。

嵌套语句可以组合出很多写法,但是要注意把所有的分支情况都考虑到。下面的这种写法是错误的。

1# 错误的嵌套语句

2x = -1

3y = 99

4if(x != 0): # 如果x不等于0

5 if(x > 0): #嵌套的if语句

6 y = 1

7else:

8 y = 0

9print ("y =", y)

【代码说明】

第4行代码判断变量x的值是否等于0。如果不等于0,则执行if语句下面的代码块;否则执行else子句的代码。由于x的值等于-1,程序流转到第5行。

第5行代码判断变量x的值是否大于0。如果大于0,则变量y的值设置为1。由于这里没有考虑到变量x小于0的情况,所以程序直接跳转到第9行。

第9行代码,变量y的值并没有被改变,程序的分支结构没有考虑到x小于0的情况,所以最终输出的不是期望中的结果。输出结果为99。

注意:编写条件语句时,应该尽可能避免使用嵌套语句。嵌套语句不便于阅读,而且可能会忽略一些可能性。

04 switch语句的替代方案

switch语句用于编写多分支结构的程序,类似于if…elif…else语句。C语言中switch语句的结构如下所示。

switch(表达式) {

case常量表达式1: 语句1

case常量表达式2: 语句2

case常量表达式n: 语句n

default: 语句m

}

switch语句表示的分支结构比if…elif…else语句更清晰,代码可读性更高,但是Python并没有提供switch语句,而是可以通过字典实现switch语句的功能。

实现方法分为两步。首先,定义一个字典。字典是由键值对组成的集合。其次,调用字典的get()获取相应的表达式。

下面【例3-4】中的这段代码通过算术运算的符号,获取算术运算表达式。

【例3-4.py】

1# 使用字典实现switch语句

2from __future__ import division# 导入division模块

3x = 1

4y = 2

5operator = "/"

6result = { # 定义字典

7"+": x + y,

8"-": x - y,

9"*": x * y,

10"/": x / y

11}

12print (result.get(operator))

【代码说明】

第3、4行代码定义了两个操作数x、y。

第5行代码定义了操作符变量operator,该变量用于存放算术运算符。

第6行代码定义了一个字典result。该字典的key值由“+”“-”“*”“/”四则运算符组成。value值由对应的算术表达式组成。

第12行代码调用get()方法,get()的参数就是变量operator的值。由于operator的值为“/”,因此将执行除法运算。输出结果为0.5。

另一种使用switch分支语句的方案是创建一个switch类,处理程序的流转。这种实现方法比较复杂,涉及面向对象、for循环、中断语句、遍历等知识,实现步骤分为4步。

创建一个switch类,该类继承自Python的祖先类object。调用构造函数__init__()初始化需要匹配的字符串,并定义两个成员变量value和fall。value用于存放需要匹配的字符串。fall用于记录是否匹配成功,初始值为False,表示匹配不成功。如果匹配成功,程序向后执行。

定义一个match()方法,该方法用于匹配case子句。这里需要考虑3种情况。首先是匹配成功的情况,其次是匹配失败的默认case子句,最后是case子句中没有使用break中断的情况。

重写__iter__()方法,定义了该方法后才能使switch类用于循环语句中。__iter__()调用match()方法进行匹配,通过yield关键字,使函数可以在循环中迭代。此外,调用异常StopIteration中断循环。Python中的循环都是通过异常StopIteration中断的。这样switch类就构造完成了。

编写调用代码,在for…in…循环中使用switch类。

下面【例3-5】中的这段代码实现了switch语句的功能。

【例3-5.py】

1class switch(object):# 定义switch类

2 def __init__(self, value):# 初始化需要匹配的值value

3 self.value = value

4 self.fall = False# 如果匹配到的case语句中没有break,则fall为True

5

6 def __iter__(self):# 定义__iter__()方法

7 yield self.match # 调用match方法 返回一个生成器

8 raise StopIteration# 用StopIteration 异常来判断for循环是否结束

9

10 def match(self, *args): # 模拟case子句的方法

11 if self.fall ornotargs: # 如果fall为True,则继续执行下面的case子句

12 # 或case子句没有匹配项,则流转到默认分支

13 returnTrue

14 elif self.value inargs: # 匹配成功

15 self.fall = True

16 returnTrue

17 else: # 匹配失败

18 returnFalse

19

20operator = "+"

21x = 1

22y = 2

23for caseinswitch(operator): # switch只能用于for...in...循环中

24 if case('+'):

25 print (x + y)

26 break

27 if case('-'):

28 print (x - y)

29 break

30 if case('*'):

31 print (x * y)

32 break

33 if case('/'):

34 print (x / y)

35 break

36 if case(): # 默认分支

37 print ""

【代码说明】

第1行到第18行代码定义了switch类,定义了__init__()、__iter__()、match()方法。

第23行代码在for…in…循环中调用switch类,变量operator作为switch类的参数传递给构造函数。变量operator的值等于“+”,程序流转到第24行。

第25行代码输出x + y的结果。输出结果为3。

第26行代码使用break语句中断switch分支结构,程序流转到文件的末尾。

【编辑推荐】

【责任编辑:华轩 TEL:(010)68476606】

点赞 0

python中if else语句用法_Python条件语句详解:if、else、switch都有了相关推荐

  1. python中if else语句用法_Python 条件语句(If ... Else)

    1.Python条件If语句 Python支持数学中常见的逻辑条件::等于: a == b 不等于: a != b 小于: a < b 小于等于: a <= b 大于: a > b ...

  2. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  3. python中open函数打开文件_Python open函数详解:打开指定文件

    掌握了各种操作目录字符串或目录的函数之后,接下来可以准备读写文件了.在进行文件读写之前,首先要打开文件. Python 提供了一个内置的 open() 函数,该函数用于打开指定文件. open() 函 ...

  4. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  5. python os模块安装方法_基于python中pygame模块的Linux下安装过程(详解)

    一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...

  6. python数组相减_对Python 中矩阵或者数组相减的法则详解

    对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...

  7. 站长在线Python精讲:在Python中使用正则表达式的sub()方法替换字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的sub()方法替换字符串详解>. 在Python中使用正则表达式的sub()方法替换字符串. ...

  8. 站长在线Python精讲:在Python中使用正则表达式的split()方法分割字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的split()方法分割字符串详解>. 使用正则表达式分割字符串 在Python中使用正则表达 ...

  9. python url解码_对python中url参数编码与解码的实例详解

    一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...

  10. getpid php,对python中的os.getpid()和os.fork()函数详解

    如下所示: import os import sys import time processNmae = 'parent' print "Program executing ntpid:%d ...

最新文章

  1. 云大使推广中的常见热门问题
  2. Laravel 中的 Many-To-Many
  3. resultmap为list_MyBatis源码:原来 resultMap 解析完是这样
  4. 安装Oracle 10g sys,system 密码忘记设置解决办法
  5. windows server 2003 r2 64位web服务器安装配置注意事项
  6. python科学编程入门书_Python数据科学零基础一本通
  7. 加减法计算器-java
  8. adalm pluto_Apache Pluto和PHP集成示例教程
  9. Lucene(.net)学习
  10. yum安装mysql5.7
  11. BEAMnrc参数设置_MainInputs(3)
  12. 常见设计规范与 Sketch 源文件下载集合
  13. 看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了
  14. GODOT游戏编程001
  15. php怎么把图片设置为背景,ppt怎么把图片设为背景
  16. FPGA是什么呢,通透讲解单片机和FPGA的区别
  17. 在excel中批量生成条形码的操作方法?
  18. FPGA:vivado2018.1编程界面字体大小与颜色修改
  19. 项目时间(项目活动持续时间估算、计划编制)笔记
  20. 19 - Dva框架基础

热门文章

  1. 最受欢迎的9个前端UI框架
  2. Proteus8.9 仿真数码管 闪退问题及其解决方法
  3. 同城门户同城分类信息网站源码discuz插件+pc端+小程序端+49款插件
  4. 新版《中国药典》提升中药标准
  5. 2FSK在瑞利衰落信道下的相干与非相干解调误码率-MATLAB基带仿真
  6. Monkey patcher for Lua
  7. 无线安全相关介绍及Windows下扫描WiFi
  8. 好用的飞书版固定资产管理系统
  9. 【每周荐书系列】——《认知盈余》
  10. 推荐一款PHP的虚拟主机管理系统,比星外更好用