He110, Wor1d: ,從因特網爬取數據,或者讀取某個文件的內容并保存至數據庫。這些指令被稱為代碼(code )。程序員用許多不同的編程語言來編寫代碼。在過去,編程的難度更大,因為程序員必須要使用晦澀難懂的底層編程語言( low-level programming language ) ,如匯編語言( assembly language )。說一門編程語言是底層語言,指的是其與高級編程語言(讀起來更像英語的編程語言)相比,更接近用二進制(0和1)編寫指令,因此也更難理解。下面是一個用匯編語言編寫的簡單程序:
下面則是用一門現代編程語言編寫的同一程序:
顯而易見,如今程序員的工作容易多了。不再需要花費大量時間學習晦澀的底層語言才能編程,相反只要學習一門非常易讀的語言python即可。
1什么是Python
Python是一門開源編程語言,由荷蘭程序員吉多范羅蘇姆( Guido van Rossum )發明,并以英國喜劇團體"蒙提派森(Monty Python )的飛行馬戲團"命名。吉多發現程序員讀代碼的時間比寫代碼花的時間更長,因此他就發明了這門非常易讀的語言。 Python目前已經是世界上最流行最易學的編程語言之一。所有的主流操作系統和計算機都可運行Python ,可將其用于從搭建網絡服務器到創建桌面應用等所有領域。由于其如此流行,市場上對Python開發者的需求也很大。
2安裝Python
需要先安裝Python 3才能完成本書中的示例練習。可以從http://python.org/ downloads下載針對Windows和OS X的Python版本。如果使用的是Ubuntu ,操作系統中默認安裝了Python 3,請確保下載的是Python 3,而不是Python 2,本書中的部分示例不適用于Python 2.
32位和64位操作系統的計算機均可使用Python,如果計算機是2007年后購買的,它很有可能是一臺64位操作系統的計算機。如果不確定操作系統是32位還是64位,只需在網絡上搜索相關內容即可確定。
如果使用的是Windows或Mac計算機,下載Python的32位版或64位版安裝包,打開文件并按提示操作。還可以瀏覽http://theselftaughtprogrammer.io/ installpython網頁,觀看介紹如何在每個操作系統下安裝Python的視頻。
3問題解答
從上節開始,讀者就需要安裝好Python了。如果遇到了問題,可以直接跳到第2章的"獲得幫助”一節。
4交互式shell
Python自帶了一個叫IDLE的程序,全稱是交互式開發環境;它也是"蒙提.派森的飛行馬戲團"的成員埃里克艾多爾(Eric Idle )的姓氏。我們將在IDLE中輸入Python代碼。安裝好Python之后,在Explorer (PC )、 Finder (Mac )或Nautilus ( Ubuntu )中搜索IDLE,建議為其創建一個桌面快捷方式,以方便查找。
點擊IDLE程序的圖標,帶有如下文字說明的程序就會啟動(準確的文字可能會有所變化,但是即使沒有說明或略有不同都不用擔心) :
Python 3.5.1 (V3.5.1:37а07cee5969, Dec 5 2015, 21:12:44)[GCC 4.2.1 (Apple Inc. build 5666)(dot3)] on darwin Type "copyright", "credits" or "license()" for more information.>>>
這個程序被稱為交互式shell,可以直接在其中鍵入Python代碼,程序就會打印出結果。在提示符>>>后面鍵入:
然后按下回車。
IDLE可能會拒絕執行從Kindle、其他電子書或Word等文字處理程序中復制的代碼。如果使用復制的代碼,且遇到了一個無法解釋的錯誤,嘗試直接在窗口中輸入代碼。并且必須鍵入與示例中一模一樣的代碼,包括雙引號、括號和其他標點符號。
交互式shell會打印出Hel1o, world! ,如圖2-1所示。
圖2-1 交互式shell打印示例
在編程界有一個傳統,每當教別人一門新編程語言時,第一程序就是如何打印Hel1o, world! 。所以,恭喜你剛剛寫出了自己的第一個程序。
5 保存程序
交互式shell對于快速計算、測試小塊代碼和不會被重復利用的短程序來說很有用。還可以用IDLE保存一個程序以便重復使用。啟動IDLE應用,點擊文件"按鈕(IDLE編輯器左上角的菜單欄) ,然后選擇創建新文件。選擇該選項后,會打開一個文本編輯器,它的背景通常是白色的。你可以在編輯器中寫代碼,再保存以便之后運行。運行代碼時,程序輸出會出現在交互式shell中。再次運行之前,需要保存在編輯代碼時所做的修改。在文本編輯器中輸入"Hello, World!"程序,如圖2-2所示。
圖2-2在文本編輯器的"Hello , World"
再次回到"文件"菜單,然后選擇"另存為"。將文件命名為helloworld.py并保存。Python文件的名稱必須以.py結尾。保存好文件之后,點擊運行"菜單(也在IDLE編輯器左上角的菜單欄中) ,并選擇運行模塊"也可以直接按快捷鍵F5鍵,相當于從菜單欄中選擇運行模塊"按鈕。在交互式shell將會打印出
He11o, world! ,就好像你已經輸入了這行代碼。但現在,由于已經保存好了程序,之后你可以想運行多少次就運行多少次。
你創建的這個程序,實際只是一個以py擴展名結尾的文件。給文件起的名字hello_world.py完全是隨意選擇的,可以改成其他任何名稱。正如本例所示,用Python編程只需要將文本鍵入文件中,然后使用交互式shell運行即可。很簡單,對吧?
6運行示例程序
本書將給出大量代碼示例,以及最后的運行結果。碰到類似內容時,你應該試著輸入相同的代碼,自己運行一次。
短小的示例最好在交互式shell中運行,文本編輯器更適合希望保存并編輯的程序。如果在交互式shell鍵入的代碼有錯誤,比如拼寫錯誤,導致代碼出錯,就必須得重新輸入所有代碼。而使用文本編輯器則可以省下不少工作,如果犯錯了,只需要糾正并重新運行即可。
二者區別很大的另一個原因,是從文件運行程序與從交互式shell運行程序的輸出會略有不同。如果直接在交互式shell中鍵入 100并按下回車,交互式shell會輸出100 。但如果在.py文件中輸入100并運行,則不會有任何輸出。這個區別可能會讓人困惑,因此在運行程序時,如果沒有得到書中示例相同的輸出,請注意是從哪里運行的程序。
7術語表
編程:編寫讓計算機執行的指令。
代碼:程序員編寫的、讓計算機執行的指令。
底層編程語言:與高級編程語言(讀起來更像英語的編程語言)相比,更接近用二進制(0和1)編寫指令的編程語言。
匯編語言:一種很難閱讀的編程語言。
高級編程語言:一種讀起來比底層編程語言更像英語的編程語言。
Python :本書介紹的一種易讀、開源編程語言。由吉多范·羅蘇姆發明,并以英國喜劇團體"蒙提.派森的飛行馬戲國”命名。
8挑戰練習
嘗試打印出除Hel1o, WorId! 以外的文字。
答案可從異步社區(www.epubit.com )本書詳情頁的配套資源中下載。
本文節選自《Python編程無師自通——專業程序員的養成》
從Python 3 中開始學習編程,并構建第一個程序;通過學習“面向對象的程序設計”并創建一個強大的Python程序來讓讀者掌握技能; 學習使用Git、Bash、正則表達式和數據庫等工具,然后使用學習的新編程技能來構建一個網絡爬蟲;學習計算機科學的基本原理,包括計算機架構、數據結構、算法和網絡編程;學習為項目編程:涵蓋了軟件開發過程、測試和最佳編碼實踐;了解如何完成團隊合作,并獲得編程工作。
創聲明:本文為阿怪原創科普文章,抄襲必究!文中部分圖片源自網絡,若涉及版權請聯系刪除。
阿怪在前面的文章中介紹了電腦運行的物理本質:變化電流提供信息或數據基礎,不同電路組合提供運算基礎。我們還知道一臺電腦需要同時擁有“硬件”和“軟件”才能正常運行。“硬件”就是各種我們能在電腦中看到、摸到的各種設備、部件(如前文介紹過的硬盤),其本質就是為電腦提供各種具備特殊電子元件以實現不同運算或存儲功能的固定電路結構(這句話可能些許拗口且長,但很重要,值得反復讀幾遍);“軟件”就是我們常說的電腦程序,其本質就是“寄宿”于各種存儲設備中的一串數據代碼。這些代碼是如何“指揮”電腦進行各種神級操作的?這便是今天阿怪要跟大家分享的主題。
數據電流就是指攜帶數據的電流
本文中的信息、數據、程序、代碼、軟件其本質都是一回事,即電腦中的變化電流,為了防止理解混亂,本文統一用“數據”一詞表示。
我們先來看一個簡單的類比:
還是阿怪鐘愛的發條音樂盒
?上圖是個發條音樂盒的主要功能部件,圖中的“滾筒”相當于電腦中存有音樂數據的存儲設備,“金屬音片”相當于電腦中功能硬件提供的固定電路。當這個“簡易電腦”運行時(即滾筒轉動),滾筒上攜帶的數據(凸點)就會“指揮”金屬音片按一定的規律振動發音。
在上述例子中,我們對數據的“指揮”作用有了一個初步的理解。從這個例子中,我們不難想到:改變滾筒攜帶的數據,最終我們聽到的音樂就會不同;改變金屬音片的結構,最終我們很可能聽到雜亂無章的噪音,除非我們相應的對數據也進行調整。所以,我們可以得出結論,數據需要與硬件相匹配才能發揮其作用,這就是我們常說的“軟、硬件兼容”。
使用電腦時遇的不兼容提示
?現在我們再回歸到電腦中,具體看看數據是如何操縱電腦運行的。
?上圖是一個最簡單的電路圖,如果輸入強電流紅燈會亮,如果輸入弱電流藍燈會亮。大家來回答一個問題:如何讓小燈按“紅紅藍藍紅”的次序依次閃爍呢?
太簡單了對不對!如果強電流對應數據“1”,弱電流對應“0”,我們只需要編輯數據“11001”,并發送給電腦,小燈就會“聽話”的閃爍了。而且這里的小燈更可以是另外一個電路的開關,如此,一段數據就能在這些不同的電路組合中發揮其不同的作用了。
也許有小伙伴會問:能不能讓兩個小燈同時亮呢?答案是肯定的,不過為了“軟、硬件兼容”,我們需要加入一個設備,如下圖:
?圖中綠色部件是一個緩存設備,其功能就是把串行數據轉換成并行數據(還記得阿怪在上一篇文章中對此問題的介紹嗎)。當攜帶數據的電流被綠色部件接收后,它先短暫地存儲這些數據,然后對存儲的數據通過分析后,按照強電流往上路傳輸,弱電流往下路傳輸的分配原則進行電流的輸出,這樣小燈就能同時亮起了。
以上就是對數據作用的一個簡化理解,實際上電腦中的電路是由各種更為復雜的“邏輯電路”構成,無論如何,其本質原理跟阿怪圖片所示是一致的,于是通過這樣一系列的電路對電流所攜帶數據的處理,就實現了電腦整體的運行效果。
?什么是邏輯電路:一種特殊電路,它能通過對電流強弱信號(即:數據)的辨別,按需要對電流強弱進行轉換、對不同電流進行限制流通,以實現各種數學上的邏輯關系。其實阿怪上文展示的兩張電路圖也是一種簡單的、能對電流信號進行判斷和處理的邏輯電路。
通過上文的介紹,相信大家對電腦程序和其工作原理有了更本質的認知。我們常提到的電腦程序都是具有一定正常功能,能幫助我們解決具體問題的數據。而事物都有兩面性,如果一段電腦程序的功能不是幫助我們解決問題,反而是在干擾電腦工作,甚至竊取電腦中的數據,那么這樣的程序就是我們討厭的“電腦病毒”。
隱藏在正常數據中的非正常數據——電腦病毒
電腦程序的種類和功能多種多樣,有控制文件編輯功能的程序、有控制系統存儲功能的程序、也有控制程序編輯的母程序等等,所以相應的電腦病毒也是多種多樣。
既然電腦病毒也是一種程序,那么其作用原理自然跟正常程序是一樣的,只是它所帶來的作用結果是我們討厭的。
?在本文開篇,阿怪對軟件程序的介紹中就用了“寄宿”一詞,實際上電腦病毒也是需要“寄宿”在存儲設備上以發揮其“搗蛋本領”的。還以大家熟知的例子說明,上圖中的緩存設備中毒后,“寄宿”在其存儲結構中的病毒數據會對新接收的數據電流產生覆蓋效果并輸出,這時無論輸入電流如何變化,得到的輸出電流都是一樣的,于是這個“病毒”成功的干擾了這臺“簡易電腦”的正常運行。
該圖片源于網絡
我們平時使用電腦處理文件時最常用到的就是“復制、粘貼”功能。現在我們不難理解,所謂的“復制、粘貼”操作,本質上也是一段數據,如果一段病毒數據中也恰當的融合進了這種“復制、粘貼”數據,那么它就能進行自我復制了。只是這個“復制、粘貼”操作不會在電腦上出現任何界面,而是在“私下里”悄悄進行的,不過,如果你是對電腦程序略懂的朋友,就能在電腦任務管理器的進程中找到這個過程的蹤跡。
?以上只是對病毒的作用方式舉了一些容易理解的例子,當然,實際生活中的電腦病毒種類繁多,有的產生大量垃圾數據占用電腦存儲空間;有的惡意更改或破壞電腦中的各類文件;有的通過互聯網將電腦中的大量數據復制并發送出去……如果要對這些不同種類的電腦病毒一一詳解,估計需要寫一本書了,更何況阿怪也并非這方面的專業人士,只能為大家從根本原理上介紹至此,希望能幫助大家對這些現象有個本質上的認知。
今天對電腦程序的科普就到這里了!歡迎大家關注“阿怪看世界”,阿怪會持續推出原創科普文章,向大家分享認知世界的不同視角。
程,俗稱寫代碼,或者寫程序,是指編寫計算機程序員,讓計算機按照編程者的思維去執行一系列指令的行為。
編程可以做什么?
一、編程可以控制小到計算機、手機、智能手表、智能汽車、智能家電,大到航天飛機、登月探測器、衛星等設備的運行。
比如,2012年,英國的一個程序員,開發了一個實現在辦公室遠程控制給家里的狗狗喂食的程序。
通過程序給狗狗自動喂食
程序員莫里斯由于家里無人照顧自己心愛的狗狗托比,專門開發了一套基于Twitter(國際版微博)的程序,無論身在地球上哪個角落,只要能上網,就不會餓著托比。需要喂食時,莫里斯會發布一條“@feedtoby(喂托比)”的Twitter消息。家中電腦收到后,就會啟動一個蜂鳴器,托比聽到聲音后會跑過來,坐在管子下面等著。此時,一個馬達啟動,打開活門,里面的狗糧會從管子落到托比的碗里。攝像頭會拍下托比進食的照片,通過Twitter發送給莫里斯。
二、編程還可以做很多有趣的事情,比如,有個程序員因為工作繁忙沒空陪女朋友聊天,就寫了一個微信機器人,自動跟女朋友的微信聊天。
聊天機器人
三、還有一部分編程工作,就是對很多人來說非常神秘的領域了,就是通常所說的黑客/紅客了,他們通常擁有高超的技術,可以通過一些代碼控制別人的電腦,竊取一些文件,賬號之類的機密信息。
當然了,大部分編程者也就是程序員,做的是軟件開發的工作,我們平時使用的微信、qq,百度、淘寶就是由很多程序員開發出來的。
怎么學編程?
最早的程序員都是數學家,后來才有了計算機這個行業,現在,甚至很多小朋友都開始學習編程了,要想學會編程,需要有一定的數學和邏輯思維,再學習一些計算機語言的語法就可以了,剩下的就是不斷的練習,像打怪升級一樣不斷提高自己的能力。后面我會給大家介紹一些學習編程的方法和技巧,請大家關注。