1.单分支结构
单分支结构流程如图3.2所示。
图3.2 单分支结构流程
2.功能
如果条件为真,则执行语句块1。
3.语法
4.快速体验
【案例3.1】 编写程序,模拟市场有条件结账抹零行为。
【问题分析】
3.2 单分支案例:有条件结账抹零
在案例2.1基础上,假设总金额尾数大于0.5元,不能抹零。张三一次购买了3斤鸡蛋(单价5.6元)、2.4斤黄瓜(单价3.2元)、苹果5斤(单价4.7元),输出抹零后的总价。
【参考代码】
【运行结果】
【程序说明】
1)代码第4行,先假设尾数大于0.5元的计算策略,引入中间变量temp是一种技巧。
2)代码第5、6行是单分支结构,在分支体内修改实收总金额temp。
1.双分支结构
双分支结构流程如图3.3所示。
图3.3 双分支结构流程
2.功能
如果条件为真执行语句块1,否则执行语句块2。
3.语法
4.快速体验
【案例3.2】 判断回文数。
【问题分析】
3.3 双分支案例:判断回文数
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。假设n=3,代码如下。
【参考代码】
【运行结果】
【程序说明】
1)代码第1行,强制转化为整型,因为input()函数返回的是字符串。
2)代码第2行,计算除10的余数,提取个位数。
3)代码第3行,计算除10的商相当于小数点左移一位,取整得到前两位,再求除10余数,得到前两位数的个位数,即提取十位数。
4)代码第4行,计算除100的商相当于小数点左移两位,再取整,即提取百位数。
5)代码第5行,构造反序的三位数,原个位上数字变成百位上数字,原百位上数字变成个位上数字。
6)代码第6~9行是一个双分支结构,判断条件:palindrome_num==reverse_order。
5.关于编程风格
Python是使用缩进来区分不同的代码块,所以对缩进有严格要求。
1)缩进不符合规则,解析器会报缩进错误,程序无法运行。
2)缩进的不同,程序执行的效果也有可能产生差异。
例如,图3.4中的代码,左边代码会打印第2行,而右边代码,1、2行都不打印。
图3.4 缩进的不同,程序执行的效果也有可能产生差异
3)相同逻辑层(同一个代码块)保持相同的缩进量。
4)":"标记一个新的逻辑层。
5)Python可以使用空格或制表符(Tab符)标记缩进。缩进量(字符个数)不限。Python PEP8编码规范,指导使用4个空格作为缩进。
6.思考
1)编程判断4位回文数。
2)编程判断3位回文数,不提取十位数。
3)在案例3.2中,如果第一行修改为palindrome_num=input("请输入一个三位数:"),该如何修改案例2.1程序。
4)用单分支实现案例3.2。
5)编写程序,要求判断输入密码是否正确,正确输出“密码正确”,否则输出“密码错误”。
实际问题时常常需要判定一系列的条件,一旦其中某一个条件为真就立刻停止。如果判断的条件有两个以上,则需要多分支语句。
1.多分支结构
多分支结构流程如图3.5所示。
图3.5 多分支结构流程
2.功能
如果表达式k为真,则执行语句k。
3.语法
4.快速体验
【案例3.3】 计算应发放奖金总数。
【问题分析】
企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万~40万时,高于20万元的部分,可提成5%;超过40万元的部分按3%提成,从键盘输入当月利润,求应发放奖金总数。
3.4 多分支案例:计算应发放奖金总数
【参考代码】
【运行结果】
【程序说明】
1)程序是四分支结构。
2)200000<profit and profit<=400000等价于200000<profit<=400000。
3)代码第7行,100000*0.1+100000*0.075+(profit-200000)*0.05的含义是:假设利润是23万,10万元奖金为1万元,去掉10万后的10万元奖金为7500元,剩下的3万元的奖金为1500元。
4)代码最后一行,第1个%s表示格式化一个对象为字符,占位符;第2个%表示转换。
5.思考
1)程序在什么情况下出错?如何修改?
2)程序可否优化?
3)去掉代码最后一行的%,如何修改程序?
1.分支嵌套伪代码
如果分支语句块仍包含分支,则称为分支嵌套(见图3.6)。分支嵌套伪代码如下:
图3.6 分支嵌套
2.快速体验
【案例3.4】 快递计费系统。
【问题分析】
3.5 分支嵌套案例:快递计费系统
快递行业的高速发展,使得人们邮寄物品变得方便快捷。某快递点提供快递计费服务见表3.1。
表3.1 计件价目表
本案例要求根据表3.1提供的数据进行编程,实现快递计费系统。
【参考代码】
【运行结果】
【程序说明】
1)注意:多分支和分支嵌套在功能上没有区别,只是形式的区别。
2)print('快递费为%.1f元'% many)按格式输出第1个%号是占位符,.1f表示保留一位小数,第2个%后的变量表示占位值。
3.思考
用分支嵌套实现案例3.3。