if语句 《Python编程:从入门到实践第二版》笔记

if语句

我们先随便写一个if语句来展示一下if的功能。

transportations = ['bus', 'truck', 'bicycle', 'subway', 'car', 'airplane']
cities = ['Beijing', 'Nanjing', 'Shanghai', 'Chengdu', 'Tainjin', 'Guangzhou']

for transportation in transportations:
    if transportation == 'airplane':
        print(f"I'm going to visit {cities[2]} by",transportation,"!")
    else:
        print(f"I'm going to visit {cities[1]} by",transportation)

I'm going to visit Nanjing by bus
I'm going to visit Nanjing by truck
I'm going to visit Nanjing by bicycle
I'm going to visit Nanjing by subway
I'm going to visit Nanjing by car
I'm going to visit Shanghai by airplane !

if语句的核心是一个判断语句,根据判断结果是True还是False来决定究竟要执行一条语句。如果if判断语句的判断值为True,Python就执行紧跟if语句的代码,如果if语句的判断值为False,Python则不会执行紧跟着if语句的代码块。

检查是否相等

最常见的if判断语句都是将一个变量与某个值进行比较,例如我在上面的代码中,就是用for循环来依次从transportations中取值给transportation,然后用判断transportation的值是否与airplane相等,如果相等,我就去上海,不相等就去南京。

在这里,我们也看到第一个比较运算符==,在Python中一个等于号=通常代表着赋值,而两个等于号==则代表着等于 - 比较对象是否相等。

比较运算符

在这里插入图片描述

print(2 == 3)
print('1' != 1)
print(3 > 3)
print(3 < 4)
print(3 >= 3)
print(3 <= 3)

False
True
False
True
True
True

所以,我想你可以发现,编程并不是枯燥的,实际上它是像写文章一样的,以上的代码叙述了一系列问题:2是否等于3?字符‘1’是否不等于数字1?3是否大于3?3是否小于4?3是否大于等于3?3是否小于等于3?然后程序运行后,对这一系列的问题进行了回答,2等于3吗?错!字符‘1’不等于数字1吗?对…

当然这都是简单的代码,还算不上一个完整的程序,在我看来程序的目的在于解决问题。

判断是否相等时的条件

也许有人会有疑问,字符‘1’为什么不等于数字1,这是因为Python在判断相等时有着严格的条件,字符串‘1’的类型时str,而数字1的类型为int,所以即使按照我们的理解,内容都是1,但类型不同也是不相等的。

print(type('1'))
print(type(1))

<class 'str'>
<class 'int'>

同样,判断是否相等是大小写严格的,这也就是说‘Nanjing’和‘nanjing’的不相等两个字符串,从ASCII码的角度也很好理解,‘Nanjing’的首字母‘N’和‘nanjing’的首字母‘n’各自的ASCII码就是不同的。这是有好处的,例如,当我们想判断输入的密码是否与数据库中保留的密码是否相等时,一定需要严格的大小写比较。然而,如果我们只关心两个字符串的内容是否相同时,我们可以把两个字符串都变成大写或都变成小写在进行比较,这里可以利用lower方法或这upper方法,这样也会保持原来字符串的样子而不会做更改。

city = 'nanjing'
city2 = 'Nanjing'
print(city2 == city)
print(city2.lower() == city)

False
True

对多个条件进行判断

有时候,我们可能需要在一个if语句中对多个条件进行判断,这时候就需要逻辑运算符来帮忙,

逻辑运算符

在这里插入图片描述

a = ('sun' == 'Sun')  #实际上可以不用括号,我觉得带着括号可以看的更清晰,但是可能美观上会差
b = (1 == 1)
print(a)
print(b)
print(type(a))
print(a and b)
print(a or b)
print(not a)

False
True
<class 'bool'>
False
True
True

这是用到and,or,not的三个语句。这里我先对a、b两个变量进行赋值,可以看到实际上变量a和变量b是两个布尔bool类型变量,各自的值为a = False和b = True;a and b 的含义就是a与b,稍微了解逻辑谓词,就知道“有真或为真,有假与为假”,所以只有当a与b均为True的时候,a and b 才会给出True,而a为False,b为True(a为True,b为False)的情况,a and b一定会给出False。而or则是只有当a、b均为False,a or b 才会给出False。not则是,当a为True时,not a为False,a为False时,not a为True。

逻辑短路

逻辑短路可以说是一个比较高级的概念,如果你确定不会写什么很复杂的代码语句,也许这辈子都不会碰上,但是,我觉得需要提及一下。

逻辑短路具体的情况是:a 为 False,b 为任意操作时,存在这样的语句a and b,此时就不会对语句b进行执行,也许就得不到你想要的结果;另外一种情况是a 为 True,b为任意操作时,存在这样的语句 a or b,此时a已经为True,故整个或的结果一定为True,Python就不会执行b操作。

注释:Python中似乎不允许在and 、or 语句中进行赋值。

