python decimal_连载|想用Python做自动化测试?了解数值计算和随机数生成神器

 本文掌握Python中的几种数值类型,以及算术运算、位运算、数值转换,再学习一个测试中常用来产生随机数的模块。

a4694441ebd5ec6b2ae869d6026ab8dd.png

构建测试知识体系,欢迎关注

Python支持的数值类型有整型int、布尔型bool、浮点型float、Decimal。

type(100)  # <class 'int'>type(1.0)  # <class 'float'>type(True)  # <class 'bool'>type(False)  # <class 'bool'>

这里要提一下,布尔型是只有两个值的整数。True对应1,False对应0。对于布尔型要从以下方面理解:

  • 有两个值True和False

  • 对于值为零的任何数字或者空集(空列表[]、空元组()、空集合{}、空字典{}),他们的布尔值都是False

01

算术运算

  • 加法+

  • 减法-

  • 乘法*

  • 除法/

  • 取余%

  • 幂运算**或pow

  • 取商和余数divmod

  • 四舍五入round

  • 绝对值abs

>>> 5+27>>> 5-32>>> 5*210>>> 5/22.5>>> 5%21>>> 5**225>>> pow(5,2)25>>> divmod(5,2)(2, 1)>>> round(1.314, 2)  # 保留两位小数,第三位四舍五入1.31>>> round(2.5)  # 值刚好等于两个整数中间时,得到举例最近的偶数2>>> round(1.5)  # 值刚好等于两个整数中间时,得到举例最近的偶数2>>> round(2.6)3>>> abs(-0.5)0.5

02

位运算

将数值转成二进制后,按位操作。

  • 按位取反~

  • 按位与&

  • 按位或|

  • 按位异或^

  • 左移<<

  • 右移>>

>>> 30 & 4512>>> 30 | 4563>>> 30 ^ 4551>>> ~30-31>>> 3<<212>>> 8>>2

03

数制转换

  • bin(),将十进制转换为二进制

  • oct(),将十进制转换为八进制

  • hex(),将十进制转换为十六进制

>>> bin(10)  # '0b1010'>>> oct(9)  # '0o11'>>> hex(15)  # '0xf'

04

比较运算

  • 大于>

  • 小于<

  • 等于==

  • 大于等于>=

  • 小于等于<=

  • 不等于!=

>>> 5>3  # True>>> 5<3  # False>>> 5==3 # False>>> 5>=3 # True>>> 5!=3 # True>>> 5<=3 # False

05

decimal模块

普通的float型数据在运算时,是有误差的,python默认的是17位小数的精度,再长后面的数据就不准了。如果不能接受误差,可以使用decimal模块解决精确计算问题。

a = 3b = 1c = b/aprint(c)  # 0.3333333333333333d = "%.30f" % (1/3)print(d)  # 0.333333333333333314829616256247e = Decimal(1)/Decimal(3)print(e)   # 0.3333333333333333333333333333 ,默认28位,可调

06

random模块

在测试工作中,构造随机数类型的测试数据时,经常用使用random这个模块。它能够产生随机整数、小数,还能随即从列表和元组或者字符串中提取随机元素。

import randomimport stringprint(random.randint(1, 10))  # 产生 1 到 10 的一个整数型随机数print(random.random())  # 产生 0 到 1 之间的随机浮点数print(random.uniform(1.1, 5.4))  # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数print(random.choice('tomorrow'))  # 从序列中随机选取一个元素print(random.choice(['剪刀', '石头', '布']))print(random.randrange(1, 100, 2))  # 生成从1到100的间隔为2的随机整数print(random.sample('zyxwvutsrqponmlkjihgfedcba', 5))  # 生成5个字符组成的列表print(''.join(random.sample(string.ascii_letters + string.digits, 8)))  # 从a-zA-Z0-9生成指定数量的随机字符a = [1, 3, 5, 6, 7] random.shuffle(a)   # 将序列a中的元素顺序打乱print(a)

说到随机数作为测试数据,Python中还有一个非常好用的产生随机数的第三方包Faker(https://pypi.org/project/Faker/)。安装方法是:

pip install Faker

它的功能特别强大,能够产生的随机数类型非常丰富,举几个例子:

from faker import Faker# Faker.seed(4321)  # 随机数种子fake = Faker('zh_CN')print(fake.name())print(fake.address())print(fake.city())print(fake.postcode())print(fake.company())print(fake.email())print(fake.hostname())print(fake.ipv4())

从名字可以看出产生的随机数的类型。

如果想要每次生成的随机数是固定的。可以提供一个随机数种子,这样相同的方法,总会得到相同的随机结果。

0739bd30281d49854a2b4ef53b30aca4.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值