簡明Python教程·第一步
上一篇專欄


第一步
接下來我們將看見如何在 Python 中運行一個傳統(tǒng)的“Hello World”程序。本章將會教你如何編 寫、保存與運行 Python 程序。
通過 Python 來運行的你的程序有兩種方法——使用交互式解釋器提示符或直接運行一個源代 碼文件。我們將了解如何使用他們二者的功能。
使用解釋器提示符?
在你的操作系統(tǒng)中打開終端(Terminal)程序(正如我們先前在 安裝 章節(jié)所討論過的那樣) 然后通過輸入 python3 并按下 [enter] 鍵來打開 Python 提示符(Python Prompt)。?
當你啟動 Python 后,你會看見在你能開始輸入內(nèi)容的地方出現(xiàn)了 >>> 。這個被稱作 Python 解釋器提示符(Python Interpreter Prompt) 。
在 Python 解釋器提示符,輸入:
在輸入完成后按下 [enter] 鍵。你將會看到屏幕上打印出 Hello World 字樣。
下面是一個在 Mac OS X 電腦上你能夠看見的結(jié)果的示例。有關(guān) Python 軟件的細節(jié)將會因為 你使用的電腦而有所不同,但是從提示符(如 >>> )開始部分應(yīng)該是相同的,而不會受到操 作系統(tǒng)的影響。
你自然會注意到,Python 會立即給你輸出了一行結(jié)果!你剛才所輸入的便是一句獨立的 Python 語句 。我們使用 print (不必太過驚訝)命令來打印你所提供的信息。在這里,我 們提供了文本 Hello World ,然后它便被迅速地打印到了屏幕上。
如何退出解釋器提示符?
如果你正在使用一款 GNU/Linux 或 OS X 上的 Shell 程序,你可以通過按下 [ctrl + d] 組 合鍵或是輸入 exit() (注意:要記住要包含括號 () )并敲下 [enter] 來退出解釋器提示符。
如果你使用的是 Windows 命令提示符,可以按下 [ctrl + z] 組合鍵并敲擊 [enter] 鍵來 退出。?
選擇一款編輯器?
當我們希望運行某些程序時,總不能每次都在解釋器提示符中輸入我們的程序。因此我們需 要將它們保存為文件,從而我們便可以多次地運行這些程序。
要想創(chuàng)建我們的 Python 源代碼文件,我們需要一款能夠讓你輸入并保存代碼的編輯器軟件。 一款優(yōu)秀的面向程序員的編輯器能夠幫助你的編寫源代碼文件工作變得輕松得多。故而選擇 一款編輯器確實至關(guān)重要。你要像挑選你想要購買的汽車一樣挑選你的編輯器。一款優(yōu)秀的 編輯器能夠幫助你更輕松地編寫 Python 程序,使你的編程之旅更加舒適,并助你找到一條更 加安全且快速的道路到達你的目的地(實現(xiàn)你的目標)。
對編輯器的一項最基本要求為 語法高亮 ,這一功能能夠通過標以不同顏色來幫助你區(qū)分 Python 程序中的不同部分,從而能夠讓你更好 看清 你的程序,并使它的運行模式更加形象 化。
如果你對應(yīng)從哪開始還沒有概念,我推薦你使用 PyCharm 教育版 軟件,它在 Windows、 Mac OS X、GNU/Linux 上都可以運行。在下一節(jié)你能夠了解到更多信息。
如果你正在使用 Windows 系統(tǒng),不要用記事本——這是一個很糟糕的選擇,因為它沒有語法 加亮功能,同樣重要的另一個原因是,它不支持文本縮進功能,這一功能我們之后將會了解 它究竟有多重要。而一款好的編輯器能夠自動幫你完成這一工作。
如果你已是一名經(jīng)驗豐富的程序員,那你一定在用 Vim 或 Emacs 了。無需多言,它們都是最 強大的編輯器之一,用它們來編寫你的 Python 程序自是受益頗多。我個人用它們來編寫了我 大部分程序,同時也因此寫了一本書《Entire Book on Vim》。?
或許你有意去花費時間來學(xué)習(xí) Vim 或 Emacs,那么我自是強烈推薦你學(xué)習(xí)它們二者中的一 款,它們將在長遠意義上對你裨益頗深。當然,正如我先前所推薦的,初學(xué)者可以以 PyCharm 開始,從而在此刻專注于學(xué)習(xí) Python 而不是編輯器。
再此重申,請選擇一款合適的編輯器——它能夠讓編寫 Python 程序變得更加有趣且容易。
PyCharm?
PyCharm 教育版?是一款能夠?qū)δ憔帉?Python 程序的工作有所幫助的免費編輯器。
當你打開 PyCharm 時,你會看見如下界面,點擊 Create New Project :

