python有哪些項目可以練手?

東方奇驥


首先有兩點建議:

最好不要寫太應用的程序練手,要思考什麼更像是知識,老只會寫寫爬蟲是無用的,但是完全不寫也不行。

對於練手的程序,要注意簡化和抽象,但是如果簡化不得當的話,很容易看幾篇教程就被懶得下手了。

接下來就給大家介紹幾種適合新手的練手項目。

0.算法系列-排序與查找

Python寫swap很方便,就一句話(a, b = b, a),於是寫基於比較的排序能短小精悍。剛上手一門新語言練算法最合適不過了,還能順便刷題,利於找工作。簡單的練習,讓你受益無窮。

1.編譯系列

這個系列的重點就是前面說到的簡化,但是不要指望一口氣寫一個完整的C編譯器,即使只針對C一個很小的子集。所以我們需要一步一步來,寫一個計算器的解釋器是很好的開始,再進一步可以寫一個極簡語言的解釋器,譬如brainfuck。

再進一步你可以擴展已有的計算器解釋器,譬如加入聲明、賦值與運算、循環、流程控制, 構成一個簡單的LL(1)語法,然後遞歸下降分析,這就可以搞一個簡易同時又圖靈完備的玩具語言出來了。

2.分佈式系統/計網系列

這系列的項目,第一步可以從寫一個簡單的HTTP客戶端開始,原因很簡單,因為HTTP大概是最簡單的應用層協議了。然後可以考慮實現一個基本的ssh,你大概每天都會用ssh,難道不想做一個自己的簡易版本嗎?

然後可以考慮分佈式系統課上的經典作業,譬如寫一個簡單的RPC。可以參考Java的RPC原理以及Google的RPC框架(有Python版)。

3.操作系統系列

操作系統系列,可以嘗試寫一個簡單的存儲管理的文件系統。第一步的簡化就是用一個大的空文件作為磁盤,把對磁盤的讀寫抽象成對這個文件的讀寫。基本就是實現下inode,然後包裝成一個shell,支持下最基本的命令,新建、追加、讀寫、刪除之類的操作。這個練習最有趣也最有意義的地方在於多級索引的實現,


中公優就業


Python項目練習一:即時標記

這是《Python基礎教程》後面的實踐,照著寫寫,一方面是來熟悉Python的代碼方式,另一方面是練習使用Python中的基本的以及非基本的語法,做到熟能生巧。

這個項目一開始比較簡單,不過重構之後就有些複雜了,但是更靈活了。

按照書上所說,重構之後的程序,分為四個模塊:處理程序模塊,過濾器模塊,規則(其實應該是處理規則),語法分析器。

先來說處理程序模塊,這個模塊的作用有兩個,一個是提供那些固定的html標記的輸出(每一個標記都有start和end),另一個是對這個標記輸出的開始和結束提供了一個友好的訪問接口。來看下程序handlers.py:

這個程序堪稱是整個“項目”的基石所在:提供了標籤的輸出,以及字符串的替換。理解起來也比較簡單。

再來看第二個模塊“過濾器”,這個模塊更為簡單,其實就是一個正則表達式的字符串。相關代碼如下:

這就是三個過濾器了,分別是:強調牌過濾器(用×號標出的),url牌過濾器,email牌過濾器。熟悉正則表達式的同學理解起來是沒有壓力的。

再來看第三個模塊“規則”,這個模塊,拋開那祖父類不說,其他類應該有的兩個方法是condition和action,前者是用來判斷讀進來的字符串是不是符合自家規則,後者是用來執行操作的,所謂的執行操作就是指調用“處理程序模塊”,輸出前標籤、內容、後標籤。 來看下這個模塊的代碼,其實這個裡面幾個類的關係,畫到類圖裡面看會比較清晰。 rules.py:

補充utils.py:

最後隆重的來看下“語法分析器模塊”,這個模塊的作用其實就是協調讀入的文本和其他模塊的關係。在往重點說就是,提供了兩個存放“規則”和“過濾器”的列表,這麼做的好處就是使得整個程序的靈活性得到了極大的提高,使得規則和過濾器變成的熱插拔的方式,當然這個也歸功於前面在寫規則和過濾器時每一種類型的規則(過濾器)都單獨的寫成了一個類,而不是用if..else來區分。 看代碼:

本。

有一個細節的地方也要說一下,其實是和前面寫的呼應一下,就是在遍歷規則的時候通過調用condition這個東西來判斷是否符合當前規則。

我覺得這個程序很像是命令行模式,有空可以複習一下該模式,以保持記憶網節點的牢固性。

最後說一下我以為的這個程序的用途, 1、用來做代碼高亮分析,如果改寫成js版的話,可以做一個在線代碼編輯器。 2、可以用來學習,供我寫博文用。

還有其他的思路,可以留下您的真知灼見。

補充一個類圖,很簡陋,但是應該能說明之間的關係。另外我還是建議如果看代碼捋不清關係最好自己畫圖,自己畫圖才能熟悉整個結構。

Python項目練習二:畫幅好畫

這是《Python基礎教程》中的第二個項目,關於Python操作PDF涉及到的知識點

  • 1、urllib的使用
  • 2、reportlab庫的使用

