【Python自动化测试7】数据运算符知识讲解
文章目录
- 一、前言
- 二、数据运算合集
- 2.1 算数运算符
- 2.2 赋值运算符
- 2.3 比较运算符
- 2.4 逻辑运算符
- 2.5 成员运算符
- 2.6 身份运算符
- 2.7 位运算符
- 2.8 运算优先级
- 2.9 扩展知识(重点知识)
- 2.9.1 特殊的浮点运算
- 2.9.2 随机数的生成
一、前言
本文章主要讲解的内容是关于Python的运算符以及自动化测试技术中需要使用的扩展知识,是运算符的专题讲解,下方有系列文章的传送门,感兴趣的小伙伴也可以前往查看,话不多说,让我们一起看看吧~
系列文章:
系列文章1:【Python自动化测试1】遇见Python之美
系列文章2:【Python自动化测试2】Python安装配置及PyCharm基本使用
系列文章3:【Python自动化测试3】初识数据类型与基础语法
系列文章4:【Python自动化测试4】字符串知识总结
系列文章5:【Python自动化测试5】列表与元组知识总结
系列文章6:【Python自动化测试6】字典与集合知识总结
二、数据运算合集
2.1 算数运算符
算术运算在Python中比较常见,我们所使用的加减乘除都属于算数运算,在Python中一共有7种算数运算符:
运算符 | 描述 | 示例 |
---|---|---|
+ | 加:对象相加,可返回正数或负数,整数或浮点数,也可用在字符串相加等 |
print(10+3)
|
- | 减:对象相减,可返回正数或负数,整数或浮点数 |
print(10-3)
|
* | 乘:对象相乘,可返回正数或负数,整数或浮点数,或一个被重复若干次的字符串 |
print(10*3)
|
/ | 除:对象相除,可返回正数或负数,只返回浮点数 |
print(10/3)
|
// | 整除:对象进行整除,返回商的整数部分,向下取整 |
print(10//3)
|
% | 模运算:对象取余,返回除法的余数 |
print(10%3)
|
** | 幂运算:返回x的y次幂 |
print(10**3)
|
对应上面的表格,让我们在Python中看下对应结果,这里需要注意的是除法无论是否能够整除,其返回结果均为浮点数:
print(10+3) # 加法
print(10-3) # 减法
print(10*3) # 乘法
print(10/3) # 除法
print(10//3) # 整除
print(10%3) # 取余
print(10**3) # 幂
除了纯数字的运算,加法与乘法也可用于字符串的拼接或相乘,如下图所示:
a = "爱"
b = "情"
print(a+b)
print((a+b)*2)
2.2 赋值运算符
赋值运算符在Python中也很常见,我们日常的算数运算也会用到赋值运算符,在Python中有8种赋值运算符:
运算符 | 描述 | 示例 |
---|---|---|
= | 基础赋值运算符 |
s = h + y
|
+= | 加法赋值运算符 |
s += h 等价于s = s + h
|
-= | 减法赋值运算符 |
s -= h 等价于s = s - h
|
*= | 乘法赋值运算符 |
s *= h 等价于s = s * h
|
/= | 除法赋值运算符 |
s /= h 等价于s = s / h
|
//= | 整除赋值运算符 |
s //= h 等价于s = s // h
|
%= | 模赋值运算符 |
s %= h 等价于s = s % h
|
**= | 幂赋值运算符 |
s **= h 等价于s = s ** h
|
对应上面的表格,让我们在Python中看下对应结果:
h = 5
y = 2
s = 10s += h
print(s)s -= h
print(s)s *= h
print(s)s /= h
print(s)s //= h
print(s)s %= h
print(s)s **= h
print(s)
2.3 比较运算符
比较运算符又称关系运算符,在Python中使用频率较高,通常而言用于判断,在自动化测试中也是如此,Python中一共有7种比较运算符,其中的<>
在Python3中的版本已废弃:
运算符 | 描述 | 示例 |
---|---|---|
== | 等于,不同于赋值,判断对象是否相等,返回布尔值 |
a + b == c
|
!= | 不等于,判断对象是否不相等,返回布尔值 |
a + b != c
|
<> | 不等于,判断对象是否不相等,返回布尔值 |
(a <> b)
|
> | 大于,判断a对象是否大于b,返回布尔值 |
a > b
|
< | 小于,判断a对象是否小于b,返回布尔值 |
a < b
|
>= | 大于等于,判断a对象是否大于等于b |
a >= b
|
<= | 小于等于,判断a对象是否小于等于b |
a <= b
|
我们在Python中看下比较运算符的应用与实际结果:
a = 5
b = 10
c = 15
print(a == b)
print(a + b != c)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)
2.4 逻辑运算符
在Python语言中支持逻辑运算,也习惯性称之为与或非,在很多场景下都可以使用逻辑运算符,自动化测试中逻辑运算的使用较为常见,Python中共有3种逻辑运算:
运算符 | 描述 | 示例 |
---|---|---|
and |
与,两个条件同时满足,其中有一个为FALSE ,则结果为FALSE
|
a and b
|
or |
或,条件至少需要满足一个,满足即返回True ,都不满足则为False
|
a or b
|
not | 非,结果取反 |
not a
|
a = 3 > 2
b = 9 < 5
print(a and b) # a和b的条件其中存在不满足的False条件,故此结果为False
print(a or b) # a或者b的条件至少满足一个,那么结果为True
print(not a) # a的结果为True,not a 则是取反结果,故此为False
print(not b) # b的结果为False,not b 则是取反结果,故此为True
2.5 成员运算符
Python也支持成员运算,成员运算在Python中只有2种:
运算符 | 描述 | 示例 |
---|---|---|
in | 在指定的序列数据中寻找对应值,返回布尔值 |
name = "萌笑天",print("笑" in a)
|
not in | 在指定的序列数据中没有找到对应值,返回布尔值 |
name = "萌笑天",print("爱" not in a)
|
name = "萌笑天"
print("笑" in name)
print("爱" not in name)
2.6 身份运算符
Python中也支持身份运算,身份运算主要是用于比较两个对象间的存储单元,身份运算同成员运算也是有2种形式,在Python自动化测试领域,身份运算的使用较少,故此了解即可:
运算符 | 描述 | 示例 |
---|---|---|
is | 判断两个标识符是否引用自同个对象 |
(a is b)
|
is not | 判断两个标识符是否引用自不同对象 |
(a is not b)
|
a = 10
b = 10if (a is b):print("a和b有相同的标识")
else:print("a和b没有相同的标识")if ( a is not b ):print("a和b没有相同的标识")
else:print("a和b有相同的标识")
# 修改了b变量的值
a = 10
b = 100if (a is b):print("a和b有相同的标识")
else:print("a和b没有相同的标识")if ( a is not b ):print("a和b没有相同的标识")
else:print("a和b有相同的标识")
2.7 位运算符
Python中支持位运算,位运算其实就是把数字当成二进制来进行计算,Python中的位运算符一共有8种,在自动化测试的场景中,位运算同样使用较少,了解即可:
运算符 | 描述 | 示例 |
---|---|---|
& | 按位与:参与运算值如果都为1则该位为1,否则为0 |
(a & b)
|
| | 按位或:对应二进制位至少有1个为1,结果位则为1 | `(a |
^ | 按位异:当两对应的二进位相异时,结果为1,否则为0 |
(a ^ b)
|
~ | 按位取反:对数据的每个二进制位进行取反,0则为1,1则为0 |
(~a)
|
<< | 左移:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 |
(a << 2)
|
>> | 右移:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 |
(a >> 2)
|
a = 10
b = 100
c = 1000c = a & b
print(f"c的值为:{c}")c = a | b
print(f"c的值为:{c}")c = a ^ b
print(f"c的值为:{c}")c = ~a
print(f"c的值为:{c}")c = a << 2
print(f"c的值为:{c}")c = a >> 2
print(f"c的值为:{c}")
2.8 运算优先级
在Python中有很多的运算符,自然也会涉及到很多的运算优先级,运算的优先级可以看看下面的表格,但不需要去记住,因为如果我们想提高运算优先级只需要加小括号进行优先计算即可,故此运算优先级只做扩展了解即可:
运算符 | 描述 |
---|---|
** | 指数运算,最高优先级运算 |
~ + - | 按位翻转, 一元加号和减号 |
* / % // | 乘,除,取模和整除 |
+ - | 加减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
2.9 扩展知识(重点知识)
2.9.1 特殊的浮点运算
在Python中如果你尝试过0.1 + 0.2
的运算,你会惊奇的发现,结果并不等于0.3
,如果你要进行判断, 那么返回的结果是False
:
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)
为什么0.1 + 0.2
的结果不是0.3
呢,这是因为在我们输入一个十进制的数字给到Python时,Python的处理会先将十进制的数字转换为二进制,经过计算后,在将二进制的结果转换为十进制的数字显示出来:
对于浮点数而言,十进制的小数与二进制的小数之间是不能够完全对等转换的,通常而言一个我们的十进制小数在进行计算转换时会转换成无限位数的二进制小数,但是在计算机中的处理通常只会截取到无限数据的前50多位,因为有数据的截取,故此造成最终结果的不等价:– 图片来源于网络
但在我们实际工作中,很明显这个是不允许出现的情况,商城充值、购物积分、银行卡余额等等都会出现类似的小数情况,如果不进行处理或忽略处理就会导致精度丢失,造成一定的损失,出现这种情况,我们可以使用这两种方式来解决这个问题:
第一种方式:通过round
函数处理,但round
函数会有四舍五入,如下图所示,我需要处理的数据是0.1+0.2
的计算,结果保留1
位小数,如果填写0
则代表取整,通常浮点数保留1
位或者2
位小数:
# round的格式:round(处理数据,保留小数位数)
print(round(0.1+0.2, 1) == 0.3)
第二种方式:Decimal模块,round
函数在进行一些日常的计算能够满足条件,例如超市收银,但对于高精度计算例如科学计算、银行账户计算、财务统计等,就不能够使用round
函数,我们需要使用Decimal
模块的方式来进行计算:
from decimal import Decimalprint(Decimal(str(0.1)) + Decimal(str(0.2)) == Decimal(str(0.3)))
值得一提的是Decimal
在进行浮点数处理时需要先将数据转成str
格式,因为浮点数很容易在计算过程中丢失精度,故此需要转换,带来精度提升的同时,会随之损失一定的性能,但这是不可避免的,也是值得的,不过这也只能够运用到一些商业化或者是金钱相关的计算内容,如果用到超高精度且大范围的科学计算,那么使用Decimal
模块也不是更好的选择,在自动化测试领域中,了解到Decimal
已经能足够应对了,有兴趣的同学,可以进一步了解~
2.9.2 随机数的生成
随机数在自动化测试中显得尤为重要,有时候我们需要使用自动生成的随机数作为测试数据,随机数我们使用random
函数,在自动化测试的场景中数字的场景会使用较多:
import random # 导入random# random格式:random.randint(左边界,右边界) ,结果每一次执行都会发生变化
print(f"1到100的随机整型数据结果为:{random.randint(1, 100)}") # 随机生成1到100的整型数据
print(f"1到100范围内的奇数结果为:{random.randrange(1, 100, 2)}") # 随机一个大于等于1且小于等于100之间的奇数,其中2表示递增基数
print(f"以10为幅度,从9开始选取的实数结果为:{random.randrange(9, 100, 10)}") # 从9、19、29、39、……、99之间,随机选取一个实数
随机生成小数:
import randomprint(f"大于0且小于1的小数随机结果为:{random.random()}") # 随机大于0且小于1之间的小数print(f"大于1且小于100的随机小数为:{random.uniform(1, 100)}") # 随机一个大于1小于100的小数
好啦~以上就是本次文章分享的全部内容啦,你学会了吗?希望能给大家带来帮助哦!
【Python自动化测试7】数据运算符知识讲解相关推荐
- 【Python自动化测试8】流程控制语句讲解
文章目录 一.前言 二.流程控制语句 2.1 if else流程控制语句的作用 2.2 if else条件语句讲解 2.2.1 简单的if语句 2.2.2 if / else语句 2.2.3 if / ...
- 【Python实战】Python采集二手车数据——超详细讲解
前言 今天,我们将采集某二手车数据,通过这个案例,加深我们对xpath的理解.通过爬取数据后数据分析能够直观的看到二手车市场中某一品牌的相对数据,能够了解到现在的二手车市场情况,通过分析数据看到二手车 ...
- 最全IDC数据中心知识讲解(一)
数据中心(Internet Data Center,简称IDC)机房设计集建筑.结构.电气.暖通空调.给排水.消防.网络.智能化等多个专业技术于一体.IDC机房应具有"良好的安全性能,可靠而 ...
- 【Python自动化测试5】列表与元组知识讲解
文章目录 一.前言 二.列表讲解 2.1 列表作用 2.2 空列表 2.3 列表索引 2.4 列表切片 2.5 列表嵌套 2.6 列表的操作 2.6.1 列表元素新增(append / extend ...
- 【Python自动化测试16】测试用例数据分离
文章目录 一.前言 二.什么是数据分离? 三.进行数据分离 四.Python操作excel 一.前言 本文章主要讲解Python自动化测试中测试用例的数据分离,在自动化测试中能够更好的管理测试用例 ...
- 【Python自动化测试26】接口自动化测试实战六_pytest框架+allure讲解
文章目录 一.前言 二.pytest讲解 2.1 什么是pytest? 2.2 为什么使用pytest? 2.3 使用pytest 2.4 pytest的运行方式 2.5 pytest高级特性 2.5 ...
- 【Python自动化测试14】Python自动化测试基础与进阶练习题
文章目录 一.前言 二.Python练习题 2.1 Python基础语法规则 2.2 字符串相关练习题 2.3 列表与元组相关练习题 2.4 字典与数据类型练习题 2.5 流程控制语句练习题 2.6 ...
- 【Python自动化测试15】unittest测试框架的核心概念与作用
文章目录 一.前言 二.认识单元测试 三.unittest核心概念与操作 3.1.unittest的作用 3.2.测试用例(TestCase) 3.3.运行测试用例 3.4.测试套件.加载器与运行器( ...
- 【Python自动化测试20】接口自动化测试框架模型搭建
文章目录 一.前言 二.框架搭建流程 2.1 项目创建 2.2 README文件 2.3 .gitignore文件 2.4 什么是测试框架? 2.5 分层设计 2.6 框架搭建 2.6.1 公用目录( ...
最新文章
- 福利 | 给你个机会与俞士纶(Philip S. Yu)面对面交流 !(附俞教授论文合集资源)...
- 一个AndroidStudio项目的目录
- 程序员级别鉴定书(.NET面试问答集锦)
- Ribbon负载均衡策略配置
- oracle批处理脚本学习总结
- 视频直播技术之iOS端推流
- 在android中监听呼出电话(电话拦截、修改呼出电话)
- 架构思维其实就那么回事
- lua cURL使用笔记
- 图像傅里叶变换的频率怎么理解?【转载】
- poi生成word不可以修改_操作不懂技术就可以做小程序无限生成平台的创业项目实操教程...
- java面向对象跑马游戏_面向“对象”和“过程”
- matlab 追赶法
- 从文本中读取 并截取需要的字符串
- Linux驱动开发之触摸驱动
- macbook只有windows下安装os系统、trackpad++下载
- ajax响应速度慢,jQuery Ajax请求的响应速度变化
- Mapping映射入门
- 虚拟机中安装配置Windows server 2003和iis6
- 最大公约数是啥意思_什么是最大公约数