Python学习笔记 第5章,jf语句(if if-else if-elif-else)
Python学习笔记 第5章,jf语句(if if-else if-elif-else)

Python学习笔记 第5章,jf语句(if if-else if-elif-else)

第5章 if 语句

实际应用中,很多时候需要通过条件判断的结果,决定采取怎样的措施。if语句就适用于条件判断的。并根据判断结果执行不同的程序语句。

5.1 一个简单示例

先看一个简单的if语句示例,下面for循环代码中加入了if语句,来判断当前循环中变量airen的值是否为’laopo’,如果是,输出首字母大写的字符串,如果不是,则原样输出列表元素的全小写字符。

airenmen=['laopo','erzi','mama']

for airen in airenmen :
    # 循环过程中检查变量是否等于laopo,是则输出首字母大写。
    if airen=='laopo' :#条件判断的等于符号是 == ,而不是 = 。
        print(airen.title())
    else:
        print(airen)

输出结果为:

Laopo
erzi
mama

条件判断有多种符号,判断是否相等的符号是==,而不是=。可以理解为=用于表达关联,而==用于表示提问并要求答案。

5.2 条件测试

if语句的核心是一个值为True或False的表达式,当测试结果为True时,执行if语句后的代码;当测试结果为False时,则忽略if语句后的代码;如果有else语句,Flase时会执行else语句后的代码。

if 条件表达式 :
    执行语句
else :
    执行语句

其实,if语句要完成的就是运算符两边的比较测试。条件测试运算符(也称比较运算符、二元运算符)有多种:

  • 等于==
  • 不等于!=
  • 大于>
  • 大于等于>=
  • 小于<
  • 小于等于<=
  • 包含in
  • 不包含not in

5.2.1 检查是否相等

最简单的是检查是否相等,使用运算符==来比较两边的值是否完全一致

下面的代码会检查变量最爱的值是否为'laopo',因为默认存在大小写敏感,所以第一句会返回False,而第二句==两边完全一致,则返回True。

zuiai='LaoPo'
print(zuiai=='laopo')
print(zuiai=='LaoPo')

5.2.2 检查字符串时忽略大小写

有时候只需要检查内容是否一致,而并不需要检查是否连大小写都完全一致,在对字符串进行判断时,就需要忽略大小写,或者说,先统一大小写,再进行比较。

下面的例句,由于用了lower()方法,所以是在临时转换小写后比较,只判断字符内容是否一致,而不考虑大小写。

print(zuiai.lower() == 'laopo')

与我而言,实际应用中的字符串基本都是汉字,大小写敏感并不常见。

5.2.3 检查是否不等

有时候,直接检查是否不等,比检查是否相等更有效率。是否不等的运算符是!=

下面例子,检查shihao的值是否为'抽烟',如果不是,则检查结果返回True,执行if后面的语句;如果值‘抽烟’,对于!=而言会返回Flase,执行else后面的语句。

shihao='喝酒'

if shihao != '抽烟' :
    print(f"{shihao}并不是我的最大不良嗜好!")
else:
    print(f"抽烟比喝酒更危害健康!")

注意!if语句比较结果返回的值True或False取决于运算符及其两边的值。

5.2.4 数值比较

数值比较很简单,等于、不等于、大于、小于、大于等于、小于等于,都可以进行判断比较。

下面的例子判断数字值的大小来确定一个孩子是否已经成年。

age=16

if age >= 16 :
    print(f"他已经是个成年人了,不能总是这么任性!")
else:
    print(f"他还小,要给他犯错的机会。")

5.2.5 同时检查多个条件

很多时候,简单判断一个条件是没有实用价值的,往往需要同时满足几个条件来筛选需要的东西。andor发挥这样的用途。

and可以连接多个检查条件,满足全部条件时返回True,否则返回False。

if 条件表达式1 and 条件表达式2 :

下面例子判断两个孩子是否都已成年,并通过修改值来看True和False时不同的结果。

