我最近的文章都是在讲python中的一些基础,因为想要学习python自动化测试,基础是必不可少的,今天也不例外还是python基础中的,这篇文章主要讲解的内容是关于Python的运算符以及自动化测试技术中需要使用的扩展知识,是运算符的专题讲解,废话不多说咱们直接进入主题吧。
二、数据运算合集 2.1 算数运算符
算术运算在Python中比较常见,我们所使用的加减乘除都属于算数运算,在Python中一共有7种算数运算符:
对应上面的表格,让我们在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)
赋值运算符在Python中也很常见,我们日常的算数运算也会用到赋值运算符,在Python中有8种赋值运算符:
对应上面的表格,让我们在Python中看下对应结果:
h = 5
y = 2
s = 10
s += 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)
比较运算符又称关系运算符,在Python中使用频率较高,通常而言用于判断,在自动化测试中也是如此,Python中一共有7种比较运算符,其中的在Python3中的版本已废弃:
我们在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 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
Python也支持成员运算,成员运算在Python中只有2种:
运算符
描述
示例
in
在指定的序列数据中寻找对应值,返回布尔值
name = "图图图",print("图" in a)
not in
在指定的序列数据中没有找到对应值,返回布尔值
name = "图图图",print("图" not in a)
name = "图图图"
print("图" in name)
print("图" not in name)
Python中也支持身份运算,身份运算主要是用于比较两个对象间的存储单元,身份运算同成员运算也是有2种形式,在Python自动化测试领域,身份运算的使用较少,故此了解即可:
运算符
描述
示例
is
判断两个标识符是否引用自同个对象
(a is b)
is not
判断两个标识符是否引用自不同对象
(a is not b)
a = 10
b = 10
if (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 = 100
if (a is b):
print("a和b有相同的标识")
else:
print("a和b没有相同的标识")
if ( a is not b ):
print("a和b没有相同的标识")
else:
print("a和b有相同的标识")
Python中支持位运算,位运算其实就是把数字当成二进制来进行计算,Python中的位运算符一共有8种,在自动化测试的场景中,位运算同样使用较少,了解即可:
a = 10
b = 100
c = 1000
c = 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}")
在Python中有很多的运算符,自然也会涉及到很多的运算优先级,运算的优先级可以看看下面的表格,但不需要去记住,因为如果我们想提高运算优先级只需要加小括号进行优先计算即可,故此运算优先级只做扩展了解即可:
在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 Decimal
print(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 random
print(f"大于0且小于1的小数随机结果为:{random.random()}") # 随机大于0且小于1之间的小数
print(f"大于1且小于100的随机小数为:{random.uniform(1, 100)}") # 随机一个大于1小于100的小数
今天的文章就到这里了,后续还是会讲有关python基础知识的文章哟,喜欢的话可以点赞收藏评论加关注哟,希望这篇文章能够帮助到你们哟。