Python-数字总结(操作符、方法、内置函数、模块[四舍五入、分数])

目录

简介

操作符

创建、赋值、更新(操作符=)

算数操作符(操作符 +、-、*、/、//、%、**)

比较操作符(>、>=、<、<=、+=、-=、*=、/=、==、!=)

整型按位运算(|、^、<<、>>、~)

删除(关键字del)

方法

布尔、整数

二进制长度

字节

浮点数

十六进制

整数判断

分数

内置函数

转换工厂

进制

计算

相关模块

四舍五入

分数

其他


简介

Python中的基本数字有int、float、complex,没有python2的长整型了。其中,浮点数需要注意四舍五入问题。本篇文章不介绍complex,抱歉了,博主平时不用complex,可能以后用了会再更新。另外,本专栏其他文章会提及模块,但不会说里面的具体内容,由于数字中decimal、fractions用的比较多,所以后面会有部分展示。

操作符

创建、赋值、更新(操作符=)

>>> b = True
>>> i = 5
>>> f = 2.3

 >>> print(b,i,f)
True 5 2.3
>>> print(type(b),type(i),type(f))
<class 'bool'> <class 'int'> <class 'float'>

算数操作符(操作符 +、-、*、/、//、%、**)

+、-、*、/ 比较简单,其中bool型True当做1、False当做0。

>>> b+i
6
>>> b+f
3.3
>>> i-f
2.7
>>> i*f
11.5
>>> f/i
0.45999999999999996
>>> f/b
2.3

>>> i//f
2.0
>>> 5//2
2

>>> 5//1.9
2.0

>>> i%f
0.40000000000000036
>>> 5%2
1
>>> i**2
25
>>> f**2
5.289999999999999

有浮点数参与,结果为浮点数。

//是地板除,数学上,5除以1.9为2.631578947368421,但是//会省去小数。

比较操作符(>、>=、<、<=、+=、-=、*=、/=、==、!=)

>>> b>i
False
>>> i<f
False
>>> i>=5
True
>>> f<=3
True
>>> i+=2
>>> i
7
>>> f-=1.2
>>> f
1.0999999999999999

>>> i*=2
>>> i
14
>>> i/=7
>>> i
2.0

>>> f==1.1
False
>>> f!=1.1
True
>>> print(type(b),type(i),type(f))
<class 'bool'> <class 'float'> <class 'float'>
>>> print(b,i,f)
True 2.0 1.0999999999999999

注意:

浮点数精度问题,内置函数round解决

整型、浮点型转换问题,自动转换,想要固定结果使用内置函数int、float转换解决

转换规则:存在浮点数,则非浮点数转为浮点数,不存在浮点数则转为整数。

其余内容在下面内置函数那一节进行展示。

整型按位运算(|、^、<<、>>、~)

>>> x = 2
>>> y = 3

二进制补码的x和y
位数...3210
x00010
y00011

x | y

00011

x ^ y

00001

x & y

00010

x << 2

01000

x >> 3

00000

~x

1110

1

>>> x|y
3
>>> x^y
1
>>> x&y
2
>>> x<<2
8
>>> x>>3
0
>>> ~x
-3

注意:

  • 左移 n 位等价于不带溢出检测地乘以 pow(2, n)

  • 右移 n 位等价于除以 pow(2, n) ,作向下取整除法。

删除(关键字del)

不建议程序员主动删除

del 变量名

>>> del x
>>> x+2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

方法

布尔、整数

bool是int的子类型,方法一致。

二进制长度

以二进制表示的必要长度,不包括符号位和前面的零

bit_length

>>> x.bit_length()
2
>>> True.bit_length()
1

字节

from_bytes(bytes, byteorder, *, signed=False)

bytes:字节序列

byteorder:big:从前找有意义的位数、little:从后找有意义的位数

signed:是否使用2的补码来表示整数

返回由给定字节数组所表示的整数

>>> y.from_bytes(b'\x01\x00',byteorder='big')
256
>>> y.from_bytes(b'\x01\x00',byteorder='little')
1

>>> int.from_bytes(b'\x01\x01',byteorder='little',signed='true')
257

to_bytes(length, byteorder, *, signed=False)

>>> x.to_bytes(2,byteorder='big')
b'\x00\x02'
>>> x.to_bytes(2,byteorder='little')
b'\x02\x00'
>>> x.to_bytes(2,byteorder='big',signed='True')
b'\x00\x02'

浮点数

十六进制

fromhex

返回以十六进制字符串 s 表示的浮点数的类方法。 字符串 s 可以带有前导和尾随的空格。

>>> f = float.fromhex('101')
>>> f
257.0

hex
以十六进制字符串的形式返回一个浮点数表示。 对于有限浮点数,这种表示法将总是包含前导的 0x 和尾随的 p 加指数。

 >>> f.hex()
'0x1.0100000000000p+8'

整数判断

is_integer

如果 float 实例可用有限位整数表示则返回 True,否则返回 False

 >>> f.is_integer()
True
>>> 2.3.is_integer()
False

分数

as_integer_ratio

返回一对整数,其比率正好等于原浮点数并且分母为正数。

>>> f.as_integer_ratio()
(257, 1)
>>> 2.5.as_integer_ratio()
(5, 2)

内置函数

转换工厂

bool

返回一个布尔值,True 或者 False 。bool类是int的子类。任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)都是False,其余数值为True。

>>> bool(5)
True
>>> bool(0)
False

>>> bool(-2)
True

int(x, base=10)

返回一个使用数字或字符串 x 生成的整数对象,或者没有实参的时候返回 0。

对于浮点数,它向零舍入。

如果 x 不是数字,或者有 base 参数x 必须是字符串、bytes、表示进制为 base 的整数字面值的bytearray实例。

>>> int(23.4,base=8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int() can't convert non-string with explicit base
>>> int('011',base=8)
9

如果不是默认的10,而是自己填写了参数的话,就不能是数字了,否则报TypeError。

float

返回从数字或字符串 x 生成的浮点数。

如果实参是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,之前也可以有空格。

>>> float(233)
233.0
>>> float('ABCD')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'ABCD'

>>> float(' 192.04 ')
192.04

进制

bin

将一个整数转变为一个前缀为“0b”的二进制字符串。

>>> bin(2)
'0b10'

hex

将整数转换为以“0x”为前缀的小写十六进制字符串。

>>> hex(-1)
'-0x1'
>>> hex(255)
'0xff'

oct

将一个整数转变为一个前缀为“0o”的八进制字符串。

>>> oct(8)
'0o10'
>>> oct(-20)
'-0o24'

计算

round(number[, ndigits])

返回 number 舍入到小数点后 ndigits 位精度的值。

上面的浮点数精度问题

>>> f = 2.3
>>> f-1.2
1.0999999999999999
>>> round(f-1.2,1)
1.1

>>> round(0.5)
0
>>> round(0.5,1)
0.5
>>> round(1.325,2)
1.32
>>> round(1.315,2)
1.31 

注意:此函数不能解决四舍五入问题

>>> from _pydecimal import Decimal

>>> print(Decimal(1.325))
1.3249999999999999555910790149937383830547332763671875
>>> print(Decimal(1.315))
1.314999999999999946709294817992486059665679931640625

>>> print(Decimal(1.365))
1.3649999999999999911182158029987476766109466552734375
>>> print(Decimal(1.375))
1.375

>>> print(Decimal(1.385))
1.3850000000000000088817841970012523233890533447265625
>>> print(Decimal(1.395))
1.395000000000000017763568394002504646778106689453125

可以看出实际保存的比较玄学,四舍五入问题的解决请看模块部分。 其实,这是银行家舍入法:四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一。

>>> round(1.365,2)
1.36
>>> round(1.375,2)
1.38
>>> round(1.385,2)
1.39

abs

返回一个数的绝对值。实参可以是整数、布尔值或浮点数。如果实参是一个复数,返回它的模。

>>> abs(-5)
5
>>> abs(-5.6)
5.6
>>> abs(False)

divmod

它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于整数,结果和 (a // b, a % b) 一致。对于浮点数,结果是 (q, a % b)q 通常是 math.floor(a / b) 但可能会比 1 小。在任何情况下, q * b + a % ba 基本相等;如果 a % b 非零,它的符号和 b 一样,并且 0 <= abs(a % b) < abs(b)

>>> a = 10
>>> b = 3

>>> divmod(a,b)
(3, 1)
>>> divmod(float(a),float(b))
(3.0, 1.0)

相关模块

四舍五入

decimal

>>> from _pydecimal import Decimal, Context, ROUND_HALF_UP
>>> print(Context(prec=3, rounding=ROUND_HALF_UP).create_decimal('1.325'))
1.33
>>> print(Context(prec=3, rounding=ROUND_HALF_UP).create_decimal('1.365'))
1.37

其他舍入模式、方法请自行学习

分数

fractions

>>> from fractions import Fraction
>>> Fraction(18,-9)
Fraction(-2, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('4/6')
Fraction(2, 3)
>>> Fraction('1.25')
Fraction(5, 4)
>>> print(Fraction('1.25'))
5/4

其他

math

math.trunc(x)

x 截断为 Integral

math.floor(x)

<= x 的最大 Integral

math.ceil(x)

>= x 的最小 Integral

numbers

cmath

random

statistics

更多python相关内容:【python总结】python学习框架梳理

本人b站账号:lady_killer9

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值