走出Python新手村第一步:条件语句【玩转Python】
前言
主线任务之数据类型基本接近尾声,接下来距离出新手村已经指日可待。
新的主线任务已开启,第一关首先来了解一下Python中的条件语句。
让我们一起开启新的Python主线任务吧。
文章速度
阅读完本篇文章,开发者将有以下收获:
- 如何编写简单的 if 语句、if-else 语句和 if-elif-else 结构语句;
- 使用条件语句进行特定条件的测试,确定这些条件是否满足。
if 语句
介绍
我画了一个流程图,可以十分快速了解 if 语句的基本结构。

笔记
if-elif-else 结构
需要检查超过两个的情形,使用 if-elif-else 结构。
比如不同等级值下不同称为的展示:
def getName(level):
if level < 3:
return '摸鱼萌新'
elif level < 7:
return "摸鱼达人"
elif level >= 7:
return "摸鱼王者"
else:
return "欢迎加入摸鱼团"
print(getName(8))
>>> 摸鱼王者
print(getName(3))
>>> 摸鱼达人
print(getName(0))
>>> 摸鱼萌新
省略 else 代码块
在条件测试中,一旦不满足任何的 if 或 elif 中的条件,else 中的代码就会执行,这可能引入无效甚至恶意的数据。
所以,如果知道最终要测试的条件,应考虑使用一个 elif 代码块来代替 else 代码块,这样一来,只有满足对应的条件,才会执行条件中代码。像上面代码中的情况,当等级达到7及以上,就会返回"摸鱼王者"的称号,所以结尾 一个 elif 条件测试即可,后面的 else 可以省略。
获取符合条件的列表元素的索引
合使用 if 语句和列表,可以实现很多业务场景。比如获得需要的元素、校验列表是否为空、多个列表结合获取需要的元素等。
如果我即想获得需要的元素又想获取改元素的索引值备用,该怎么做呢?
定义一个变量 index 接收最终的索引值,在用 for 语句循环列表时,index 的值增加1。
当满足 if 语句中的条件时,执行代码块,此时符合条件的列表项的索引值就是 index 的值。
name_list = [['fayi'], ['yeyiyi', 'shangyingyan', 'lily', 'ann'], ['Troy'], ['nixiaozi'], ['ningjie', 'ningzaichun', 'chaipaopao']]
index = 0
for name_item in name_list:
if len(name_item) == 4:
print(f'列表的第{index+1}项为掘金读书圈四朵金花:{name_item[0]}, {name_item[1]}, {name_item[2]}, {name_item[3]}')
if len(name_item) == 3:
print(f'列表的第{index+1}项为掘金读书圈三大才子:{name_item[0]}, {name_item[1]}, {name_item[2]}')
index += 1
>>> 列表的第2项为掘金读书圈四朵金花:yeyiyi, shangyingyan, lily, ann
>>> 列表的第5项为掘金读书圈三大才子:ningjie, ningzaichun, chaipaopao
条件测试
介绍
每条 if 语句的核心都是一个值为 True 或 False 的表达式,这种表达式称为条件测试。
笔记
相等与不等
1、检查是否相等,使用相等运算符:==
str_2 = 'yeyiyi'
str_3 = 'shangyingyan'
print(str_2 == str_3)
>>> False
num_1 = 1
num_2 = 1.0
print(num_1 == num_2)
>>> True
上面代码中一共两组校验,第一组是两个字符串,得到的结果是False(不相等);第二组中两个数值,尽管类型不一样,但是值是一样的,所以结果是True(相等)。
2、检测是否不相等,使用不等运算符:!=
还是用上面的两个例子,将运算符换一下,结果和原来也是相反的。
str_2 = 'yeyiyi'
str_3 = 'shangyingyan'
print(str_2 != str_3)
>>> True
num_1 = 1
num_2 = 1.0
print(num_1 != num_2)
>>> False
数值比较
数值的检查,除了是否相等和是否不相等,还有多个数值间的大小比较。
temperature_1 = 39
if temperature_1 > 37:
print('高温预警,请减少室外活动')
当温度高于37的时候,会给出预警提示,数值39高于37,所以提示信息会被打印出来。
>>> 高温预警,请减少室外活动
类型检查
实际开发中,还会有一种情况,当使用公共方法的时候,可能需要对入参的类型进行校验,符合需要的类型的值,才会进行下一步操作。
Python 有两个方法可以判断需要检查的变量是否属于某个类型:type 和 isinstance。
这两个方法的区别主要有两点:
1、是否可以判断未知类型
- type 方法,只有一个参数,可以得到校验的变量的类型,还可以得到参数变量未知的所属类型;
- isinstance 方法,有两个参数,只能判断是否属于某个已知类型,不能直接得到变量未知的所属类型。
num_1 = 1
num_3 = 1.0
print(isinstance(num_1, int))
>>> True
print(isinstance(num_3, int))
>>> False
print(type(num_1))
>>> <class 'int'>
print(type(num_3) == float)
>>> True
class Ship:
def update(self):
self.name = '嫦娥'
ship = Ship()
print(type(ship) == Ship)
>>> True
print(type(ship))
>>> <class '__main__.Ship'>
2、子类实例是否属于父类
- type 会判断子类实例对象不属于父类类型;
- isinstance 可以判断子类实例对象属于父类类型。
class Settings:
def __init__(self):
self.speed = 1.0
class Ship(Settings):
def update(self):
self.name = '嫦娥'
ship = Ship()
print(isinstance(ship, Ship))
>>> True
print(isinstance(ship, Settings))
>>> True
print(type(ship) == Ship)
>>> True
print(type(ship) == Settings)
>>> False
print(type(ship))
>>> <class '__main__.Ship'>
通过不同点,也对使用场景有了大致的了解:
- 含不确定类型的检查,可以用 type;
- 有继承关系的父类类型判断,可以用 isinstance
检查多个条件
1、使用 and 检查多个条件
如果每个测试都通过了,整个表达式就为 True;如果至少一个测试没有通过,整个表达式就为 False。
def checkAdmin(name, grade):
if name == 'ningjie' and grade == 7:
print(f'您好,尊敬的超级管理员 {name}')
else:
print(f'您好, {name}')
checkAdmin(name = 'yeyiyi', grade = 7)
>>> 您好, yeyiyi
checkAdmin(name = 'ningjie', grade = 7)
>>> 您好,尊敬的超级管理员 ningjie
2、使用 or 检查多个条件
只要至少一个条件满足,整个表达式就为 True;如果都没有通过,则整个表达式就为 False。
def checkAdmin(name):
if name == 'ningjie' or name == 'Troy':
print(f'您好,尊敬的超级管理员 {name}')
else:
print(f'您好, {name}')
checkAdmin(name = 'Troy')
>>> 您好,尊敬的超级管理员 Troy
checkAdmin(name = 'ningjie')
>>> 您好,尊敬的超级管理员 ningjie
列表中的特定值检查
- 使用关键字 in,判断特定的值是否已包含在列表中;
- 使用关键字 not in,判断特定的值是否不包含在列表中。
name_list = ['yeyiyi', 'shangyingyan', 'ningzaichun', 'ningjie', 'lily', 'fayi']
print('shangyingyan' in name_list)
>>> True
print('nixiaozi' in name_list)
>>> False
print('Troy' not in name_list)
>>> True
print('ningjie' not in name_list)
>>> False
总结
本篇主要是对 Python 中条件语句的学习和运用,同时还做了适当的功能延伸探索。
我最近在看一些用 Python 实现的项目源码,发现这个知识点的出镜率还挺高,掌握它们对实际开发会大有裨益。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)