Python程序的分支结构

来自CloudWiki
跳转至: 导航搜索

布尔类型

Python中的布尔类型只有True和False两个取值;

True对应整数1,False对应整数0。

等同于False的值:

None;
False;
任何为0的数字类型,如0、0.0、0j;
任何空序列,如''''、()、[];
空字典,如{};
用户定义的类实例,如类中定义了__bool__()或者__len__()方法,并且该方法返回0或者布尔值False。


判断条件及组合

关系运算符

Auto4-7.png

  • 下面是由关系运算符所组成的条件表达式:
>>> 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表示多个条件之间的“或”关系。
  • P4-1.png
  • 代码:
>>> 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

Auto4-6.png

问题:求圆的面积

#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")