
*本文是CS50x的中文學習筆記,是原課程的筆記補充,建議先上完課,看完原課程筆記,再閱讀本文。
我的第一個學會的語言是Python,經過10週左右的C語言磨練,終於又回到了母語。
如果你的第一個語言也是Python,現在也在上CS50X課程,可能會發現學習C語言有助於幫助你釐清觀念。因為C語言屬於比較接近底層的語言,它不像是Python,不用放入套件就有許多內建功能。例如在C語言,沒有字串的資料型態,要弄成字串,就是得改成字元陣列。所以Python其實在背後幫你做了很多事情。
Python的另一個優點是可讀性,就像上面的哏圖,少了括號、分號等,使得寫Python就像是寫英文一樣。寫程式不是只是讓程式執行就好,程式語言故名思義,就是一種語言,程式語言除了要跟電腦交流,還得跟人交流。所以寫程式時,必須要注意可讀性,不要讓讀者覺得難以理解。
這樣說來,初學者學Python就好,何必學這麼多語言呢?Python可讀性佳,內建功能又多。然而Python的方便是需要代價的,相對於C語言來說,Python的執行速度會比較慢,寫小程式可能沒感覺,但是如果是動輒有數十萬筆的資料,兩者相差的時間就很巨大。當然,在C語言裡,很多功能都必須自己手刻,開發時間較長。使用Python,則可以大幅縮短開發時間。基本上兩者各有好壞,不能偏廢,程式設計師必須視其需求,選擇不同的語言來開發。例如C語言會比較偏向底層,如作業系統、韌體,Python則大量被應用在資料分析、機器學習、網站開發。
不過,初學者要學習什麼語言都是其次,基本上也很少有軟體工程師只會一種語言。重點是要學會基本觀念,如變數、迴圈、計數器、遞迴、記憶體、資料結構、演算法等,這些都會了之後,要學其他語言就很快。因此很推薦大家來學CS50,透過CS50X前5堂的C語言課程,上述的原理都能夠基本掌握。事實上,David也只用一堂課的時間介紹Python,如果過去學習C語言很紮實,很快就能理解Python。
C語言與Python的差異
你可能聽說過Python是直譯式的語言,執行時不需要先編譯,直譯是什麼意思呢?這裡不抄一些教科書回答,直接看程式如何運行。你可以直接使用CS50沙盒,新開一個檔名為 file.py,輸入 print("hello, world")。接著在終端機輸入 python file.py,就可以執行檔案。我更推薦你下載jupyter(點此連結外部網站看安裝教學),在畫面上輸入後,然後按ctrl + enter。
之前在寫C語言時,我們必需要先在終端機輸入 make file.c 來編譯,再輸入 ./file.c來執行。使用Python來開發,除Bug變簡單了,你可以只寫一段Python程式碼,先跑看看有沒有出錯,不用編譯,實在是新手福音。 你也會發現 main()消失了,不需要在寫一個 int main(void),然後用花括號把主程式包起來。

你可能也會發現Python不用再 #include套件,但是其實是Python有內建很多功能,Python仍有很多套件可以使用。只不過在Python,我們是用 import。

在Python裡不需要宣告資料型態,你可以直接輸入 a=1,而不是 int a=1;,Python會知道你想存入整數。不過這裡就會產生陷阱,有些時候你透過函式得出的整數,只是看起來是整數,當你想對整數作計算,會發現沒辦法。很有可能是那個不是整數型別,其實是字串型別。你可以先用 type() 檢查是整數還是字串,然後用 int() 將看似整數的字串,轉為整數。這個例子在本次的作業會出現。
在Python裡,常用的資料型別有整數(int)、浮點數(float)、字串(string)、元組(tuple)、列表(list)、字典(dictionary)、布林(bool),其實跟C語言的資料型別可以融會貫通,這裡不多做介紹,可以直接看網路針對Python的教學。如果英文程度夠好,可以看w3Schools.com,想看中文的話,可以看中國大陸的菜鳥教程。
底下我會介紹本次的作業,一共5份。前4份作業都是之前用C語言寫過的,只是改成Python版本。另外在Python是很注意縮排的,縮排出錯就無法執行,可是我把程式碼貼到Gist之後,有時候會有縮排跑掉的情況。所以如果你要複製程式到你的電腦執行時,得注意一下。
作業
hello.py(pset1)
mario.py(pset1-進階版)
credit.py(pset1-進階版)
readability.py(pset2)
dna.py
雖然學會了C語言後,要學Python非常容易,但是還是得花些時間,請繼續努力!
Happy coding!
沒有留言:
張貼留言
謝絕廣告,感恩