千家信息网

如何理解Python条件语句

发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,本篇内容介绍了"如何理解Python条件语句"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!01 if
千家信息网最后更新 2024年10月24日如何理解Python条件语句

本篇内容介绍了"如何理解Python条件语句"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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' object to str 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 elif else语句 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步。

  1. 鸿蒙官方战略合作共建--HarmonyOS技术社区

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

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

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

  5. 编写调用代码,在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 or not args:   # 如果fall为True,则继续执行下面的case子句 12                                 # 或case子句没有匹配项,则流转到默认分支 13            return True 14        elif self.value in args:    # 匹配成功 15            self.fall = True 16            return True 17        else: # 匹配失败 18            return False 19 20operator = "+" 21x = 1 22y = 2 23for case in switch(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分支结构,程序流转到文件的末尾。

"如何理解Python条件语句"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

语句 代码 表达式 变量 程序 子句 输入 方法 输出 结果 条件 分支 字符 字符串 循环 字典 用户 类型 流转 函数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南通专业网络安全准入控制供应商 求生之路连接不了好友的服务器 服务器虚拟机总是宕机 温州系统软件开发中心 网络安全运维工程师具备的技能 机架式服务器维修电话 软件开发环境的数据库 数据库可视化后台控制 steam上看门狗2服务器 内蒙古数据库安全箱生产厂家 远程访问服务器上禁止使用 服务器硬盘录像机维修 青岛软件开发方案 邹平机械软件开发报价 成都市公安局信息网络安全监督局 天龙私服服务器装备脚本修改 邢台市软件开发培训 公司网络安全巡查记录 电脑主机和服务器有什么不同 数据库触发器能用concat 网络安全培训+易企秀 龙岗高效网络数据库维护 武汉聚合联创网络技术有限公司 打车软件开发方案提纲 工厂财务erp系统软件开发 sql 数据库备份教程 软件开发培训学校学费多少 数据库bak文件怎么还原 生活中网络安全 安装数据库2008如何选择磁盘
0