前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 的算术运算符

Python 的算术运算符

作者头像
老齐
发布2021-09-15 11:31:09
2.2K0
发布2021-09-15 11:31:09
举报
文章被收录于专栏:老齐教室老齐教室

★本文为即将出版的图书草稿,先睹为快。 ”

3.2 算术运算

所谓算术运算,是指初等数学中常见的计算,如加、减、乘、除、乘方等。在数学上,每种计算都使用规定的符号实现,形式上简洁明了,Python 语言也继承了此光荣传统。表3-2-1中列出了 Python 实现算术运算所使用的运算符。

表3-2-1 算术运算符

运算符

描述

示例

+

两个对象相加

1+2=3

-

得到负数或是一个数减去另一个数

2-3=-1

*

两个数相乘或是返回一个被重复若干次的字符串

2*3=6

/

两个数相除

5/2=2.5

%

两个数相除后所得的余数

5%2=1

//

向下取整,返回两个数相除的整数

5//2=2

**

计算一个数的幂运算

5**2=25

1. 加法

+ 能实现两个对象相加——对这句话的理解,会随着学习内容增多而深化,此处暂且将“对象”理解为整数和浮点数,如下操作:

代码语言:javascript
复制
>>> 2 + 3
5
>>> 2.3 + 3.1
5.4
>>> a = 4
>>> b = 6.2
>>> a + b
10.2

到目前为止,加法运算应该没有超出所学过的数学知识范畴。

2. 减法

如果没有特别定义,- 实现的是两个数字相减——这里所说的数字,目前暂且是浮点数、整数,如下操作:

代码语言:javascript
复制
>>> a = 4
>>> b = 6.2
>>> a - b
-2.2

运算符 - 的另外一个作用就是对某个数字取相反数:

代码语言:javascript
复制
>>> -4
-4
>>> -(-4)
4

这些都符合数学中的运算法则。

3. 乘法

在数学中,实现乘法的运算符是

\times

,但在编程语言中,使用的是键盘上的 * 。如果相乘的是两个数字——目前讨论的是浮点数、整数,那么与数学中的运算结果一致。

代码语言:javascript
复制
>>> 3 * 2
6
>>> 3.6 * 2.3
8.28

在表3-2-1中,对运算符 * 的描述中还有“返回一个被重复若干次的字符串”,在第4章4.2节会给予解释。

4. 除法

数学中表示两个数相除,有多种形式,比如

5÷2、5/2、\frac{5}{2}

,在 Python 语言中只能选用一种符号,对于 Python 3.x ,使用 / 符号作为除法运算符,计算结果与数学中的 ÷ 计算结果相同。

代码语言:javascript
复制
>>> 5 / 2
2.5
>>> 4.2 / 2
2.1

Python 中的除法也规定分母不能是 0 ,否则就会报错:

代码语言:javascript
复制
>>> 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

表3-2-1中与除法有关的符号除了 / 之外,还有 %//

先来理解 // 运算符“向下取整”的含义。如图3-2-1所示,对于数轴,不论它如何放置,均以其箭头所指方向——数值变大的方向——为“上”,以

x

轴上的点 B 为例,假设它所表示的值是

0 + r

,其中

0\le r \le 1

,比如是

0.7

。所谓向下取整,即取 B 点所在位置“下边”紧邻的整数,据此并结合图示可知,应该是

0

,可以记作

[0.7]=0

,表示对

0.7

向下取整的结果为

0

。再来观察 D 点,其“下”的整数是

-2

,若

D=-1.6

,则

[-1.6] = -2

图3-2-1 “向下取整”的含义

根据上述“向下取整”的解释,请读者在交互模式中执行下述操作,并结合返回值,理解 // 的含义。

代码语言:javascript
复制
>>> 5 / 2
2.5
>>> 5 // 2
2

5 / 2 的值是 2.5 ,结合图3-2-1所示的“向下取整”含义,

2.5

“下边”的整数是

2

,故 5 // 2 的结果是 2

再来看负数情况:

代码语言:javascript
复制
>>> -5 / 2
-2.5
>>> -5 // 2
-3

显然

-2.5

“下边”的整数是

-3

,所以 -5 // 2 的结果为 -3

// 按照“向下取整”原则得到的结果,也就是两个数字相除所得的商。在理解了 // 计算方法的基础上,再理解 % 的含义——两个数相除后所得的余数。

a、d

两个数相除,表示为:

a ÷ d = q\cdots r

,其中

q

为商,

r

为余数,且

0\le |r| \le |d|

。根据数学知识可知:

a = qd + r

。商

q

已经能够通过 // 得到,所以余数

r = a-qd

根据上述原理,下面通过操作,理解 % 运算符的计算结果。

代码语言:javascript
复制
>>> 5 % 2
1

根据前述计算余数的原理,在

5÷2

的计算中,

q=2

,那么余数

r = a-qd=5-2\times2=1

,即上述返回值。再如:

代码语言:javascript
复制
>>> 7 // -9
-1
>>> 7 % -9
-2

计算

7÷(-9)

的余数,首先得到

q=-1

,根据前述计算余数的公式,

r=7-(-1)\times(-9)=-2

