Python数字,类型转换和数学详解!

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

Python中的数字数据类型

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

整数和浮点由存在或不存在小数点分隔。例如,5是整数,而5.0是浮点数。

复数以形式书写x + yj,其中 X 是最重要的部分 ÿ 是虚构的部分。

我们可以使用type() 函数来了解变量或值属于哪个类,并可以使用函数isinstance() 检查它是否属于特定类。

让我们看一个例子:

a = 5

print(type(a)) 
print(type(5.0))

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

print(isinstance(c, complex))

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

<class'int'>
<类'float'>
(8 + 3j)
真正

尽管整数可以是任意长度,但浮点数最多只能精确到15个小数位(第16位不准确)。

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

在Python中,我们可以通过在数字之前添加前缀来表示这些数字。下表列出了这些前缀。

| 编号系统 | 字首 |
| 二元 | ‘0b’或’0B’ |
| 八进制 | '0o'或'0O' |
| 十六进制 | ‘0x’或’0X’ |

这里有些例子

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

运行该程序时,输出为:

107
253
13

类型转换

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

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

>>> 1 + 2.0
3.0

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

我们还可以使用诸如的内置函数 int() ,float() 并complex()在类型之间进行显式转换。这些函数甚至可以从字符串转换。

不过只是知道基础理论是不行的,还需要结合项目实战案例来深刻理解,博主的Python学习.交.流.扣.扣.裙:8衣久二五寺久寺二(数字的谐音转换下可以找到了)内已经上传了最新的企业项目实战案例,有不懂的地方还可以和群友们一起讨论,还能和来自BAT的大佬近距离交流学习。

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

从float转换为整数时,数字将被截断(小数部分将被删除)。

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每次都执行而不是float?主要原因是效率。进行浮点运算必须比Decimal运算更快。

什么时候使用Decimal而不是float?

在以下情况下,我们通常使用十进制。

  • 当我们进行需要精确十进制表示的金融应用程序时。
  • 当我们要控制所需的精度水平时。
  • 当我们想实现小数位有效的概念时。

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
假
真正

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 math模块中可用的函数和属性的完整列表。

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 
Ë
['c','e','d','b','a'] 
0.5682821194654443

这是Python random模块中可用的函数和属性的完整列表。如果有朋友还有地方不了解的可以进博主的Python学习.交.流.扣.扣.裙:8衣久二五寺久寺二(数字的谐音转换下可以找到了)下载最新的Python学习资料,进行深层次的详细学习,有不懂的地方还可以和群内的行业大佬讨论学习


本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354