For I am not ashamed of the gospel; it is the power of God for salvation to everyone who has faith, to the Jew first and also to the Greek. For in it the righteousness of God is revealed through faith for faith; as it is written,"The one who is righteous will live by faith"

数和四则运算

计算机,原本是用来计算的。现在更多人把她叫做电脑,这两个词都是指computer。不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等。乃至于,有的人在口语中区分不开计算机和计算器。

有一篇名为《计算机前世》的文章,这样讲到:

还是先来看看计算机(computer)这个词是怎么来的。 英文学得好的小伙伴看到这货,computer

第一反应好像是:“compute-er”是吧,应该是个什么样的人就对了,就是啊,“做计算的人”。

叮咚!恭喜你答对了。

最先被命名为 computer 的确实是人。也就是说,电子计算机(与早期的机械计算机)被给予这个名字是因为他们执行的是此前被分配到人的工作。 “计算机”原来是工作岗位,它被用来定义一个工种,其任务是执行计算诸如导航表,潮汐图表,天文历书和行星的位置要求的重复计算。从事这个工作的人就是 computer,而且大多是女神!

原文还附有如下图片:

所以,以后要用第三人称来称呼computer,请用she(她)。现在你明白为什么程序员中那么多“他”了吧,因为computer是“她”。

在Python中,对数的规定比较简单,基本在小学数学水平即可理解。

那么,做为零基础学习这,也就从计算小学数学题目开始吧。因为从这里开始,数学的基础知识列位肯定过关了。

>>> 3
3
>>> 3333333333333333333333333333333333333333
3333333333333333333333333333333333333333
>>> 3.222222
3.222222

上面显示的是在交互模式下,如果输入3,就显示了3,这样的数称为整数,用int表示。这个称呼和小学数学一样。

如果输入一个比较大的数,第二个,那么多个3组成的一个整数,在Python中称之为长整数。为了表示某个数是长整数,Python 2会在其末尾显示一个L,Python 3中干脆把L都省略了,因为本来它也没有什么作用了。其实,现在的Python已经能够自动将输入的很大的整数视为长整数了。你不必在这方面进行区别。

这个功能重要,在于Python能自动处理大整数问题,不用担心溢出。什么是“溢出”,随后说明,或者在这里去Google它。

第三个,在数学里面称为小数,这里你依然可以这么称呼,不过就像很多编程语言一样,习惯称之为“浮点数”,用float表示。

