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

Python提供了一大堆程式設計工具,包括了很多可以直接使用的函數和模組。就像一個可靠的錘子或者修自行車的扳手一樣,這些內建的工具(其實是一段段代碼)會讓你寫起程式來輕鬆很多。
正如你在第7章中學到的,模組要先被引用然後才能使用。Python的內建函數卻不需要先引先。只要Python Shell程式一啟動,它們就可以用了。在這一章裡,我們會看到一些更有用的內建函數,然後我們集中看其中一個:open函數。可以用它來打開檔進行讀寫。
9.1 使用內建函數
我們會學習Python程式師常用的12個內建函數。我會描述他們是做什麼的以及如何使用它們。然後給出一些例子,介紹它們是如何説明你寫程式的。
9.1.1 abs函數
abs函數返回一個數位的“絕對值”,也就是去掉數字的正負號後的值。例如,10的絕對值是10,-10的絕對值也是10。
abs函數的用法很簡單,把數位或變數當成參數就可以了:

你可以用abs函數來計算一個遊戲中的角色移動的絕對距離,不論它向哪個方向移動。例如,這個角色向右移動3步(正3),然後向左移動10步(負10,或者說-10)。如果我們不關心方向(正還是負),這兩個數的絕對值就是3和10。你可以在大富翁遊戲裡使用它,打兩個骰子然後讓角色向任意方向走骰子打出的那麼多步。現在,如果我們把步數放到變數裡,我們可以用下面的代碼來判斷角色是否移動。當玩家想要移動時我們可以顯示一些資訊(在這裡,我們只是顯示“角色在移動”):

如果我們沒用abs函數,if語句就不得不寫成這樣:

看到了吧,使用abs函數讓if語句短了一些,並且更容易理解。
9.1.2 bool函數
bool是Boolean(布林類型)的簡寫,程式師們用它來表示兩種可能的值中的一種,通常是真(true)或者假(false)。
bool函數只有一個參數,並根據這個參數的值返回真或者假。當對數位使用bool函數時,0返回假(False),任何其他值都返回真(True)。下面是對不同的數位使用bool的結果:

當對其他類型的值使用bool時,比如字串,對於沒有值的字串(也就是None或者空字串)返回False。否則返回True,如下所示:


bool函數對於空的清單、元組和字典返回False,否則就則返回True:

你可以用bool函數來判斷一個值是否已經被設置。例如,如果我們叫人們用我們的程式輸入他的出生年份,我們的if語句可以用bool來驗證輸入的值:

這個例子的第一行使用input來把別人在鍵盤上的輸入保存到變數year中。在下一行中直接按回車鍵(不要輸入任何其他東西),這樣會把回車鍵的值保存到變數中。(在第7章我們使用了sys.stdin.readline(),兩種方式的效果一樣。)
在接下來的一行,if語句把rstrip函數的返回值當做布林值檢查(rstrip函數把字串結尾的空白和回車刪除)。因為在例子裡用戶沒有任何輸入,所以bool函數返回False。因為if語句中使用了not關鍵字,意思就是“如果函數沒返回True的話才做這件事情”,所以代碼會在下一行列印出:“你必須輸入你的出生年份”。
9.1.3 dir函數
例如,要顯示對一個清單值可用的函數,可以這樣輸入:

dir函數基本上可以用於任何東西,包括字串、數位、函數、模組、物件,還有類。但有時它返回的值可能沒什麼用處。比方說,如果你對數字1調用dir,它會顯示幾個Python自己使用的特殊函數(前後都有兩個底線的),這並沒什麼用處(通常你不用關心它們中的絕大多數)。
當你想要快速找出在一個變數上可以做些什麼的時候,dir函數很有用。例如,對一個包含字串值的叫popcorn的變數調用dir,你會得到一系列string類所提供的函數(所有的字串都屬於string類)[譯者注:是str類]:
然後你可以用help得到清單中某個函數的簡短描述。下面的例子是對upper函式呼叫help的結果:
返回的資訊可能沒有那麼容易看懂,讓我們仔細地來看看。省略號(...)意味著upper是一個string類內建的函數並且沒有參數。下面一行的箭頭(->)的意思是這個函數返回一個字串(str)。最後一行給出了這個函數簡要的介紹。
9.1.4 eval函數
eval函數(是evaluate,“估值”的簡寫)把一個字串作為參數並返回它作為一個Python運算式的結果。例如 eval('print("wow")') 實際上會執行語句 print("wow")。
eval函數只能用於簡單的運算式,比如:

拆分成多行的運算式(如if語句)一般不能運算,比如:

eval函數常用於把使用者輸入轉換成Python運算式。例如,你可以寫一個簡單的計算器程式,它讀取輸入到Python中的算式,然後計算出答案。
由於使用者的輸入被當成字串讀進來,Python如果要進行計算的話需要把它轉成數位和運算子。eval函數使得這種轉換很簡單:

在這個例子裡,我們使用input來把使用者輸入的內容讀到變數your_calculation裡。在下一行中,我們輸入運算式12*52(這可能是你的年紀乘以每年的周數)。我們使用eval來運行這個計算,結果列印在了最後一行上。
9.1.5 exec函數
exec函數和eval差不多,但它可以運行更複雜的程式。兩者的不同在於eval返回一個值(你可以把它保存在變數中),而exec則不會。下面是個例子:

在前面兩行,我們創建了一個有多行字串的變數,其中有兩個print語句,然後用exec來運行這個字串。
你可以用exec來運行Python程式從檔中讀入的小程式,也就是程式中又包含了程式!這在寫很長、很複雜的程式時可能很有用。例如,你可以寫一個機器人對決遊戲,其中兩個機器人在螢幕上移動並試圖向對方進攻。遊戲玩家要提供寫成Python小程式的對機器人的指令。機器人對戰遊戲會讀入這些腳本並用exec來運行。
9.1.6 float函數
float函數把字串或者數位轉換成“浮點數”,也就是一個帶有小數點的數字(也叫“實數”)。例如,數位10是一個整數,但是10.0、10.1,以及10.253都是浮點數(英語叫float)。
你可以用float很容易地把一個字串轉換成浮點數,像這樣:

你也可以使用帶小數點的字串:

你可以用float來把程式中的輸入轉換成恰當的數位,尤其是在你需要把某人的輸入與其他值做比較的時候這很有用:

9.1.7 int函數
int函數把字串或者數位轉換成整數,這樣會把小數點後面的內容丟掉。例如,下面是如何把一個浮點數轉換成整數的例子:

下面的例子把字串轉換成整數:

但是如果你要把一個包含有浮點數的字串轉成整數,那你就會得到一個錯誤資訊。例如,下面我們試著用int函數把一個包含浮點數的字串進行轉換:

你會看到,結果得到了一個“值錯誤”消息。
9.1.8 len函數
len函數返回一個物件的長度,對於字串則返回字串中的字元個數。例如,要得到字串“this is a test string”的長度,你可以這樣做:

當用在清單或元組時,len函數返回清單或元組中的元素的個數:

當用在字典時,len函數返回字典中元素的個數:

在迴圈中len函數尤其有用,我們可以用下面的代碼來顯示清單中元素的索引位置:

這裡,我們在
9.1.9 max和min函數
max函數返回清單、元組或字串中最大的元素。例如,下面是對數位清單使用max函數。

由逗號或空格分隔的字串也有同樣的效果:

這個例子表明,字母是按照字母表順序排列的,並且小寫字母排在大寫字母的後面,所以t比T大。但是你不一定非要用清單、元組或者字串,你也可以直接調用max函數,把你要比較的元素作為參數寫在括弧中:

min函數與max一樣,只是它返回清單、元組或字串中的最小元素。下面是對於同樣的數位清單執行min函數的結果:

假設你在與四個玩家一起玩四人猜數字遊戲,他們每個人要猜想一個比你的數位小的數位。如果任何一個玩家猜的數字比你的大,那麼所有的玩家就都輸了,但是如果他們猜的都比你的小,那麼他們贏。我們可以用max來快速地找出是不是所有的猜想都比你的小:

在這個例子裡,我們把要猜的數位放在變數guess_this_number裡。玩家們的猜想放到列表player_guesses中。if語句把最大的猜想與guess_this_number做比較,如果有玩家猜的數位比這個數位大,那麼列印“砰!你輸了”。
9.1.10 range函數
在前面我們已經看到了,range函數主要應用在for迴圈中,用來讓一段代碼迴圈執行指定數位的次數。range函數的前兩個參數分別叫做開始和結束。在前面介紹len函數時所用的迴圈中你已經見到range如何使用這兩個參數了。
range所生成的數字從給定的第一個參數開始,到比第二個參數小一的數字結束。例如,下面的例子中列印出0和5之間的range:

range函數實際上返回了一個叫作“反覆運算器”的特殊物件,它能重複一個動作很多次。在這個例子中,它每被調用一次就返回下一個數字。
你可以把反覆運算器轉換成清單(使用list函數)。然後如果你列印對range調用的返回值,你會看到它所包含的數字:

range函數還可以有第三個參數,叫做“步長”。如果沒有步長,那麼缺省的步長就是1。但是當我們傳入2作為步長時會發生什麼呢?下面是它的結果:

每個數位都比前一個數位大2,並且清單結束於數字28,它比30小2。你還可以使用負的步長:

9.1.11 sum函數
sum函數把清單中的元素加在一起並返回這個總和。下面是一個例子:

在第一行上,我們創建了一個由0到500之間的數字清單,使用50作為range的步長。接下來,我們把列表列印出來看看結果。最後,把變數my_list_of_numbers傳給sum函數,通過print(sum(my_list_of_numbers))來把清單中所有的元素加在一起,得到的結果是2 250。
9.2 使用檔
Python的檔和你電腦上其他的檔一樣:文檔、圖片、音樂、遊戲……實際上,你電腦上的所有東西都是以檔的形式保存。
讓我們來看看在Python裡如何用內建函數open來打開和操作文件。但首先我們要創建一個新檔以供試驗。
9.2.1 創建測試檔
我們會用一個文字檔做試驗,我們叫它test.txt。根據你用的作業系統選擇不同的步驟。
在Windows中創建新文件
如果你用的是Windows,按以下步驟創建新檔test.txt。
1.選擇開始→所有程式→附件→寫字板。
2.在空檔上輸入幾行文字。
3.選擇檔→保存。
4.當對話方塊出現時,按兩下“我的電腦”,然後按兩下“本地硬碟(C:)”來選擇C盤。
5.在對話方塊底部的“檔案名”文字框中輸入test.txt。
6.最後,點擊“保存”按鈕,如圖9-1所示。
在蘋果OS X中創建新文件
如果你用蘋果電腦,按以下步驟創建新檔test.txt。
1.點擊螢幕上方功能表條上的Spotlight圖示。

2.在出現的搜索框中輸入TextEdit。
3.TextEdit應當出現在應用程式部分。點擊它來打開編輯器(你也可以用Finder在應用程式檔案夾中找到TextEdit)。
4.在空檔中輸入幾行文字。
5.選擇格式→製作純文字。
6.選擇檔→保存
7.在“另存為”框中輸入test.txt。
8.在位置列表中點擊你的用戶名(你登錄時用的名字,或者你所用的這台電腦的主人的名字)。
9.最後,點擊“保存”按鈕,如圖9-2所示。
在Ubuntu中創建新文件
如果你使用Ubuntu系統,按照以下步驟創建新檔test.txt。
1.打開你的編輯器,一般叫做“文字編輯器”。如果你之前沒用過,那麼在應用程式功能表中可以找到它。

2.在編輯器中輸入幾行文本。
3.選擇檔→保存。
4.在名字框中,輸入test.txt作為檔案名。在標有“保存到資料夾”的框中可能已經選中你的home目錄(你的home目錄的名字就是你登錄時用的用戶名)。如果沒有,在位置列表中點擊它。
5.點擊“保存”接鈕。如圖9-3所示。

9.2.2 在Python中打開文件
Python的內建函數open可以用來在Shell程式中打開檔,並顯示它的內容。並且可以在Shell程式中顯示它的內容。如何告訴這個函數你要打開哪個檔要看你用的是什麼作業系統。如果你用Windows、蘋果或Ubuntu系統的話,可以分別參考一下下面讀取檔的例子。
在Windows中打開文件
如果你用Windows,用下面的代碼打開test.txt:
在第一行上,我們使用了open,它會返回一個檔物件,這個物件帶有操作檔的函數。這裡open函數的參數是一個字串,告訴Python到哪裡找到這個檔。如果你用Windows,並且把test.txt保存在本地硬碟C盤中,那麼檔的位置就是c:\test.txt。
這裡的兩個Windows檔案名中的反斜線告訴Python這就是一個反斜線,而不是某種命令。(在第3章已經學過,反斜線自身在Python中是有特殊作用的,尤其是在字串中。)我們把檔物件保存到變數test_file中。
在第二行上,我們使用檔物件提供的read函數來讀取檔的內容,並把它保存到變數text中。在最後一行,我們把變數的內容列印出來以顯示檔的內容。
在蘋果OS X中打開文件
如果你用的是蘋果OS X,相對於Windows打開test.txt的例子,在第一行你需要輸入一個不同的位置。這要用到你保存這個文字檔時所用的用戶名。例如,如果用戶名是sarahwinters,那麼open的參數可能是:
在Ubuntu中打開文件
如果你使用的是Ubuntu,相對於Windows打開test.txt的例子,在第一行你需要輸入一個不同的位置。這要用到你保存這個文字檔時所用的用戶名。例如,如果用戶名是jacob,那麼open的參數可能是:
9.2.3 寫入到文件
open所返回的檔物件不只有read這一個函數,我們可以用它來創建一個新的空檔,在調用函數時要用到第二個參數,一個字串‘w’:
‘w’這個參數告訴Python我們想要向檔中寫入,而不是從檔中讀取。
現在我們可以用write函數向新檔增加資訊了:

最後,我們需要用close函數告訴Python,我們對這個檔寫入完成了:

現在,如果你用文字編輯器打開檔,你應該看到它的內容是:“What is green and loud? A froghorn!”,或者你可以用Python再把它讀進來:

9.3 你學到了什麼
在這一章中,你學到了一些Python的內建函數,如float和int,它們可以在小數和整數間做轉換。你還看到了len函數如何讓迴圈變簡單,還有如何用Python來打開檔進行讀寫。
9.4 程式設計小測驗
用下面的例子做Python內建函數的試驗吧。答案可以在網站http://python-for-kids.com/ 上找到。
#1:神秘的代碼
下面的代碼運行的結果會是什麼呢?猜一猜,然後運行一下它,看看你猜得對不對。

#2:隱藏的消息
嘗試用dir和help來找出如何把字串拆成單詞,然後寫個小程式從第一個單詞(this)開始分別列印出下面字串中的每個單詞:
#3:拷貝檔
寫一個Python程式來拷貝檔。(提示:你需要打開要拷貝的檔,把它讀進來,然後新建一個檔的拷貝。)在螢幕上列印出新檔的內容,檢查一下對不對吧。












0 留言:
發佈留言