a = 1
b = 2
if (a>1) and (b = b+2):
    print(b)

if (a>1) and (b = b+2):
                    ^
SyntaxError: invalid syntax

这是一种错误的写法,但是在C或C++等一些语言中倒是会有这样的操作,这种比较容易造成逻辑短路。

然而Python中存在这样的逻辑短路:表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

a = 20 or 30
print(a)
a = 20 and 30
print(a)
a = -1 or 20
print(a)

20
30
-1

也许有人有疑惑,为什么会这样。对于数字来说,只要数字不是0,对于and,or这样的逻辑运算符来说等同于True。那对于20 or 30来说,实际上,20就等同于True,所以不再去检查30,而是直接将20赋给a。而对于and来说,20虽然是Ture,但是还是要对30做一下操作,发现30也是True,最后则把30赋值给a。

a = 0 and 20 and 30 and -1
print(a)

这个的结果是什么?是0,就像我上面说的,0相当于False,而对于and来说,后面是什么整个结果都是False,所以直接把0赋值给a即可。

注释:我从未想过Python的逻辑短路是这样的……,和C等语言不太一样。

判断特定值是否(不)在列表中

有时候,我们想要了解列表或元组中是否包含我们需要的一些信息,字符串,数字等等。

这就可以用Python的关键字in:

if 'Nanjing' in cities:
    print('I love Nanjing')
a = 'Nanjing' in cities
print(a)

I love Nanjing
True

可以看到,in的用法其返回的是一个布尔(bool)值,如果你想搜寻的字符串或值在列表中,其返回True,否则返回False。

既然可以判断特定值是否在列表中,那么也就有判定特定值不在列表中的not in 操作。

# not in 关键字
if 'Shenyang' not in cities:
    cities.append('Shenyang')
print(cities)

['Beijing', 'Nanjing', 'Shanghai', 'Chengdu', 'Tainjin', 'Guangzhou', 'Shenyang']

最初的cities中并没有‘Shenyang’这个字符串,所以not in返回一个True的结果,然后if语句因为是一个True的条件判断,所以开始执行其语句块,在cities后面追加一个‘Shenyang’字符串。

if-else语句

在日常编程中,我们更多的是遇到这种情况,就是我们希望对一个事情做出一个判断;如果判断结果是True就执行某些操作,而判断结果为False时,就执行另外的一些操作。在这种情况下,我们可以使用Python提供的if-else语句。

des = str(input("where do you plan to go?"))
if des in cities:
    print("it's already in your plan")
else:
    cities.append(des)
    print("we append it in the plan")

where do you plan to go?Shenyang
we append it in the plan

例如,有时候我们想去一个城市游玩,但是眼下还不行,我们就把目的地加入到计划之中。这一段代码,首先询问想要到哪里去玩?然后输入一个地名,if 判断语句判断这个地名是否在计划城市之中,如果在计划里,就提示用户已经在计划城市中了,如果该地名不在计划城市列表中,就将该地名加入到列表中,并且提示用户已经将其加入到计划。

if-elif-else语句

Python中,多分支结构主要依靠if-elif-else结构来执行,当我们发现要判断的情况可能出现两个以上的结果的时候,就需要依靠这种结构。这种结构很像C、C++中的switch语句的功能。Python中没有switch关键字。

age = int(input("How old are you?"))
if age <= 18:
    print("teenager!")
elif age <= 45:
    print("young man!")
elif age <= 60:
    print("middle aged")
else:
    print("old man")

How old are you?23
young man!

这是一个对输入年龄进行判断,来确定该年龄属于哪个年龄段的代码?用户输入自己的年龄,如果小于18岁,则会给出teenager(这并非严格的年龄划分,我只是想展示if-elif-else的用法),如果年龄小于等于45岁,则会输出young man;如果年龄小于60岁则会输出middle aged,如果年龄大于60,则会输出old man。if-elif-else模块的执行逻辑是,从if开始进行判断,当某个if或elif判断句结果为True时,就执行紧跟随的语句,然后跳出if-elif-else语句,也就是if-elif-else只会执行某个条件成立后面的代码语句,如果没有一个条件成立也会执行else后面的代码语句。

当然,也可以省略掉else,也就是可以变为if-elif的结构,if后面可以跟随多个elif,同样,只有当某个条件成立时,其后面的代码语句才会执行,而其后面的所有条件不再进行判断,直接跳出。

if True:
    print(1)
elif True:
    print(2)
elif True:
    print(3)
else:
    print(4)

1

可以看到现在所有条件结果都为True,但是只输出if后面的print(1),然后跳出,不在对后面的条件进行判断;

if False:
    print(1)
elif True:
    print(2)
elif True:
    print(3)
else:
    print(4)

2

现在if后面条件结果为False,第一个elif的条件结果为True,所以输出2,然后跳出,不在对后面的条件进行检测。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUNX-T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值