判断语句
判断语句的介绍— “你要永远浪漫自由,当自己的靠山,大方拥有,有所为有所爱,有所期待”
判断语句属于条件语句中的一种,是编程语言中最为重要的概念之一,在前面的教程中我们或多或少接触到了一些判断语句的案例,在这一小节中,我将为大家做详细的解析。
在 Python 中,由判断语句控制的代码执行的顺序叫做 分支结构 ,在分支结构中,程序会根据条件的真假来选择性地执行某些代码块,以实现不同的逻辑分支。
假设你正在准备出门,你需要根据今天的天气状况来决定是否需要携带雨伞,在这个时候程序就需要做出判断,如果天气很糟糕,程序就要执行 “携带雨伞” 对应的代码,如果天气很好,就会不带伞出门,这个时候程序就是 通过判断语句产生了分支结构 。
在 Python 中,一共有三种代码的执行顺序,分别是 顺序结构、分支结构、循环结构。
条件语句的分类
Python 中的判断语句有以下几种:
名称 | 描述 |
---|---|
if 语句 | 用于在满足特定条件时执行对应的一段代码。 |
if else 语句 | 用于在满足特定条件时执行一个代码块,否则执行另一个代码块。 |
if elif else 语句 | 用于根据不同的条件执行不同的代码块。 |
接下来我将结合示例来对上面三种语句做详细的讲解:
-
if 语句
if 语句是一种常见的条件语句,如果 if 语句后面接的表达式返回结果为 True ,则执行 if 下面缩进的代码块,否则跳过缩进的代码块:
要注意的是,在 if 语句中,要执行的代码需要使用缩进隔开。来看一个案例:
【案例】我希望对一个数字取绝对值。数字小于 0 就取相反数,否则不变。
# 使用 input 函数获取用户输入的数字,并使用 int 函数转化为数字变量
my_number =int
(input
('请输入一个数字:'
))# 如果数字小于0,就取相反数
if
my_number <0
:print
('您输入的是一个负数,程序将会进行取相反数操作'
)my_number = - my_numberprint
('输出的结果是:'
, my_number)由于我们使用了 input 函数,所以运行代码后会提示我们输入数字,我随意输入一个负数进行测试:
请输入一个数字:>? -5
然后键盘按下回车键,结果如下:
您输入的是一个负数,程序将会进行取相反数操作
输出的结果是: 5我们来分析一下此时程序都发生了什么:
首先通过 input 函数收集到我们输入的值并赋予给了 my_number 变量,然后进入到 if 的判断语句中 运算 my_number < 0 的结果,结果是 True,if 语句捕捉到了 True 这个布尔值,才开始运行下面缩进的代码块,输出对应的结果。
由此可见 条件语句的核心思想是判断布尔值 ,这一点非常重要。
【说一些题外话】笔者认识很多非常擅长编程技术的高手,他们当年在学习判断语句的时候认为条件语句识别的是表达式,而不知道条件语句的本质是 判断布尔值的真假 ,所以在后面遇到复杂的表达式与 and 或者 or 或者 not 等关键词联用的时候经常陷入混乱,所以笔者在此教程中将会多次强调这一点,尽量帮助大家在前期打好基础。
我们再输入一个正数的数字 10 重新运行代码来看看:
请输入一个数字:>? 10
然后键盘按下回车键,结果如下:
输出的结果是: 10
可以看出结果中没有出现 您输入的是一个负数,程序将会进行取相反数操作 这段话,所以可以知道代码中并没有运行 print 函数,也就是跳过了 if 语句下面缩进的代码块,其原因是因为 my_number < 0 的结果返回的布尔值是 False 。
我们再注意看这段代码:
print
('输出的结果是:'
, my_number)因为这段代码没有出现在 if 语句里,所以 Python 会按照 顺序结构 正常执行这段代码。
-
if - else 语句
if - else 语句在 if 语句的基础上增加了 else 这个关键词, if 语句中如果表达式的布尔值结果是 False ,程序会自动进入到 else 语句中的代码块中运行,而不是跳出整个条件语句。
如果 if 里的表达式条件满足 ,就执行 if 代码,其他所有情况都执行 else 代码。
【案例】如果外面下雨,那么出门就要带伞,其他的天气都不需要带伞:
# 使用 input 函数获取用户输入的天气
weather =input
('请输入今天的天气(阴天/下雨/晴朗/刮风):'
)# 如果天气是下雨,则提醒带伞
if
weather =='下雨'
:print
('今天天气下雨,出门记得带伞'
)else
:print
('今天不下雨,出门无需带伞'
)运行上面代码,我们先输入一个 下雨 做测试:
请输入今天的天气(阴天/下雨/晴朗/刮风):>? 下雨
按下键盘的回车,结果如下:
今天天气下雨,出门记得带伞
此时程序执行了 if 里面的代码块,输出了 今天天气下雨,出门记得带伞 这段话。
重新运行上面代码,这次我们依次输入 阴天、晴朗、刮风 做测试:
这三种输出的结果都如下,可见,此时程序执行的是 else 里面的代码块。
今天不下雨,出门无需带伞
-
if - elif - else 语句
在上面教程中的 if - else 语句的基础上又引进了 elif 这个关键词,if - elif - else 语句用于处理多个条件分支的语句。从 if 开始从上到下依次执行,遇到任何一个条件表达是 True 就会跳过其他语句。
elif 可以不限制使用次数,根据需求无限增加,最后的 else 可以根据实际问题来判断是否省略,来看下示意图:
在 Python 中 ,if - elif - else 语句的结构是下面这样的,由 if 语句开启第一个表达式,然后可以接多个 elif 表达式,程序会从上到下运行,凡是遇到任何一个表达式的结果为 True ,就会运行下面的代码,并结束后面的运行。
if
表达式1 :# 代码块1
elif
表达式2 :# 代码块2
elif
表达式3 :# 代码块3
......else
:# 代码块n
让我们通过一个案例更加深入了解这个语句的使用方式:
【案例】使用 Python 搭建一个简易的成绩管理系统,根据输入的分数来划分等级。
# 使用 input 函数 获取输入的成绩,并转化为浮点数
grade =float
(input
('请输入您的成绩:'
))# 定义一个等级的变量,随意赋予为空白,方便后面再次赋值
level =''
if
90
< grade :level ='A'
elif
80
< grade <=90
:level ='B'
elif
70
< grade <=80
:level ='C'
elif
60
< grade <=70
:level ='D'
else
:level ='不及格'
print
('您的成绩等级是:'
,level)运行上面代码,我们输入一个 85分 做测试,结果如下:
请输入您的成绩:>? 85
您的成绩等级是: B此时输入的 85分在判断语句中从上到下入进行了判断,在其中的一条 elif 语句中符合条件并完成赋值操作,终止后面的判断程序,返回了最终的结果。
条件语句的真假判别
我们在上面介绍过,条件语句下面对应的代码块是否运行是根据表达式结果的布尔值真 True 或者假 False 来决定的,除了 False 本身外,在 Python 中有一些特殊的元素会被程序默认为假值,比如下面这些:
名称 | 描述 |
---|---|
空值对象 | 空值在条件语句中会被程序默认为 False 。 |
空的数据结构或者容器 | 空的数据结构或者容器在条件语句中会被程序默认为 False 。 |
数值为零 | 整数的 0 ,或者浮点数 0.0 都被程序默认为 False 。 |
下面让我通过一些示例来帮助大家理解上面的几种结果为 False 的方式:
-
空值对象
Python 中的空值代表一个变量没有被赋予有效的值, 空值在条件语句中会被程序默认为 False ,触发对应的代码块,来看一个例子:
# 创建一个空值变量
my_value =None
# 在这里 my_value 的值相当于 False
if
my_value :print
('运行代码1'
)else
:print
('运行代码2'
)运行上面的代码,结果如下:
运行代码2
输出的语句是 运行代码2,所以我们知道程序运行的是下面 else 对应的代码块也就是说 if 下面的代码块没有运行,说明 if 后面接的表达式结果为 False 。
-
空的数据结构或者容器
空字符串、空列表、空元组、空字典、空集合,在条件语句中也会被程序默认为 False 触发对应的代码块,来看一个例子:
# 创建几个空数据结构
my_list = []my_set = {}my_string =''
my_dict = {}my_tuple = ()# 在这里 使用 or 逻辑符将这几个元素整合
if
my_listor
my_setor
my_stringor
my_dictor
my_tuple :print
('运行代码1'
)else
:print
('运行代码2'
)运行上面的代码,结果如下:
运行代码2
这里涉及到了下面将要学习到的知识点,在使用 or 逻辑判断符号,如果有任意一个表达式是 True 那结果都为 True ,只有全是 False 时结果才是 False 。
在代码中我们用 or 将创建的五个空数据结构连接起来,最后输出的结果是 运行代码2 。所以我们知道 if 语句中返回的结果是 False ,因为 or 逻辑符的性质,所以我们知道,创建的这五个数据结构都是 False ,这就是空数据结构的性质。
-
数值为零
在 Python 中 整数的 0 ,或者浮点数 0.0 都被程序默认为 False 触发对应的代码块,来看一个例子:
# 创建一个数值为 0 的变量
my_number =0
# 在这里 my_number 的值相当于 False
if
my_number :print
('运行代码1'
)else
:print
('运行代码2'
)运行上面的代码,结果如下:
运行代码2
输出的语句是 运行代码2,所以我们知道程序运行的是下面 else 对应的代码块,if 下面的代码块没有运行,说明 if 后面接的表达式结果为 False ,也就是 0 这个值是 False 。
除了上面提到的这几种对象外,其他的数据对象都将被视为 True 。
条件语句的逻辑运算
逻辑运算在条件语句中应用非常广泛,常常应用于语句中同时存在多个表达式的情况。
在上面的教程中提到 条件语句的核心思想是判断布尔值的真假 ,这句话的应用在逻辑运算中尤为常见。在此基础上开始我们的学习:
条件语句的逻辑运算主要分为以下几种:
名称 | 描述 |
---|---|
比较运算 | 用于判断两个内容的大小关系或者是否相同。 |
逻辑符运算 | 通过 and 、or 、not 逻辑符来完成表达式运算。 |
逻辑符组合运算 | 同时出现多个表达式需要使用逻辑符组合进行运算。 |
比较运算
在 Python 中,进行比较运算主要涉及到判断是否相等、是否不相等以及大小关系比较:
① 判断是否相等
在 Python 中 双等号 == 的意思是比较两侧的内容是否相等,如果相等,则返回 True ,不相等则返回 False 。与之相反的是,冒号和等号的组合 != 的意思是比较两侧内容是否不相等,如果不相等,则返回 True ,相等则返回 False 。
【案例】检查用户输入的用户名和密码是否匹配:
# 我们先设定默认的初始账号和密码
'牧旗教程'
'password'
# 使用 input 函数获取用户输入的账号和密码
input
('请输入账号: '
)input
('请输入密码: '
)# 如果账号和密码同时都正确
if
username == default_username and
password == default_password:print
('登录成功'
)# 如果账号正确但是密码不正确
elif
username == default_username and
password != default_password:print
('密码不正确,请重新输入'
)# 否则登录失败
else
:print
('您的账号不存在'
)运行代码,并输入正确的账号和密码:
请输入账号: >? 牧旗教程
请输入密码: >? password
按下回车,输出结果如下:
登录成功
在这个案例里,username == default_username 这个表达式是用来判断两个变量是否完全相同,输入正确的账号后该表达式会返回 True 布尔值,账号和密码都为 True ,则会登录成功。否则进入后面的 elif 语句中再进行判断。
② 大小关系比较
在 Python 中的比较运算还有大于号 >、 小于号 < 、大于等于号 >= 、小于等于号 <= ,这些符号的用法和数学中的用法是一样的,在这里不再举例说明。
逻辑符运算
在 Python 中的逻辑运算符有 and 、 or 、not 三种,分别代表与、或、非,三种计算方式。这三个逻辑符的输出结果是布尔类型,用于条件语句的判断。让我们结合案例依次进行学习:
① and 逻辑符
在使用 and 逻辑符的时候, 在所有条件全部都为 True 的前提下 ,返回的结果才能是 True ,只要有一个表达式结果是 False ,返回的结果都是 False 。
让我们通过一个例子来加强理解:
【案例】根据多条件组合来判断一个人是否符合飞行员初筛的条件,必须满足年龄大于 18岁、不能是没有学历并且身体健康的条件才符合规定。
# 使用 input 函数获取个人输入的信息
int
(input
('请输入您的年龄:'
))input
('请输入您的学历(无学历/本科以下/本科/硕士):'
)input
('请输入您的身体状况(健康/其他):'
)# 根据条件判断是否符合初筛的条件
if
age >= 18
and
education != '无学历'
and
body == '健康'
:print
('您符合飞行员初筛条件'
)else
:print
('您不符合飞行员初筛条件'
)运行代码,输入一批符合条件的信息进行测试,最后按回车运行,结果如下:
请输入您的年龄:>? 25
请输入您的学历(无学历/本科以下/本科/硕士):>? 本科
请输入您的身体状况(健康/其他):>? 健康
您符合飞行员初筛条件
可以看出,我们定义的这个人的各项条件 全都满足 飞行员的初筛条件,也就是三个条件试都是 True ,所以输出的结果也是 True 。
② or 逻辑符
在使用 or 逻辑符的时候,只要有 任何一个条件 满足是 True ,那么返回的结果就是 True ,只有 所有的条件 都是 False 的前提下,返回的结果才是 False 。
让我们通过一个例子来加强理解:
【案例】根据多条件组合来判断一个人是否符合获得赠品的条件,需要满足的条件是这个人是vip,或者消费金额满1000元,才可以获得赠品。
input
('您是否是vip会员?(是/否):'
)float
(input
('请输入您的消费金额(元):'
))# 这个人是vip 或者消费金额满1000元,就可以获得赠品
if
is_vip == '是'
or
amount > 1000
:print
('恭喜您可以获得赠品'
)else
:print
('抱歉,您的资格暂时无法获得赠品'
)运行代码,输入一批符合条件的信息进行测试,最后按回车运行,结果如下:
您是否是vip会员?(是/否):>? 否
请输入您的消费金额(元):>? 1500
恭喜您可以获得赠品
可以看出,虽然我输入的信息没有 vip 资格,但是满足了消费金额大于 1000 这个条件,也就是两个表达式只要满足了一个,输出的结果就是 True 。
③ not 逻辑符
not 运算符是不满足这个条件才能返回 True 。
【案例】如果不抽烟才可以进入某场所
False
if not
smoke :print
('欢迎进入'
)运行代码,结果如下,可见,输出了 “欢迎进入” 的提示,说明 not smoke 的结果是 True 。
欢迎进入
在进行逻辑判断时有一个小技巧叫做 短路求值,可以快速地完成结果判断,短路求值要记住以下的特点:
对于 and 逻辑符,一旦计算出一个条件是 False ,则整个表达式的结果为 False ,不再计算其他表达式,直接返回结果。因为无论其他表达式的结果是什么,已经有一个 False 存在,整个表达式不可能再为 True 。
对于 or 逻辑符,一旦计算出一个条件是 True ,则整个表达式的结果为 True ,不再计算其他表达式,直接返回结果。因为无论其他表达式的结果是什么,已经有一个 True 存在,整个表达式不可能为 False 。
逻辑符组合运算
在 Python 中经常会出现逻辑符组合使用的情况,比如在条件语句中同时出现了 and 和 or 或同时出现了 and 和 not 等组合。
在遇到逻辑符组合使用的情况时,需要将表达式都转换为布尔值再进行判断。
在 Python 中经常会出现逻辑符组合使用的情况,遇到这种情况需要遵循一定的优先级计算顺序,下面是程序在计算时会遵循的优先级:
优先级 | 名称 |
---|---|
由最高 | 括号 (和数学中的一样,括号的优先级永远最高) |
↓ | 乘法 ( * ) 、 除法 ( / ) 、 取整 ( // ) 、 取余 ( % ) |
↓ | 加法 ( + ) 、 减法 ( - ) |
↓ | 是否相等 ( == ) 、 是否不相等 ( != ) |
↓ | 非运算符 ( not ) |
↓ | 与运算符 ( and ) |
到最低 | 或运算符 ( or ) |
让我们通过一个例子来加强理解:
【案例】写一个程序来判断满足如下条件的用户可以享受优惠,条件是学生或者是年龄大于等于 60 岁的老人,并且购买金额超过 100 元或者购买商品数量超过 3 件。
# 使用 input 函数获取用户输入的信息
input
('您是否是学生?(是/否):'
)int
(input
('您的年龄是多少?(岁):'
))float
(input
('您的购买金额是多少?(元):'
))float
(input
('您购买商品的数量是多少?(个):'
))# 使用多个逻辑符将条件组合起来
if
(not
age <= 60
or
is_student == "是"
) and
(amount > 100
or
item_count > 3
):print
('您可以享受优惠'
)else
:print
('您无法享受优惠'
)运行代码,并输入指定的信息:
您是否是学生?(是/否):>? 是
您的年龄是多少?(岁):>? 18
您的购买金额是多少?(元):>? 150
您购买商品的数量是多少?(个):>? 2
您可以享受优惠
首先按照运算符的先后顺序,括号的优先级是最高的,所以程序会先执行 and 两侧的括号内的表达式。
先看左侧的括号内的内容,相较于 or 关键词, not 关键词的优先级更高, 所以程序会先计算 not age <= 60 表达式,结果是 False 。
接下来计算 is_student == '是' 表达式, 结果也是 True ,所以根据 or 逻辑符的性质,左侧括号内返回的结果是 True 。
同理,右侧括号内的表达式返回的也是 True ,最后使用 and 逻辑符连接两个 True ,所以最后判断结果也为 True ,所以我们输入的条件是满足优惠政策的。
当然,条件语句也经常和循环语句联用,达到非常好的效果,在下一节的循环语句中我会做详细的讲解。
例题
【案例1】来看一个非常有趣的例题,使用 Python 编写一套程序,用户和计算机进行石头剪刀布,计算机出拳的结果是随机的,判断谁会赢得比赛。
使用 random 函数可以生成随机数,在使用前需要用 import 函数 引入,关于 import 的详细内容会在后面的教程中学到。
import
random# 输出计算机的引导语
print
('欢迎来到牧旗教程的猜拳游戏!'
)# 使用字典定义石头剪刀布分别对应的数字
1
:'石头'
,2
:'剪刀'
,3
:'布'
}# 使用 input 函数获取用户输入的信息
input
("请输入您的选择(石头/剪刀/布):"
)# 判断用户输入的信息是否合规
if
user_choice not in
['石头'
,'剪刀'
,'布'
]:print
('您的输入不合规,请重新运行程序并在石头、剪刀、布中选择一个'
)else
:# 使用 random 函数让计算机随机生成一个1-3的数字
1
,3
)# 将计算机生成的数字转化为文字
# 输出计算机的引导语
print
('您的选择是 :'
, user_choice)print
('计算机的选择是 :'
, computer_string)# 开始进行比大小计算并输出结果
if
user_choice == computer_string:print
('结果是平局!'
)elif
(user_choice == '石头'
and
computer_string == '剪刀'
)\or
(user_choice == '剪刀'
and
computer_string == '布'
)\or
(user_choice == '布'
and
computer_string == '石头'
):print
('恭喜获胜!'
)else
:'您输了!'
)
这个案例中用到了字典、if 语句、逻辑符组合使用等知识点,运行上面的代码:
欢迎来到牧旗教程的猜拳游戏!
请输入您的选择(石头/剪刀/布):
我们随意输入一个选择试试,并按下回车:
欢迎来到猜拳游戏!
请输入您的选择(石头/剪刀/布):>? 石头
您的选择是 : 石头
计算机的选择是 : 剪刀
恭喜获胜!
大家在测试的时候结果可能会与我的结果不同,因为我们设定的计算机出拳结果是随机的,大家可以多次重新运行代码测试~
关注公众号【牧旗教程】,回复“更多例题”,获取更多题型进行训练~
您的打赏将帮助维护网站服务器的正常运营,并为作者的后续更新提供更多的动力。
Copyright © 2013-2023 Muqi Course. All Rights Reserved. 牧旗教程 版权所有 京ICP备2023029281号