選擇 Pure Python :

將你的項目路徑位置中的 untitled 更改為 helloworld ,你所看到的界面細節(jié)應(yīng)該類似于下方這番:

點擊 Create 按鈕。
對側(cè)邊欄中的 helloworld 右擊選中,并選擇 New -> Python File :

你會被要求輸入名字,現(xiàn)在輸入 hello :

現(xiàn)在你便可以看見一個新的文件已為你開啟:

刪除那些已存在的內(nèi)容,現(xiàn)在由你自己輸入以下代碼:
現(xiàn)在右擊你所輸入的內(nèi)容(無需選中文本),然后點擊 Run 'hello' 。

此刻你將會看到你的程序所輸出的內(nèi)容(它所打印出來的內(nèi)容):

嚯!雖然只是剛開始的幾個步驟,但從今以后,每當我們要求你創(chuàng)建一個新的文件時,記住 只需在 helloworld 上右擊并選擇 -> New -> Python File 并繼續(xù)如上所述步驟一般輸入內(nèi) 容并運行即可。
你可以在 PyCharm Quickstart 頁面找到有關(guān) PyCharm 的更多信息。
Vim
1. 安裝 Vim。
Mac OS X 應(yīng)該通過 HomeBrew 來安裝 macvim 包。
Windows 用戶應(yīng)該通過 Vim 官方網(wǎng)站 下載“自安裝可執(zhí)行文件”。
GNU/Linux 用戶應(yīng)該通過他們使用的發(fā)行版的軟件倉庫獲取 Vim。例如 Debian 與 Ubuntu 用戶可以安裝 vim 包。
2. 安裝 jedi-vim 插件為 Vim 增添自動完成功能。?
3. 安裝與之相應(yīng)的 jedi Python 包: pip install -U jedi?
Emacs?
1. 安裝 Emacs 24+。
Mac OS X 用戶應(yīng)該從 http://emacsformacosx.com 獲取 Emacs。
Windows 用戶應(yīng)該從 http://ftp.gnu.org/gnu/emacs/windows/ 獲取 Emacs。?
GNU/Linux 用戶應(yīng)該從他們使用的發(fā)行版的軟件倉庫獲取 Emacs。如 Debian 和 Ubuntu 用戶可以安裝 emacs24 包。
2. 安裝 ELPY。
使用一份源代碼文件?
現(xiàn)在讓我們回到編程中來。在你學(xué)習(xí)一門新的編程語言時有一項傳統(tǒng),你所編寫并運行的第 一個程序應(yīng)該是 “Hello World” 程序——它所做的全部工作便是宣言你所運行的“Hello World”這句話。正如西蒙·科澤斯(Simon Cozens,一譯西蒙·寇森斯) 所說,這是“向編程 之神所稱頌的傳統(tǒng)咒語,愿他幫助并保佑你更好的學(xué)習(xí)這門語言”。?
啟動你所選擇的編輯器,輸入如下程序并將它保存為 hello.py 。?
如果你正在使用 PyCharm,我們已經(jīng)討論過如何從源文件中運行它了。
對于其它編輯器,打開一個新文件名將其命名為 hello.py ,然后輸入如下內(nèi)容:
你應(yīng)當將文件保存到哪里?保存到任何你知道其位置與路徑的文件夾。如果你不了解這句話 是什么意思,那就創(chuàng)建一個新文件夾并用這一路徑來保存并運行你所有的 Python 程序:
Mac OS X 上的 /tmp/py 。
GNU/Linux 上的 /tmp/py 。?
Windows 上的 C:\\py 。
要想創(chuàng)建上述文件夾(在你正在使用的操作系統(tǒng)上),你可以在終端上使用 mkdir 命令,如 mkdir /tmp/py 。
重要提示:你需要經(jīng)常確認并確保你為文件賦予了 .py 擴展名,例如 foo.py 。
要想運行你的 Python 程序:
1. 打開終端窗口(你可查閱先前的 安裝章節(jié)來了解應(yīng)該怎么做)。
2. 使用 cd 命令來改變目錄到你保存文件的地方,例如 cd /tmp/py 。
3. 通過輸入命令 python hello.py 來運行程序。程序的輸出結(jié)果應(yīng)如下方所示:

