likes
comments
collection
share

条件语句、循环与算术运算符,玩转 Python 世界的三件套【玩转 Python】

作者站长头像
站长
· 阅读数 2

前言

条件语句、循环与算术运算符,这仨,不但时常出现在我日常的前端开发中,而且经常是以组合的方式出现。

那么,Python 编程中,它们的用法有什么异同呢?

接下来,让我们一起进入 Python 的世界。

文章速度

阅读完本篇文章,开发者将有以下收获:

  • 如何编写简单的 if 语句、if-else 语句和 if-elif-else 结构语句;
  • 使用条件语句进行特定条件的测试,确定这些条件是否满足;
  • 如何在利用高效的 for 循环的同时,以不同于其他元素的方式对特定的列表元素进行处理;
  • 如何使用 while 循环让程序不断运行,直到指定的条件不满足为止;
  • 掌握不同控制 while 循环流程的方式:使用 break 语句、使用 continue 语句
  • 利用算术运算符实现有用的具体功能。

if 语句

介绍

我画了一个流程图,可以十分快速了解 if 语句的基本结构。

条件语句、循环与算术运算符,玩转 Python 世界的三件套【玩转 Python】

笔记

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 的值。

条件测试

介绍

每条 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 有两个方法可以判断需要检查的变量是否属于某个类型:typeisinstance

这两个方法的区别主要有两点:

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

while 循环

介绍

相较 for 循环用于针对集合中的每个元素都执行一个代码块,while 循环会不断运行,直到指定的条件不满足为止。

笔记

选择何时退出

当满足指定条件时,可以退出 while 循环。

对于列表的循环,一般会将条件指定为不超过列表的长度。

在不超过列表长度的情况下,使用 if-else 语句进行一些条件判断,输出满足条件的内容。

打印下面的代码,看看谁才是当之无愧的"好运锦鲤"。

name_list = ['yeyiyi', 'shangyingyan', 'lily', 'ann', 'ningjie', 'ningzaichun', 'chaipaopao', 'fayi']
def getSelf(self):
    index = 0
    while index < len(name_list):
        print(f'好运积累中...')
        if self in name_list:
            print(f'恭喜{self},获得"好运锦鲤"的buff')
            break
        else:
            print(f'亲爱的{self},下次更幸运')
            break
        index += 1

当 getSelf 方法入参中的名字存在于列表中,则打印文字为:恭喜shangyingyan,获得"好运锦鲤"的buff;

当 入参中的名字不在列表中,则打印文字为:恭亲爱的zhangsan,下次更幸运。

getSelf('shangyingyan')
>>> 好运积累中...
>>> 恭喜shangyingyan,获得"好运锦鲤"的buff

getSelf('zhangsan')
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运

使用break退出循环

还是上面的功能,我去掉 break,在来看下打印结果:

>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运
>>> 好运积累中...
>>> 亲爱的zhangsan,下次更幸运

通过结果不难看出,循环进行了8次,也就是列表的长度次。

所以,使用 break 可以立即退出while循环,不再运行循环中余下的代码,也不管条件测试的结果如何。

使用 break 语句来控制程序流程,可用来控制哪些代码行将执行、哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。

在循环中使用 continue

continue 语句也十分的妙,它可以根据条件测试结果决定是否继续执行循环。

比如下面的列表中有重复的名字,让我们一起找出这些重复的名字都在哪些位置。

name_list = ['yeyiyi', 'shangyingyan', 'yeyiyi', 'lily', 'ann', 'yeyiyi', 'ningjie', 'ningzaichun', 'chaipaopao', 'fayi']
def getSelf(self):
    index = 0
    while index < len(name_list):
        name_item = name_list[index]
        index += 1
        if self == name_item:
            print(f'{self}在位置{index}')
            continue
        print(index)
getSelf('yeyiyi')

上面的代码,找到条件的元素会执行 continue 语句,继续进行下一轮循环。

需要查找的名字"yeyiyi"存在于位置1、3、6,if 语句中在找到名字的位置加了 continue,所以 if 语句中可以得到名称的位置。

而 if 语句外层的获取所有的位置值中,是不包含1、3、6三个位置的。

>>> yeyiyi在位置1
>>> 2
>>> yeyiyi在位置3
>>> 4
>>> 5
>>> yeyiyi在位置6
>>> >>> 7
>>> 8
>>> 9
>>> 10

算术运算符

介绍

Python 中的算数运算符主要包括 + (加)、-(减)、*(乘)、/(除)、%(求模)、**(幂)、//(取整除)。

笔记

判断奇偶数

求模运算符可以得到两个数相除的余数,如果某个数和2执行求模运算的结果是0,那么这个数就是偶数,否则是奇数。

def getOddOrEven(num):
    if num % 2 == 0:
        print(f'{num}是偶数')
    else:
        print(f'{num}是奇数')
getOddOrEven(0)
>>> 0是偶数

getOddOrEven(3)
>>> 3是奇数

getOddOrEven(6)
>>> 6是偶数

向下取整

// 运算符可以返回商的整数部分,即向下取整。

// 运算结果整数与否,与参与运算的两个数值的类型有关:

  • 小数参与运算时,结果会是小数;
  • 参与运算的都是整数,则结果就是整数。

向下取整的常用场景为,得到的结果不能包含小数,比如就某个物品的极限数量。

def getShipNumMax(ship_capacity,good_size):
    num = ship_capacity // good_size
    print(f'容载量为{ship_capacity}的货船,最最多可容纳{good_size}重的货物{num}个')
getShipNumMax(80,3)
>>> 容载量为80的货船,最最多可容纳3重的货物26

总结

本篇主要是对 Python 中条件语句、循环与算术运算符的相关知识的学习和运用,同时还做了适当的功能延伸探索。

我最近在看一些用 Python 实现的项目源码,发现这三个知识点的出镜率还挺高,掌握它们对实际开发会大有裨益。


作者介绍 非职业「传道授业解惑」的开发者叶一一。 《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。 如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。