Python 的算术运算符

老齐 2021-09-15 12:41:41
Python 运算符 运算 算术


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

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. 加法

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

>>> 2 + 3
5
>>> 2.3 + 3.1
5.4
>>> a = 4
>>> b = 6.2
>>> a + b
10.2

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

2. 减法

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

>>> a = 4
>>> b = 6.2
>>> a - b
-2.2

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

>>> -4
-4
>>> -(-4)
4

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

3. 乘法

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

\times

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

>>> 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 ,使用 / 符号作为除法运算符,计算结果与数学中的 ÷ 计算结果相同。

>>> 5 / 2
2.5
>>> 4.2 / 2
2.1

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

>>> 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 “向下取整”的含义

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

>>> 5 / 2
2.5
>>> 5 // 2
2

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

2.5

“下边”的整数是

2

,故 5 // 2 的结果是 2

再来看负数情况:

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

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

>>> 5 % 2
1

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

5÷2

的计算中,

q=2

,那么余数

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

,即上述返回值。再如:

>>> 7 // -9
-1
>>> 7 % -9
-2

计算

7÷(-9)

的余数,首先得到

q=-1

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

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

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

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

5. 幂

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

2\times2\times2

即为

2^3

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

>>> 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 中,为科学计数法设计了专有表示方式:

>>> 1e10
10000000000.0
>>> 1E10
10000000000.0

上面两种表示方法,均为

1\times10^{10}

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

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

>>> 2.3E-4
0.00023

2.3E-4 即表示

2.3\times10^{-4}

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

>>> a = 2.3E-4
>>> type(a)
<class 'float'>
>>> b = 1E1
>>> b
10.0
>>> type(b)
<class 'float'>

如果表示

10^8

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

1

呢?

>>> 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 能实现混合运算,且运算优先级与数学上的规定保持一致。

>>> 3 ** 2 + 4 / 2 - 3 + 2
10.0

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

(\cdot)

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

>>> 3 ** 2 + 4 / 2 - (3 + 2)
6.0

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

>>> 1.9 ** 10000
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')

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

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

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

即可计算:

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

本文分享自微信公众号 - 老齐教室(itdiffer) ,作者:老齐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间: 2021-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[老齐]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1877622

  1. Python - Programmation orientée objet - pratique (6)
  2. Python - Programmation orientée objet - réflexion hasattr, GetAttr, GetAttr, delattr
  3. Python - Programmation orientée objet - _Dict
  4. Python - pydantic (2) Modèle imbriqué
  5. Non-ASCII character ‘\xe5‘ in file kf1.py on line 4, but no encoding declared; see http://python.or
  6. python笔记(一)
  7. Non - ASCII character 'xe5' in file kf1.py on Line 4, but no Encoding declared;Voirhttp://python.or
  8. Notes Python (1)
  9. Talk about how JMeter executes Python scripts concurrently
  10. In Beijing, you can't see the moon in the Mid Autumn Festival. Draw a blood red moon in Python
  11. Un des pandas crée un objet
  12. Machine learning | unitary regression model Python practical case
  13. Draw a "Lollipop chart" with Excel and python
  14. Python uses scikit learn to calculate TF-IDF
  15. Getting started with Python Basics_ 3 conditional statements and iterative loops
  16. Python dynamic properties and features
  17. 云计算开发:Python内置函数-min()函数详解
  18. [Python skill] how to speed up loop operation and numpy array operation
  19. 雲計算開發:Python內置函數-min()函數詳解
  20. Développement de l'informatique en nuage: explication détaillée de la fonction intégrée python - min ()
  21. 从0起步学Python(附程序实例讲解)第1讲
  22. 从0起步学Python(附程序实例讲解)第1讲
  23. Apprendre Python à partir de 0 (avec des exemples de programme) leçon 1
  24. Apprendre Python à partir de 0 (avec des exemples de programme) leçon 1
  25. With Python, I'll take you to enjoy it for a month when the Mid Autumn Festival is coming
  26. You can't write interface software in Python! Which software on sale has no UI?
  27. Python国内外原题解析及源码1~15
  28. Python实现长篇英文自动纠错~
  29. Python implémente la correction automatique des erreurs en anglais long
  30. Analyse des problèmes originaux et code source de Python au pays et à l'étranger 1 ~ 15
  31. 一张思维导图学Python之表白
  32. Python教学中课程思政建设的研究探索2
  33. Recherche sur la construction idéologique et politique du Programme d'études dans l'enseignement Python 2
  34. Une présentation de la cartographie mentale Python
  35. Python高级用法总结(8)-函数式编程
  36. Python + Mirai development QQ robot starting tutorial (2021.9.9 test is valid)
  37. Python Advanced use Summary (8) - functional Programming
  38. How to get started with Python and share learning methods for free. All you want to know is here
  39. Python + Mirai development QQ robot starting tutorial (2021.9.9 test is valid)
  40. Python趣味编程中(PPT适合青少儿和零基础学习Python)
  41. Python基础第1讲(含代码、Python最新安装包、父与子的编程之旅:与小卡特一起学Python中文版)
  42. 用 Python 增强 Git
  43. Python基礎第1講(含代碼、Python最新安裝包、父與子的編程之旅:與小卡特一起學Python中文版)
  44. Base Python leçon 1 (y compris le Code, le dernier paquet d'installation Python, le voyage de programmation parent - enfant: apprendre la version chinoise de python avec le petit Carter)
  45. Dans la programmation amusante Python (ppt pour les jeunes enfants et l'apprentissage de base zéro Python)
  46. 非常好的题目详解Python字典的用法
  47. Python teaches you to build wechat push live Betta reminder from 0 (single room simplified version)
  48. Python 协程与 JavaScript 协程的对比
  49. 手把手带你用Python实现一个量化炒股策略
  50. Main dans la main pour mettre en œuvre une stratégie quantitative de spéculation boursière en python
  51. Comparaison des coproductions Python et JavaScript
  52. 【python种子项目ppc】一行代码生成项目与开发详细指导
  53. Docker 部署一个用 Python 编写的 Web 应用
  54. Python - poetry(4)管理环境
  55. Python - poetry(2)命令介绍
  56. [Python Seed Project PPC] a line of Code Generation Project and Development detailed guidance
  57. Introduction à la commande python - Poetry (2)
  58. Python - Poetry (4) Management Environment
  59. I collected Banhua's spatial data set in Python. In addition to meizhao, I found her other secrets again!
  60. I modified ban Hua's boot password in Python and found her secret after logging in again!