这是《Python入门经典以解决计算问题为导向的Python编程实践》52-57页的笔记。补充了一点内容。
选择语句:if
**程序的基本结构包括三种:顺序结构、选择结构和循环结构。**顺序结构:按照书写的先后顺序从前到后执行的结构。
选择结构:根据特定条件选择其中一个分支执行。
循环结构:重复执行某段算法的问题,可以减少源程序重复书写的工作量。
其中选择结构和循环结构的语句称之为控制语句。
在执行指令时,遇到选择语句,就需要进行判断,根据判定条件,选择一个分叉口,执行相应的语句。
一、利用布尔值做决定
布尔表达式的值只能是真(True)或假(Flase)。
布尔表达式是带有布尔运算符的表达式,能得到非真即假的结果。常见的布尔运算符如下:
- 小于<
- 小于等于<=
- 大于>
- 大于等于>=
- 等于==
- 不等于!=
二、if语句
1、最基本的:单分支语句
格式:
if 布尔表达式:
代码块1
单分支语句中,当布尔表达式是真时,执行代码块1;当布尔表达式是假时,跳过语句1,不执行其他操作。
注意:这里用相同缩进来区分代码块1。
例如下面例子中第二行和第三行缩进一样,当a=3时,布尔表达式为真,需要执行代码块有a*=2和print(a)。而当a=-1时,不满足条件,什么都不需要执行。
if a>0:
a*=2
print(a)
在Python中,相同缩进的代码可视为一组代码块,在条件语句,循环语句,函数中都可看到相同缩进的代码块。
2、双分支语句:if-else语句
显然双分支语句有两个分支,所以布尔值为真或为假,都需要执行不同的代码块。
格式:
if 布尔表达式:
代码块1
else:
代码块2
布尔表达式为真时,执行代码块1。
布尔表达式为假时,执行代码块2。
注意:如果为真了,执行完代码块1后,不需要执行代码块2。也就是说在这个判断中,根据布尔值的真假,代码块二选一就好。
3、多分支语句:if-elif-else
多分支语句用于判断结果大于或等于3种的情况。
elif相当于是else和if的结合。所以呢,它是用于布尔表达式为假的时候的另一种判断。
格式:
if 布尔表达式1:
代码块1
elif 布尔表达式2:
代码块2
else:
代码块3
具体思路是怎样呢?我们看一下例子。首先判断第一个布尔表达式a==0。满足条件就执行第三行,后面的就不需要看了。
现在不满足,就要进行elif后的第二个布尔表达式的判断,这里满足条件,所以执行第5行,后面不用看了。
如果前面两种判断都不满足,才要执行else后的语句。
这种也可以扩展到很多种结果的判断,例如:
if-elif-elif-…-elif-else
4、if语句的嵌套
嵌套就是在if语句里面的代码块再用上if语句。
例如:出门时,我们先根据路程远近判断是步行还是乘坐地铁公交。如果是乘坐公交,还要判断是否有交通卡,有的话刷卡,没有就刷手机二维码。
#路程大于2km,公交地铁
jvli=float(input("请输入路程km"))
has_ka=int(input("有交通卡输入1,没有输入0"))
if jvli>2:
print("乘坐公交或地铁")
if has_ka==1:
print("使用交通卡")
else:
print("刷手机二维码")
else:
print("步行")
示例:在篮球运动中,领先多少分才安全
问题描述:
篮球是高得分的比赛,领先优势可能会很快被反超。作为观众,希望能在球赛即将结束时就提早知道哪种领先优势是不可超越的。暂时领先的球队的球迷们也想知道何时才能确定胜券在握,好放松心情。体育作家Bill James的在线杂志www.slate.com已经在考虑这个问题,并开发了一种算法,用于判定篮球比赛中怎样的领先优势是不可超越的。
Bill James的算法是基于他多年观看篮球比赛的经验来判定当前领先的优势是否是不可超越用他的术语来表示即领先的队是“安全的"。当然,这种算法并不保证领先优势一定是安全的任何事情都有可能发生。
算法描述:
下面是他的算法(完全按照他所给出的算法进行描述):
1)获取领先一队的分数。
2)减去三分。
3)如果目前是领先队控球,那么加上0.5分:如果是落后队控球,减去0.5分(数字小于零则变成零)。
4)计算平方后的结果,
5)如果得到的结果比当前比赛剩下的时间秒数更大,那么这个领先是安全的。
代码
根据算法的描述,一步步完成。
1)获取领先一队的分数。
points=int(input("输入领先一队的分数"))
2)减去三分。
points-=3
3)如果目前是领先队控球,那么加上0.5分:如果是落后队控球,减去0.5分(数字小于零则变成零)。
has_ball=input("输入是否领先队控球,是为Yes,否为No”)
if has_ball=="Yes":
points+=0.5
else:
points-=0.5
if points<0:
points=0
4)计算平方后的结果
points=points**2
5)如果得到的结果比当前比赛剩下的时间秒数更大,那么这个领先是安全的。
seconds=int(input("当前比赛剩下时间秒数:"))
if points>seconds:
print("这个领先是安全的")
else:
print("这个领先不安全")
这里也可以发现用Python解决一个问题可以分为三步:
分析问题——描述算法——用代码来表示算法