,理论分析与 Python 计算结果相同。

对此不再一一列举各种情况,读者不放自己尝试。

5. 幂

在数学中,若干个数相乘可以写成该数字的几次幂,如

2\times2\times2

即为

2^3

。在 Python 中用 ** 运算符——两个乘法运算符,中间不能有空格——表示幂运算。

代码语言:javascript
复制
>>> 2 ** 3
8
>>> 2 ** -3
0.125

读者运用所学的数学知识,理解上述运算结果不会遇到困难,此处不赘述。

6. 科学计数法

虽然表3-2-1中没有列出科学计数法的符号——其实它不是一个运算符,但由于在科学计算中会经常用到,所以此处单独作为一项列出。在数学上,一个实数可以写成实数

a

与一个

10^n

的积:

a\times10^n

,其中:

n

必须是一个整数;

a

是实数,通常

1\le|a|\le 10

,有时

a

也会不在此范围,届时要调整

n

的大小。

这种表示数字的方法称为科学计数法(Scientific notation),由阿基米德提出。

在 Python 中,为科学计数法设计了专有表示方式:

代码语言:javascript
复制
>>> 1e10
10000000000.0
>>> 1E10
10000000000.0

上面两种表示方法,均为

1\times10^{10}

——其中符号 e 不区分大小写。特别要注意,这是 Python 中比较特殊的现象,在其他方面通常要求区分大小写。

E 后面如果是负整数,例如:

代码语言:javascript
复制
>>> 2.3E-4
0.00023

2.3E-4 即表示

2.3\times10^{-4}

任何用科学记数法表示的数,都是浮点数类型。

代码语言:javascript
复制
>>> a = 2.3E-4
>>> type(a)
<class 'float'>
>>> b = 1E1
>>> b
10.0
>>> type(b)
<class 'float'>

如果表示

10^8

,符号E前面是不是也可以省略数字

1

呢?

代码语言:javascript
复制
>>> E8
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'E8' is not defined

不行。为什么?请参考第2章2.3节关于变量的命名规则。

在一个数学算式中,如果有多个表3-2-1中的运算符,在数学称为“混合运算”。用 Python 能实现混合运算,且运算优先级与数学上的规定保持一致。

代码语言:javascript
复制
>>> 3 ** 2 + 4 / 2 - 3 + 2
10.0

在数学运算中,还会用圆括号

(\cdot)

明确优先运算的部分,它也被引入到了 Python 语言中,而且在 Python 中还特别提倡使用圆括号,因为表达式的可读性强。

代码语言:javascript
复制
>>> 3 ** 2 + 4 / 2 - (3 + 2)
6.0

需要提醒读者注意,3.1.1节【自学建议】演示了 Python 中的“大整数”不溢出现象,但是对于浮点数运算而言,若超出了中央处理器所能允许浮点数范围,会出现算术溢出。

代码语言:javascript
复制
>>> 1.9 ** 10000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')

所以,在进行浮点数运算的时候要注意了。

但是,如果是一个用科学计数法表示的浮点数超出了系统的浮点数范围,Python 会给出另外一种处理,例如:

代码语言:javascript
复制
>>> n = 2E400
>>> n
inf
>>> type(n)
<class 'float'>
>>> 10 ** 400
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> 10.0 ** 400
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')

此处的 2E400

2\times 10^{400}

,这个数字已经大于了宇宙中原子的总数(按照目前理论估算,在可观测宇宙中的原子总数大约是

10^{80}

),但是 Python 没有针对 2E400 出现算术溢出,而是令其值为 inf,它表示“无穷大”,并且是一个浮点数——这是 Python 的规定,请勿用数学上的规定来评判。

顺便比较 10 ** 40010.0 ** 400的区别:前者返回的是整数——不会溢出,后者返回结果应该是浮点数,溢出了。

为了巩固所学,必须做个练习,当然,此练习还“另有深意”。假设两个人,一个人的质量是

70kg

,另外一个人的质量是

50kg

,当两人相距

0.5m

的时候,他们之间的引力大小是多少?(

G=6.67\times10^{-11}m^3kg^{-1}s^{-2}

显然,直接使用万有引力定理的公式

F=G\frac{m_1m_2}{r^2}

即可计算:

代码语言:javascript
复制
>>> G = 6.67E-11
>>> F = G * 70 * 50 / (0.5 ** 2)
>>> F
9.338000000000001e-07

计算表明,这两个人在

0.5m

距离时之间的引力大小是

9.3\times10^{-7}N

,仅相当于大约质量为

0.095

毫克的物体的重力。牛顿或许深谙此理,故终身未娶——引力仅分毫,余者又皆身外物,何必牵肠挂肚,格物穷理不孤独。

图3-2-2 艾萨克·牛顿爵士

自学建议 编程语言与数学之间有着密切的关系,本节内容仅仅是皮毛而已。如果读者有意在编程这个领域深入发展,特别建议将数学列为长期学习的内容。不是如同应付考试那样学习,而是如同刷手机那样,经常浏览一些数学内容。常见面,不陌生,用到就能想到。 ”

更多内容,点击【阅读原文】,查看个人网站:www.itdiffer.com

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.2 算术运算
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档