Python程序的分支结构
目录
布尔类型
Python中的布尔类型只有True和False两个取值;
True对应整数1,False对应整数0。
等同于False的值:
None; False; 任何为0的数字类型,如0、0.0、0j; 任何空序列,如''''、()、[]; 空字典,如{}; 用户定义的类实例,如类中定义了__bool__()或者__len__()方法,并且该方法返回0或者布尔值False。
判断条件及组合
关系运算符
- 下面是由关系运算符所组成的条件表达式:
>>> a ,b ,c = 1 ,2 , 3 >>> print(a<b) True >>> print(b>c) False
- Python中的关系运算符可以连续使用,这样不仅可以减少代码量,也比较符合人类的思维方式。
>>> print(a<b<c) #等价于1<2 and 2<3 True >>> print(a<b>c) False >>> print(a<c>b) True
- 在Python语法中,条件表达式中不允许使用赋值运算符“=”,避免了误将关系运算符“==”写作赋值运算符“=”带来的麻烦。在条件表达式中使用赋值运算符“=”将抛出异常,提示语法错误。
>>> if a=1: print('ok!') SyntaxError: invalid syntax >>> if a==1: print('ok!') ok!
逻辑运算符
Python语言使用保留字not、and和or对条件进行逻辑运算或组着。
- 保留字not表示单个条件的“否”关系,
- and表示多个条件之间的“与”关系,
- 保留字or表示多个条件之间的“或”关系。
- 代码:
>>> a ,b ,c = 1 ,2 , 3 >>> a < b and b < c True >>> a < b or b > c True >>> a > b and b < c False >>> a > b or b > c False >>> not a < b False >>> not b > c True
惰性求值
- 逻辑运算符and和or具有短路求值或惰性求值的特点,可能不会对所有表达式进行求值,而是只计算必须计算的表达式的值。
- 以“and”为例,对于表达式“表达式1 and 表达式2”而言,如果“表达式1”的值为“False”或其他等价值时,不论“表达式2”的值是什么,整个表达式的值都是“False”,丝毫不受“表达式2”的影响,因此“表达式2”不会被计算。
- 在设计包含多个条件的条件表达式时,如果能够大概预测不同条件失败的概率,并将多个条件根据“and”和“or”运算符的短路求值特性来组织顺序,可以大幅度提高程序运行效率。
成员运算符
in 如果指定元素在序列中,返回True,否则返回False
not in 如果指定元素不在序列中,返回True,否则返回False
身份运算符
is 测试两个对象的内存地址是否相同,相同返回True,否则返回False
not is 测试两个对象的内存地址是否不同,不同返回True,否则返回False
练习:
#判断一个整数n是否为奇数 n = int(input("请输入一个整数:")) if n % 2 == 1: print(f"{n}是奇数") else: print(f"{n}是偶数") # #判断年份y是否为闰年 year = int(input("请输入一个年份:")) if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): print(f"{year}年是闰年") else: print(f"{year}年是平年") # 判断一个字母c是否为小写字母 c = 'c' if ord('a') <= ord(c) <= ord('z'): print(f"{c}是小写字母") else: print(f"{c}不是小写字母")
单分支结构
Python的单分支结构使用if保留字对条件进行判断,使用方式如下
if <条件>: 语句块
其中,if、:和<语句块>前的缩进都是语法的一部分。<语句块>是if条件满足后执行的一个或多个语句序列,缩进表达<语句块>与if的包含 关系。<条件>是一个产生True或False结果的语句,当结果为True时,执行<语句块>,否则跳过<语句块>。
s = eval(input("请输入一个整数:")) if s%2 == 0: print("这是个偶数") print("输入数字是:",s)
小爱机器人:
t = input("主人,请输入当前温度") #2处理&输出 t = eval(t) if t >10 : print("温度适宜,适合锻炼")
条件是一个或多个条件,多个条件间采用and或or 进行逻辑组合,and 表示多个条件"与"的关系,or表示多个条件"或"的关系。
s = eval(input("请输入一个整数:")) if s%3 ==0 and s%5 == 0: print('这个数字既能被3整除,又能被5整除') print("输入数字是:",s) s = eval(input("请输入一个整数:")) if s%3 ==0 or s%5 == 0: print('这个数字能被3整除,或能被5整除') print("输入数字是:",s)
思考题2:用户输入邮箱,如果不带@字符,输出错误
思考题3:用户输入手机号,如果位数不对,提升错误
二分支结构
Python的二分支结构使用if-else保留字对条件进行判断,语法格式如下:
if <条件>: <语句块1> else: <语句块2>
其中,if、:和语句块前的缩进都是语法的一部分
<语句块1>在if中<条件>满足即为True时执行,<语句块2>在if中<条件>不满足即为False时执行。简单说,二分支结构根据条件的True或 False结果产生两条路径。
例题:
#1.输入 t = input("主人,请输入当前温度") #2处理&输出 t = eval(t) print(t>10) if t >10 : print("温度适宜,适合锻炼") print("报告完毕!") else: print("温度不适宜,不适合锻炼") print("报告完毕!") print("Game Over")
s = eval(input("请输入一个整数:")) if s%3 ==0 and s%5 == 0: print('这个数字既能被3整除,又能被5整除') else: print('这个数字不能同时被3和5整除')
二分支结构还有一种更简洁的表达方式,适合<语句块1>和<语句块2>都只包含简单表达式的情况,语法格式如下:
<表达式1> if <条件> else <表达式2>
s = eval(input("请输入一个整数:")) result = "能被3整除" if s%3 == 0 else "不能被3整除" print(result)
思考题1:调整输入值的大小
输入2个数,要求第1个值小,第2个值大
如果不是这样,用if_else语句调整一下。
x=input("请按照由小到大顺序输入两个数:(空格分开") a,b =map(int,x.split()) if a>b: a,b=b,a print(a,b)
思考题4:用户输入一个数 ,判断是否超过100,如果不超过,提示“录入成功”,如果超过,提示“不能超过100”,要求代码不能超过两行。
多分支结构:if-elif-else
Python的if-elif-else描述多分支结构,语句格式如下:
if 表达式1: 语句块1 elif 表达式2: 语句块2 elif 表达式3: 语句块3 else: 语句块4
问题:求圆的面积
#input r = input("请输入半径:") r = float(r) if r >0: s = 3.14 *r*r print("圆的面积为",s) elif r==0: print("半径不能等于0") else: print("半径不能小于0")
问题:百分制转换
问题解决:使用多分支选择结构将成绩从百分制变换到等级制。
黑板画图。
score = eval(input("请输入一个百分制成绩:")) if score > 100 or score < 0: s = 'wrong score.must between 0 and 100.' elif score >= 90: s = 'A' elif score >= 80: s = 'B' elif score >= 70: s = 'C' elif score >= 60: s = 'D' else: s = 'E' print("您的成绩等级为:"+s)
多分支结构通常用于判断同一个条件或一类条件的多个执行路径。要注意,Python会按照多分支结构的代码顺序依次评估判断条件,寻找并执行第一个结果为True条件对应的语句块,当前语句块执行后跳过整个if-elif-else结构。
利用多分支结构编写代码时要注意多个逻辑条件的先后关系。
# 将百分制成绩转换为五分制成绩 score = eval(input("请输出一个百分制成绩:")) if score >= 60.0: grade = "D" elif score >= 70.0: grade = "C" elif score >= 80.0: grade = "B" elif score >= 90.0: grade = "A" else: grade = "E" print("对应的五分制成绩是:{}".format(grade))
另一种写法:
# 将百分制成绩转换为五分制成绩 score = eval(input("请输出一个百分制成绩:")) if 60<=score<70: grade = "D" elif 70 <=score <80: grade = "C" elif 80 <=score <90: grade = "B" elif 90 <=score <100: grade = "A" else: grade = "E" print("对应的五分制成绩是:{}".format(grade))
练习:根据BMI指数 打印健康建议
练习:编写程序,实现分段函数计算:
当x<0时 ,y=0;当 0<=x<5时 ,y=x; 当 5<=x<10时,y=3x-5;当10<=x<20时,y=0.5x-2 ;当x>=20时,y=0;
拓展练习
a除以b
描述
输出实数a除以b的结果,计算结果四舍五入,保留2位小数。
输入格式
输入包括两行, 每行一个实数, b不能等于0
输出格式
当用户输入b为0时输出"除零错误"
其他情况下输出一个保留2位小数的实数
a=eval(input("请输入实数a:")) b=eval(input("请输入实数b:")) if b==0: print("除数b不能等于0") else: s=a/b print("a/b的结果为:",round(s,2))
一元二次方程求根
描述
一元二次方程ax2+bx+c=0,a、b、c的值由用户在三行中输入,根据用户输入的数值求解方程的实数解:
如果a值 为0,根据b值判断方程是否有解并输出,如果a与b同时为0,则输出Data error!
如果方程无实数解,输出“该方程无实数解”;
如果方程有两个相同的实数解,输出一个解,结果保留2位小数;
如果方程有两个不同的实数解,在一行内按从大到小顺序输出方程的两个解,用空格分隔,结果保留2位小数。
输入格式
输入三行数据, 每行输入一个实数
输出格式
方程的解
空气质量
p= eval(input("请输入pm2.5")) if p<50 : print("优") elif p>=50 and p<100: print("良") elif p>=100 and p<200: print("轻度污染") elif p>=200 and p<300: print("中度污染") else: print("重度污染")
练习题答案
思考题4:
s= eval(input("请输入一个数:")) print("录入成功" if s<100 else "不能超过100")