age0,age1=16,18

if (age0 >= 16) and (age1 >= 16) :
    print(f"两个孩子均已成年。")
else:
    print(f"他们并未全部成年。")

#修改age0的值后,可见返回Flase的输出结果。
age0=15

if (age0 >= 16) and (age1 >= 16) :
    print(f"两个孩子均已成年。")
else:
    print(f"他们并未全部成年。")

为了增强可读性,每个条件表达式可用()包围起来,但这不是必须的。

or连接的多个检查条件中,只要满足一个条件就返回Ture,只有当所有条件都不满足,才返回False。

age0,age1=15,18

if age0>=16 or age1 >= 16 :
    print(f"他们并未全部成年,不能一起去网吧。")
else:
    print(f"他们全部未成年,谁都不能去!")

#修改age1后,两个条件都不满足,返回False。
age1=14

if age0>=16 or age1 >= 16 :
    print(f"他们并未全部成年,不能一起去网吧。")
else:
    print(f"他们全部未成年,谁都不能去!")

5.2.6 检查值是否在列表中

有时候需要确定一个值是否存在于列表中,则使用in来实现。

if 变量名 in 列表名 :

下面例子检查变量airen的值是否属于airenmen中的一个。

airenmen=['laopo','erzi','mama']
airen='laopo'

if airen in airenmen :
    print(f"{airen.title()}是我爱的人之一。")

5.2.7 检查值是否不在列表中

not in则用于检查一个特定值是否不在列表中,就像!=一样,有时候检查是否不存在,比检查是否存在更有效率。

airenmen=['laopo','erzi','mama']
airen='nobody'

if airen not in airenmen :
    print(f"不,{airen.title()}不是我的爱人。")

5.2.8 布尔表达式

布尔表达式其实就是条件测试表达式的另一种叫法,与条件表达式一样,返回结果要么是True,要么是False。

布尔值用于记录条件,在跟踪程序状态或其他重要方面布尔值是一种高效方法。

ShengHuoBuYi = True
QinLaoZhiFu = False

5.3 if语句

if语句有很多种,如何选择取决于要测试的条件数量和逻辑结构。

5.3.1 简单的if语句

最简单的if语句只有一个条件测试和一个执行语句,如下例,只检查年龄是否大于等于16岁,如果是则返回True执行紧跟if语句的执行语句如果否则返回False忽略紧跟if的执行语句。对于下面例子而言,会输出已成年,如果修改age变量值使其小于16岁,则条件测试为Flase,则程序结束,不会输出任何结果。

age = 18
if age >= 16 :
    print(f"已满16岁")

在if语句中,同样使用缩进来确定语句的归属,if语句可以是任意测试条件,而if语句后的执行语句可以是任意代码,并且可以有任意多行。上面例子可以增加更多输出内容。

age = 18
if age >= 16 :
    print(f"已满16岁")
    print(f"\t已经成年")

两个print()都在if语句后面,且都缩进了一段,所以都会被执行。

5.3.2 if-else语句

常用的情况是如果True执行一些语句,如果Flase则执行另一些语句。if-else语句会实现测试结果False时也有代码可执行,让测试结果非真的时候也能进行一些相应的处理。下面例子在未成年时也有语句会被执行,也有输出结果。

age = 18
if age >= 16 :
    print(f"已满16岁,已成年。")
else :
    print(f"未满16岁,尚未成年。")

这里,通过判断变量age的值是否大于等于16,如果True会执行if后的语句,输出已成年信息;如果False则忽略if后语句,并执行else后语句,输出未成年信息。很多时候,没有else的if语句在执行过程中会遇到意想不到的问题,应该让if语句尽量带有else以便处理Flase时的情况。

5.3.3 if-elif-else语句

if 测试条件1 :
    执行语句1
elif 测试条件2 :
    执行语句2
else :
    执行语句3

记得以前学过的语言中有的用elseif作为关键字,Python做了进一步简化。

还有一些情况,只检查一个条件式不够的,需要对同一事物执行至少3种情况的检查。如买车票时会出现这样的3种情况:1,成年人全价票;2,儿童半价票;3,婴幼儿免票。那么根据需要和实际遇到的情况,代码如下:

age = 10
if age < 6 :
    print(f"\t未满6岁,婴幼儿免票。")
elif age <= 14 :
    print(f"\t未满14岁,儿童享受半价票。")
else :
    print(f"\t无优惠,请购买全价票。")

上例中,首先测试是否满足第一个条件,如果年龄小于6,则执行if后语句,忽略其他部分;如果第一个测试False,则忽略if后语句,继续执行第二项测试,即elif项的测试,若满足该项则执行其后语句,输出半价票信息,并忽略else部分;若前两项都不满足,则说明年龄已经超过6岁,也超过14岁,属于除前两种条件外的其他情况,此时Python会执行else后的语句。

统一输出格式,将print()if语句块中移出,可以使代码更简洁。因统一了输出结构,修改输入语句时只需修改一处代码,而不是3处。上例修改后如下:

age = 10
if age < 6 :
    piaojia='免票'
elif age <= 14 :
    piaojia='半价票'
else :
    piaojia='全价票'
print(f"乘客年龄:{age}\t票价:{piaojia}")

5.3.4 多个elif代码块

根据实际需要,可以增加多个elif代码块,以增加更多测试条件,上例可以进一步调整为如下这样,给年龄满65岁的老人也提供半价优惠:

age = 67
if age < 6 :
    piaojia='免票'
elif age <= 14 :
    piaojia='半价票'
elif age >= 65 :
    piaojia='半价票'
else :
    piaojia='全价票'
print(f"乘客年龄:{age}\t票价:{piaojia}")

5.3.5 省略else部分

在if语句的完整结构中,else部分是可以根据需要来使用的,如果不需要,可以没有。值得注意的是,else是很强大的,只要有他在,即使前面的无论多少个测试条件都不满足,程序也一定会给出一个执行结果。

所以,是否写else还是根据实际情况来,我个人的习惯是只要有可能出现所有条件都不被满足,就一定写个else,给自己个测试提示也好。

5.3.6 测试多个条件

当仅需检查,是否满足一系列条件中的一个即可,使用if-elif-else语句;但有时,需要检查是否不止满足一个条件,这种情况,需要使用一系列的if语句,而不是一个if-elif-else语句。例如,需要在发货前确认客户需求的品种是否都有现货。

xianhuo=['apple','banner','cherry']

if 'apple' in xianhuo :
    print(f"\t苹果有货,可发。")
if 'banner' in xianhuo :
    print(f"\t香蕉有货,可发。")
if 'cherry' in xianhuo :
    print(f"\t樱桃有货,可发。")

5.4 用if语句处理列表

5.4.1 检查特殊元素

根据列表中的不同元素值,确定适合的处理方式。依然是水果店的例子,来看如何通过循环检查并输出打包配送单据。

下面例子使用循环输出客户的订单,但并不判断是否能满足需求。

xianhuo=['苹果','香蕉','樱桃']

for dabao in xianhuo :
    print(f"准备打包:{dabao}\t")

print(f"订单明细结束。")

这里有一个明显的问题,如果客户要求的水果是已知暂不销售的品种呢?该如何处理?要不要继续打包?还是要询问客户?可在for循环中增加一条if语句来处理这种情况。

xianhuo=['苹果','香蕉','西瓜','樱桃']

for dabao in xianhuo :
    if dabao == "西瓜" :
        print(f"\t本店暂不供应'{dabao}',务必及时告知客户。")
    else :
        print(f"准备打包:{dabao}")

print(f"订单明细结束。\n")

上例在循环中增加了判断,以确定客户订单中是否含有暂不供应的西瓜,如果有则输出相关信息给工作人员,以便与客户确认是否继续订单,其他正常供应的水果则输出订单明细,准备打包。

5.4.2 确定非空列表

之前的例子中都假设列表中至少有一个元素,但实际上很多时候在程序开始执行前,面对的可能是一个空列表。例如,在循环开始前应先确定客户的需求列表列表是否为空,如果为空则无法下单。

dingdan=[]

if dingdan :
    for dabao in dingdan :
        #列表非空时,返回True,执行if后语句。
        print(f"准备打包:{dabao}")
    print(f"订单明细结束。")
else:
    #列表为空时,返回False,执行else后语句。
    print(f"\t请先确定订单内容。\n")

5.4.3 使用多个列表

实际应用中,最常见的是获取用户订单,然后去跟库存列表进行比较,以确定用户需求的是否都有现货。也就是说有两个列表,一个是客户的需求,一个是现有的品种。通过比较,来确定是否满足客户订单需求,并给出如果不满足时的处理方式。

xianhuo=['苹果','香蕉','樱桃']
dingdan=['苹果','西瓜','樱桃']

for dabao in dingdan :
    if dabao in xianhuo :
        print(f"准备打包:{dabao}")
    else:
        print(f"'{dabao}'暂无现货,务必与客户核实是否继续订单。")
print(f"订单明细结束。\n")

5.5 设置if语句的格式

在使用if语句等设计运算符的格式时,在运算符两边或冒号:的两边增加一个空格 ,并不会影响Python的执行,却能够让语句更易读。如:if age >= 16 :要比if age>=16:更易读,尤其是在复杂的语句中更是如此。

如果顺利的话,我希望我编写的第一个真实可用的Python程序是一个家庭消费记事本。

本章习题

从本章开始,逐渐变得复杂起来,所以把相关习题也记录下来。下面是本章的几个习题代码段,根据教程要求尝试练习,留作参考。

习题 5.8 对管理员使用不同的问候语

users=['aliye','boton','carina','discas','eliy']
user='aliye'

if user == 'discas':
    print(f"管理员{user.title()}你好!是否需要查看近期统计表?")
else:
    print(f"亲爱的{user.title()}你好!欢迎回来!")
print(f"登录成功!\n")

user='discas'

if user == 'discas':
    print(f"管理员{user.title()}你好!是否需要查看近期统计表?")
else:
    print(f"亲爱的{user.title()}你好!欢迎回来!")
print(f"登录成功!\n")

习题 5.9 检查已有用户列表是否为空

users=['aliye','boton','carina','discas','eliy']
user='aliye'

if users :
    print(f"亲爱的{user},你好!欢迎回来!")#列表非空时为True,执行if。
else:
    print(f"当前无任何已注册用户,请先核实。")#列表为空时返回Flase,执行else。


users=[]
user='aliye'

if users :
    print(f"亲爱的{user},你好!欢迎回来!")#列表非空时为True,执行if。
else:
    print(f"当前无任何已注册用户,请先核实。")#列表为空时返回Flase,执行else。

习题 5.10 检查新注册用户名是否与现有用户名冲突(不区分大小写)

users = ['Aliye','Boton','Carina','Discas','Eliy']
oldusers=[]
newusers =['jack','boton','maykic','eliy']
print(users)

for olduser in users :
    oldusers.append(olduser.lower())
print(oldusers)

print(newusers)

for newuser in newusers :
    if newuser.lower() in oldusers :
        print(f"抱歉,用户名{newuser}已被占用,请尝试使用其他用户名。\n")
    else:
        print(f"用户名{newuser}可用,请继续填写其他信息,完成注册。")
        users.append(newuser.lower())
        print(f"\t新用户名{newuser}已加入用户列表中。\n")
print(users)

习题 5.11 输出1st到9th的序数列表

for number in range(1,10) :
    if number == 1 :
        print(f"{number}st")#数字为1时,后缀为st
    elif number == 2 :
        print(f"{number}nd")#数字为2时,后缀为nd
    else:
        print(f"{number}th")#数字为3-9时,后缀为th

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注