這個例子著實很簡單,不過我發現在Python裡面可以直接在數組[]裡面寫for循環,真是越用越方便。下面是代碼:

Python項目練習三:萬能的XML

這個項目的名稱與其叫做萬能的XML不如叫做自動構建網站,根據一份XML文件,生成對應目錄結構的網站,不過只有html還是太過於簡單了,如果要是可以連帶生成css那就比較強大了。這個有待後續研發,先來研究下怎麼html網站結構。 既然是通過XML結構生成網站,那所有的事情都應該由這個XML文件來。先來看下這個XML文件,website.xml:

有了這個文件,下面應該來看怎麼通過這個文件生成網站。

首先我們要解析這個xml文件,Python解析xml和在java中一樣,有兩種方式,SAX和DOM,兩種處理方式不同點在於速度和範圍,前者講究的是效率,每次只處理文檔的一小部分,快速而能有效的利用內存,後者是相反的處理方式,先把所有的文檔載入到內存,然後再進行處理,速度比較慢,也比較消耗內存,唯一的好處就是可以操作整個文檔。

在Python中使用sax方式處理xml要先引入xml.sax中的parse函數,還有xml.sax.handler中的ContentHandler,後面的這個類是要和parse函數來配合使用的。使用方式如下: parse('xxx.xml',xxxHandler),這裡面的xxxHandler要繼承上面的ContentHandler,不過只要繼承就行,不需要有所作為。 然後這個parse函數在處理xml文件的時候,會調用xxxHandler中的startElement函數和endElement函數來一個xml中的標籤的開始和結束,中間的過程使用一個名為characters的函數來處理標籤內部的所有字符串。

有了上面的這些認識,我們已經知道如何處理xml文件了,然後再來看那個罪惡的源頭website.xml文件,分析其結構,只有兩個節點:page和directory,很明顯page表示一個頁面,directory表示一個目錄。

所以處理這個xml文件的思路就變的清晰了。讀取xml文件的每一個節點,然後判斷是page還是directory如果是page則創建html頁面,然後把節點中的內容寫到文件裡。如果遇到directory就創建一個文件夾,然後再處理其內部的page節點(如果存在的話)。

下面來看這部分代碼,書中的實現比較複雜,比較靈活。先來看,然後在分析。

看起來這個程序上面分析的複雜了一些,不過偉人毛毛說過,任何複雜的程序都是紙老虎。那我們再來分析一下這個程序。

首先看到這個程序是有兩個類,其實完全可以當作一個類,因為有了繼承。

然後再來看它多了些什麼,除了我們分析出來的startElement和endElement以及characters,多出來了startPage,endPage;startDirectory,endDirectory;defaultStart,defaultEnd;ensureDirectory;writeHeader,writeFooter;和dispatch,這些個函數。除了dispatch,前面的函數都很好理解,每一對函數都是單純的處理對應的html標籤以及xml節點。而dispatch比較複雜,複雜之處在於他是用來動態拼合函數並且進行執行的。

dispatch的處理思路是,首先根據傳遞的參數(就是操作名稱以及節點名稱)判斷是否存在對應的函數如startPage,如果不存在則執行default+操作名稱:如defaultStart。

一個函數一個函數搞清楚之後,就知道整個處理流程是什麼樣了。首先創建一個public_html的文件,存放整個網站,然後讀xml的節點,通過startElement和endElement調用dispatch進行處理。然後就是dispatch怎麼調用具體的處理函數了。 到此為止,這個項目算是分析完了。

主要掌握的內容一個是Python中使用SAX處理XML,另一個就是Python中的函數的使用,比如getattr,傳參數時的星號……

以上就是簡單的幾個Python練手項目分享,Python可以做很多有趣的事情,更多的Python小項目大家可以關注我的頭條號:菜鳥學Python,往期文章和後期的更新我會分享更多的Python教程,如果你有不同的見解或者說你有想要分享的練手項目,歡迎你在評論下方留言。


菜鳥學Python


每個階段的學習都可以做一些小的項目來提升自己對知識點的綜合應用。

比如說:學完Python基礎,可以做一些小遊戲之類的鞏固所學過的知識點。學到web前端的時候,自己可以做一些網站的首頁,像京東,淘寶等網站的首頁,都是比較經典的案例。


學習Python的時候,是在"如鵬網"上學習的,有網絡的地方就可以學習。根據是自己的時間來靈活安排學習進度,也有更多的時間來練習項目,夯實基礎,掌握的更好。

有系統的學習路線和項目練習,系統學習Python,可以作為參考。

1、Python基礎

2、數據庫開發

3、web前端

4、Python web開發及項目實戰

5、Linux

6、NoSQL

7、數據可視化

8、爬蟲技術

9、人工智能


玩著學編程


做點書上列子就成了,別太費勁,你永遠猜不到將來公司用什麼,會用什麼格式用。別人要為難你,總能為難你。這個世界已經過了會答案,會默寫code的時代了。具體問題來了,網上查一下,找到最好答案就成了。

在面試中,如果問到我不會的方法,我直接就說,如果這個問題,我會用啥方法。具體怎麼寫,谷歌搜索一下。這輩子我寫過asm, c,c++,java, c#,perl, JavaScript, html, css,Python. 這還沒算上各種framework. 我已經全搞混了。


分享到:


相關文章: