在现实生活中,对于一件事情可能会有多个解决方案。例如,如果今天不下雨就去爬山,如果下雨就去看电影。在程序设计语言中使用分支结构来解决这类问题,分支结构能够根据不同的条件选择执行不同的分支,从而增强程序的灵活性和实用性。
微课
输入一个整数,输出这个整数的绝对值。
●输入数据:
-564
●输出结果:
x的绝对值为 564
根据问题描述,填写表 3-1-1。
表 3-1-1 问题分析
计算一个数的绝对值,首先判断这个数是负数还是正数,如果是负数就取相反数,如果是正数就不变。因此,我们只需要考虑输入的数为负数的情况,将其转换为它的相反数即可,而正数就不做任何改变。
①:将输入数据转换为整数存入变量x。
②:判断x是否小于 0(为负数),如果为负数就执行语句x=-x。注意if和其后的表达式x<0 之间至少要有一个空格,而且表示条件的表达式之后还有一个西文的冒号(:)。if下方受if控制的语句块要缩进,当条件成立时会执行if下方的语句块。此处的语句块只有一条语句x=-x,表示将x的相反数再赋给x。注意观察print( )函数,它就没有缩进,这就意味着它与if无关,不管条件是否成立,都需要执行。
if语句的一般格式为:
其功能是先计算条件表达式的值,如果条件表达式成立,则执行后面的语句块,执行的语句块可以是多行,以缩进格式来表示同一范围;当条件表达式不成立时,则跳过语句块,结束分支结构,执行分支结构后面的代码,执行流程图如图 3-1-1所示。
条件表达式可以是一个单一的值或者变量,也可以是复杂的表达式。False、0、空字符串、None(空值)、[ ](空列表)、{}(空字典)等都表示不成立,其他表示成立。
语句块由相同缩进量的若干条语句组成,表示条件成立时要执行的语句序列。
注意:条件表达式后面的冒号(:)千万不要忘记。
图 3-1-1 if语句执行流程图
if后的表达式可以是任何类型的表达式,但通常是关系表达
式和逻辑表达式。本活动介绍关系表达式,关系表达式中的运算符称为比较运算符,Python中的比较运算符见表 3-1-2。
表 3-1-2 比较运算符
输入两个数,按从大到小的顺序输出。程序流程图如图 3-1-2所示。
输入:12 26
输出:26 12
微课
输入一个年份,判断是否为闰年。闰年的条件是年份能被 4整除且不能被 100 整除,或者能被 400 整除。
图 3-1-2 程序流程图
●输入数据:
2000
●输出结果:
是闰年
根据问题描述,填写表 3-1-3。
表 3-1-3 问题分析
根据闰年的定义,判断闰年的第一条件为年份能被 4 整除且不能被 100 整除,第二条件为能被 400 整除,两者只需要一个成立即是闰年。
①:一个年份,要么是平年,要么是闰年,因此使用分支来进行判断。首先判断闰年,只要满足两个条件中的任意一个即是闰年,一个是年份能被 4 整除但不能被 100 整除,表示为y%4==0 and y%100!=0,运算符and是布尔运算符表示运算符两边都成立结果才成立,意思就是y能被 4 整除而且y不能被 100 整除。另一个条件则是能被 400 整除,表示为y%400= = 0 即除以 400 的余数为 0。这两个条件满足其中之一就是闰年,所以中间用or来连接。or也是布尔运算符,表示运算符两边只要一边成立结果就成立,整个表达式的意思就是(y%4==0 and y%100!=0)成立或者(y%400 = = 0)成立。如果整个表达式成立,就执行下面缩进的语句块,在这里是print("是闰年"),输出“是闰年”这 3 个字。
②:如果不是闰年就是平年,执行else下面的语句,注意else后也有冒号(:),且下面的语句块也要缩进,表示if后的表达式不成立时要执行的语句。
以上代码可改写为if-else表达式,代码更加简洁:
"是闰年" if y%4==0 and y%100!=0 or y % 400 == 0 else "是平年",这个表达式表示的意思是如果y%4==0 and y%100!=0 or y % 400 == 0 成立,则其值为if前的表达式的值“是闰年”,否则其值为else后的表达式的值“是平年”。
if else语句的一般格式为:
if 条件表达式:
其功能是先计算条件表达式的值,如果条件表达式成立,则执行后面的语句块 1;当条件表达式不成立时,则执行语句块 2,执行流程图如图 3-1-3所示。
else不能单独使用,必须和if一起使用,并且要正确配对。
if条件表达式和else后面的冒号(:)千万不能忘记。
图 3-1-3 if else语句执行流程图
在编程的过程中,有时候我们会先搭建起程序的整体逻辑结构,只是暂时不去实现某些细节,而是在这些地方加一些注释,方便以后再添加代码。Python还提供了空语句pass,用来让解释器跳过此处,什么都不做。
当条件表达式t<=0 成立时,执行空语句pass,跳过此处执行if else语句后面的语句。
Python支持布尔运算(也称逻辑运算),详细描述见表 3-1-4。
表 3-1-4 逻辑运算
例如:
输出结果为:
1 - 这是与运算,a、b都为 true
2 - 这是或运算,a、b都为 true,或其中一个变量为 true
3 - 这是非运算,a为真
把a的值改为 0,输出结果为:
1 - 这是与运算,a、b有一个不为 true
2 - 这是或运算,a、b都为 true,或其中一个变量为 true
3 - 这是非运算,a为假
编写一个程序,输入一个字符,如果是大写字母就输出对应的小写字母,如果是小写字母就输出对应的大写字母。程序流程图如图 3-1-4 所示。
微课
提示:字符串的方法islower( )和isupper( )用于判断字符串的字符是否全是大写或全是小写。
图 3-1-4 程序流程图
输入一个学生的百分制成绩,按以下规则将百分制成绩转换成等级:90 分及以上为A等级,70~89 分为B等级,60~69 为C等级,60 分以下为D等级。
●输入数据:
75
●输出结果:
B
根据问题描述,填写表 3-1-5。
表 3-1-5 问题分析
成绩有A、B、C、D4 个等级,即有 4 个条件,需要使用多分支来解决这个问题。成绩在90 分及以上为A等级,成绩在 70~89 分为B等级,成绩在 60~69 分为C等级,成绩在 60 分以下为D等级,正确表示几个条件非常重要。
①:判断输入的成绩是否在 70~90 分(包括 70,不包括 90)。elif是else if的缩写,表示“反之再判断”的意思。elif前面的if或其他elif判断失败之后,才会执行此处的判断,也就是说x>=90 不成立时才会执行到这里判断后面的条件x>=70 and x<90。当条件成立时执行其后缩进的语句块print("B"),如果不成立执行后面的elif或else子句。
②:当前面列出的所有条件都不成立时执行else后面缩进的语句块print("D"),这是一个可选的子句,根据情况选用。
多分支结构语句的格式为:
其功能是先计算条件表达式 1 的值,如果条件表达式 1 成立,则执行后面的语句块 1;如果条件表达式 1 不成立则判断条件表达式 2,如果条件表达式 2 成立,则执行后面的语句块 2;如果条件表达式 2 不成立则继续判断条件表达式 3,如果条件表达式 3 成立,则执行后面的语句块 3;依次类推,如果前面的条件表达式均不成立,则执行语句块n+1,如果没有else后面的语句块n+1,则什么也不执行,结束分支语句,结构流程图如图 3-1-5 所示。
图 3.1.5 多分支结构流程图
elif和else均不能单独使用,必须和if一起使用,并且要正确配对。
每一个if、elif、else后面都有冒号(:),均不能省略。
不管有多少个分支,都只能执行一个分支,或者一个也不执行,不能同时执行多个分支。
所示。编写一个程序,输入x的值,计算分段函数 的值。程序流程图如图 3-1-6
图 3-1-6 程序流程图