如果你得到了與上圖類似的輸出結(jié)果,那么恭喜你!——你已經(jīng)成功運行了你的第一個 Python 程序。你亦已經(jīng)成功穿過了學(xué)習(xí)編程的最困難的部分,也就是,開始編寫你的第一個 程序!
如果你遭遇了什么錯誤,請確認是否已經(jīng)正確地輸入了上面所列出的內(nèi)容,并嘗試重新運行 程序。要注意 Python 是區(qū)分大小寫的,如 print 和 Print 是不同的——注意前者的 p 是小寫的,而后者的 P 是大寫的。此外,你需要確保每一行的第一個字符前面都沒有任何空格 或制表格——我們會在后面了解 為什么這件事如此重要。
它是如何工作的?
一款 Python 程序是由 語句 所構(gòu)成的。在我們的第一個程序中,我們只有一條語句。在這條 語句中,我們調(diào)用 print 語句 來搭配我們提供的文本“hello world”。?
獲取幫助?
如果你需要獲得 Python 中有關(guān)任何函數(shù)或語句的快速信息,你可以使用其內(nèi)置的 help 功 能。這在使用解釋器提示符時十分有用。例如,運行 help('len') 命令——這將顯示出有關(guān) len 函數(shù)的幫助,了解其是用來計算項目數(shù)量的。?
小貼士:按下 q 鍵可以退出幫助。
類似地,你可以通過此方式獲得幾乎所有有關(guān) Python 的信息。使用 help() 命令來了解有關(guān) help 它本身的更多信息吧!
如果你需要獲得有關(guān) return 這類運算符的幫助,你需要做的就是將它們放在引號中,就像 help('return') 這般,這樣 Python 就不會混淆我們正在試圖做的事情。
總結(jié)
現(xiàn)在,你應(yīng)該可以輕松地編寫、保存并運行 Python 程序了。
從此你便成為一名 Python 用戶了,現(xiàn)在讓我們來學(xué)習(xí)更多有關(guān) Python 的概念。