注意,刚才我提到了小数,其实把小数称之为“浮点数”,这种说法并不准确。为此,“知乎”上有专门的解释,请阅读(原文地址:http://www.zhihu.com/question/19848808/answer/22219209

并不是说小数叫做浮点数。准确的来说:“浮点数”是一种表示数字的标准,整数也可以用浮点数的格式来存储。

当代大部分计算机和程序在处理浮点数时所遵循的标准是由IEEE和ANSI制定的。比如,单精度的浮点数以4个字节来表示,这4个字节可以分为三个部分:1位的符号位(0代表正数,1代表负数),8位用作指数,最后的23位表示有效数字。

“浮点数”的定义是相对于“定点数”来说的,它们是两种表示小数的方式。

所谓“定点”是指小数点的位置总是在数的某个特定位置。比如在银行系统中,小数点的位置总是在两位小数之前(这两位小数用来表示角和分)。其可以使用BCD码来对小数进行编码。

浮点格式则是基于科学计数法的,它是存储极大或极小数的理想方式。但使用浮点数来表示数据的时候,由于其标准制定方面的原因可能会带来一些问题,例如:某两个不同的整数在单精度浮点数的表示方法下很可能无法区分。

上述举例中,可以说都是无符号(或者说是非负数),如果要表示负数,跟数学中的表示方法一样,前面填上负号即可。

值得注意的是,我们这里说的都是十进制的数。

除了十进制,还有二进制、八进制、十六进制都是在编程中可能用到的,当然用六十进制的时候就比较少了(其实时间记录方式就是典型的六十进制)。

进制问题此处不是重点,建议读者自行查找资料阅读。

在Python中,每个数字都是真实存在的,相对于我们——人类——来讲,它真实存在,它就是对象(object)。

对象是一个深刻的术语,不管你是否理解,我先这么说,你先听着、用着,逐渐逐渐,就理解深入了。

还要注意,此对象非彼对象,但是学习Python或许在帮助你解决彼对象的时候有帮助。

比如整数3,就是一个对象。

每个对象,在内存中都有自己的一个地址,这个就是它的身份。

>>> id(3)
140574872
>>> id(3.222222)
140612356
>>> id(3.0)
140612356
>>>

用内建函数id()可以查看每个对象的内存地址,即身份。

内建函数,英文为built-in Function,读者根据名字也能猜个八九不离十了。不错,就是Python中已经定义好的内部函数。

以上三个不同的数字,是三个不同的对象,具有三个不同的内存地址。特别要注意,在数学上,3和3.0是相等的,但是在这里,它们是不同的对象。

用id()得到的内存地址,是只读的,不能修改。

了解了“身份”,再来看“类型”,也有一个内建函数供使用type()。

>>> type(3)
<type 'int'>
>>> type(3.0)
<type 'float'>
>>> type(3.222222)
<type 'float'>

在Python 3中,看到的是这样的结果:

>>> type(3)
<class 'int'>
>>> type(3.0)
<class 'float'>
>>> type(3.222222)
<class 'float'>

用内建函数能够查看对象的类型。

  • <type ‘int’>或者<class 'int'>,说明3是整数类型(Interger);
  • <type ‘float’>或者<class 'float'>,则告诉我们那个对象是浮点型(Floating point real number)。

与id()的结果类似,type()得到的结果也是只读的。

至于对象的值,在这里就是对象本身了。

看来对象也不难理解。请保持自信,继续。

变量

仅仅写出3、4、5是远远不够的,在编程语言中,经常要用到“变量”和“数”(在Python中严格来讲是对象)建立一个对应关系。例如:

>>> x = 5
>>> x
5
>>> x = 6
>>> x
6

在这个例子中,x = 5就是在变量x和数5之间建立了对应关系,接着又建立了x6`之间的对应关系。

我们可以看到,x先“是”5,后来“是”6。

在Python中,有这样一句话是非常重要的:对象有类型,变量无类型

怎么理解呢?

首先,5、6都是整数,Python中为它们取了一个名字,叫做“整数”类型的对象(或者数据),也可以说对象(或数据)类型是整数型,用int表示。

当我们在Python中写入了5、6,computer姑娘就自动在她的内存中某个地方给我们建立了这两个对象,就好比建造了两个雕塑,一个是形状似5,一个形状似6,这就两个对象,这两个对象的类型就是int.

那个x呢?就好比是一个标签,当x = 5时,就是将x这个标签拴在了5上了,通过这个x,就顺延看到了5,于是在交互模式中,>>> x输出的结果就是5,给人的感觉似乎是x就是5,事实是x这个标签贴在5上面。同样的道理,当x = 6时,标签就换位置了,贴到6上面。

所以,作用等同于标签的变量x没有类型之说,它不仅可以贴在整数类型的对象上,还能贴在其它类型的对象上,比如后面会介绍到的str(字符串)类型的对象等等。

这是Python的一个重要特征——对象有类型,变量无类型

理解否?如果没有理解,也不要紧张,继续学习,“发展是硬道理”,在发展中解决问题。

上面的知识,可以用来计算。

四则运算

按照下面要求,在交互模式中运行,看看得到的结果和用小学数学知识运算之后得到的结果是否一致

>>> 2 + 5
7
>>> 5 - 2
3
>>> 10 / 2
5
>>> 5 * 2
10
>>> 10 / 5 + 1
3
>>> 2 * 3 - 4
2

在Python 3中,上面的运算中,除法是有区别的,它们将是这样的:

>>> 10 / 2
5.0
>>> 10 / 5 + 1
3.0

这些运算中,分别涉及到了四个运算符号:加(+)、减(-)、乘(*)、除(/)

另外,我相信读者已经发现了一个重要的公理:

在计算机中,四则运算和数学中学习过的四则运算规则是一样的

要不说人是高等动物呢,自己发明的东西,一定要继承自己已经掌握的知识,别跟自己的历史过不去。伟大的科学家们,在当初设计计算机的时候就想到后辈小子们学习的需要了,一定不能让后世子孙再学新的运算规则,就用数学里面的好了。感谢那些科学家先驱者,泽被后世。

下面计算三个算术题,看看结果是什么

  • 4 + 2
  • 4.0 + 2
  • 4.0 + 2.0

可能愤怒了,这么简单的题目,就不要劳驾计算机了,太浪费了。

别着急,还是要运算一下,然后看看结果,有没有不一样?要仔细观察哦。

>>> 4+2
6
>>> 4.0+2
6.0
>>> 4.0+2.0
6.0

观察能力运用到这里,在物理课堂上学的一点不浪费。

找出不一样的地方。第一个式子结果是6,这是一个整数;后面两个是6.0,这是浮点数。这意味着什么,你可以继续试验,看看能不能总结出什么规律。后面会用到。

似乎计算机做一些四则运算是不在话下的,但是,有一个问题请你务必注意:在数学中,整数是可以无限大的,但是在计算机中,整数不能无限大。为什么呢?(推荐去google,其实计算机的基本知识中肯定学习过了。)因此,就会有某种情况出现,就是参与运算的数或者运算结果超过了计算机中最大的数了,这种问题称之为“整数溢出问题”。

大整数

这里有一篇专门讨论这个问题的文章,推荐阅读:整数溢出

对于其它语言,整数溢出是必须正视的,但是,在Python里面,无忧愁,原因就是Python为我们解决了这个问题。

请阅读拙文:大整数相乘

可以在实验一下大整数相乘。

>>> 123456789870987654321122343445567678890098876 * 1233455667789990099876543332387665443345566
152278477193527562870044352587576277277562328362032444339019158937017801601677976183816L

Python 3中的计算结果,比上面的少L:

>>> 123456789870987654321122343445567678890098876 * 1233455667789990099876543332387665443345566
152278477193527562870044352587576277277562328362032444339019158937017801601677976183816

Python自动帮为我们解决大整数问题。这是Python跟很多其它编程语言大不一样的地方,也就是说,你尽可以放心,在Python中,整数的长度是不受限制的(当然,这句话有点绝对了)。

Python解忧愁,可是使用任意大的整数。

所以,选择学习Python就是珍惜光阴了。

强调知识点,有两个符号需要牢记(不记住也没关系,可以随时google,只不过记住后使用更方便)

  • 整数,用int表示,来自单词:integer
  • 浮点数,用float表示,就是单词:float

可以用一个命令:type(object)来检测一个数是什么类型。

>>> type(4)
<type 'int'>    #4是int,整数
>>> type(5.0)
<type 'float'> #5.0是float,浮点数
>>> type(988776544222112233445566778899887766554433221133344455566677788998776543222344556678)
<type 'long'>   #是长整数,也是一个整数

Python 3的结果是:

>>> type(4)
<class 'int'>
>>> type(5.0)
<class 'float'>
>>> type(988776544222112233445566778899887766554433221133344455566677788998776543222344556678)
<class 'int'>

两个版本有区别,在Python 3中,不再有long类型对象了,都归类为int类型。

浮点数

对于浮点数,通常情况也没有什么太神奇的,不过,有时候会遇到非常大或者非常小的浮点数,这时候通常会使用一种叫做“科学记数法”的方式表示。

>>> 9.8 ** -7.2
7.297468937055047e-08

在这个例子中,e-08表示的是10的-8次方,这就是科学记数法。当然,也可以直接使用这种方法写数字。

>>> a = 2e3
>>> a
2000.0

前面说到大整数问题的时候,Python帮我们解决了棘手的问题,使得整数可以无限大,但是,浮点数跟整数不同,它存在上限和下限,如果超出了上下的范围,就会出现溢出问题了。也就是说,如果计算的结果太大或者太小,乃至与已经不在Python的浮点数范围之内,就会有溢出错误。

>>> 500.0 ** 100000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: (34, 'Numerical result out of range')

请注意看刚才报错的信息,“out fo range”,就是超出了范围,溢出。所以,在计算中,如果遇到了浮点数,就要小心行事了。对于这种溢出,需要你在编写程序的时候处理,并担当相应的责任。

当然,也要看看Python 3中的结果如何:

>>> 500.0 ** 100000
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    500.0 ** 100000
OverflowError: (34, 'Result too large')

浮点数总要小心,它会因为“too large”而“out of range”。更要学会阅读程序中的报错信息,因为后面还会用到,比如除法。


总目录   |   上节:集成开发环境   |   下节:除法

如果你认为有必要打赏我,请通过支付宝:[email protected],不胜感激。

results matching ""

    No results matching ""