其他
Python条件判断语句详解:if、else、switch都有了
导读:条件语句是指根据条件表达式的不同计算结果,使程序流转至不同的代码块。Python中的条件语句有——if语句、if… else…语句。
if(表达式):
语句1
else:
语句2
input([prompt]) -> string
x = input("x:")
x = int(x)
x = x + 1
TypeError: Can't convert 'int' object to str implicitly
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。
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。
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。
if(表达式1): 语句1
elif(表达式2): 语句2
…
elif(表达式n): 语句n
else: 语句m
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:
10 print("D")
第2行代码定义了一个变量score,假设输入的值为70。这个变量表示学生的分数。接收用户输入并将其转换为float类型。 第3行代码,分数大于等于90并且小于等于100,则等级评定为“A”。 第5行代码,分数大于等于80并且小于90,则等级评定为“B”。 第7行代码,分数大于等于60并且小于80,则等级评定为“C”。此时条件表达式成立,程序流转到第8行。输出结果为C。 第9行代码,当前面的条件表达式都不成立时,程序流转到else子句。
if(表达式1):
if(表达式2): 语句1
elif(表达式3): 语句2
…
else: 语句3
elif(表达式n):
…
else:
…
1x = -1
2y = 99
3if(x >= 0):
4 if(x > 0):#嵌套的if语句
5 y = 1
6 else:
7 y = 0
8else:
9 y = -1
10print ("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。
switch(表达式) {
case 常量表达式1: 语句1
case 常量表达式2: 语句2
…
case 常量表达式n: 语句n
default: 语句m
}
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类,该类继承自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类。
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分支结构,程序流转到文件的末尾。
关于作者:黄传禄,高级讲师、管理软件开发工程师、数据库库系统工程师、信息系统管理工程师。有10多年的一线教学经验和高端培训经验,出版多部技术专著,获得多个软件著作权。
延伸阅读《零基础学Python》(第2版)点击上图了解及购买
转载请联系微信:DoctorData
推荐语:为了能够使广大读者既能够掌握Python语言的基础知识,又能够将Python语言应用于某个特定的领域(如Web开发),本书介绍了与Python相关的方方面面,每个章节都提供了详尽的例子,结合实例讲解各个知识点。涉及的程序代码都给出了详细的注释,有助于读者轻松领会程序开发的精髓,快速提高开发技能。
更多精彩👇