第三章 程序控制结构-2
3.2 双路分支结构
双路分支结构是一种二选一,即一个条件分两种情形处理
if <条件表达式>:
<语句块1>
else:
<语句块2>
语法格式
- 当<条件表达式>为True时,执行<语句块1>,否则执行<语句块2>。
- <条件表达式>可以是关系表达式、逻辑表达式、算术表达式等。
- <语句块>前有缩进,冒号
:
不能缺省。
【例3-7】 改写【例3-1】程序,输入一个整数,如果是偶数则输出“这是个偶数”,否则输出这是个“奇数”
#例3-1
#E3-1-1.py
N=int(input("请输入一个整数:"))
if N%2==0:
print("这是个偶数")
#例3-7
#E3-7.py
N=int(input("请输入一个整数:"))
if N%2==0:
print("这是个偶数")
else:
print(“这是个奇数")
【例3-8】游戏猜数字,改写【例3-5】程序:随机产生一个0-10间的整数,玩家通过键盘输入一个数竞猜,若猜中,则输出“恭喜你猜对啦!”,否则输出“很遗憾,没有猜对哟!”
#例3-5
#E3-5.py
from random import *
num=randint(0,10)
x=int(input("请输入一个数:"))
if num==x:
print("恭喜你猜对啦!")
print("随机数是:",num)
#例3-8
#E3-8.py
from random import *
num=randint(0,10)
x=int(input("请输入一个数:"))
if num==x:
print("恭喜你猜对啦!")
else:
print("很遗憾,没有猜对哟!")
print("随机数是:",num)
【例3-9】改写【例3-6】登录程序:用户通过键盘输入用户名和密码,如果输入的用户名为空,输出“用户名不能为空”;如果输入的密码为空,输出“密码不能为空”;如果输入的用户名为“abc”,并且密码为”123”,输出“欢迎进入本系统”,否则输出“用户名或密码错误”
#例3-6
#E3-6.py
userName=input("请输入用户名:")
passWord=input("请输入密码:")
if userName=="":
print("用户名不能为空")
if passWord=="":
print("密码不能为空")
if userName=="abc" and passWord=="123":
print("欢迎进入本系统")
#例3-9
#E3-9.py
userName=input("请输入用户名:")
passWord=input("请输入密码:")
if userName=="":
print("用户名不能为空")
if passWord=="":
print("密码不能为空")
if userName=="abc" and passWord=="123":
print("欢迎进入本系统")
else:
print("用户名或密码错误")
【试一试】编写程序计算 y = |x^2 - 25|^0.5
提示:
条件(1) 与(2) ,哪个放在if 后面做为if的条件表达式?
- x<=-5或x>=5
- -5<x<5
#test1.py
# 方法1
import math
x=eval(input("输入x:"))
if -5<x<5:
y=math.sqrt(25-x*x)
else:
y=math.sqrt(x*x-25)
print("y=",y)
#test1.py
方法2
import math
x=eval(input("输入x:"))
if x<=-5 or x>=5:
y=math.sqrt(x*x-25)
else:
y=math.sqrt(25-x*x)
print("y=",y)
# x=int(input("输入x:")))
【试一试】编写程序,输入一个数,利用turtle库绘制画笔大小为3,半径为100的圆形。并且当输入的数是偶数时,填充颜色为蓝色;当输入的数是奇数时,填充颜色为红色。
提示:
(1)turtle库中有关函数
画圆 circle(),画笔大小pensize(),填充fillcolor(),开始填充begin_fill(),结束填充end_fill()
(2) 判断一个数是否是偶数的条件表达式 N%2==0
#test2.py
from turtle import *
N=int(input("N="))
if N%2==0:
fillcolor("blue")
else:
fillcolor("red")
pensize(3)
hideturtle()
begin_fill()
circle(100)
end_fill()
思考:
- hideturtle()函数的作用是什么?
- if…else…语句是否可以放在程序的其它位置?
- 能否改写程序,用input函数分别输入N,画笔大小,圆半径的值。
3.2 双路分支结构-扩展
if <条件表达式>:
<表达式1>
else:
<表达式2>
↓
<表达式1> if <条件表达式> else <表达式2>
功能:
- 当条件表达式为True时,执行表达式1,否则执行表达式2
#例3-8
#E3-8.py
from random import *
num=randint(0,10)
x=int(input("请输入一个数:"))
if num==x:
print("恭喜你猜对啦!")
else:
print("很遗憾,没有猜对哟!")
print("随机数是:",num)
# 可写成print("恭喜你猜对啦!") if num==x else print("很遗憾,没有猜对哟!")
#例3-7
#E3-7.py
N=int(input("请输入一个整数:"))
if N%2==0:
print("这是个偶数")
else:
print("这是个奇数")
# 可写成print(“这是个偶数”) if N%2==0 else print(“这是个奇数")
3.3 多路分支结构
if <条件表达式1>:
<语句块1>
elif <条件表达式2>:
<语句块2>
……
elif <条件表达式n>:
<语句块n>
[else:
<语句块n+1>]
3.3 多路分支结构
【例3-10】用多路分支结构改写【例3-4】,即输入腋下体温值t,根据如下情况分别输出:
t<36.1输出:您的体温偏低
36.1<=t<=37.2 输出:您的体温正常
37.3<t输出:您的体温偏高
#E3-4.py
t=eval(input("请输入体温值:"))
if t<36.1:
print("您的体温偏低")
if 36.1<=t<=37.2:
print("您的体温正常")
if 37.3<t:
print("您的体温偏高")
#E3-10.py
t=eval(input("请输入体温值:"))
if t<36.1:
print("您的体温偏低")
elif t<=37.2:
print("您的体温正常")
elif 37.3<t:
print("您的体温偏高")
# 或 else:
思考:
- 上面两个方法在程序的执行效率上会有不同吗?
- 在使用多路分支结构时,是不是所有情况下,最后一个分支都可以是用elif 或 else?
【例3-11】输入学生成绩 ,根据成绩进行分类:
90分以上优秀
80~89分 良好
70~79分 中等
60~69分 及格
低于60分不及格
#E3-11.py
score=eval(input("成绩:"))
if score>=90:
print("优秀")
elif score>=80:
print("良好")
elif score>=70:
print("中等")
elif score>=60:
print("及格")
else:
print("不及格")
课堂小结
- 单路分支结构
if <条件表达式>:
<语句块>
- 双路分支结构
if <条件表达式>:
<表达式1>
else:
<表达式2>
- 多路分支结构
if <条件表达式1>:
<语句块1>
elif <条件表达式2>:
<语句块2>
……
elif <条件表达式n>:
<语句块n>
[else:
<语句块n+1>]
课后作业
1.新建程序文件 “姓名-3-1.py”,从键盘输入一个字符,赋值给变量ch,判断它是英文字母、数字还是其他字符。
提示:
分析下列三种情况
- 英文字母:
ch>="a" and ch<="z" or ch>="A" and ch<="Z" - 数字字符:ch>="0"and ch<="9"
- 其他字符
2.中国古代关于人类年龄阶段的划分
据秦汉的《礼记·礼上第一》记载:“人生十年曰幼,学。二十曰弱,冠。三十曰壮,有室。四十曰强,而仕。五十曰艾,服官政。六十曰耆,指使。七十曰老,而传。八十、九十曰耄。百年曰期,颐。”
要求 :编写程序“姓名-3-2.py” ,当输入一个年龄后,按中国古代年龄段划分,给出这个年龄的年龄段名称。如输入 年龄“20”,输出“弱”
3.为了评价一个人是否肥胖,1835年比利时统计学家和数学家凯特勒提出一种简便的判定指标BMI(身体质量指数)。BMI的定义如下:BMI=体重(kg)÷身高2(m)按照这个计算方法,WHO(世界卫生组织)1997年公布了一个判断人肥胖程度的BMI标准,后来又公布了中国参考标准。
要求 :编写程序“姓名-3-3.py” ,根据上述资料,输入一个人的体重和身高,按中国参考标准输出BMI分类值
4.中国大学Mooc平台上第三周的学习,并按时完成第三周的单元测试,单元测试截止时间3月22日0时。
网友评论