0x00 分支结构
- 问题的提出
输入两个整数存放与a和b中,使得a中存放的数据小于b中存放的数据。 分析
- 输入两个数a和b
a可能小于b也可能大于b
- 如果a小于b,不做任何处理
- 反之,交换a和b
- 这类型的问题需要对不同的情况做不同的处理,这样的问题,顺序结构无法解决
- 分支结构的三种基本形式(单分支、双分支和多分支)
单分支结构
- 单分支结构的语法形式
if (条件表达式):
语句块
# 条件表达式可以是任意表达式,只要结果不为0即认为True,否则为False
# 语句块:可以是一条语句,也可以是多条语句
上述问题的解决
- 问题重述:输入两个整数存放与a和b中,使得a中存放的数据小于b中存放的数据。
- Python语言解决
# 输入两个整数存放与a和b中,使得a中存放的数据小于b中存放的数据。
# 使用分支结构
a = int(input('请输入a:'))
b = int(input('请输入b:'))
print('处理前')
print('a={},b={}'.format(a, b))
if a > b:
a, b = b, a # 交换a,b变量值
print('处理后')
print('a={},b={}'.format(a, b))
双分支结构
- 双分支结果的语法形式
- 问题:比较两个数的大小,输入两个数,输出较大的数
- 问题:输入三条边的长度,判断是否能组成三角形
- 问题:划船问题,一个老师带个x个学生去划船,每条船最多装4个人,问需要多少船。
多分支结构
- 多分支结构的语法形式
问题:计算分段函数的值,当x>1时,y=x,当x<-1时,y=-x,当x介于-1和1之间时,y=1
- 算法流程图
- Python语言实现
- 算法流程图
- = float(input('请输入x:'))
- x > 1:
y = x x < -1:
y = -x
else:
y = 1
print('y={}'.format(y))
- 问题:已知某课程的百分之分数mark,将其转换为五级制
- 问题:已知坐标点(x,y),判断其所在象限
## 已知坐标点(x,y),判断其所在象限
x = float(input('请输入x坐标值:'))
y = float(input('请输入y坐标值:'))
if x == 0 and y == 0:
print('该点在原点')
elif x == 0:
print('该点在y轴上')
elif y == 0:
print('该点在x轴上')
elif x > 0 and y > 0:
print('第一象限')
elif x < 0 and y > 0:
print('第二象限')
elif x < 0 and y < 0:
print('第三象限')
elif x < 0 and y > 0:
print('第四象限')
问题:判断某一年是否为闰年
判断闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。- 流程图
- Python语言实现
- 流程图
# 判断某一年是否为闰年
# 判断闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。
# 方法1:使用多分支结构
y = int(input('请输入年份:'))
if y % 4 == 0 and y % 100 != 0:
print('{}年是闰年'.format(y))
elif y % 400 == 0:
print('{}年是闰年'.format(y))
else:
print('{}年不是闰年'.format(y))
# 方法2:借助逻辑运算符
y = int(input('请输入年份:'))
if (y % 4 == 0 and y % 100 != 0) or (y % 400) == 0:
print('{}年是闰年'.format(y))
else:
print('{}年不是闰年'.format(y))
- 讨论下述条件表达式
if (y % 4 == 0 and y % 100 != 0) or (y % 400) == 0:
if (y % 4 == 0 and y % 100 ) or (y % 400) == 0:
if (not(y % 4) and y % 100 ) or (y % 400) == 0:
上述三个条件表达式均具有同一效果,但是第一条更简单易懂
0x01 好程序的三个指标
- 简单易懂
- 扩展性强
- 忠实于自己的算法