在Python中,判断语句是人机交互中比较重要的一类,它能根据某个量的状态,来判断你下一步该做什么。Python和其它编程语言类似,使用if
关键字作为判断语句的标识。
基本语法
Python语句中,单独使用if
的语句为:
if(条件):
to-do
具体来说,当if
后面的条件为真时,执行:后面的语句。被if包围的区域(即要执行的区域),必须要比if
左端多一级缩进,也即4个空格。
例如:
a = 1
b = 3
c = -2
if(a == b):
print("a=b")
但是什么都没有输出。这是因为不满足a==b
的条件。
if-else
当条件为真时执行if所包围的语句。那当条件为假时,我还想执行其它语句,怎么办呢?
这时候,就可以使用if-else
语句,其基本格式为:
if(条件):
to-do
else:
to-do
其中if
和else
是左对齐的,被else
所包围的区域,也是要多一个缩进。
举个例子:
a = 1
b = 3
c = -2
if(a == b):
print("a=b")
else:
print("a≠b")
然后输出了a≠b
。
if-elif-else
当我们有多个分支时,类似下面的流程图:
也即一种事件可以有多个(超过2个)分支。为什么说是超过2个而不是3个呢?因为可以多加几个elif,例如if-elif-elif···else
。
下面是基本语法:
if(条件1):
to-do
elif(条件2):
to-do
······
elif(条件n):
to-do
else:
to-do
下面是一个示例代码,输出a,b,c三者的最大值:
a = 1
b = 3
c = -2
max_num = 0 #初始最大值变量
if(a >= b and a >= c):
max_num = a
elif(b >= a and b >= c):
max_num = b
else:
max_num = c
print(f"The maximum value between {a},{b} and {c} is {max_num}")
输出结果为:
嵌套的判断语句
在判断语句中可以嵌套使用判断语句,如果分支较多,比如elif
较多,有时可以使用嵌套的判断语句。
a = 1
b = 3
c = -2
max_num = 0 #初始变量
if(a >= b):
if(c >= a):
max_num = c
else:
max_num = a
else:
if(c >= b):
max_num = c
else:
max_num = b
print(f"The maximum value between {a},{b} and {c} is {max_num}")
输出结果是一样的。
不过我们可以改进代码,注意到max_num = c
被我们写了两次,因此我们不妨刚开始就定义max_num = c
,这样就可以简化代码:
a = 1
b = 3
c = -2
max_num = c #初始变量
if(a >= b):
if(c < a):
max_num = a
else:
if(c < b):
max_num = b
print(f"The maximum value between {a},{b} and {c} is {max_num}")
简化原理就是,原理代码中,if
条件满足的语句我们不需要做了,因此只需要做else
后面的语句。因此可以把else
的语句移动到if后面。
当然,我们可以再次简化:
a = 1
b = 3
c = -2
max_num = c #初始变量
if(a >= b and a > c ):
max_num = a
elif(c < b):
max_num = b
print(f"The maximum value between {a},{b} and {c} is {max_num}")
不过这大多只是排版上的简化了。
当然,想要极致压缩也不是不行,但需要使用内置max
函数:
print(f"The maximum value between {(a:=1)},{(b:=3)} and {(c:=-2)} is {max(a,b,c)}")
输出结果:
实际不建议这样使用:)
练习
题目
写一个找零程序,根据用户所给的正整数现金,计算一件87元的商品应该找零(或还需)多少钱;
求出用户输入的四个整数数字(用户会严格遵守整数格式输入)的严格次最大值以及其个数。
注:此处的严格次最大值指的是严格第二大的数字,相等的不算。例如1,2,3,3的次最大值有1个,为2;1,1,2,2的次最大值有2个,均为1.
输出格式示例:在1,2,3,3中,仅有1个严格次最大值,它的值为1。
在1,1,2,2中,一共有2个严格次最大值,它们均为1。
在1,1,1,1中,没有严格次最大值。
解答
1.【解析】:首先需要注意,用户需要输入正整数。因此可以对用户输入的金额进行判断,如果不是正整数,就提示“您输入的金额不是正整数,请重新输入!”(不过重新输入的功能需要用到循环语句,目前可以暂时不用)。之后比较用户所给的金额与商品的大小,分三种情况输出即可。
示例代码:
cost = 87
money = float(input("请输入正整数金额:"))
while(money <= 0 or money != int(money)):
print("您输入的金额不是正整数,请重新输入!")
money = float(input("请输入正整数金额:"))
dif = int(money - cost)
if(dif > 0):
print(f"应找您{dif}元")
elif(dif == 0):
print(f"您给的金额刚刚好!")
else:
print(f"您还需{-dif}元")
示例输出:
2.【解析】:判断严格次最大值,只需逐个比较即可。
示例代码:
a = int(input("请输入第一个数字:"))
b = int(input("请输入第二个数字:"))
c = int(input("请输入第三个数字:"))
d = int(input("请输入第四个数字:"))
numbers = [a, b, c, d]
numbers.sort()
a = numbers[0]
b = numbers[1]
c = numbers[2]
d = numbers[3]
if(a < d):
if(b < d):
if(c < d):
if(b == c):
if(a == b):
print(f"在{a},{b},{c},{d}中,一共有3个严格次最大值,它们均为{a}。")
else:
print(f"在{a},{b},{c},{d}中,一共有2个严格次最大值,它们均为{c}。")
else:
print(f"在{a},{b},{c},{d}中,仅有1个严格次最大值,它的值为{c}。")
elif(a == b):
print(f"在{a},{b},{c},{d}中,一共有2个严格次最大值,它们均为{a}。")
else:
print(f"在{a},{b},{c},{d}中,仅有1个严格次最大值,它的值为{b}。")
else:
print(f"在{a},{b},{c},{d}中,仅有1个严格次最大值,它的值为{a}。")
else:
print(f"在{a},{b},{c},{d}中,没有严格次最大值。")
上述代码使用sort
函数,对数字进行排序,然后重新定义到a,b,c,d上去。
不过借助ai和Python的函数,可以大幅简化(逻辑上)代码:
a = int(input("请输入第一个数字:"))
b = int(input("请输入第二个数字:"))
c = int(input("请输入第三个数字:"))
d = int(input("请输入第四个数字:"))
numbers = [a, b, c, d]
numbers.sort()
a, b, c, d = numbers
# 找出最大值和次最大值
max_value = d
# 找出所有严格小于最大值的数字
candidates = [x for x in numbers if x < max_value]
if not candidates:
print(f"在{a},{b},{c},{d}中,没有严格次最大值。")
else:
# 找出次最大值
second_max = max(candidates)
# 统计次最大值的个数
count = candidates.count(second_max)
if count == 1:
print(f"在{a},{b},{c},{d}中,仅有1个严格次最大值,它的值为{second_max}。")
else:
print(f"在{a},{b},{c},{d}中,一共有{count}个严格次最大值,它们均为{second_max}。")
从理论上来说,也不难理解。大致思路就是把最大值去掉,那么剩下的数字的最大值,就是整体的次最大值。然后统计次最大值的个数,进行判断即可。在数据量大的时候,推荐使用这种方法,简单且不易出错。
后记
Python的if判断语句,是实现人机交互中非常重要的一个函数。读者可尝试自己独立编写一个小游戏,如三门问题或数字炸弹(但需要循环语句)等,以加深印象。
上一节:
下一节: