2020年10月10日星期六

001 與小卡特一起學 Python 第 1 章 出發吧

申明本站飛宇網 https://feiyetopro.blogspot.com/自網路收集整理之書籍文章影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]謝謝!



1 章 出發吧

1.1 安裝 Python

首先需要在你使用的電腦上安裝 Python

從前的美好時光


在個人電腦(PC)時代的初期,人們的日子很好過。最早的 PC 大都已經內置了一種名為 BASIC 的程式設計語言。人們什麼也不必安裝,他們要做的只是打開電腦,螢幕上會顯示“READY”(準備就緒),然後就可以開始鍵入 BASIC 程式了。聽上去很不錯,是不是?

當然,那時能得到的也只有“READY”而已。沒有程式,沒有視窗,也沒有功能表。如果你希望電腦做點其他的事情,就必須編寫程式!那時沒有文書處理器、媒體播放機和 Web 流覽器,總之我們如今使用的所有應用當時都沒有。甚至根本不存在萬維網(Web),當然上網也就無從說起了。當時的電腦沒有好玩的圖片,也沒有聲音,只是在出錯時偶爾會發出嗶嗶聲!

安裝 Python 非常容易。我們強烈建議你使用 Hello World 安裝程式來安裝使用本書所需的 Python 版本。該安裝程式可在本書的網站 www.helloworldbook2.com 上找到。根據你的電腦的作業系統可以找到相應的安裝程式版本。

即使你的電腦上已經安裝了Python,不打算使用這本書的安裝程式,但是還要確保安裝這本書需要的一些額外內容。查看網站(www.helloworldbook2.com 的安裝說明(Installation Instructions)部分,看看應該怎麼做。這裡再強調一次,要想確保本書中的全部代碼都能正確運行,最好的辦法就是使用我們的安裝程式。你可以在本書的網站(www.helloworldbook2.com)上找到該安裝程式。

這裡分別提供了面向 WindowsMac OS X Linux 的版本。這本書裡的所有例子都是 Windows 版本,不過在 Mac OS X Linux 中使用 Python 也很類似。只需要按網站上的說明運行適合你的系統的版本。

本書使用的 Python 版本是 2.7.3 版本。如果使用本書網站上的安裝程式,你得到的就是這個版本。當你讀到這本書時,可能已經有了更新的 Python 版本。這本書裡的所有例子已經用 Python 2.7.3 做過測試。它們很可能也可以用於以後的 2.x 版本,不過我們無法預知未來,所以不能保證這一點。


Python 2
Python 3

寫作本書的前幾年,Python 發佈了一個新版本,也就是 Python 3。但是,它並不是 Python 一個真正意義上的升級版本。這就導致很多人並不想切換到 Python 3,所以他們仍然使用 Python 2Python 的開發者也在同時開發 Python 2 的新版本和 Python 3 的新版本。在寫作本書第 2 版的時候,Python 2 Python 3 的最新版本分別是 Python 2.7.3 Python 3.3.0。本書中使用的是 Python 2.7.3,這些代碼應該能與 Python 2.x 的任何後續版本都相容。

更多有關 Python 2 Python 3 的細節,請參閱附錄 B

 

1.2 從 IDLE 啟動 Python

啟動 Python 有兩種方法。一種方法是從 IDLE 啟動,也就是我們現在要使用的方法。

Start(開始)功能表中,可以看到“Python 2.7”下面的“IDLE (Python GUI)”。點擊這個選項,會看到 IDLE 視窗打開(類似下面顯示的視窗)。


IDLE 是一個 Python shellshell 的意思就是外殼,基本說來,這是一個通過鍵入文本與程式交互的途徑,可以利用這個 shell Python 交互。(正是因為這個原因,可以看到視窗的標題列上顯示著 Python Shell)。IDLE 本身還是一個 GUI(圖形化使用者介面),所以在開始功能表中顯示為 Python GUI。除了 shellIDLE 還有其他一些特性,不過這個內容我們稍後再講。

術語箱

GUI 就是圖形化使用者介面(graphical user interface)。這表示介面中有視窗、功能表、按鈕、捲軸等等。沒有 GUI 的程式稱為文字模式(text-mode)程式、控制台(console)程式或命令列(command-line)程式。

上圖中的 >>> Python 提示符(prompt)。提示符是程式等待你鍵入資訊時顯示的符號。這個 >>> 提示符就是在告訴你,Python 已經準備好了,在等著你鍵入 Python 指令

 

1.3 來點指令吧

下面就來向 Python 下達我們的第一條指令。

>>> 提示符末尾的游標後面鍵入:

print "Hello World!"

 

然後按下 Enter(回車鍵)。(有些鍵盤上,這個鍵稱為 Return 鍵。)每鍵入一行指令之後,都要按回車鍵。

按下回車鍵之後,會得到這樣一個回應:

Hello World!

>>> 

 

下圖顯示了 IDLE 視窗中執行這個指令的情況。


Python 會完全照你說的去做:它會列印(print)你的消息。(在程式設計中,列印通常是指在螢幕上顯示文本,而不是用印表機列印在一張紙上。)你鍵入的這行文本就是一個 Python 指令。你現在就是在程式設計!電腦已經在你的掌控之中!


另外,學習程式設計時總有這樣一個傳統:剛開始都是讓電腦顯示“Hello World!”。我們也會沿襲這個傳統,這本書的書名就是從這裡來的。歡迎來到程式設計世界!


這個問題問得好! IDLE 想幫你更好地理解這些內容。它用不同的顏色顯示文本,便於你區分代碼(code)的不同部分。(在 Python 之類的語言中,代碼就是下達給電腦的指令,這只是指令的另一個叫法。)本書後面我會慢慢解釋這些不同部分究竟是什麼。

如果出問題

如果有錯,可能會看到類似下面的結果:

>>> pront "Hello World!"

SyntaxError: invalid syntax

>>> 

 


這個錯誤消息表示,Python 不懂你鍵入的內容。在上面的例子中,print 被錯拼為 prontPython 不知道該怎麼處理。如果你犯了這個錯誤,可以再試一次,這一回一定要完全按照例子鍵入指令。


這是有道理的。因為 print 是一個 Python 關鍵字,而 pront 不是。

術語箱

關鍵字(keyword)是作為 Python 語言一部分的特殊詞,也稱為保留字(reserved word)。


1.4 與 Python 交互

你剛才所做的就是在交互模式中使用 Python。鍵入命令(指令)後,Python 立即執行這個命令。

術語箱

執行(executing)命令、指令或程式就表示運行或者發生,這只是運行或發生的另外一種形象說法。

下面就在交互模式中再嘗試幾條指令。

在提示符後面鍵入下麵這條指令:

>>> print 5 + 3

 

你會得到:

8

>>> 

 

這麼說 Python 確實會做加法!這並不奇怪,因為電腦本來就很擅長算數運算。

下面再試一個:

>>> print 5 * 3

15

>>> 

 

幾乎所有電腦程式和語言中都使用 * 符號作為乘號。這個符號稱作星號

如果你在數學課上總是把“5 乘以 3”寫作 5 × 3,在 Python 中就必須習慣於用 * 來做乘法。(大多數鍵盤上,這個符號都在數位 8 的上面。)


那好,再試試這個:

>>> print 2345 * 6789

15920205

>>> 

 


那麼,這一個呢?

>>> print 1234567898765432123456789 * 9876543212345678987654321

12193263200731596000609652202408166072245112635269

>>> 

 


沒錯。但是利用電腦,超大數的數學計算也能完成。不僅如此,你還可以做些別的事情,比如說:

>>> print "cat" + "dog"

catdog

>>> 

 

或者再試試這個:

>>> print "Hello " * 20

Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello

Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello

 

除了數學計算,電腦擅長的另一件事就是反復地做事情。在這裡,我們告訴 Python 讓它把 Hello 列印 20 次。

後面還會在交互模式中做更多事情,不過現在……

  

1.5 該程式設計了

到目前為止,我們看到的例子都只是(交互模式中)單個的 Python 指令。通過這些指令可以查看 Python 能夠做些什麼,這固然不錯,不過這些例子並不是真正的程式。前面已經提到過,程式是多個指令集合在一起。所以下面就來創建我們的第一個 Python 程式吧。

談到功能表選擇時,比如說File > New,第一部分(這裡的File)是主菜單。由 > 可以知道,下一部分(這裡的New)是 File 功能表中的一項。這本書中都將使用這種表示方法。

首先需要有辦法鍵入我們的程式。如果只是在互動式視窗中鍵入指令,Python 不會記住你鍵入的內容。需要使用一個文字編輯器(比如 Windows 上的記事本Mac OS X 上的 TextEdit,或者 Linux 上的 vi),它能把程式保存到硬碟上。IDLE 提供了一個文字編輯器,它比記事本更適合你的需要。可以從 IDLE 的功能表中選擇File(檔) > New Window(新視窗)找到這個文字編輯器。

你會看到一個與下圖類似的視窗。標題列顯示 Untitled(意思是未命名),因為你還沒有給檔命名。


現在,在這個編輯器中鍵入代碼清單 1-1 中的程式。

代碼清單 1-1 我們第一個真正的程式

print "I love pizza!"

print "pizza " * 20

print "yum " * 40

print "I'm full."

 

鍵入代碼之後,使用 File(檔) > Save(保存)或者 File(檔) > Save As(另存為)功能表項目保存這個程式。把這個檔命名為 pizza.py。你可以把它保存到你希望的任何位置(只要你記得保存在哪裡,以便以後還能找到它)。你可能還想創建一個新的資料夾來保存你的 Python 程式。檔案名末尾的 .py 部分很重要,因為這一部分會告訴你的電腦這是一個 Python 程式,而不只是普通的文字檔。

注意這個代碼標題中出現了代碼清單1-1”,這是什麼意思?如果示例代碼構成了一個完整的 Python 程式,我就會對它像這樣編號,使你能很容易地在 \examples 資料夾或網站中找到相應的代碼。

你可能已經注意到,這個編輯器在程式中使用了不同的顏色。有些詞是橙色,還有一些是綠色。這是因為 IDLE 編輯器認為你打算鍵入一個 Python 程式。對於 Python 程式,IDLE 編輯器會把 Python 關鍵字用橙色顯示,引號中間的所有內容都顯示為綠色。這樣是為了幫助你更容易地讀 Python 代碼。

 

1.6 運行你的第一個程式

保存了你的程式之後,就可以選擇 Run(運行)功能表(還是在 IDLE 編輯器中),再選擇 Run Module(運行模組),如下圖所示。這樣就能運行你的程式了。


Python Shell 視窗(就是啟動 IDLE 時出現的那個視窗)再次變成使用中視窗,並會顯示下面的結果。


RESTART 部分表明已經開始運行一個程式。(如果你在反復運行程式來進行測試,這會很有幫助。)

然後程式開始運行。當然,這個程式確實沒太大用處。不過起碼你能讓電腦聽從你的號令了。隨著學習的深入,我們的程式會越來越有意思。

 

1.7 如果出問題

如果程式中出現錯誤無法運行,怎麼辦呢?可能會發生兩種不同類型的錯誤。下面就來瞭解這兩種錯誤,這樣無論遇到哪一種錯誤你都能知道如何應對。

語法錯誤

IDLE 在嘗試運行程式前會對程式做一些檢查。如果 IDLE 發現一個錯誤,這往往是一個語法錯誤(syntax error)。語法就是一種程式設計語言的拼寫和文法規則,所以出現語法錯誤意味著你鍵入的某個內容不是正確的 Python 代碼。

下面給出一個例子:


這裡在 print  Bye for now!" 之間漏了一個引號。

如果運行這個程式,IDLE 會彈出一個消息“There's an error in your program: invalid syntax.”,意思是說你的程式中有一個錯誤,語法不正確。你必須查看代碼,找出哪裡出了問題。IDLE 的編輯器會(用紅色)突出顯示它認為出錯的位置。也許問題不會恰好出現在紅色顯示的位置,不過應該很接近。

執行階段錯誤

可能發生的第二種錯誤是運行程式之前 Python(或 IDLE)無法檢測出來的錯誤。這種錯誤只是在程式運行時才會發生,所以被稱為執行階段錯誤(runtime error)。下面是程式中出現執行階段錯誤的例子:

print "Hello, and welcome to Python!"

print "I hope you will enjoy learning to program."

print "Bye for now!" + 5

 

如果保存這個程式,並試圖運行,程式確實會開始運行。前兩行會列印出來,但是接下來你會得到一個錯誤消息:


Traceback 開頭的代碼行表示錯誤消息開始。下一行指出哪裡發生了錯誤,這裡會給出檔案名和行號。然後顯示出錯的代碼行,這可以幫助你找到代碼中哪裡出了問題。錯誤消息的最後一部分會告訴你 Python 認為存在什麼問題。對程式設計和 Python 有了更多瞭解之後,就更容易理解這個消息是什麼意思了。


聽我說,卡特,這有點像將蘋果和鱷魚放在一起。

Python 中,不能把兩個完全不同的東西加在一起,比如說數位和文本。正是因為這個原因,print "Bye for now!" + 5 會給出錯誤消息。這就像是在說:“5 個蘋果加 3 只鱷魚是多少?結果是 8,但是 8 個什麼呢?把這些東西加在一起沒有任何意義。不過幾乎所有東西都可以乘以一個數來翻倍。(如果有兩隻鱷魚,再乘以 5,那你就會有 10 只鱷魚!)正因如此,print "Bye for now!" * 5 是可以的。

像程式師一樣思考

看到錯誤消息也不用擔心。它們只是為了幫助你找出哪裡出了問題,以便你改正錯誤。如果程式中確實出了問題,你肯定更希望看到錯誤消息。沒有給出任何錯誤消息的 bug 1 才更難找到!

1bug,意思是臭蟲。程式師通常把討厭的錯誤說成 bug——編者注

 

1.8 你的第二個程式

第一個程式沒有多大實際意義,它只是在螢幕上列印了一些內容。下面來試一個更有意思的程式。

代碼清單 1-2 中的代碼編寫的是一個簡單的猜數遊戲。與第一個程式一樣,先 選擇 File(檔) > New Window(新視窗)在 IDLE 編輯器中新建一個檔。鍵入代碼清單 1-2 中的代碼,然後保存這個檔。可以把這個檔命名為你喜歡的任何名字,只要以“.py”結尾就可以。NumGuess.py 就是一個不錯的名字。

這裡只有 18 Python 指令,另外為了便於閱讀還加入了一些空行。鍵入這些代碼不會花費太多時間。雖然我們還沒有說明這個代碼到底是什麼意思,不過不用擔心,很快就會講到。

代碼清單 1-2 猜數遊戲


鍵入這些代碼時,注意 while 指令後面代碼行是縮進的,另外 if  elif 後面的代碼縮進得更多一些。還要注意有些代碼行末尾有冒號。如果在正確的位置鍵入冒號,編輯器會自動將下一行縮進。

保存代碼後,就像運行第一個程式一樣,選擇 Run(運行) > Run Module(運行模組)來運行這個程式。嘗試一下,看看會發生什麼。下面是我運行這個程式的示例:

>>> ======================= RESTART =======================

>>> 

AHOY!  I'm the Dread Pirate Roberts, and I have a secret!

It is a number from 1 to 99.  I'll give you 6 tries.

What's yer guess? 40

Too high, landlubber!

What's yer guess? 20

Too high, landlubber!

What's yer guess? 10

Too low, ye scurvy dog!

What's yer guess? 11

Too low, ye scurvy dog!

What's yer guess? 12

Avast! Ye got it!  Found my secret, ye did!

>>> 

 

我猜了 5 次才猜到這個秘密數,也就是 12


後面幾章我們會學習有關 whileifelse elif  input 指令的所有內容。不過估計你已經大致瞭解了這個程式的基本過程了。

·    由程式隨機選取秘密數。

·    用戶輸入他猜的數。

·    程式根據秘密數檢查使用者猜的結果:太大還是太小?

·    用戶不斷嘗試,直到猜出這個數,或者用完所有機會。

·    猜到的數與秘密數一致時,玩家獲勝。

你學到了什麼

哇!內容真不少。這一章中,你做了下面這些事情:

·    安裝了 Python

·    學習了如何啟動 IDLE

·    瞭解了交互模式;

·    交給 Python 一些指令來執行;

·    看到了 Python 知道如何完成算數運算(包括非常大的數);

·    啟動 IDLE 文字編輯器鍵入你的第一個程式;

·    運行你的第一個 Python 程式;

·    瞭解錯誤消息;

·    運行你的第二個 Python 程式:猜數遊戲。

測試題

1. 如何啟動 IDLE

2. print 的作用是什麼?

3. Python 中表示乘法的符號是什麼?

4. 啟動運行一個程式時 IDLE 會顯示什麼?

5. 運行程式又叫做什麼?

動手試一試

1. 在交互模式中,使用 Python 計算一周有多少分鐘。

2. 編寫一個簡短的小程式,列印 3 行:你的名字、出生日期,還有你最喜歡的顏色。列印結果應該類似這樣:

My name is Warren Sande.

I was born January 1, 1970.

My favorite color is blue.

 

保存這個程式,然後運行。如果程式沒有像你期望的那樣運行,或者給出了錯誤消息,試著改正錯誤,讓它能夠正確運行。

 

 

0 留言:

發佈留言