当前位置: 首页 > 科技观察

Python条件语句详解:if、else、switch都有

时间:2023-03-20 21:30:45 科技观察

01if条件语句if语句用于检测某个条件是否为真。如果为真,则执行if语句中的程序;否则,跳过if语句,执行下面的内容。if语句的格式如下。if(expression):statement1else:statement2if语句的执行过程如下:如果表达式的布尔值为真,则执行语句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'tconvert'int'objecttostrimplicitly以下代码演示了if语句的执行流程。1#执行if语句中的程序2a=input("a:")3a=int(a)4b=input("b:")5b=int(b)6if(a>b):7print(a,">",b)【代码说明】第二行代码定义了变量a。第3行将用户输入的a转换为int类型。第4行定义了变量b。第5行将用户输入的b转换为int类型。第六行代码判断变量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):7print(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):7print(a,">",b)8else:9print(a,"<",b)【代码说明】假设a=1,b=2,第6行变量a的值code的值小于变量b的值。因此,程序跳转到else子句。第9行代码输出结果:1<2。注意:else子句后需要加冒号,以便Python解释器识别else子句对应的代码块。Java程序员可能不习惯这种语法,往往会忽略else子句后的冒号。在Python2中,raw_input()函数也可以用来接收用户输入,与Python3的input()功能相同。Python2中input()接收到的值并没有转换为字符串类型,而是保留了原来的类型,在Python3中已经去掉了。02if...elif...else判断语句if...elif...else语句是对if...else...语句的补充。当程序有很多条件分支时可以使用该语句。if...elif...else语句等同于C和Java中的if...elseif...else语句。该语句的格式如下。if(表达式1):语句1elif(表达式2):语句2...elif(表达式n):语句nelse:语句mif...elif...else语句的执行过程:首先判断值是否为表达式1为真。如果为真,则执行语句1。否则,程序流转到elif子句,该子句检查表达式2的计算结果是否为真。如果表达式2的计算结果为真,则执行语句2。否则,程序将转到下一个elif子句,依此类推。如果所有表达式都不为真,程序将执行else子句中的代码。else子句可以省略,表达式两边的括号也可以省略。下面【例3-2】中的代码通过判断学生的成绩来确定学生成绩的高低。【例3-2.py】1#ifelifelse语句2score=float(input("score:"))#接收用户输入并将其转换为float类型。当输入为小数时,使用int转换会报错3if90<=score<=100:4print("A")5elif80<=score<90:6print("B")7elif60<=score<80:8print("C")9else:0print("D")【代码说明】2行代码定义了一个变量score,假设输入值为70。这个变量代表学生的成绩。接收用户输入并将其转换为float类型。在第三行代码中,如果分数大于或等于90且小于或等于100,则等级为“A”。在第5行中,如果分数大于或等于80且小于90,则等级为“B”。在第7行中,如果分数大于或等于60且小于80,则等级为“C”。至此,条件表达式成立,程序进入第8行,输出C。在第9行代码中,当前面的条件表达式都不为真时,程序进入else子句。03if语句也可以嵌套if语句的嵌套是指if语句中可以包含一个或多个if语句。嵌套格式如下。if(表达式1):if(表达式2):语句1elif(表达式3):语句2...else:语句3elif(表达式n):...else:...[例3-3]中的段落]下面的代码是一个嵌套的条件语句。如果x的值大于0,则y的值等于1;如果x的值等于0,则y的值等于0;如果x的值小于0,则y的值等于-1。[例子3-3.py]1x=-12y=993if(x>=0):4if(x>0):#嵌套if语句5y=16else:7y=08else:9y=-10print("y=",y)【代码说明】第二行代码定义了一个变量y。为了不重复最终可能的输出结果1,0,-1,y的初始值设置为99。第三行代码判断变量x的值。如果x大于或等于0,则执行下面嵌套的if语句。第四行代码判断x的值是否大于0,如果大于0,则执行第5行的代码;否则,执行第7行代码。第8行代码,如果变量x的值小于0,则执行第9行代码。在第9行中,由于变量x的值为-1,因此y的值等于-1。第10行代码的输出是-1。嵌套语句可以通过多种方式组合,但要小心将所有分支情况都考虑在内。下面的表述是错误的。1#错误嵌套语句2x=-13y=994if(x!=0):#Ifx不等于05if(x>0):#嵌套if语句6y=17else:8y=09print("y=",y)【代码说明】第四行代码判断变量x的值是否等于0,如果不等于0,则执行if语句下面的代码块;否则执行else子句的代码。由于x的值等于-1,程序进入第5行,第5行代码判断变量x的值是否大于0,如果大于0,则将变量y的值置为1、由于这里不考虑变量x小于0的情况,所以程序直接跳到第9行,在第9行代码中,变量y的值没有改变,分支结构程序没有考虑到x小于0的情况,所以最后的输出不是预期的结果。输出为99。注意:写条件语句时,尽量避免嵌套语句。嵌套语句的可读性较差,可能会忽略一些可能性。04switch语句的替代方法switch语句用于编写多分支结构的程序,类似于if...elif...else语句。C语言中switch语句的结构如下图所示。switch(expression){case常量表达式1:语句1case常量表达式2:语句2...case常量表达式n:语句ndefault:语句m}switch语句表示的分支结构比if...elif更清晰...else语句,代码可读性更强,但是Python没有提供switch语句,但是可以通过字典来实现switch语句的功能。实现方法分为两步。首先,定义一个字典。字典是键值对的集合。其次,调用字典的get()得到对应的表达式。下面[例3-4]中的代码通过算术运算符得到算术运算表达式。【例3-4.py】1#使用字典实现switch语句2from__future__importdivision#导入除法模块3x=14y=25operator="/"6result={#定义字典7"+":x+y,8"-":x-y,9"*":x*y,10"/":x/y11}12print(result.get(operator))【代码说明】第3行和第4行的代码定义了两个操作数x和y。第五行代码定义了运算符变量operator,用于存放算术运算符。第6行定义了一个字典结果。字典的键值由“+”、“-”、“*”、“/”四个运算符组成。value值由相应的算术表达式组成。第12行代码调用了get()方法,get()的参数是变量运算符的值。由于operator的值为“/”,所以会进行除法运算。输出为0.5。另一种使用switch分支语句的方法是创建一个switch类来处理程序的流程。这种实现方法比较复杂,涉及到面向对象、for循环、中断语句、遍历等知识,实现步骤分为4步。创建一个继承自Python祖先类对象的开关类。调用构造函数__init__()初始化要匹配的字符串,定义两个成员变量value和fall。value用于存储要匹配的字符串。fall用于记录匹配是否成功,初始值为False,表示匹配不成功。如果匹配成功,则程序向后执行。定义一个match()方法,用于匹配case子句。这里有3种情况需要考虑。第一种是匹配成功的情况,第二种是匹配失败的默认case子句,最后一种是case子句中没有使用break的情况。覆盖__iter__()方法。只有定义了这个方法,switch类才能在loop语句中使用。__iter__()调用match()方法进行匹配,函数可以通过yield关键字在循环中进行迭代。此外,调用异常StopIteration会中断循环。Python中的循环被异常StopIteration中断。这样,switch类就构建完成了。编写调用代码以在for...in...循环中使用switch类。下面【例3-5】中的代码实现了switch语句的功能。[例3-5.py]1classswitch(object):#定义switch类2def__init__(self,value):#初始化需要匹配的valuevalue3self.value=value4self.fall=False#如果没有breakin匹配的case语句,ThenfallisTrue56def__iter__(self):#定义__iter__()方法7yieldself.match#调用match方法返回生成器8raiseStopIteration#使用StopIteration异常判断for循环是否结束910defmatch(self,*args):#Simulatecaseclause11ifself.fallornotargs的方法:#如果fall为True,继续执行下面的caseclause12#或者如果caseclause没有匹配到,则流程转到默认分支13returnTrue14elifself.valueinargs:#匹配成功15self.fall=True16returnTrue17else:#匹配失败18returnFalse1920operator="+"21x=122y=223forcaseinswitch(operator):#switch只能在for...in...循环中使用24ifcase('+'):25print(x+y)26break27ifcase('-'):28print(x-y)29break30ifcase('*'):31print(x*y)32break33ifcase('/'):34print(x/y)35break36ifcase():#Defaultbranch37print"【代码说明】第1行到第18行代码定义了switch类,定义了__init__()、__iter__()、match()方法。第23行在for...in...循环中调用switch类,变量运算符作为switch类的参数传递给构造函数。变量运算符的值等于“+”,程序进入第24行,第25行输出x+y的结果。输出为3。第26行的代码使用break语句打断switch分支结构,程序流程走到文件末尾。