破解密碼那些事兒(chapter 3,初識Python,下)

值必有類型

之前我們說的整形數(shù)浮點數(shù)其實是一種數(shù)據(jù)類型。每一個程序能認識的值都有類型。比如42就是一個整形數(shù),具體而言整形類型可以用int來表示;7.5是一個浮點數(shù),浮點數(shù)類型可以用float來表示。

在本書,我們學(xué)的數(shù)據(jù)類型并不多,包括下一章會學(xué)習(xí)到的string類型。到現(xiàn)在為止,為什么學(xué)習(xí)的都是值類型,值類型只是數(shù)據(jù)類型的一種,要識別一個數(shù)據(jù)的數(shù)據(jù)類型很簡單,只需要看你打出的值就是了。比如整形數(shù)木有小數(shù)點,而浮點數(shù)是一定有小數(shù)點,你就很容易理解42是整形數(shù),而42.0是浮點數(shù)了。

賦值語句與數(shù)據(jù)存儲方式

我知道你們一直很明白我說的東西,直到上一節(jié),關(guān)于值,值類型與數(shù)據(jù)類型的東西,這些基本的概念一定得明白,這一節(jié)希望能從計算機工作原理來和大家講述。

當(dāng)我們使用了估值表達式之后,程序會把他們推演到一個值,但是如何把他們存儲下來呢?通常計算機把這些東西存儲到變量里頭。

為了更好的理解變量這個東西,我們假象一個盒子出來,這個盒子放著要存儲的值。通常一個變量需要通過用=號連接的表達式來傳遞這個值,稱為賦值。比如我要把15這個值存到名叫“spam”的變量里頭去,我們只需要寫spam=15:

你可以假想變量就是那個盒子,命名為spam(貼在盒子上,你可以寫別的名字貼上去),里面裝著一個15的值,就好像一張寫著15的小紙片一樣。

在命令行上敲入這句代碼回車后,你看不到任何的響應(yīng),只有一個空行。除非出現(xiàn)了錯誤,顯示的是錯誤語句,你可以認為這些指令已經(jīng)成功執(zhí)行。出現(xiàn)了>>>后你可以敲下一個指令了。

一個帶有=的賦值語句做了什么事情呢?首先,創(chuàng)建了一個名叫spam的變量,然后存儲了值為15的數(shù)據(jù)。和估值表達式不同,語句是一種指令性的操作,不會去做估值計算的事情,僅僅是完成某項操作,所以這就是為什么命令行執(zhí)行完命令后沒有回應(yīng)的原因了。

看到這里,各位看官可能會迷惑,啥是表達式,啥是語句呢?請記住,如果Python的程序能推到出一個值的時候那就是表達式,如果不是,就是語句。(老外還是迷糊,不過有些東西一句話未必能講清楚,慢慢看)

一個賦值語句的格式是這樣的,一個變量名,后面跟著=,然后是一個表達式。這個表達式計算出來的值就會存到這個變量里頭。

要記住,變量存儲的永遠只是一個值,而不是表達式,再復(fù)雜的表達式最終都會推演出一個值,不然程序就掛了。比如,我們有這樣一個語句spam=10+5,表達式10+5會被計算為15,然后15就會被存儲到spam里頭。賦值語句中的變量如果是第一次出現(xiàn),那么程序會先創(chuàng)建這個變量,然后把值存進去。

這里有個有意思的東西,如果我們輸入spam+5的時候,命令行會返回20

看起來有點奇怪,不過你還記得我們之前已經(jīng)給spam這個變量賦值15了,表達式spam+15就會被估值計算為15+5,然后把結(jié)果20送回。在表達式里頭,那些變量的值會被提取出來,參與計算。(所以表達式不是僅僅是兩個值類型的數(shù)做運算)

變量覆蓋

(不要吐槽這個小標(biāo)題,因為你知道么當(dāng)年就關(guān)于這個詞應(yīng)該怎么表達,我們都吵了幾個星期,最后才定下來的)

當(dāng)一個變量已經(jīng)賦過值,但是需要改動這個變量的值的時候,這就是變量覆蓋了。請看例子:

第一次我們輸入spam+5的時候,結(jié)果返回是20,因為spam里頭我們存儲的是15.但是我們執(zhí)行了spam=3的時候,原來存在spam的值就變成了3,意味著15被3覆蓋了。所以,你再次執(zhí)行spam+5的時候,返回值就是8,這個時候spam+5就相當(dāng)于3+5,spam的舊值已經(jīng)不見了。

想知道現(xiàn)在某個變量的值是多少,只需要在命令行里頭敲入該變量就是了

你可能會感到迷惑,為什么一個變量也可以是一個表達式?原因就是這樣,變量存儲的東西可以被取出變成一個表達式,還記得以前一個整型值就是一個表達式的概念么?

延伸一下,我們不妨考慮一下,在賦值語句的時候,在表達式一端也用上我們的變量:

