鍍金池/ 教程/ Python/ 數(shù)和四則運(yùn)算
標(biāo)準(zhǔn)庫 (4)
如何成為 Python 高手
標(biāo)準(zhǔn)庫 (6)
標(biāo)準(zhǔn)庫 (3)
類(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習(xí)
列表(3)
從小工到專家
除法
錯(cuò)誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準(zhǔn)備
函數(shù)練習(xí)
標(biāo)準(zhǔn)庫 (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫一個(gè)簡單的程序
將數(shù)據(jù)存入文件
語句(5)
SQLite 數(shù)據(jù)庫
集成開發(fā)環(huán)境(IDE)
集合(1)
類(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語句(4)
錯(cuò)誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標(biāo)準(zhǔn)庫 (1)
生成器
mysql 數(shù)據(jù)庫 (1)
第三方庫
實(shí)戰(zhàn)
運(yùn)算符
類(3)
字典(2)
語句(1)
數(shù)和四則運(yùn)算
語句(2)
文件(2)
MySQL 數(shù)據(jù)庫 (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫 (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫模塊
用 tornado 做網(wǎng)站 (1)
標(biāo)準(zhǔn)庫 (5)
函數(shù)(4)
類(5)
字符串(2)
關(guān)于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學(xué)函數(shù)和運(yùn)算優(yōu)先級(jí)
字符串(3)
為計(jì)算做準(zhǔn)備
多態(tài)和封裝
類(4)
迭代
語句(3)
錯(cuò)誤和異常 (3)
分析 Hello
Python 安裝
標(biāo)準(zhǔn)庫 (2)
列表(2)
元組

數(shù)和四則運(yùn)算

一提到計(jì)算機(jī),當(dāng)然現(xiàn)在更多人把她叫做電腦,這兩個(gè)詞都是指 computer。不管什么,只要提到她,普遍都會(huì)想到她能夠比較快地做加減乘除,甚至乘方開方等。乃至于,有的人在口語中區(qū)分不開計(jì)算機(jī)和計(jì)算器。

有一篇名為《計(jì)算機(jī)前世》的文章,這樣講到:

還是先來看看計(jì)算機(jī)(computer)這個(gè)詞是怎么來的。 英文學(xué)得好的小伙伴看到這貨,computer 第一反應(yīng)好像是:“compute-er”是吧,應(yīng)該是個(gè)什么樣的人就對(duì)了,就是啊,“做計(jì)算的人”。 叮咚!恭喜你答對(duì)了。 最先被命名為 computer 的確實(shí)是人。也就是說,電子計(jì)算機(jī)(與早期的機(jī)械計(jì)算機(jī))被給予這個(gè)名字是因?yàn)樗麄儓?zhí)行的是此前被分配到人的工作。 “計(jì)算機(jī)”原來是工作崗位,它被用來定義一個(gè)工種,其任務(wù)是執(zhí)行計(jì)算諸如導(dǎo)航表,潮汐圖表,天文歷書和行星的位置要求的重復(fù)計(jì)算。從事這個(gè)工作的人就是 computer,而且大多是女神!

原文還附有如下圖片:

http://wiki.jikexueyuan.com/project/start-learning-python/images/10201.jpg" alt="" />

所以,以后要用第三人稱來稱呼 computer,請(qǐng)用 she(她)。現(xiàn)在你明白為什么程序員中那么多“他”了吧,因?yàn)?computer 是“她”。

數(shù)

在 Python 中,對(duì)數(shù)的規(guī)定比較簡單,基本在小學(xué)數(shù)學(xué)水平即可理解。

那么,做為零基礎(chǔ)學(xué)習(xí)這,也就從計(jì)算小學(xué)數(shù)學(xué)題目開始吧。因?yàn)閺倪@里開始,數(shù)學(xué)的基礎(chǔ)知識(shí)列位肯定過關(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 中稱之為長整數(shù)。為了表示某個(gè)數(shù)是長整數(shù),Python 會(huì)在其末尾顯示一個(gè)L。其實(shí),現(xiàn)在的 Python 已經(jīng)能夠自動(dòng)將輸入的很大的整數(shù)視為長整數(shù)了。你不必在這方面進(jìn)行區(qū)別。

第三個(gè),在數(shù)學(xué)里面稱為小數(shù),這里你依然可以這么稱呼,不過就像很多編程語言一樣,習(xí)慣稱之為“浮點(diǎn)數(shù)”。至于這個(gè)名稱的由來,也是有點(diǎn)說道的,有興趣可以 google.

上述舉例中,可以說都是無符號(hào)(或者說是非負(fù)數(shù)),如果要表示負(fù)數(shù),跟數(shù)學(xué)中的表示方法一樣,前面填上負(fù)號(hào)即可。

值得注意的是,我們這里說的都是十進(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)存地址,是只讀的,不能修改。

了解了“身份”,再來看“類型”,也有一個(gè)內(nèi)建函數(shù)供使用type()。

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

用內(nèi)建函數(shù)能夠查看對(duì)象的類型。<type ‘int’>,說明 3 是整數(shù)類型(Interger);<type ‘float’>則告訴我們那個(gè)對(duì)象是浮點(diǎn)型(Floating point real number)。與 id()的結(jié)果類似,type()得到的結(jié)果也是只讀的。

至于對(duì)象的值,在這里就是對(duì)象本身了。

看來對(duì)象也不難理解。請(qǐng)保持自信,繼續(xù)。

變量

僅僅寫出 3、4、5 是遠(yuǎn)遠(yuǎn)不夠的,在編程語言中,經(jīng)常要用到“變量”和“數(shù)”(在 Python 中嚴(yán)格來講是對(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,后來“是”6。

在 Python 中,有這樣一句話是非常重要的:對(duì)象有類型,變量無類型。怎么理解呢?

首先,5、6 都是整數(shù),Python 中為它們?nèi)×艘粋€(gè)名字,叫做“整數(shù)”類型的數(shù)據(jù),或者說數(shù)據(jù)類型是整數(shù),用 int 表示。

當(dāng)我們?cè)?Python 中寫入了 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 上了,通過這個(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 沒有類型之說,它不僅可以貼在整數(shù)類型的對(duì)象上,還能貼在其它類型的對(duì)象上,比如后面會(huì)介紹到的 str(字符串)類型的對(duì)象等等。

這是 Python 區(qū)別于一些語言非常重要的地方。

四則運(yùn)算

按照下面要求,在交互模式中運(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í)過的四則運(yùn)算規(guī)則是一樣的

要不說人是高等動(dòng)物呢,自己發(fā)明的東西,一定要繼承自己已經(jīng)掌握的知識(shí),別跟自己的歷史過不去。偉大的科學(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é)果是什么

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

看官可能憤怒了,這么簡單的題目,就不要?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 一下。記住愛因斯坦說的那句話:書上有的我都不記憶(是這么的說?好像是,大概意思,反正我也不記憶)。后半句他沒說,我補(bǔ)充一下:忘了就 google。

似乎計(jì)算機(jī)做一些四則運(yùn)算是不在話下的,但是,有一個(gè)問題請(qǐng)你務(wù)必注意:在數(shù)學(xué)中,整數(shù)是可以無限大的,但是在計(jì)算機(jī)中,整數(shù)不能無限大。為什么呢?(我推薦你去 google,其實(shí)計(jì)算機(jī)的基本知識(shí)中肯定學(xué)習(xí)過了。)因此,就會(huì)有某種情況出現(xiàn),就是參與運(yùn)算的數(shù)或者運(yùn)算結(jié)果超過了計(jì)算機(jī)中最大的數(shù)了,這種問題稱之為“整數(shù)溢出問題”。

整數(shù)溢出問題

這里有一篇專門討論這個(gè)問題的文章,推薦閱讀:整數(shù)溢出

對(duì)于其它語言,整數(shù)溢出是必須正視的,但是,在 Python 里面,看官就無憂愁了,原因就是 Python 為我們解決了這個(gè)問題,請(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è)長整數(shù),不過,看官不用管這點(diǎn),反正是 Python 為我們搞定了。

在結(jié)束本節(jié)之前,有兩個(gè)符號(hào)需要看官牢記(不記住也沒關(guān)系,可以隨時(shí) google,只不過記住后使用更方便)

  • 整數(shù),用 int 表示,來自單詞:integer
  • 浮點(diǎn)數(shù),用 float 表示,就是單詞:float

可以用一個(gè)命令:type(object)來檢測(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'>   # 是長整數(shù),也是一個(gè)整數(shù)

總目錄   |   上節(jié):集成開發(fā)環(huán)境   |   下節(jié):除法

如果你認(rèn)為有必要打賞我,請(qǐng)通過支付寶:qiwsir@126.com,不勝感激。

上一篇:類(1)下一篇:生成器