亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python 数字、类型转换和数学

Python 数字、类型转换和数学

在本文中,您将了解 Python 中使用的不同数字、如何从一种数据类型转换为另一种数据类型,以及 Python 支持的数学运算。

Python 中的数字数据类型

Python 支持整数、浮点数和复数。它们被定义为 int , float , 和 complex Python 中的类。

整数和浮点数由有无小数点分隔。例如,5 是整数,而 5.0 是浮点数。

复数以 x + yj 的形式编写 , 其中 x 是实部和 y 是虚部。

我们可以使用 type() 函数知道变量或值属于哪个类以及 isinstance() 检查它是否属于特定类的函数。

我们来看一个例子:

a = 5

print(type(a))

print(type(5.0))

c = 5 + 3j
print(c + 3)

print(isinstance(c, complex))

当我们运行上面的程序时,我们得到如下输出:

<class 'int'>
<class 'float'>
(8+3j)
True

虽然整数可以是任意长度,但浮点数只能精确到小数点后 15 位(第 16 位不准确)。

我们每天处理的数字是十进制(以 10 为底)的数字系统。但是计算机程序员(通常是嵌入式程序员)需要使用二进制(base 2)、十六进制(base 16)和八进制(base 8)数字系统。

在 Python 中,我们可以通过在该数字之前适当地放置一个前缀来表示这些数字。下表列出了这些前缀。

数字系统 前缀
二进制 “0b”或“0B”
八进制 '0o' 或 '0O'
十六进制 “0x”或“0X”

这里有一些例子

# Output: 107
print(0b1101011)

# Output: 253 (251 + 2)
print(0xFB + 0b10)

# Output: 13
print(0o15)

当你运行程序时,输出将是:

107
253
13

类型转换

我们可以将一种类型的数字转换为另一种类型。这也称为强制。

如果操作数之一是浮点数,则加法、减法等操作会隐式(自动)强制整数浮点数。

>>> 1 + 2.0
3.0

上面我们可以看到1(整数)被强制转换成1.0(浮点数)进行加法,结果也是一个浮点数。

我们也可以使用像 int() 这样的内置函数 , float()complex() 在类型之间显式转换。这些函数甚至可以从字符串转换。

>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)

从浮点数转换为整数时,数字会被截断(去除小数部分)。


Python 十进制

Python 内置类 float 执行一些可能会让我们感到惊讶的计算。我们都知道 1.1 和 2.2 之和是 3.3,但是 Python 似乎不同意。

>>> (1.1 + 2.2) == 3.3
False

怎么回事?

事实证明,浮点数在计算机硬件中以二进制分数的形式实现,因为计算机只能理解二进制(0 和 1)。由于这个原因,我们所知道的大多数小数部分都不能准确地存储在我们的计算机中。

让我们举个例子。我们不能将分数 1/3 表示为十进制数。这将给出 0.33333333... 无限长,我们只能近似它。

事实证明,十进制小数 0.1 会产生一个无限长的二进制小数 0.000110011001100110011……而我们的计算机只存储了它的有限个数。

这只会接近 0.1,但永远不会相等。因此,这是我们计算机硬件的限制,而不是 Python 的错误。

>>> 1.1 + 2.2
3.3000000000000003

为了克服这个问题,我们可以使用 Python 自带的十进制模块。浮点数的精度高达小数点后 15 位,而小数模块具有用户可设置的精度。

让我们看看区别:

import decimal

print(0.1)

print(decimal.Decimal(0.1))

输出

0.1
0.1000000000000000055511151231257827021181583404541015625

当我们想要进行我们在学校学习的小数计算时使用此模块。

它还保留了意义。我们知道 25.50 公斤比 25.5 公斤更准确,因为它的小数点后两位有效。

from decimal import Decimal as D

print(D('1.1') + D('2.2'))

print(D('1.2') * D('2.50'))

输出

3.3
3.000

请注意上面示例中的尾随零。

我们可能会问,为什么不实现 Decimal 每次,而不是浮动?主要原因是效率。浮点运算的执行速度必须快于 Decimal 操作。

何时使用小数而不是浮点数?

我们一般在以下情况下使用 Decimal。


Python 分数

Python 通过其 fractions 提供涉及小数的运算 模块。

分数有一个分子和一个分母,它们都是整数。该模块支持有理数运算。

我们可以通过多种方式创建 Fraction 对象。让我们来看看它们。

import fractions

print(fractions.Fraction(1.5))

print(fractions.Fraction(5))

print(fractions.Fraction(1,3))

输出

3/2
5
1/3

创建 Fraction 时 来自 float ,我们可能会得到一些不寻常的结果。这是由于上一节讨论的二进制浮点数表示不完善所致。

幸运的是,Fraction 也允许我们用字符串实例化。这是使用十进制数时的首选选项。

import fractions

# As float
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))

# As string
# Output: 11/10
print(fractions.Fraction('1.1'))

输出

2476979795053773/2251799813685248
11/10

此数据类型支持所有基本操作。这里有几个例子。

from fractions import Fraction as F

print(F(1, 3) + F(1, 3))

print(1 / F(5, 6))

print(F(-3, 10) > 0)

print(F(-3, 10) < 0)

输出

2/3
6/5
False
True

Python 数学

Python 提供了像 math 这样的模块 和 random 进行三角学、对数、概率统计等不同的数学运算。

import math

print(math.pi)

print(math.cos(math.pi))

print(math.exp(10))

print(math.log10(1000))

print(math.sinh(1))

print(math.factorial(6))

输出

3.141592653589793
-1.0
22026.465794806718
3.0
1.1752011936438014
720

这是 Python 数学模块中可用的函数和属性的完整列表。

import random

print(random.randrange(10, 20))

x = ['a', 'b', 'c', 'd', 'e']

# Get random choice
print(random.choice(x))

# Shuffle x
random.shuffle(x)

# Print the shuffled x
print(x)

# Print random element
print(random.random())

当我们运行上述程序时,我们得到如下输出。(由于随机行为,值可能会有所不同)

18
e
['c', 'e', 'd', 'b', 'a']
0.5682821194654443

这是 Python random 模块中可用的函数和属性的完整列表。


Python

  1. C# 类型转换
  2. Python 关键字和标识符
  3. Python 语句、缩进和注释
  4. Python 变量、常量和文字
  5. Python 类型转换和类型转换
  6. Python 输入、输出和导入
  7. Python 全局、局部和非局部变量
  8. Python 目录和文件管理
  9. Python 错误和内置异常
  10. 如何在 Python 中获取当前日期和时间?
  11. Python 中的 type() 和 isinstance() 示例
  12. C# - 类型转换