這句話spam=spam+5的意思其實就是說,spam的新值等于當(dāng)前值加上5。記住等號的左邊是要賦值的變量,等號的右邊的要計算的表達式。通過這個方式我們可以讓spam持續(xù)的增長:

使用多個變量

其實,在我們的程序里頭,通常都會有很多變量,你想要多少就有多少。比如,我們給以下兩個變量fizz和eggs賦值:

此時,fizz的值是10,而eggs的值是15.


讓我們嘗試給變量spam賦個新值,敲入spam=fizz+eggs,回車之后再敲入spam,看看命令后輸出什么:

也就是說spam的值已經(jīng)變成25了,是因為我們表達式fizz+eggs已經(jīng)告訴計算機把存在變量里頭的值拿出來相加了。

變量名

名字對我們很重要,但是對計算機來說,他們是不關(guān)心的。給變量命名反映的不僅是值的數(shù)據(jù)類型,更重要的是讓人更明白程序的運行機制。比起name這樣無意義的變量名來說,我們更應(yīng)該用abrahamLincoln或者monkey這樣的名字。雖然無論你怎么命名,只要程序?qū)憣α耍嬎銠C都會正確運行。

對于Python來說,變量名也是大小寫敏感的(對Python而言,所有出現(xiàn)字符的時候都是大小寫敏感的)。大小寫敏感意味著,拼寫相同變量,只要某個字符大小寫不一樣,那就會被認為是不同的變量。所以spam,SPAM,Spam和sPAM就是4個獨立的不相干的變量,存儲著各自的不同的值。

實話說,在一個程序里頭,拼寫相同但是大小寫不同的變量是不應(yīng)該出現(xiàn)的,那么做會是個災(zāi)難。比如你把你的姓存在變量NAME,把名字存在變量name中,你剛開始寫這個程序的時候,你會很清楚,但是過后你要重新閱讀的時候,你就會抓狂了。

Camel Case

(這個沒法翻譯,這就是個名字,翻譯成駱駝風(fēng)格,整個人都不好了)這個命名風(fēng)格要求如果變量里頭包含了多個英文單詞的時候,最好把這個單詞的首字母大寫。請看例子,比如我要命名一個這樣的變量whatIHadForBreakfast,來存儲我早餐吃了什么,是不是比whatihadforbreakfast好多了。這就是Camel Case,為什么叫駱駝風(fēng)格呢,你看那些夾雜著大寫的變量名是不是很像駝峰(哈哈哈,這就是西方的幽默,我也不知道哪里好笑)。這是一個在Python里頭很方便也很常用的東西,雖然你可以不這么做,但是做事情要有規(guī)矩,命名也就是個規(guī)矩。多個單詞組成的變量,從第二個單詞開始首字母大寫會大大增強代碼的可讀性(納尼,我的程序為什么要給人家讀,小樣的,不然你以后自己讀起來也痛苦)。

作業(yè)時間

1.下面的代碼輸出的是啥?

>>> spam = 20

>>> spam

2.下面的代碼輸出的又是啥?

>>> spam = 20

>>> spam = 30

>>> spam

3.下面的代碼輸出的又是啥?

>>> spam? 20

>>> spam = spam + 20

>>> spam

4.下面的代碼輸出的又是啥?

>>> spam = 20

>>> spam + 20

40

>>> spam

5.下面的代碼輸出的又是啥?

>>> spam = 20

>>> SPAM = 30

>>> spam

6.下面的代碼輸出的又是啥?

>>> spam =

7.下面的代碼輸出的又是啥?

>>> monkeyplumber

8.下面的代碼那些是表達式,那些是語句?

>>> 2 + 2

4

>>> spam = 42

9.下面的代碼那些是表達式還是語句?

>>> 5

5

答案:1.20;2.30;3.40;4.20;5.20;6.程序會出錯,因為變量賦值語句缺失值;

7.程序出錯,因為變量沒有定義;8.2+2是表達式,spam=42是語句;9.表達式

為何破解密碼的內(nèi)容還未到?

很快就到了,我們不會學(xué)太多的預(yù)備知識,我們還有一個章節(jié)編程的內(nèi)容需要學(xué)習(xí).

本章節(jié)你學(xué)到了Python語言的基本的編程知識,以及如何在命令行里頭執(zhí)行代碼.Python語言需要你告訴計算機應(yīng)該怎么去做,計算機沒有常識不會明白你的言語,只能通過一些簡單的指令去工作.你已經(jīng)學(xué)習(xí)了估值表達式,這個東東就是值和操作符號(正如+和-)的集合.同時你知道了你如何能把某個值存到變量里頭,以便下次使用.

命令行是學(xué)習(xí)Python一個很有用的工具,因為每次你敲了語句都可以看到執(zhí)行的結(jié)果.讓我們到下一個章節(jié),掌握了更多的基礎(chǔ)知識,你就可以完成你的第一個程序了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內(nèi)容