Python - 数字



Python 内置了对存储和处理数值数据(Python Numbers)的支持。大多数时候,您几乎在每个 Python 应用程序中都使用数字。显然,任何计算机应用程序都处理数字。本教程将讨论不同类型的 Python 数字及其属性。

Python - 数字类型

Python 中提供了三种内置数字类型:

  • 整数 (int)
  • 浮点数 (float)
  • 复数(complex)

Python 还有一个名为 bool 的内置布尔数据类型。它可以被视为 int 类型的子类型,因为它是两个可能的值 True False 分别表示整数 1 和 0。

Python − 整数(int)

在 Python 中,任何没有存储小数部分的数字都是整数。(请注意,如果数字中的小数部分为 0,并不意味着它是整数。例如,数字 10.0 不是整数,它是一个浮点数,小数部分为 0,其数值为 10。整数可以是零、正或负整数。例如,1234、0、-55 在 Python 中都表示整数。

有三种方法可以形成 Integer 对象。使用 (a) 字面量表示,(b) 任何计算结果为整数的表达式,以及 (c) 使用 int() 函数。

Literal 是一种表示法,用于直接在源代码中表示常量。例如 -


 >>> a =10

但是,请看一下整数变量 c 的以下赋值。


a = 10
b = 20
c = a + b

print ("a:", a, "type:", type(a))
print ("c:", c, "type:", type(c))

它将产生以下输出 -

a: 10 type: <class 'int'>
c: 30 type: <class 'int'>

这里,c 确实是一个整数变量,但表达式 a + b 首先被计算,它的值被间接地分配给 c。

形成整数对象的第三种方法是使用 int() 函数的返回值。它将浮点数或字符串转换为整数。


>>> a=int(10.5)
>>> b=int("100")

您可以将整数表示为二进制、八进制或十六进制数。但是,在内部,该对象存储为整数。

Python 中的二进制数

仅由二进制数字 (1 和 0) 组成且前缀为 “0b” 的数字是二进制数。如果为变量分配二进制数,则它仍然是 int 变量。

A 以二进制形式表示整数,将其直接存储为 Literals,或使用 int() 函数,其中基数设置为 2


a=0b101
print ("a:",a, "type:",type(a))

b=int("0b101011", 2)
print ("b:",b, "type:",type(b))

它将产生以下输出:

a: 5 type: <class 'int'>
b: 43 type: <class 'int'>

Python 中还有一个 bin() 函数。它返回相当于整数的二进制字符串。


a=43
b=bin(a)
print ("Integer:",a, "Binary equivalent:",b)

它将产生以下输出 -

Integer: 43 Binary equivalent: 0b101011

Python 中的八进制数

八进制数仅由数字 0 到 7 组成。为了指定整数使用八进制表示法,需要以 “0o” (小写 O) 或 “0O” (大写 O) 为前缀。八进制数的文字表示如下 -


a=0O107
print (a, type(a))

它将产生以下输出 -

71 <class 'int'>

请注意,该对象在内部存储为 integer。八进制数 107 的十进制等效值是 71。

由于八进制数字系统有 8 个符号(0 到 7),因此它的底数是 7。因此,在使用 int() 函数将八进制字符串转换为整数时,您需要将 base 参数设置为 8。


a=int('20',8)
print (a, type(a))

它将产生以下输出 -

16 <class 'int'>

八进制 30 的十进制等效值是 16。

在下面的代码中,从八进制表示法中获取两个 int 对象,并执行它们的加法。


a=0O56
print ("a:",a, "type:",type(a))

b=int("0O31",8)
print ("b:",b, "type:",type(b))

c=a+b
print ("addition:", c)

它将产生以下输出 -

a: 46 type: <class 'int'>
b: 25 type: <class 'int'>
addition: 71

要获取整数的八进制字符串,请使用 oct() 函数。

 


a=oct(71)
print (a, type(a))

Python 中的十六进制数

顾名思义,十六进制数字系统中有 16 个符号。它们是 0-9 和 A 到 F。前 10 位数字与十进制数字相同。字母 A、B、C、D、E 和 F 分别等同于 11、12、13、14、15 和 16。这些字母符号可以使用大写或小写。

对于以十六进制表示法表示的整数的文字表示,请为其添加前缀 “0x” 或 “0X”。


a=0XA2
print (a, type(a))

它将产生以下输出 -

162 <class 'int'>

要将十六进制字符串转换为整数,请在 int() 函数中将基数设置为 16。


a=int('0X1e', 16)
print (a, type(a))

请尝试以下代码片段。它采用 Hexadecimal 字符串,并返回整数。


num_string = "A1"
number = int(num_string, 16)
print ("Hexadecimal:", num_string, "Integer:",number)

它将产生以下输出 -

Hexadecimal: A1 Integer: 161

但是,如果字符串包含除十六进制符号图表之外的任何符号,则会生成错误。


num_string = "A1X001"
print (int(num_string, 16))

上述程序生成以下错误 -

Traceback (most recent call last):
File "/home/main.py", line 2, in
print (int(num_string, 16))
ValueError: invalid literal for int() with base 16: 'A1X001'

Python 的标准库具有 hex() 函数,您可以使用该函数获得整数的十六进制等效值。


a=hex(161)
print (a, type(a))

它将产生以下输出 -

0xa1 <class 'str'>

尽管整数可以表示为二进制、八进制或十六进制,但它在内部仍然是整数。因此,在执行算术运算时,表示无关紧要。


a=10 #decimal
b=0b10 #binary
c=0O10 #octal
d=0XA #Hexadecimal
e=a+b+c+d

print ("addition:", e)

它将产生以下输出 -

addition: 30

Python − 浮点数 (float)

浮点数具有一个整数部分和一个小数部分,由小数点符号 (.) 分隔。默认情况下,该数字为正数,负数为短划线 (-) 符号作为前缀。

浮点数是 Python 的 float 类的对象。要存储 float 对象,您可以使用文字表示法,使用算术表达式的值,或使用 float() 函数的返回值。

使用 literal 是最直接的方法。只需将带有小数部分的数字分配给变量即可。以下每个语句都声明一个 float 对象。


>>> a=9.99
>>> b=0.999
>>> c=-9.99
>>> d=-0.999

在 Python 中,浮点数小数点后可以有多少位数没有限制。但是,为了缩短表示形式,使用了 E 或 e 符号。E 代表 Ten 加注到。例如,E4 是 10 加注到 4(或 10 的4 次方),E-3 是 10 加注到 -3。

在科学记数法中,数字具有系数和指数部分。系数应为大于或等于 1 但小于 10 的浮点数。因此,1.23E+3、9.9E-5 和 1E10 是科学记数法的浮点数示例。


>>> a=1E10
>>> a
10000000000.0
>>> b=9.90E-5
>>> b
9.9e-05
>>> 1.23E3
1230.0

形成 float 对象的第二种方法是使用表达式的结果进行间接处理。在这里,两个 float 的商被分配给一个变量,该变量引用一个 float 对象。


a=10.33
b=2.66
c=a/b

print ("c:", c, "type", type(c))

它将产生以下输出 -

c: 3.8834586466165413 type <class 'float'>

Python 的 float() 函数返回一个 float 对象,如果它具有适当的内容,则解析一个数字或字符串。如果括号中没有给出任何参数,则返回 0.0,对于 int 参数,则添加 0 的小数部分。


>>> a=float()
>>> a
0.0
>>> a=float(10)
>>> a
10.0

即使整数以二进制、八进制或十六进制表示,float() 函数也会返回小数部分为 0 的浮点数。


a=float(0b10)
b=float(0O10)
c=float(0xA)

print (a,b,c, sep=",")

它将产生以下输出 -

2.0,8.0,10.0

float() 函数从包含浮点数的字符串中检索浮点数,可以是标准小数点格式,也可以是科学记数法。


a=float("-123.54")
b=float("1.23E04")
print ("a=",a,"b=",b)

它将产生以下输出 -

a= -123.54 b= 12300.0

在数学中,无穷大是一个抽象的概念。从物理上讲,无限大的数字永远不能存储在任何数量的内存中。但是,对于大多数计算机硬件配置,具有 10 的 400 次方的非常大的数字由 Inf 表示。如果你使用 “Infinity” 作为 float() 函数的参数,它会返回 Inf。


a=1.00E400
print (a, type(a))
a=float("Infinity")
print (a, type(a))

它将产生以下输出 -

inf <class 'float'>
inf <class 'float'>

另一个这样的实体是 Nan(代表 Not a Number)。它表示未定义或不可表示的任何值。


>>> a=float('Nan')
>>> a
Nan

Python − 复数(complex)

在本节中,我们将详细了解 Python 中的复杂数据类型。复数在电磁学、电子学、光学和量子理论的数学方程和定律中都有应用。傅里叶变换使用复数。它们用于波函数计算、设计滤波器、数字电子学中的信号完整性、射电天文学等。

复数由实部和虚部组成,用 “+” 或 “−” 分隔。实部可以是任何浮点数(或本身是复数)数字。虚部也是浮点数/复数,但乘以虚数。

在数学中,虚数“i”定义为 -1 (1).因此,复数表示为 “x+yi”,其中 x 是实部,“y” 是虚部的系数。

很多时候,使用符号 “j” 而不是 “I” 来表示虚数,以避免与它在电力理论中用作电流的用法相混淆。Python 还使用 “j” 作为虚数。因此,“x+yj” 是 Python 中复数的表示。

与 int 或 float 数据类型一样,复杂对象可以使用文字表示或使用 complex() 函数形成。以下所有语句都构成一个复杂对象。


>>> a=5+6j
>>> a
(5+6j)
>>> type(a)
<class 'complex'>
>>> a=2.25-1.2J
>>> a
(2.25-1.2j)
>>> type(a)
<class 'complex'>
>>> a=1.01E-2+2.2e3j
>>> a
(0.0101+2200j)
>>> type(a)
<class 'complex'>

请注意,实部和虚部的系数都必须是浮点数,它们可以用标准小数位表示法或科学记数法表示。

Python 的 complex() 函数有助于形成复杂类型的对象。该函数接收实部和虚部的参数,并返回复数。

complex() 函数有两个版本,两个参数和一个参数。使用带有两个参数的 complex() 很简单。它使用第一个参数作为实部,第二个参数作为虚部的系数。


a=complex(5.3,6)
b=complex(1.01E-2, 2.2E3)
print ("a:", a, "type:", type(a))
print ("b:", b, "type:", type(b))

它将产生以下输出 -

a: (5.3+6j) type: <class 'complex'>
b: (0.0101+2200j) type: <class 'complex'>

在上面的例子中,我们使用 x 和 y 作为 float 参数。它们甚至可以是复杂数据类型。


a=complex(1+2j, 2-3j)
print (a, type(a))

它将产生以下输出 -

(4+4j) <class 'complex'>

对上面的例子感到惊讶吗?将 “x” 设置为 1+2j,将 “y” 设置为 2-3j。尝试手动计算 “x+yj” ,你就会知道。


complex(1+2j, 2-3j)
=(1+2j)+(2-3j)*j
=1+2j +2j+3
=4+4j

如果你只对 complex() 函数使用一个数字参数,它会将其视为 real part 的值;,虚部设置为 0。


a=complex(5.3)
print ("a:", a, "type:", type(a))

它将产生以下输出 -

a: (5.3+0j) type: <class 'complex'>

如果 complex() 函数的唯一参数是具有复数表示的字符串,则 complex() 函数也可以将字符串解析为复数。

在以下代码段中,要求 user 输入一个复数。它用作参数。由于 Python 将输入读取为字符串,因此该函数会从中提取复杂对象。


a= "5.5+2.3j"
b=complex(a)
print ("Complex number:", b)

它将产生以下输出 -

Complex number: (5.5+2.3j)

Python 的内置复杂类有两个属性 real imag - 它们从对象返回虚部的 real 和 coefficient。


a=5+6j
print ("Real part:", a.real, "Coefficient of Imaginary part:", a.imag)

它将产生以下输出 -

Real part: 5.0 Coefficient of Imaginary part: 6.0

complex 类还定义了一个 conjugate() 方法。它返回另一个复数,其中虚部的符号相反。例如,x+yj 的共轭是 x-yj。


>>> a=5-2.2j
>>> a.conjugate()
(5+2.2j)

Number Type 转换

Python 在内部将包含混合类型的表达式中的数字转换为通用类型以进行计算。但有时,您需要将数字从一种类型显式强制转换为另一种类型,以满足运算符或函数参数的要求。

  • 键入 int(x) 将 x 转换为纯整数。
  • 键入 long(x) 将 x 转换为长整数。
  • 键入 float(x) 将 x 转换为浮点数。
  • 键入 complex(x) 将 x 转换为具有实部 x 和虚部零的复数。以同样的方式,键入 complex(x, y) 将 x 和 y 转换为具有实部 x 和虚部 y 的复数。x 和 y 是数值表达式

让我们看看各种数值和数学相关的函数。

理论和表示函数

Python 在 math 模块中包括以下理论和表示函数 -

函数 描述
math.ceil(x)

x 的上限:不小于 x 的最小整数

math.comb(n,k)

此函数用于查找返回从 “y” 项中选择 “x” 项的方法数,没有重复和无序。

math.copysign(x, y)

此函数返回一个 float,其大小(绝对值)为 x,但符号为 y。

math.cmp(x, y)

此函数用于比较 to 对象的值。此函数在 Python3 中已弃用。

math.fabs(x)

此函数用于计算给定整数的绝对值。

math.factorial(n)

此函数用于查找给定整数的阶乘。

math.floor(x)

此函数计算给定整数的 floor 值。

math.fmod(x, y)

math 模块中的 fmod() 函数返回与 “%” 运算符相同的结果。但是,fmod() 给出的模除法结果比模运算符更准确。

math.frexp(x)

此函数用于计算给定数字的尾数和指数。

math.fsum(iterable)

此函数返回可迭代项(即列表、元组、数组)中所有数字项的浮点和。

math.gcd(*integers)

此函数用于计算所有给定整数的最大公约数。

math.isclose()

此函数用于确定两个给定的数值是否彼此接近。

math.isfinite(x)

此函数用于确定给定的数字是否为有限数。

math.isinf(x)

此函数用于确定给定值是否为无穷大 (+ve 或 -ve)。

math.isnan(x)

此函数用于确定给定的数字是否为 “NaN”。

math.isqrt(n)

此函数计算给定非负整数的整数平方根。

math.lcm(*integers)

此函数用于计算给定整数参数的最小公因数。

math.ldexp(x, i)

此函数返回第一个数字的乘积与第二个数字的指数。因此,ldexp(x,y) 返回 x*2**y。这与 frexp() 函数相反。

math.modf(x)

这将返回 x 在两项元组中的小数部分和整数部分。

math.nextafter(x, y, steps)

此函数返回 x 之后朝 y 方向的下一个浮点值。

math.perm(n, k)

此函数用于计算排列。它返回从 y 项中选择 x 项的方法数,没有重复和有序。

math.prod(iterable, *, start)

此函数用于计算作为参数给出的可迭代对象 (list, tuple) 中所有数字项的乘积。

math.remainder(x,y)

此函数返回 x 相对于 y 的余数。这是 x − n*y 的差值,其中 n 是最接近商 x / y 的整数。

math.trunc(x)

此函数返回数字的整数部分,删除小数部分。trunc() 等效于正 x 的 floor(),等效于负 x 的 ceil()。

math.ulp(x)

此函数返回浮点型 x 的最低有效位的值。trunc() 等效于正 x 的 floor(),等效于负 x 的 ceil()。

幂函数和对数函数

函数 描述
math.cbrt(x)

此函数用于计算数字的立方根。

math.exp(x)

此函数计算 x 的指数:ex

math.exp2(x)

此函数返回 2 的 x 次方。它相当于 2**x。

math.expm1(x)

此函数返回 e 的 x 次方减 1。这里 e 是自然对数的底数。

math.log(x)

此函数计算 x 的自然对数,> 0。

math.log1p(x)

此函数返回 1+x(以 e 为底)的自然对数。结果的计算方式对 x 接近零是准确的。

math.log2(x)

此函数返回 x 的以 2 为底的对数。这通常比 log(x, 2) 更准确。

math.log10(x)

x 的 x 以 10 为底的对数> 0。

math.pow(x, y)

x**y 的值。

math.sqrt(x)

x 的 x 的平方根 > 0

三角函数

Python 包括以下函数,这些函数在 math 模块中执行三角计算 -

函数 描述
math.acos(x)

此函数返回 x 的反余弦值(以弧度为单位)。

math.asin(x)

此函数返回 x 的反正弦值(以弧度为单位)。

math.atan(x)

此函数返回 x 的反正切值(以弧度为单位)。

math.atan2(y, x)

此函数返回 atan(y / x),以弧度为单位。

math.cos(x)

此函数返回 x 弧度的余弦值。

math.sin(x)

此函数返回 x 弧度的正弦值。

math.tan(x)

此函数返回 x 弧度的正切值。

math.hypot(x, y)

此函数返回欧几里得范数 sqrt(x*x + y*y)。

角度转换函数

以下是 Python math 模块提供的角度转换函数 -

函数 描述
math.degrees(x)

此函数将给定的角度从弧度转换为度数。

math.radians(x)

此函数将给定的角度从度数转换为弧度。

数学常数

Python math 模块定义了以下数学常数 -

常数 描述
math.pi

这表示数学常数 pi,它等于可用精度的 “3.141592...”。

math.e

这表示数学常数 e,它等于可用精度的 “2.718281...”。

math.tau

这表示数学常数 Tau (用 τ 表示)。它相当于周长与半径的比值,等于

math.inf

这表示正无穷大。对于负无穷大,请使用 “−math.inf”

math.nan

此常量是浮点 “非数字” (NaN) 值。它的值相当于 float('nan') 的输出。

双曲函数

双曲函数是三角函数的类似物,它基于双曲线而不是圆。以下是 Python math 模块的双曲函数 -

函数 描述
math.acosh(x)

此函数用于计算给定值的反双曲余弦。

math.asinh(x)

此函数用于计算给定数字的逆双曲正弦。

math.atanh(x)

此函数用于计算数字的逆双曲正切。

math.cosh(x)

此函数用于计算给定值的双曲余弦值。

math.sinh(x)

此函数用于计算给定数字的双曲正弦。

math.tanh(x)

此函数用于计算数字的双曲正切。

特殊功能

以下是 Python math 模块提供的特殊函数 -

函数 描述

math.erf(x)

此函数返回给定参数的 Gauss 误差函数的值。

math.erfc(x)

此函数是 error 函数的补充。erf(x) 的值等效于 1-erf(x)。

math.gamma(x)

这用于计算复数的阶乘。它是为除非正整数之外的所有复数定义的。

math.lgamma(x)

 

此函数用于计算 Gamma 函数在 x 处的绝对值的自然对数。

随机数函数

随机数用于游戏、模拟、测试、安全和隐私应用程序。Python 在 random 模块中包含以下函数。

函数 描述
random.choice(seq)

列表、元组或字符串中的随机项。

random.randrange([start,] stop [,step])

从 range(start, stop, step) 中随机选择的元素

random.random()

随机浮点数 r,使得 0 小于或等于 r,r 小于 1

random.seed([x])

此函数设置用于生成随机数的整数起始值。在调用任何其他随机模块函数之前调用此函数。返回 None。

random.shuffle(seq)

函数用于随机化给定序列的项目。

random.uniform(a, b)

此函数返回一个随机浮点值 r,使得 a 小于或等于 r,r 小于 b。

内置数学函数

以下 math 函数内置于 Python 解释器中,因此您无需从任何模块导入它们。

函数 描述

abs() 函数

abs() 函数返回 x 的绝对值,即 x 和 0 之间的正距离。

max() 函数

max() 函数返回其最大参数或可迭代对象(列表或元组)中的最大数字。

min() 函数

函数 min() 返回其参数的最小值,即最接近负无穷大的值,或可迭代对象(列表或元组)中的最小数字

pow() 函数

pow() 函数返回 x 升至 y。它等效于 x**y。

round() 函数

round() 是 Python 中的内置函数。它返回从小数点开始四舍五入到 n 位的 x。

sum() 函数

sum() 函数返回任何可迭代对象(列表或元组)中所有数字项的总和。它有一个可选的 start 参数,默认情况下为 0。如果给定,则列表中的数字将添加到 start 值。