本節書摘來自異步社群《python 3程式開發指南(第2版•修訂版)》一書中的第2章,第2.7節,作者[英]mark summerfield,王弘博,孫傳慶 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
1.修改程式print_unicode.py,以便使用者可以在指令行上輸入幾個單獨的單詞,并且隻有在unicode字元名包含使用者指定的所有單詞時才列印相應列。這意味着,我們可以輸入類似于如下的指令:
實作上述要求的一種方法是使用words清單替換word變量(其中存放0、none或字元串)。改變代碼後,要記得更新使用幫助資訊。這一改變需要添加不到10行代碼,另外需要對不到10行的代碼進行适當修改。檔案print_unicode_ans.py中提供了對這一練習的解決方案(windows以及跨平台使用者應該修改print_unicode_uni.py,print_unicode_uni_ans.py中提供了相應的解決方案)。
2.修改quadratic.py,使得系數0.0對應的方程項不再輸出,負數系數的輸出形式為- n,而不是+ -n。為達到這些要求,需要把最後的5行代碼替換為大概15行代碼。quadratic_ans.py中提供了對應的解決方案(windows以及跨平台使用者應該修改quadratic_uni.py,quadratic_uni_ans.py提供了相應的解決方案)。
3.從csv2html.py程式中删除escape_html()函數,使用xml.sax.saxutils子產品中的xml.sax.saxutils.escape()函數替代地完成相關功能。達到這些要求很簡單,需要添加一行新代碼(導入語句),删除5行代碼(不再需要的函數),修改一行代碼(xml.sax.saxutils. escape()而非escape_html())。csv2html1_ans.py程式提供了相應的解決方案。
4.再次對csv2html.py程式進行修改,這次要求添加一個名為process_options()的新函數。這一函數應該從main()中進行調用,并傳回一個兩元組:maxwidth(int型)與format(str型)。調用process_options()時,應該會将maxwidth設定為預設的100,format設定為預設的“.0f”——輸出數字時,這将用作格式指定符。
如果使用者在指令行中輸入“-h”或“—help”,就會輸出使用幫助資訊并傳回(none, none)。(這種情況下,main()不做任何處理。)否則,這一函數将讀入給定的指令行參數,并對其進行适當的指派操作,比如,如果給定的是“maxwidth=n”,就對maxwidth進行設定,類似地,如果給定的是“format=s”,就對format進行設定。下面給出的是運作時輸出使用幫助資訊的情況:
下面給出的是兩個選項都進行設定的指令行執行個體:
不要忘記修改print_line()函數,以便使用format輸出數字——你需要傳遞一個額外的參數,添加一行代碼,并修改另一行代碼,這些修改也将會影響到main()。process_options()函數應該在25行代碼左右(包括大概9行使用幫助資訊)。這一練習對不是很熟悉python的程式員而言有一定難度。
提供了兩個測試資料檔案:data/co2-sample.csv與data/co2-from-fossilfuels.csv。csv2html2_ans.py程式提供了一個解決方案。在第5章中,我們将了解如何使用python的optparse子產品,以便簡化指令行處理的工作量。