一提到計(jì)算機(jī),當(dāng)然現(xiàn)在更多人把她叫做電腦,這兩個(gè)詞都是指computer。不管什么,只要提到她,普遍都會(huì)想到她能夠比較快地做加減乘除,甚至乘方開方等。乃至于,有的人在口語(yǔ)中區(qū)分不開計(jì)算機(jī)和計(jì)算器。
有一篇名為《計(jì)算機(jī)前世》的文章,這樣講到:
還是先來(lái)看看計(jì)算機(jī)(computer)這個(gè)詞是怎么來(lái)的。 英文學(xué)得好的小伙伴看到這貨,computer 第一反應(yīng)好像是:“compute-er”是吧,應(yīng)該是個(gè)什么樣的人就對(duì)了,就是啊,“做計(jì)算的人”。 叮咚!恭喜你答對(duì)了。 最先被命名為 computer 的確實(shí)是人。也就是說(shuō),電子計(jì)算機(jī)(與早期的機(jī)械計(jì)算機(jī))被給予這個(gè)名字是因?yàn)樗麄儓?zhí)行的是此前被分配到人的工作。 “計(jì)算機(jī)”原來(lái)是工作崗位,它被用來(lái)定義一個(gè)工種,其任務(wù)是執(zhí)行計(jì)算諸如導(dǎo)航表,潮汐圖表,天文歷書和行星的位置要求的重復(fù)計(jì)算。從事這個(gè)工作的人就是 computer,而且大多是女神!
原文還附有如下圖片:
所以,以后要用第三人稱來(lái)稱呼computer,請(qǐng)用she(她)?,F(xiàn)在你明白為什么程序員中那么多“他”了吧,因?yàn)閏omputer是“她”。
在python中,對(duì)數(shù)的規(guī)定比較簡(jiǎn)單,基本在小學(xué)數(shù)學(xué)水平即可理解。
那么,做為零基礎(chǔ)學(xué)習(xí)這,也就從計(jì)算小學(xué)數(shù)學(xué)題目開始吧。因?yàn)閺倪@里開始,數(shù)學(xué)的基礎(chǔ)知識(shí)列位肯定過(guò)關(guān)了。
>>> 3
3
>>> 3333333333333333333333333333333333333333
3333333333333333333333333333333333333333L
>>> 3.222222
3.222222
上面顯示的是在交互模式下,如果輸入3,就顯示了3,這樣的數(shù)稱為整數(shù),這個(gè)稱呼和小學(xué)數(shù)學(xué)一樣。
如果輸入一個(gè)比較大的數(shù),第二個(gè),那么多個(gè)3組成的一個(gè)整數(shù),在python中稱之為長(zhǎng)整數(shù)。為了表示某個(gè)數(shù)是長(zhǎng)整數(shù),python會(huì)在其末尾顯示一個(gè)L。其實(shí),現(xiàn)在的python已經(jīng)能夠自動(dòng)將輸入的很大的整數(shù)視為長(zhǎng)整數(shù)了。你不必在這方面進(jìn)行區(qū)別。
第三個(gè),在數(shù)學(xué)里面稱為小數(shù),這里你依然可以這么稱呼,不過(guò)就像很多編程語(yǔ)言一樣,習(xí)慣稱之為“浮點(diǎn)數(shù)”。至于這個(gè)名稱的由來(lái),也是有點(diǎn)說(shuō)道的,有興趣可以google.
上述舉例中,可以說(shuō)都是無(wú)符號(hào)(或者說(shuō)是非負(fù)數(shù)),如果要表示負(fù)數(shù),跟數(shù)學(xué)中的表示方法一樣,前面填上負(fù)號(hào)即可。
值得注意的是,我們這里說(shuō)的都是十進(jìn)制的數(shù)。
除了十進(jìn)制,還有二進(jìn)制、八進(jìn)制、十六進(jìn)制都是在編程中可能用到的,當(dāng)然用六十進(jìn)制的時(shí)候就比較少了(其實(shí)時(shí)間記錄方式就是典型的六十進(jìn)制)。
具體每個(gè)數(shù)字,在Python中都是一個(gè)對(duì)象,比如前面輸入的3,就是一個(gè)對(duì)象。每個(gè)對(duì)象,在內(nèi)存中都有自己的一個(gè)地址,這個(gè)就是它的身份。
>>> id(3)
140574872
>>> id(3.222222)
140612356
>>> id(3.0)
140612356
>>>
用內(nèi)建函數(shù)id()可以查看每個(gè)對(duì)象的內(nèi)存地址,即身份。
內(nèi)建函數(shù),英文為built-in Function,讀者根據(jù)名字也能猜個(gè)八九不離十了。不錯(cuò),就是Python中已經(jīng)定義好的內(nèi)部函數(shù)。
以上三個(gè)不同的數(shù)字,是三個(gè)不同的對(duì)象,具有三個(gè)不同的內(nèi)存地址。特別要注意,在數(shù)學(xué)上,3和3.0是相等的,但是在這里,它們是不同的對(duì)象。 用id()得到的內(nèi)存地址,是只讀的,不能修改。
了解了“身份”,再來(lái)看“類型”,也有一個(gè)內(nèi)建函數(shù)供使用type()。
>>> type(3)
<type 'int'>
>>> type(3.0)
<type 'float'>
>>> type(3.222222)
<type 'float'>
用內(nèi)建函數(shù)能夠查看對(duì)象的類型。,說(shuō)明3是整數(shù)類型(Interger);則告訴我們那個(gè)對(duì)象是浮點(diǎn)型(Floating point real number)。與id()的結(jié)果類似,type()得到的結(jié)果也是只讀的。
至于對(duì)象的值,在這里就是對(duì)象本身了。
看來(lái)對(duì)象也不難理解。請(qǐng)保持自信,繼續(xù)。
僅僅寫出3、4、5是遠(yuǎn)遠(yuǎn)不夠的,在編程語(yǔ)言中,經(jīng)常要用到“變量”和“數(shù)”(在python中嚴(yán)格來(lái)講是對(duì)象)建立一個(gè)對(duì)應(yīng)關(guān)系。例如:
>>> x = 5
>>> x
5
>>> x = 6
>>> x
6
在這個(gè)例子中,x = 5
就是在變量(x)和數(shù)(5)之間建立了對(duì)應(yīng)關(guān)系,接著又建立了x與6之間的對(duì)應(yīng)關(guān)系。我們可以看到,x先“是”5,后來(lái)“是”6。
在python中,有這樣一句話是非常重要的:對(duì)象有類型,變量無(wú)類型。怎么理解呢?
首先,5、6都是整數(shù),python中為它們?nèi)×艘粋€(gè)名字,叫做“整數(shù)”類型的數(shù)據(jù),或者說(shuō)數(shù)據(jù)類型是整數(shù),用int表示。
當(dāng)我們?cè)趐ython中寫入了5、6,computer姑娘就自動(dòng)在她的內(nèi)存中某個(gè)地方給我們建立這兩個(gè)對(duì)象(對(duì)象的定義后面會(huì)講,這里你先用著,逐漸就明晰含義了),就好比建造了兩個(gè)雕塑,一個(gè)是形狀似5,一個(gè)形狀似6,這就兩個(gè)對(duì)象,這兩個(gè)對(duì)象的類型就是int.
那個(gè)x呢?就好比是一個(gè)標(biāo)簽,當(dāng)x = 5
時(shí),就是將x這個(gè)標(biāo)簽拴在了5上了,通過(guò)這個(gè)x,就順延看到了5,于是在交互模式中,>>> x
輸出的結(jié)果就是5,給人的感覺似乎是x就是5,事實(shí)是x這個(gè)標(biāo)簽貼在5上面。同樣的道理,當(dāng)x = 6
時(shí),標(biāo)簽就換位置了,貼到6上面。
所以,這個(gè)標(biāo)簽x沒有類型之說(shuō),它不僅可以貼在整數(shù)類型的對(duì)象上,還能貼在其它類型的對(duì)象上,比如后面會(huì)介紹到的str(字符串)類型的對(duì)象等等。
這是python區(qū)別于一些語(yǔ)言非常重要的地方。
按照下面要求,在交互模式中運(yùn)行,看看得到的結(jié)果和用小學(xué)數(shù)學(xué)知識(shí)運(yùn)算之后得到的結(jié)果是否一致
>>> 2+5
7
>>> 5-2
3
>>> 10/2
5
>>> 5*2
10
>>> 10/5+1
3
>>> 2*3-4
2
上面的運(yùn)算中,分別涉及到了四個(gè)運(yùn)算符號(hào):加(+)、減(-)、乘(*)、除(/)
另外,我相信看官已經(jīng)發(fā)現(xiàn)了一個(gè)重要的公理:
在計(jì)算機(jī)中,四則運(yùn)算和小學(xué)數(shù)學(xué)中學(xué)習(xí)過(guò)的四則運(yùn)算規(guī)則是一樣的
要不說(shuō)人是高等動(dòng)物呢,自己發(fā)明的東西,一定要繼承自己已經(jīng)掌握的知識(shí),別跟自己的歷史過(guò)不去。偉大的科學(xué)家們,在當(dāng)初設(shè)計(jì)計(jì)算機(jī)的時(shí)候就想到列位現(xiàn)在學(xué)習(xí)的需要了,一定不能讓后世子孫再學(xué)新的運(yùn)算規(guī)則,就用小學(xué)數(shù)學(xué)里面的好了。感謝那些科學(xué)家先驅(qū)者,澤被后世。
下面計(jì)算三個(gè)算術(shù)題,看看結(jié)果是什么
看官可能憤怒了,這么簡(jiǎn)單的題目,就不要?jiǎng)隈{計(jì)算機(jī)了,太浪費(fèi)了。
別著急,還是要運(yùn)算一下,然后看看結(jié)果,有沒有不一樣?要仔細(xì)觀察哦。
>>> 4+2
6
>>> 4.0+2
6.0
>>> 4.0+2.0
6.0
不一樣的地方是:第一個(gè)式子結(jié)果是6,這是一個(gè)整數(shù);后面兩個(gè)是6.0,這是浮點(diǎn)數(shù)。
定義1:類似4、-2、129486655、-988654、0這樣形式的數(shù),稱之為整數(shù) 定義2:類似4.0、-2.0、2344.123、3.1415926這樣形式的數(shù),稱之為浮點(diǎn)數(shù)
對(duì)這兩個(gè)的定義,不用死記硬背,google一下。記住愛因斯坦說(shuō)的那句話:書上有的我都不記憶(是這么的說(shuō)?好像是,大概意思,反正我也不記憶)。后半句他沒說(shuō),我補(bǔ)充一下:忘了就google。
似乎計(jì)算機(jī)做一些四則運(yùn)算是不在話下的,但是,有一個(gè)問(wèn)題請(qǐng)你務(wù)必注意:在數(shù)學(xué)中,整數(shù)是可以無(wú)限大的,但是在計(jì)算機(jī)中,整數(shù)不能無(wú)限大。為什么呢?(我推薦你去google,其實(shí)計(jì)算機(jī)的基本知識(shí)中肯定學(xué)習(xí)過(guò)了。)因此,就會(huì)有某種情況出現(xiàn),就是參與運(yùn)算的數(shù)或者運(yùn)算結(jié)果超過(guò)了計(jì)算機(jī)中最大的數(shù)了,這種問(wèn)題稱之為“整數(shù)溢出問(wèn)題”。
這里有一篇專門討論這個(gè)問(wèn)題的文章,推薦閱讀:整數(shù)溢出
對(duì)于其它語(yǔ)言,整數(shù)溢出是必須正視的,但是,在python里面,看官就無(wú)憂愁了,原因就是python為我們解決了這個(gè)問(wèn)題,請(qǐng)閱讀拙文:大整數(shù)相乘
ok!看官可以在IDE中實(shí)驗(yàn)一下大整數(shù)相乘。
>>> 123456789870987654321122343445567678890098876*1233455667789990099876543332387665443345566
152278477193527562870044352587576277277562328362032444339019158937017801601677976183816L
看官是幸運(yùn)的,python解憂愁,所以,選擇學(xué)習(xí)python就是珍惜光陰了。
上面計(jì)算結(jié)果的數(shù)字最后有一個(gè)L,就表示這個(gè)數(shù)是一個(gè)長(zhǎng)整數(shù),不過(guò),看官不用管這點(diǎn),反正是python為我們搞定了。
在結(jié)束本節(jié)之前,有兩個(gè)符號(hào)需要看官牢記(不記住也沒關(guān)系,可以隨時(shí)google,只不過(guò)記住后使用更方便)
可以用一個(gè)命令:type(object)來(lái)檢測(cè)一個(gè)數(shù)是什么類型。
>>> type(4)
<type 'int'> #4是int,整數(shù)
>>> type(5.0)
<type 'float'> #5.0是float,浮點(diǎn)數(shù)
type(988776544222112233445566778899887766554433221133344455566677788998776543222344556678)
<type 'long'> #是長(zhǎng)整數(shù),也是一個(gè)整數(shù)
更多建議: