面向聰明小白的程式設計入門教程 開始敲程式碼(Part 4)
經過之前的熱身,我們已經大概瞭解了程式設計是怎麼回事。接下來的教程,就是一步步拆解,一點點組裝,用一行行程式碼重新實現我們的文件轉換器。
1. 瞭解IDE
之前的教程中,我們安裝了Notepad ++
和Visual Studio Code
。Nodepad ++
是一個小巧的文字編輯器,Visual Studio Code
是一個全能型文字編輯器,算是大半個IDE吧。
IDE(Integrated Development Environment),一般譯為整合開發環境,可以理解為開發過程中需要的工具組合。軟體開發中,IDE並不是不可或缺的,畢竟IDE也是被開發出來的。
IDE一般提供這些功能:程式碼編輯、程式碼搜尋、程式碼分析、程式碼執行、程式碼除錯、版本控制(用於程式碼修改歷史的追溯)、專案管理(軟體寫到後期,可能需要將單個檔案拆解成多個檔案,不然巨無霸的程式碼難以閱讀)、程式碼重構(一鍵更改程式碼風格)、專案部署(應用打包)等。
對於我們一百行程式碼的小專案來說,一般只能用到IDE中很少的一部分功能:程式碼編輯、程式碼執行、程式碼除錯。其中程式碼編輯,又包括程式碼高亮、智慧補全、智慧糾錯、碼品分析等。
我們的專案只有一百行程式碼,用得著IDE嗎?其實用不用IDE,跟程式碼行數無關。一個智慧的IDE,是學習程式設計最好的老師。在一個智慧的IDE裡,每敲入一個字元,IDE就會根據上下文給出他的建議、提示或報警。在一次次的互動中,我們慢慢學會了規避常見的錯誤、選擇最佳的語法、寫出最整齊的程式碼。有些教程教新手使用文字編輯器程式設計,甚至用記事本程式設計,簡直是誤人子弟。
2. 選擇IDE
現代的IDE,主要有微軟公司的Visual Studio
,蘋果公司的XCode
,IBM公司的Eclipse
,甲骨文公司的Netbeans
和Jebrains公司的IntelliJ IDEA
。這些IDE主要都不是做Python開發的,但是理論上,他們都可以通過外掛整合Python開發。
這五個IDE中,Visual Studio
原來是收費的,現在不要錢了。XCode
不要錢,但是是蘋果機專用。Eclipse
、Netbeans
一直是免費軟體。到現在為止,只有IntelliJ IDEA
是收費的IDE。
IntelliJ IDEA
來自捷克的Jetbrains
公司。這家公司的主營業務就是IDE
。術業有專攻,這家公司做IDE的技術應該是宇宙第一。用這個IDE,經常能驚喜地發現它提供的某個功能,正是自己需要的,但自己之前根本沒意識到自己有這個需要(像是喬布斯做的產品,幫使用者想需求)。
IntelliJ IDEA
可以安裝Python
外掛,以支援Python開發。但是,Jetbrains也提供了IntelliJ IDEA
的縮水版PyCharm
,內建支援了Python開發,IDE售價也便宜了許多。不過,對於我這種沒有版權意識的低素質人來說,也沒啥感覺。
PyCharm
分兩個版本,一種是專業版,按年收費,每年三五百塊錢吧。一種是社群版,免費使用,但是功能有縮水。低素質人用軟體只用旗艦版,我也沒去了解到底縮水了哪些功能。
為了不錯過任何有意思的功能,我們直接選擇PyCharm
專業版。PyCharm
專業版雖然收費,但是也提供了30天全功能不騷擾的免費試用。如果30天后我們學Python的熱度還沒褪盡,再研究破解(或者直接用免費版)不遲。
使用Chocolatey
安裝PyCharm
:choco install pycharm
3. 使用PyCharm
對於小的Python指令碼來說,無所謂專案不專案的概念。直接新建一個空的.py
檔案,用PyCharm
開啟即可執行。但是,做軟體最好把原始碼單獨放一個目錄裡頭,這樣也方便後期擴充套件或是新增文件。
按業界慣例,編寫的第一個計算機程式,應該起名叫HelloWorld。
在桌面上Shift右鍵,開啟命令列視窗,輸入命令mkdir helloworld && cd helloworld && echo>app.py && explorer .
。這條命令是四條命令的組合,這四條命令的意思分別是:
-
mkdir helloworld
建立資料夾(MaKeDIRectory)helloworld -
cd helloworld
切換目錄(ChangeDirectory)到helloworld -
echo>app.py
傳送空白文字到app.py
,用作建立空檔案 -
explorer .
在我的電腦中開啟當前目錄(helloworld)
此時,應該能看到新建立的Python空檔案app.py
。以上操作都可以通過滑鼠鍵盤操作完成,但是命令列也是程式設計師吃飯的看家本領,多學點沒有壞處。
開啟PyCharm
,選擇File -> Open
,開啟桌面上的helloworld
資料夾。雙擊左邊資料夾樹下的app.py
,進入程式碼編輯。
在編輯介面輸入print("Hello World")
,然後在程式碼區域用滑鼠右鍵調出選單,左鍵選擇Run app
。如無意外,PyCharm會開啟一個停靠在底部的控制檯視窗,輸出”Hello World”。
在原來的控制檯視窗中,打python app.py
,應該也能看到”Hello World”的輸出。
4. HelloWorld
但是,這個HelloWorld僅僅是一個控制檯版的HelloWorld。我們要做的是一個帶視窗的HelloWorld。
from PyQt5.Qt import QApplication, QWidget# 從PyQt5的Qt包中匯入QApplication和QWidget app = QApplication([])# 建立Qt應用程式,起名為app wnd = QWidget()# 建立一個窗體,起名為wnd wnd.setWindowTitle("Hello World")# 設定窗體標題為"Hello World" wnd.show()# 顯示這個窗體 在Qt中,新建立的窗體預設不顯示 app.exec()# 執行Qt應用程式,一直接受與處理使用者的鍵盤滑鼠等事件,知道窗體被關閉,應用被退出
複製以上程式碼到app.py
,右鍵執行此程式,應該可以看到一個空窗體顯示出來,窗體標題是“Hello World”
5. HelloWorld程式碼分析
5.1from PyQt5.Qt import QApplication, QWidget
從PyQt5的Qt子模組中匯入QApplication和QWidget。PyQt5是一個圖形模組,我們藉助這個模組來繪製窗體。Qt是這個模組的子模組,父子模組用”.”符號連線。from ... import ...
即從…匯入…。匯入的多個專案之間,用逗號隔開。在Python中,如果要使用外部模組,必須先匯入。這樣這些符號才能在程式中被識別。
PyQt5這個框架(模組、包)的底層是Qt5
,一個使用C++
語言編寫的圖形介面框架。PyQt5是對Qt5這個框架使用Python語言的封裝。因此,Qt5的相關資料也適用於PyQt5
。
5.2app = QApplication([])
建立Qt應用程式,起名為app。這句程式碼之前有個空行。Python一般無視空行、空格、製表符等空白符號。這些空白符號是為了對齊程式碼、方便閱讀用的。
如果要用PyQt5
建立窗體,必須先建立一個Qt應用。函式名(...)
這種形式,在Python中叫函式呼叫。所謂函式,就是一段可以重複利用的程式碼,函式名就是給這段程式碼起的名字。我們給他一個輸入,他處理後給我們一個輸出。比如輸入1,輸出”奇數”,輸入2,輸出”偶數”。這個處理過程是任意的,可以執行任意程式碼,做任意的事。
QApplication([])
即呼叫名字為QApplication
的函式,小括號中是函式的引數(輸入)。這個函式要求的輸入格式是一個列表(可以存放0個、1個或任意多個元素的資料結構),列表使用方括號表示,裡面的各元素用逗號隔開,[]
表示空列表。QApplication
這個函式的引數我們目前不關心,但是函式的定義中這個引數是必選項,所以使用空列表。
QApplication
這個函式執行成功後,返回一個代表Qt應用程式的物件。因為之後需要引用這個物件,所以需要給他一個名字。name = value
這種語法,稱為賦值語句,即用name
表示這個value
。
5.3 wnd = QWidget()
建立一個窗體,起名為wnd。此處建立的一個窗體,只是在記憶體中建立的一個在程式邏輯上代表窗體的區域,並不是真正的螢幕上顯示的窗體。此處QWidget
也是一個函式,輸入為空,輸出(返回)一個空窗體物件。
5.4 wnd.setWindowTitle(“Hello World”)
預設的窗體的標題欄是空白的。如果要修改標題欄,需要呼叫窗體的setWindowTitle
函式。括號中的引數是一個字串(一個字元序列,因為字元序列中什麼字元都可能有,可能會和其他程式碼發生衝突,因此必須要用引號來定界),呼叫這個函式後,窗體的標題就會更新為這個字串。
5.5 wnd.show()
顯示窗體。實際上呼叫此程式碼後,並不會馬上顯示窗體。因為此時Qt應用還沒有執行,不可能會有窗體的顯示。這個函式(方法)的真正作用是標記,標記這個視窗需要被顯示。因為在Qt中,窗體的預設狀態是隱藏。
5.6 app.exec()
執行Qt應用。等待使用者對窗體的操作,並作出正確的反饋。比如,點選關閉按鈕,會關閉窗體,退出應用。理論上,如果沒有意外情況的話,這個函式是一個永遠執行不會結束的函式。因為這個函式要保證只要系統不關機,使用者不退出應用,應用的窗體就要一直顯示,而且永遠能響應使用者的點選和拖拽等事件。
6. 該系統地學習一下Python了
我不做小白很多年,已經幾乎忘了小白是怎麼思考問題的。但是上一小節直接冒出了6行功能各異的程式碼,我覺得再怎麼解釋給小白聽,小白都是要蒙逼的。所以,是時候來稍微系統地學一遍Python了。
作為過來人,我給小白們幾點忠告:
- 別指望一遍就學會,這是不可能的,碰到想不明白的問題就囫圇吞棗直接跳過,以後慢慢體會吧
- 別隻看一個人的教程,要多看看其他人是怎麼講的。每個人都有自己的侷限性,多聽聽各方的解釋,更容易學明白
- 別老盯著第一章看,要學會適當地跳讀,別在沒什麼營養的地方浪費時間
- 一定要多動手,一個字元一個字元地跟著敲,哪怕完全搞不懂,也先混個手熟
- 不要怕程式報錯。程式報錯越多(種類),人進步越快。碰到報錯要仔細閱讀報錯資訊,分析出錯原因
- 碰到不懂的名詞,多查百科,大略瀏覽一下,先讓大腦對這個東西有個概念
- 多改程式碼,就算教程沒提到,對同一個函式,也要多試試不同的引數,看看不同引數對程式的影響
- 不要保留沒用的程式碼,要多嘗試,確保每一行程式碼、每一個字元都是不可或缺,不要被無用的程式碼所羈絆
- 眼觀六路,耳聽八方,對順便掃到的各種函式要多嘗試,多猜測,多揣摩設計者的意圖
- 用好IDE,IDE的忠告都是有價值的,不要忽略它
- 不要為了學而學,程式設計是為了解決問題的,可以自己想出一些有趣的點子,自己寫程式碼去實現
- 不要強迫自己學不敢興趣的東西,大概瞭解一些語法後,再以需求出發,層層倒推,步步逼近
- 善用搜索引擎,碰到問題先推理,搞不定的話再搜尋
程式語言的語法,比較雜,比較碎,我也不知道從何教起。因此,推薦幾個學習資料,方便讀者學習參考。
- 極簡Python教程 可能不太適合小白入門,但是可作為快速參考。
-
用搜索引擎搜尋
Python入門
、Python教程
或者Python tutorial
,多挑幾個教程,選擇能看明白的。 -
嗶哩嗶哩
上搜索
Python
,有大量入門教程,自己挑選。