基礎(chǔ)
只是打印出 hello world 肯定是不夠的,是嗎?你會希望做得比這還要多——你想要輸入一 些內(nèi)容,操縱它,然后從中得到一些輸出出來的內(nèi)容。我們可以在 Python 中通過使用變量與 常量來實現(xiàn)這一目標,在本章中我們還會學(xué)習(xí)其它的一些概念。
注釋
注釋 是任何存在于 # 號右側(cè)的文字,其主要用作寫給程序讀者看的筆記。?
舉個例子:?
或者:
你應(yīng)該在你的程序中盡可能多地使用有用的注釋:
解釋假設(shè)?
說明重要的決定?
解釋重要的細節(jié)?
說明你想要解決的問題?
說明你想要在程序中克服的問題,等等。?
代碼會告訴你怎么做,注釋會告訴你為何如此。
?這樣做對你的程序的讀者來說非常有用,他們可以很容易地理解你的程序是做什么的。請記 住,這個人可以是六個月后的你!
字面常量?
一個字面常量(Literal Constants) 的例子是諸如 5 、 1.23 這樣的數(shù)字,或者是如 這是一 串文本 或 This is a string 這樣的文本。
用這樣的稱呼是因為它們是 字面上的 ——你用的就是它字面意義上的值或是內(nèi)容。數(shù)字 2 總是表示它本身而非其他含義——它是一個 常量,因為它的值不能被改變。因此,所有的這 些都被稱作字面常量。
數(shù)字
數(shù)字主要分為兩種類型——整數(shù)(Integers)與浮點數(shù)(Floats)。?
有關(guān)整數(shù)的例子即 2 ,它只是一個整數(shù)。
有關(guān)浮點數(shù)(Floating Point Numbers,在英文中也會簡寫為 floats )的例子是 3.23 或 52.3E-4 。其中, E 表示 10 的冪。在這里, 52.3E-4 表示 52.3 * 10^-4 。
針對有經(jīng)驗的程序員的提示
沒有單獨的 long 類型。 int 類型可以指任何大小的整數(shù)。
字符串?
一串字符串(String)是 字符(Characters) 的 序列(Sequence)。基本上,字符串就是一 串詞匯。
你將會在幾乎所有你撰寫的 Python 程序中使用字符串,所以對下面的部分你要多上點心。
?單引號
你可以使用單引號來指定字符串,例如 '將我這樣框進來' 或 'Quote me on this' 。?
所有引號內(nèi)的空間,諸如空格與制表符,都將按原樣保留。
雙引號?
被雙引號包括的字符串和被單引號括起的字符串其工作機制完全相同。例如 "你的名字是?" 或 "What's your name?" 。
三引號
你可以通過使用三個引號—— " " "?或 ' ' ' 來指定多行字符串。你可以在三引號之間自由地 使用單引號與雙引號。來看看這個例子:
字符串是不可變的?
這意味著一旦你創(chuàng)造了一串字符串,你就不能再改變它。盡管這看起來像是一件壞事,但實 際上并非如此。我們將會在稍后展現(xiàn)的多個程序中看到為何這一點不是一個限制。
針對 C/C++ 程序員的提示
Python 中沒有單獨的 char 數(shù)據(jù)類型。它并非切實必要,并且我相信你不會想念它的。
針對 Perl/PHP 程序員的提示
記住單引號括起的字符串和雙引號括起的字符串是一樣的——它們不存在任何區(qū)別。
格式化方法?
有時候我們會想要從其他信息中構(gòu)建字符串。這正是 format() 方法大有用武之地的地方。
將以下內(nèi)容保存為文件 str_format.py :
輸出:
它是如何工作的
一個字符串可以使用某些特定的格式(Specification),隨后, format 方法將被調(diào)用,使用 這一方法中與之相應(yīng)的參數(shù)替換這些格式。
?在這里要注意我們第一次應(yīng)用這一方法的地方,此處 {0} 對應(yīng)的是變量 name ,它是該格式 化方法中的第一個參數(shù)。與之類似,第二個格式 {1} 對應(yīng)的是變量 age ,它是格式化方法 中的第二個參數(shù)。請注意,Python 從 0 開始計數(shù),這意味著索引中的第一位是 0,第二位是 1,以此類推。
我們可以通過聯(lián)立字符串來達到相同的效果:
但這樣實現(xiàn)是很丑陋的,而且也容易出錯。其次,轉(zhuǎn)換至字符串的工作將由 format 方法自 動完成,而不是如這般需要明確轉(zhuǎn)換至字符串。再次,當時用 format 方法時,我們可以直 接改動文字而不必與變量打交道,反之亦然。?
同時還應(yīng)注意數(shù)字只是一個可選選項,所以你同樣可以寫成:
這樣做同樣能得到與前面的程序一樣的輸出結(jié)果。
?Python 中 format 方法所做的事情便是將每個參數(shù)值替換至格式所在的位置。這之中可以有 更詳細的格式,例如:
輸出:
由于我們正在討論格式問題,就要注意 print 總是會以一個不可見的“新一行”字符( \n ) 結(jié)尾,因此重復(fù)調(diào)用 print 將會在相互獨立的一行中分別打印。為防止打印過程中出現(xiàn)這一 換行符,你可以通過 end 指定其應(yīng)以空白結(jié)尾:
輸出結(jié)果如下:
或者你通過 end 指定以空格結(jié)尾:
輸出結(jié)果如下:
轉(zhuǎn)義序列?
想象一下,如果你希望生成一串包含單引號( ' )的字符串,你應(yīng)該如何指定這串字符串? 例如,你想要的字符串是 "What's your name?" 。你不能指定 'What's your name?' ,因為這會使 Python 對于何處是字符串的開始、何處又是結(jié)束而感到困惑。所以,你必須指定這個單 引號不代表這串字符串的結(jié)尾。這可以通過 轉(zhuǎn)義序列(Escape Sequence) 來實現(xiàn)。你通過 \ 來指定單引號:要注意它可是反斜杠。現(xiàn)在,你可以將字符串指定為 'What\'s your name?' 。
另一種指定這一特別的字符串的方式是這樣的: "What's your name?" ,如這個例子般使用 雙引號。類似地, 你必須在使用雙引號括起的字符串中對字符串內(nèi)的雙引號使用轉(zhuǎn)義序列。 同樣,你必須使用轉(zhuǎn)義序列 \\ 來指定反斜杠本身。
如果你想指定一串雙行字符串該怎么辦?一種方式即使用如前所述的三引號字符串,或者你 可以使用一個表示新一行的轉(zhuǎn)義序列—— \n 來表示新一行的開始。下面是一個例子:
另一個你應(yīng)該知道的大有用處的轉(zhuǎn)義序列是制表符: \t 。實際上還有很多的轉(zhuǎn)義序列,但 我必須只在此展示最重要的一些。
還有一件需要的事情,在一個字符串中,一個放置在末尾的反斜杠表示字符串將在下一行繼 續(xù),但不會添加新的一行。來看看例子:
相當于
原始字符串
如果你需要指定一些未經(jīng)過特殊處理的字符串,比如轉(zhuǎn)義序列,那么你需要在字符串前增加 r 或 R 來指定一個 原始(Raw) 字符串 。下面是一個例子:
針對正則表達式用戶的提示?
在處理正則表達式時應(yīng)全程使用原始字符串。否則,將會有大量 Backwhacking 需要處 理。舉例說明的話,反向引用可以通過 '\\1' 或 r'\1' 來實現(xiàn)。?
變量
如果只使用字面常量很快就會讓人感到無聊——我們需要一些能夠存儲任何信息并且也能操 縱它們的方式。這便是 變量(Veriables) 登場的時刻。正如其名字所述那般,變量的值是可 以變化的,也就是說,你可以用變量來存儲任何東西。變量只是你的計算機內(nèi)存中用以存儲 信息的一部分。與文字常量不同,你需要通過一些方式來訪問這些變量,因此,你需要為它 們命名。?
標識符命名?
變量是標識符的一個例子。標識符(Identifiers) 是為 某些東西 提供的給定名稱。在你命名 標識符時,你需要遵守以下規(guī)則:
第一個字符必須是字母表中的字母(大寫 ASCII 字符或小寫 ASCII 字符或 Unicode 字 符)或下劃線( _ )。
標識符的其它部分可以由字符(大寫 ASCII 字符或小寫 ASCII 字符或 Unicode 字符)、 下劃線( _ )、數(shù)字(0~9)組成。
標識符名稱區(qū)分大小寫。例如, myname 和 myName 并不等同。要注意到前者是小寫字 母 n 而后者是大寫字母 N 。
有效 的標識符名稱可以是 i 或 name_2_3 ,無效 的標識符名稱可能是 2things , this is spaced out , my-name 和 >a1b2_c3 。?
數(shù)據(jù)類型?
變量可以將各種形式的值保存為不同的數(shù)據(jù)類型(Data Type)?;镜念愋褪俏覀円呀?jīng)討論 過的數(shù)字與字符串。在后面的章節(jié)中,我們會了解如何通過 類(Classes) 類創(chuàng)建我們自己 的類型。?
對象
需要記住的是,Python 將程序中的任何內(nèi)容統(tǒng)稱為 對象(Object)。這是一般意義上的說 法。我們以“某某對象(object)”相稱,而非“某某東西(something)”。
針對面向?qū)ο缶幊陶Z言用戶的提示:
Python 是強(Strongly)面向?qū)ο蟮?,因為所有的一切都是對象?包括數(shù)字、字符串與 函數(shù)。
接下來我們將看見如何使用變量與字面常量。你需要保存以下案例并試圖運行程序。
如何編寫 Python 程序?
從今以后,保存和運行 Python 程序的標準步驟如下:
對于 PyCharm 用戶?
打開 PyCharm。
以給定的文件名創(chuàng)建新文件。
輸入案例中給出的代碼。
右鍵并運行當前文件。
注意:每當你需要提供 命令行參數(shù)(Command Line Arguments)時,點擊 Run -> Edit Configurations 并在 Script parameters: 部分輸入相應(yīng)參數(shù),并點擊 OK 按鈕:

