选择结构可以根据条件来控制代码的执行分支,也叫分支结构。Python使用if 语句来实现分支机构。
if语句单分支结构的语法形式如下:
if(条件表达式):
语句/语句块
其中:
(1)条件表达式:可以是关系表达式、逻辑表达式、算术表达式等。
(2)语句/语句块:可以是单个语句,也可以是多个语句。多个语句的缩进必须一 致。
当条件表达式的值为真(True)时,执行if后的语句(块),否则不做任何操作,控制将转到if语句的结束点。条件表达式最后被评价为bool值True(真)或False(假)。
如果表达式的结果为数值类型(0)、空字符申(" ")、空元组(())、空列表([])、空字典({}).其bool值为False(假),否则其bool值为True(真)。
例如,123、 “abe”、(1,2)均为True.
# [例3.2]单分 支结构示例:输人两个数a和b,比较两者的大小,使得a大于b.
a = int(input("请输人第1个整数:"))
b = int(input("请输人第2个整数:"))
print(str. format("输入值:{0},{1}",a,b))
if (a<b): #a和b交换
t = a
a = b
b = t
print(str.format("降序值:{0},{1}",a,b))
----------------------打印结果-----------------------
请输人第1个整数:1
请输人第2个整数:2
输入值:1,2
降序值:2,1
语句双分支结构的语法形式如下。
if (条件表达式):
语句/语句块1
else:
语句/语句块2
当条件表达式的值为真(Tue)时执行i后的语句(块)1,否则执行else后的语句(块)2。
Python提供了下列条件表达式来实现等价于其他语言的三元条件运算符((条件)?语句1:语句2)的功能:
条件为真时的值if (条件表达式) else条件为假时的值
例如,如果x≥0,则y=x,否则y=0,可以表述为:
y=x if (x>=0) else 0
#计算分段函数
import math
x= int(input("输入x的值"))
#(1)利用单分支结构实现
if (x>=0):
y = math.sin(x) + 2 * math.sqrt(x + math.exp(4)) - math.pow(x + 1, 3)
if (x<0):
y = math.log(-5 * x) - math.fabs(x * x - 8 * x) / (7 * x) + math.e
print(y)
#(2)利用双分支结构实现
if (x>=0):
y = math.sin(x) + 2 * math.sqrt(x + math.exp(4)) - math.pow(x + 1, 3)
else:
y = math.log(-5 * x) - math.fabs(x * x - 8 * x) / (7 * x) + math.e
print(y)
#(3)利用条件运算语句实现
y = (math.sin(x) + 2 * math.sqrt(x + math.exp(4)) - math.pow(x + 1, 3)) if ((x>=0)) else \
(math.log(-5 * x) - math.fabs(x * x - 8 * x) / (7 * x) + math.e)
print(y)
----------------------打印结果-----------------------
x===5
-201.5189566538235
-201.5189566538235
-201.5189566538235
if语句多分支结构的语法形式如下。
该语句的作用是 根据不同条件表达式的值确定执行哪个语句(块)。
if (条件表达式1) :
语句/语句块1
elif (条件表达式2) :
语句/语句块2
elif (条件表达式n) :
语句/语句块n
[else:
语句/语句块n+ 1;]
优 – mark≥90
良 – 80≤mark< 90
中 – 70≤mark< 80
及格 — 60≤mark 70
不及格 – mark<60
根据评定条件,有以下3种方法实现。
#方法一:
mark = int(input("请输入分数:"))
if (mark >= 90): grade = "优"
elif (mark >= 80): grade = "良"
elif (mark >= 70): grade = "中"
elif (mark >= 60): grade = "及格"
else: grade = "不及格"
print(grade)
#方法二:
if (mark >= 90): grade = "优"
elif (mark >= 80 and mark < 90): grade = "良"
elif (mark >= 70 and mark < 80): grade = "中"
elif (mark >= 60 and mark < 70): grade = "及格"
else: grade = "不及格"
print(grade)
#方法三:
if (mark >= 60): grade = "及格"
elif (mark >= 70): grade = "中"
elif (mark >= 80): grade = "良"
elif (mark >= 90): grade = "优"
else: grade = "不及格"
print(grade)
----------------------打印结果-----------------------
请输入分数:55
不及格
不及格
不及格
其中,方法-使用关系运算符“>=”,按分数从大到小依次比较;方法二使用关系运算符和辑运算符表达完整的条件,即使语句顺序不按比较的分数从大到小依次书写,也可以得到正的等级评定结果;方法三使用关系运算符“> =”,但按分数从小到大依次比较。
在上述3种方法中,方法一、方法二正确,而且方法一简洁明了,方法二虽然正确,但是在冗余条件。方法三虽然语法没有错误,但是判断结果错误:根据mark分数所得等级评定果只有“及格”和“不及格"两种,根据程序流程自行分析原因。
x = int(input("请输入x坐标:"))
y = int(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("位于第三象限")
else: print("位于第四象限")
----------------------打印结果-----------------------
请输入x坐标:5
请输入y坐标:-9
位于第四象限
在f语句中又包含一个或多个if语句称为if语句的嵌套。
此分段函数有以下几种实现方式,判断哪些是正确的,并自行编程测试正确的实现方式。
x=int(input("输入x的值=="))
#方法一(多分支结构):
if (x > 0): y = 1
elif (x == 0): y = 0
else: y = -1
print(y)
#方法二(if语句嵌套结构):
if (x >= 0):
if (x > 0): y = 1
else: y = 0
else: y = -1
print(y)
#方法三:
y = 1
if (x != 0):
if (x < 0): y = -1
else: y = 0
print(y)
#方法四:
y = 1
if (x != 0):
if (x < 0): y = -1
else: y = 0
print(y)
----------------------打印结果-----------------------
输入x的值==10
1
1
1
0
a = int(input("请输入整数a:"))
b = int(input("请输入整数b:"))
c = int(input("请输入整数c:"))
if (a < b): t = a; a = b; b = t #使得a>b
if (a < c): t = a; a = c; c = t #使得a>c
if (b < c): t = b; b = c; c = t #使得b>c
print("排序结果(降序):", a, b, c)
----------------------打印结果-----------------------
请输入整数a:5
请输入整数b:5
请输入整数c:5
排序结果(降序): 5 5 5
import calendar
y=int(input("请输入年份:"))
#方法一。使用一个逻辑表达式包含所有的闰年条件
if ((y % 4 == 0 and y % 100 != 0) or y % 400 == 0):
print("是闰年")
else: print("不是闰年")
#方法二。使用嵌套的if语句,相关语句如下:
if (y % 400 == 0): print("是闰年")
else:
if (y % 4 == 0):
if (y % 100 == 0): print("不是闰年")
else: print("是闰年")
else: print("不是闰年")
#方法三。使用if-elif语句,相关语句如下:
if (y % 400 == 0): print("是闰年")
elif (y % 4 != 0): print("不是闰年")
elif (y % 100 == 0): print("不是闰年")
else: print("是闰年")
#方法四。使用calendar模块的isleap函数来判断闰年,相关语句如下:
if (calendar.isleap(y)): print("是闰年")
else: print("不是闰年")
----------------------打印结果-----------------------
请输入年份:2021
不是闰年
不是闰年
不是闰年
不是闰年