Python学习笔记-分支结构
以程序(3个数字中最大的一个)为例
IPO:
- 输入:3个数值
- 处理:3者最大算法
- 输出:打印最大值
通盘比较
#compare_1.py 通盘比较
def compare_1(x1,x2,x3):
if x1>=x2 and x1>=x3:
max=x1
elif x2>=x3 and x2>=x1:
max=x2
else:
max=x3
print max
compare_1(1,2,3)
每个分支都站在自己的角度考虑问题,前面的表达式测试过的结论在后面的表达式中并没有被利用,冗余度大,不合格。
**注意:**在Python中条件x1>=x2>=x3是合法的,意义与数学表达式一样。
决策树
#compare_2.py 决策树
def compare_2(x1,x2,x3):
if x1>=x2:
if x1>=x3:
max=x1
else:
max=x3
else:
if x2>=x3:
max=x2
else:
max=x3
print max
compare_2(1,2,3)
效率高,但不断嵌套,过于复杂,其复杂度随未知数的增多成指数性增长,如求四者中最大数的问题需3层嵌套,8个赋值语句。
#compare_2.py 决策树
def compare_2(x1,x2,x3,x4):
if x1>=x2:
if x1>=x3:
if x1>=x4:
max=x1
else:
max=x4
else:
if x3>=x4:
max=x3
else:
max=x4
else:
if x2>=x3:
if x2>=x4:
max=x2
else:
max=x4
else:
if x3>=x4:
max=x3
else:
max=x4
print max
compare_2(1,2,3,4)
顺序处理
#compare_3.py 顺序结构
def compare_3(x1,x2,x3):
max=x1
if x2>=max:
max=x2
if x3>=max:
max=x3
print max
compare_3(1,2,3)
最为清晰简洁,同样仅仅包含两个决策,但结构更简单,适用于更复杂的问题,每增加一个数只需增加一个表达式。
应用版:
#compare_3.py 顺序结构
def compare_3():
#输入需比较的元素个数
n=eval(raw_input("How many numbers are there?"))
#将第一个值赋给max
max=eval(raw_input("Enteer a number>>"))
#令这个max与后面的n-1个值进行比较
for i in range(n-1):
x=eval(raw_input("Enteer a number>>"))
if x>max:#若有大于max的x则将x赋给max
max=x
print "The largest value is",max
compare_3()
使用Python内置函数
max(x1,x2,x3)
通过考虑规模更大更复杂的问题,有助于解决问题的最佳方案。适当考虑程序的通用性,可能会得到更好的解决方案。当然学会借鉴别人已成功的成果,也可以节省时间,提高效率,但不可过度,要先学会原创
编程测验:
编写以下程序,输入三角形的三边,判断三角形的形状:等边三角形(equilateral triangle),等腰三角形(isoceles triangle),不构成三角形(non-triangle),一般三角形(triangle)。
#Triangle.py 判断三角形形状
def Triangle():
a,b,c=eval(raw_input("Please enter length of three sides of a triangle(a,b,c):"))
#输入三边的边长
if a+b<=c or a+c<=b or b+c<=a or abs(a-b)>=c or abs(a-c)>=b or abs(b-c)>=a:
print "it is non-triangle"#三角形的两边之和大于第三边,两边之差小于第三边
elif a==b==c:#等边三角形
print "it is equilateral triangle"
elif a==b or a==c or c==b:#等腰三角形
print "it is isoceles triangle"
else:#一般三角形
print "it is triangle"
Triangle()
运用顺序结构(if-elif-else)