卢鹏博
发布于 2025-08-28 / 4 阅读
0
0

Python学习笔记(五)—— 判断语句

在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

其中ifelse是左对齐的,被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)}")

输出结果:

实际不建议这样使用:)

练习

题目

  1. 写一个找零程序,根据用户所给的正整数现金,计算一件87元的商品应该找零(或还需)多少钱;

  2. 求出用户输入的四个整数数字(用户会严格遵守整数格式输入)的严格次最大值以及其个数。
    注:此处的严格次最大值指的是严格第二大的数字,相等的不算。例如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判断语句,是实现人机交互中非常重要的一个函数。读者可尝试自己独立编写一个小游戏,如三门问题或数字炸弹(但需要循环语句)等,以加深印象。


上一节:https://blog.math-enthusiast.top/archives/1749020904934

下一节:


评论