Python 简明教程

Python - Numbers

Python 具有存储和处理数字数据 ( Python Numbers ) 的内置支持。在几乎每个 Python application 中,你都会经常使用数字。显然,任何计算机应用程序都涉及数字。本教程将讨论不同类型的 Python 数字及其属性。

Python - Number Types

Python 中有三种内置数字类型:

  1. integers (int)

  2. floating point numbers (float)

  3. complex numbers

Python 还具有内置布尔 data type 称为 bool 。它可以被视为 int 类型的子类型,因为它的两个可能值 TrueFalse 分别表示整数 1 和 0。

Python − Integer Numbers

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

有三种方法来形成整数对象。使用 (a) 文字表示,(b) 任何求值为整数的表达式,以及 (c) int() 函数。

文字是用于直接在源代码中表示常量的符号。例如 −

>>> a =10

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

a = 10
b = 20
c = a + b

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

它将生成以下 output

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

在此,c 确实是一个整数变量,但是首先求值表达式 a + b,然后将它的值间接赋值给 c。

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

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

您可以用二进制、八进制或十六进制数字表示整数。然而,对象在内部以整数形式存储。

Binary Numbers in Python

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

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

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

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

它将生成以下 output

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

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

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

它将生成以下 output

Integer: 43 Binary equivalent: 0b101011

Octal Numbers in Python

八进制数仅由数字 0 至 7 构成。为指定整数使用八进制记数法,其前缀必须是 "0o" (小写 O)或 "0O" (大写 O)。八进制数的字面表示如下 −

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

它将生成以下 output

71 <class 'int'>

请注意对象在内部以整数形式存储。八进制数 107 的十进制等价数为 71。

由于八进制数系统有 8 个符号(0 至 7),因此其基数为 7。因此,在使用 int() 函数将八进制字符串转换为整数时,需将 base 参数设置为 8。

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

它将生成以下 output

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)

它将生成以下 output

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

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

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

Hexa-decimal Numbers in 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))

它将生成以下 output

162 <class 'int'>

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

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

试用以下代码段。它采用十六进制字符串,并返回整数。

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

它将生成以下 output

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))

它将生成以下 output

0xa1 <class 'str'>

整数可表示为二进制、八进制或十六进制,但它在内部仍是整数。因此,在执行算术操作时,表示形式不重要。

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

print ("addition:", e)

它将生成以下 output

addition: 30

Python − Floating Point Numbers

浮点数字具有整数部分和小数部分,由小数点符号(.)分隔。默认情况下,数字为正数,对负数加前缀减号(-)符号。

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

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

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

在 Python 中,浮点数小数点后可以有多少位数没有限制。但是,为了缩短表示法,使用了 Ee 符号。E 表示以 10 为底的指数运算。例如,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 对象。

a=10.33
b=2.66
c=a/b

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

它将生成以下 output

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=",")

它将生成以下 output

2.0,8.0,10.0

float() 函数从一个字符串中获取浮点数,该字符串包含一个浮点数,无论是标准小数点格式还是科学符号。

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

它将生成以下 output

a= -123.54 b= 12300.0

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

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

它将生成以下 output

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

另一种这样的实体是 Nan(代表非数字)。它表示任何未定义或不可表示的值。

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

Python − Complex Numbers

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

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

在数学中,虚数“i”定义为 -1 的平方根 ($\sqrt{−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))

它将生成以下 output

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

在上面的示例中,我们使用了 x 和 y 作为浮点参数。它们甚至可以是 complex 数据类型。

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

它将生成以下 output

(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() 函数使用一个数字参数,它会将其视为实部的值;虚部设为 0。

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

它将生成以下 output

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

如果 complex() 函数的唯一参数是一个具有复数表示的字符串,那么它还可以将字符串分析为复数。

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

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

它将生成以下 output

Complex number: (5.5+2.3j)

Python 的内置 complex 类具有两个属性 realimag - 它们返回来自该对象的实部和虚部系数。

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

它将生成以下 output

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 Conversion

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

  1. 键入 int(x) 以将 x 转换为一个普通整数。

  2. 键入 long(x) 以将 x 转换为一个长整数。

  3. 键入 float(x) 以将 x 转换为一个浮点数。

  4. 键入 complex(x) 以将 x 转换为一个实部为 x 且虚部为零的复数。以同样的方式键入 complex(x, y) 以将 x 和 y 转换为一个实部为 x 且虚部为 y 的复数。x 和 y 是数字表达式

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

Theoretic and Representation Functions

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

Sr.No.

Function & Description

1

* math.ceil(x)* x 的上限:不小于 x 的最小整数

2

math.comb(n,k) 此函数用于查找在不重复且无序的情况下,从“y”个项目中选择“x”个项目的各种方式。

3

* math.copysign(x, y)* 此函数返回一个具有 x 的绝对值(绝对值)但具有 y 的符号的浮点数。

4

* math.cmp(x, y)* 此函数用于比较两个对象的。此函数在 Python3 中已弃用。

5

* math.fabs(x)* 此函数用于计算给定整数的绝对值。

6

* math.factorial(n)* 此函数用于查找给定整数的阶乘。

7

* math.floor(x)* 此函数计算给定整数的 floor 值。

8

* math.fmod(x, y)* math 模块中的 fmod() 函数返回与 "%" 运算符相同的结果。然而 fmod() 比求模运算符更准确地给出求模除法结果。

9

* math.frexp(x)* 此函数用于计算给定数的尾数和指数。

10

* math.fsum(iterable)* 此函数返回可迭代对象(列表、元组、数组)中所有数字项目的浮点和。

11

* math.gcd(integers) 此函数用于计算所有给定整数的最大公约数。

12

* math.isclose()* 此函数用于确定两个给定数值是否接近。

13

* math.isfinite(x)* 此函数用于确定给定的数字是否为有限数字。

14

* math.isinf(x)* 此函数用于确定给定的值是否为无穷大(+ve 或 -ve)。

15

* math.isnan(x)* 此函数用于确定给定数字是否为“NaN”。

16

* math.isqrt(n)* 此函数计算给定非负整数的整数平方根。

17

* math.lcm(integers) 此函数用于计算给定整数参数的最小公倍数。

18

* math.ldexp(x, i)* 此函数返回第一个数字与第二个数字指数的乘积。因此,ldexp(x,y) 返回 x*2**y。这是 frexp() 函数的逆函数。

19

* math.modf(x)* 此函数返回 x 的分数和整数部分,组成一个二元组。

20

* math.nextafter(x, y, steps)* 此函数返回继 x 之后的第一个浮点值,朝向 y。

21

* math.perm(n, k)* 此函数用于计算排列。它返回从 y 个项目中选择 x 个项目的方案数,并且不重复也不考虑顺序。

22

* math.prod(iterable, , start) 此函数用于计算作为参数给定的可迭代对象(列表、元组)中所有数字项目的乘积。

23

* math.remainder(x,y)* 此函数返回 x 关于 y 的余数。这是 x − n*y 之差,其中 n 是最接近商 x / y 的整数。

24

* math.trunc(x)* 此函数返回数字的整数部分,去除分数部分。对于正 x,trunc() 等同于 floor(),对于负 x,trunc() 等同于 ceil()。

25

* math.ulp(x)* 此函数返回浮点数 x 最低有效位的数值。trunc() 对于正 x 等同于 floor(),对于负 x 等同于 ceil()。

Power and Logarithmic Functions

Sr.No.

Function & Description

1

* math.cbrt(x)* 此函数用于计算某个数字的立方根。

2

* math.exp(x)* 此函数计算 x 的指数:ex

3

* math.exp2(x)* 此函数返回 2 乘以 x 次方。它等同于 2**x。

4

* math.expm1(x)* 此函数返回 e 的 x 次方减去 1。其中 e 是自然对数的底数。

5

* math.log(x)* 此函数计算 x(对于 x> 0)的自然对数。

6

* math.log1p(x)* 此函数返回 1+x 的自然对数(底数为 e)。计算结果适用于接近于零的 x。

7

* math.log2(x)* 此函数返回 x 的 2 为底的对数。它通常比 log(x, 2) 更精确。

8

* math.log10(x)* 对于 x> 0,返回 x 的以 10 为底的对数。

9

* math.pow(x, y)* x**y 的值

10

* math.sqrt(x)* 对于 x > 0,返回 x 的平方根

Trigonometric Functions

Python 包含在 math 模块中执行三角计算的以下函数 −

Sr.No.

Function & Description

1

* math.acos(x)* 此函数返回 x 的反正切,以弧度为单位。

2

* math.asin(x)* 此函数返回 x 的反正弦,以弧度为单位。

3

* math.atan(x)* 此函数返回 x 的反正切,以弧度为单位。

4

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

5

* math.cos(x)* 此函数返回 x 弧度的余弦。

6

* math.sin(x)* 此函数返回 x 弧度的正弦。

7

* math.tan(x)* 此函数返回 x 弧度的正切。

8

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

Angular conversion Functions

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

Sr.No.

Function & Description

1

* math.degrees(x)* 此函数将给定的角度从弧度转换为度。

2

* math.radians(x)* 此函数将给定的角度从度转换为弧度。

Mathematical Constants

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

Sr.No.

Constants & Description

1

* math.pi* 表示数学常量 pi,等于 "3.141592&#8230;&#8203;" 可用精度。

2

* math.e* 表示数学常量 e,等于 "2.718281&#8230;&#8203;" 可用精度。

3

* math.tau* 表示数学常量 Tau(用 τ 表示)。等于圆周长与半径之比,等于

4

* math.inf* 表示正无穷大。对于负无穷大,请使用 "−math.inf"

5

* math.nan* 此常量是浮点数“非数字”(NaN)值。其值等于 float('nan') 的输出。

Hyperbolic Functions

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

Sr.No.

Function & Description

1

* math.acosh(x)* 此函数用于计算给定值的双曲余弦的反函数。

2

* math.asinh(x)* 此函数用于计算给定数字的双曲正弦的反函数。

3

* math.atanh(x)* 此函数用于计算数字的双曲正切的反函数。

4

* math.cosh(x)* 此函数用于计算给定值的双曲余弦。

5

* math.sinh(x)* 此函数用于计算给定数字的双曲正弦。

6

* math.tanh(x)* 此函数用于计算数字的双曲正切。

Special Functions

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

Sr.No.

Function & Description

1

* math.erf(x)* 此函数返回给定参数的高斯误差函数的值。

2

* math.erfc(x)* 此函数是误差函数的余函数。erf(x) 的值等于 1-erf(x)

3

* math.gamma(x)* 它用于计算复数的阶乘。它用于除了非正整数外的所有复数。

4

* math.lgamma(x)* 此函数用于计算 x 处伽马函数的绝对值的自然对数。

Random Number Functions

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

Sr.No.

Function & Description

1

* random.choice(seq)* 列表、元组或字符串中的随机项。

2

* random.randrange([start,] stop [,step])* 从 range(start, stop, step) 中随机选取的元素

3

* random.random()* 一个随机浮点数 r,其中 0 小于或等于 r 且 r 小于 1

4

* random.seed([x])* 此函数设置用于生成随机数的整型起始值。在调用任何其他 random 模块函数之前调用此函数。返回 None。

5

* random.shuffle(seq)* 此函数用于随机化给定序列的项。

6

* random.uniform(a, b)* 此函数返回一个随机浮点值 r,其中 a 小于或等于 r 且 r 小于 b。

Built-in Mathematical Functions

以下数学函数内置在 Python interpreter 中,因此您不必从任何模块导入它们。