對于其他編輯器用戶
1. 打開你選擇的編輯器。
2. 輸入案例中給出的代碼。
3. 以給定的文件名將其保存成文件。
4. 在解釋器中通過命令?python program.py?來運行程序。
案例:使用變量與字面常量
輸入并運行以下程序:
輸出:
它是如何工作的?
下面是這一程序的工作原理。首先,我們使用賦值運算符(?=?)將字面常量數(shù)值?5?賦值給 變量?i?。這一行被稱之為聲明語句(Statement)因為其工作正是聲明一些在這一情況下應(yīng) 當完成的事情:我們將變量名?i?與值?5?相連接。然后,我們通過?print?語句來打印變量?i?所聲明的內(nèi)容,這并不奇怪,只是將變量的值打印到屏幕上。?
接著,我們將?1?加到?i?變量所存儲的值中,并將得出的結(jié)果重新存儲進這一變量。爾后我 們將這一變量打印出來,并期望得到的值應(yīng)為?6?。
?類似地,我們將字面文本賦值給變量?s?,并將其打印出來。
?針對靜態(tài)編程語言程序員的提示?
變量只需被賦予某一值。不需要聲明或定義數(shù)據(jù)類型。
邏輯行與物理行?
所謂物理行(Physical Line)是你在編寫程序時 你所看到 的內(nèi)容。所謂邏輯行(Logical Line)是 Python 所看到 的單個語句。Python 會假定每一 物理行 會對應(yīng)一個 邏輯行。
有關(guān)邏輯行的一個例子是諸如?print('hello world')?這樣一句語句——如果其本身是一行 (正如你在編輯器里所看到的那樣),那么它也對應(yīng)著一行物理行。
Python 之中暗含這樣一種期望:Python 鼓勵每一行使用一句獨立語句從而使得代碼更加可 讀。
如果你希望在一行物理行中指定多行邏輯行,那么你必須通過使用分號(?;?)來明確表明邏輯 行或語句的結(jié)束。下面是一個例子:
實際上等同于
同樣可以看作
也與這一寫法相同
然而,我強烈建議你對于每一行物理行最多只寫入一行邏輯行。這個觀點就是說你不應(yīng)該使 用分號。實際上,我從未在 Python 程序中使用、甚至是見過一個分號。
在一類情況下這一方法會頗為有用:如果你有一行非常長的代碼,你可以通過使用反斜杠將 其拆分成多個物理行。這被稱作顯式行連接(Explicit Line Joining) :
輸出:
類似地,
等同于
在某些情況下,會存在一個隱含的假設(shè),允許你不使用反斜杠。這一情況即邏輯行以括號開 始,它可以是方括號或花括號,但不能是結(jié)束括號。這被稱作 隱式行連接(Implicit Line Joining)。你可以在后面當我們討論列表(List)的章節(jié)時了解這一點。
縮進
空白區(qū) 在 Python 中十分重要。實際上,空白區(qū)在各行的開頭非常重要。這被稱作 縮進 (Indentation)。在邏輯行的開頭留下空白區(qū)(使用空格或制表符)用以確定各邏輯行的縮 進級別,而后者又可用于確定語句的分組。
這意味著放置在一起的語句必須擁有相同的縮進。每一組這樣的語句被稱為 塊(block)。我 們將會在后文章節(jié)的案例中了解塊這一概念是多么重要。
有一件事你需要記住:錯誤的縮進可能會導(dǎo)致錯誤。下面是一個例子:
當你運行這一程序時,你將得到如下錯誤:
你會注意到第二行開頭有一個空格。Python 指出的錯誤信息告訴我們程序的語法是無效的, 意即,程序沒有被正確地寫入。這一信息對你的意義是 你不能任意開始一個新的語句塊(當 然,除非你一直在使用默認的主代碼塊)。你可以使用新塊的情況將會在后面諸如控制流等 章節(jié)加以介紹。
如何縮進?
使用四個空格來縮進。這是來自 Python 語言官方的建議。好的編輯器會自動為你完成這 一工作。請確保你在縮進中使用數(shù)量一致的空格,否則你的程序?qū)⒉粫\行,或引發(fā)不 期望的行為。
針對靜態(tài)編程語言程序員的提示?
Python 將始終對塊使用縮進,并且絕不會使用大括號。你可以通過運行?from __future__ import braces?來了解更多信息。
總結(jié)
現(xiàn)在我們已經(jīng)了解了諸多本質(zhì)性的細節(jié),我們可以前去了解控制流語句等更多更加有趣的東 西。記得一定要充分理解你在本章所閱讀的內(nèi)容。

下一篇專欄
