社團事務
Python 是目前世界上最廣泛使用的程式語言之一,也是對程式新手來說一大福音,簡單易懂、規格整齊、功能大致齊全,新手也可以在其官網上找許多資源。
基本上入門學習使用任何編譯器都可,但是長久來說選擇編譯器也是一門學問
推薦的編譯器有
最後溫馨提醒,記得用暗色主題
首先我們先學如何與電腦互動,也就是輸入及輸出
如果想要輸出應該這麼打:
%d | %s | %f |
---|---|---|
int | string | float |
如果想要輸入應該這麼打:
變數(variable) 簡單來說,就是對一特定值取名字。
變數是箱子,把你想放的東西(值value)放進去,可以用變數名稱(箱子的標籤)找到它。
變數的取名也是一大藝術,為了增加程式碼的可讀性,我們會將變數名稱盡量使我們看得懂像是speed、sum 等等。
但同時避免使用到程式保留字、特殊字元或其他,例如:for、int、!@$%&±、0oO1lI 等。
箱子也是有分各種意義的箱子,特定型別、大小的箱子只能裝特定型態、大小的箱子。
變數型別有:
字串可以看作一串字元,可以想像成把一堆箱子串在一起,規則近似串列。
0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
p | y | t | h | o | n |
len()
函式來取得一字串的長度split()
來分割字串當對一個數作運算時,變數之型態會隨需求轉換
進行強制轉換格式(短暫):
聽起來很專業的名字,但其實你們都學過,下面我們來看看有那些ㄅ
簡單來說,加減乘除餘而已啦!
好酷的名字,但是新手最大的噩夢,認真看好囉!
以確認關係(比較)為用途的運算子~
條件式的好幫手,增加判斷邏輯是否正確的條件。
以下介紹:
x | y | and | or |
---|---|---|---|
1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 |
0 | 0 | 0 | 0 |
挖,抽象的概念來了,首先我們要知道電腦是以 1 與 0 所構成,將每個數字、字元等等轉變成所謂的 2 進位( binary )。
例如:
10 => 00001010
18 => 00010010
好了大家繫上安全帶,準備飆車囉!
值得注意:其實就算範例都取 8 位元的 01數字串 ,實際計算得依照型態作改變。
假如我使用 int 儲存該變數,應該有 4 位元組,也就是 32 位元下去計算喔!
正如同數學上的 先乘除後加減,有括號先算 ,運算子之中也是有分順序級數ㄉ,在程式運行的時候需多加留意。
當程式碼運行到某些地方時,如果需要加些條件選擇性執行程式碼,就會需要用到這種好用的東西。
如果我們將其細分,此語法結構可分為 2 個部分:條件 以及 敘述句( 該做甚麼事 )
而 條件 裡我們可以運用 條件運算子 和 邏輯運算子 以達成我們的目的
判斷 True、False 的規則,可參考邏輯運算子的定義
圖示
結構
可以看做比較簡潔的if-else判斷句,當if-else判斷句內要做的事情較少時可以考慮使用
<條件為 True 時做的事> if <判斷句> else <條件為 False 時的做的事>
也就是將 if 條件句包在另一 if 條件句之內
```python
if 條件句_1:
做甚麼事
if 條件句_2:
做甚麼事
做甚麼事
```
此為 python 中較特別的功能,可以將一個區塊之程式碼先執行看看,如果發生例外事件就會引發( Raise )程式執行另一區域。
至於為什麼要這樣,是因為 Python 是直譯語言,所以會以發起例外 (exception) 的方式來中斷程式的執行。實際上,很多情況下我們需要自行控制可能會產生例外的程式碼,因為例外並不全然是程式的邏輯錯誤,例如程式中打算開啟檔案,然而實際檔名並不存在,這種情況下,我們需要的是例外發生後的處理動作,而非中止程式的執行。
迴圈( loop )就是將同一件事重複執行 n 次,
而我們可以將迴圈細分成:
for 迴圈 為較易理解之迴圈,結構完整但語法需記住,是初學者常忘記的一個難關。
不過,其實 for 迴圈有許多變形,此型為最基礎,詳細內容之後會介紹~
while 迴圈 較為注重結束條件,寫不出 for 迴圈 時,可以試著用 while 迴圈 解
break
break 可以離開目前 for、while 等區塊,並前至區塊後下一個陳述句。
continue
continue 會結束接下來區塊中的陳述句,並跳回迴圈開頭繼續下一個迴圈。
串列( list )可以將 不同或同一型別 且 一連串無或有關聯 的變數儲存的一系列記憶體。
串列自由度高,使用前不需要先指定使用空間,若需要變動,則可以利用多種函式達到此一效果。
最後要講一個超級重點,所有關於 list 的索引值( index )都是從 0 開始:
Index | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
Element | 10 | 20 | 30 | 40 | 50 |
如前言所述, 串列是變數在連續的記憶體上併排在一起的東西。而一維串列就是只有一個維度的串列,宣告一維串列的方法如下:
.
前串列)之尾端<元素> in <串列>
<元素> not in <串列>
取值
當要存取一維串列的值時,可以使用運算子[]和索引來存取特定的元素。
輸入
輸出
應該注意:如果使用超過串列長度的索引值,會發生不可預期的結果。
運算
沒錯,list 也可以運算耶,這就是 python 強大的地方
上面的
一維串列若將其視為一條線( X 軸 ),
二維串列則可視為一個面( X、Y軸 )、
三維則是一個體( X、Y、Z軸 ),
而更高維的就因超出我們的理解範圍,所以我們也較少用。
但其實二維串列也可看做矩陣
不過,在任何程式語言中其實沒有所謂的多維串列,所謂的串列不過是串列中的串列罷了。
二維串列
此陣列主要用於有 2 組數字與你所需要存取的對象有關聯,
如:幾班幾號的數學成績、幾月幾日的體重等等。
這裡假設有兩班、一班四人,串列存放值爲該學生成績
多維串列
也可以宣告三維串列與三維以上的串列。
例如:
但超過四維就比較難以想像,因此一般較少使用。
字典(dictionary)就像一本正常的字典一樣,一個字詞(KEY)對應到一個意思(Value)。
它的每一組資料都包含一個關鍵字與一個值。
字典中的資料為一個關鍵字對應到一個值,如:key : value
用冒號來分個關鍵字與值,用逗號分個資料
{key1 : value1, key2 : value2, ....}
舉個例子,用一個字典儲存一個人的資料
可以用方括號來取得對應的值
欲取得資料不存在時,用方括號的話程式會直接報錯,若要解決這個狀況可用 .get() 函式
可以用.get()
函式來取得字典中的資料
get函式包含兩個值
※沿用上面 Alice 的資料
用方括號可更改資料或新增資料
在一字典中新增另一字典的值
執行結果
有序容器內的資料會依照順序排列;無序容器內的資料會按照特定方式排列而非指定順序。
list 是一個有序容器,其儲存的資料會按照程式插入的順序排列
dict 是一個無序容器,其儲存的資料會依照 key值排序
簡單來說,函式就是外包給其他地方加工啦,而且可以順便達到簡化跟美化程式碼的功能。
函式中最注重的就是在於參數之中的傳遞,而且盡量將函示放置在主函式前,這樣一來,不僅不會破壞程式的結構,還能增加程式的可讀性。
傳遞是函式中最重要的環節。
將一個值傳遞給函式做,稱為參數;
函式執行完傳遞回來的值,稱為回傳值。
假如需要回傳時,使用 return 幫助傳回。
我們以2數相加為舉例:
遞迴就是自己呼叫自己,與數學上的遞迴關係式很像。
我們拿費氏數列作舉例:
數學上遞迴關係式:
程式上:
若我們以計算 n=5 時的費波那契數列為例,他在進行函式執行時的呼叫順序如下:
將其拆項,看他一步一步的步驟就會這樣:
- 主函式傳入 n=5
- 進入 else 中,執行 F(4) + F(3),所以呼叫 n=4 與 n=3
- 循環
- 一直到某次執行 F(1) + F(0),所以呼叫 n=1 與 n=0
- 分別進入 if 與 else if 中,回傳 1 與 1
- 因此 F(1) + F(0) = 1 + 1
- 循環
- 得到F(4) + F(3) = 5
- F(5) = 5
而我們會發現這個效率不佳,重複呼叫太多次,導致時間複雜度超級高,
所以這時候我們就可以進入到演算法的世界拉 ~
匿名函式(lambda)其實就是比較簡潔的宣告函式的方式。
宣告: <函式名稱> = lambda arg1, arg2, arg3,....:expression
以定義一個比較兩數大小的函式為例
有學過其他語言的人可能會知道 switch case 這個好用的東西,
但 Python 沒有 switch 陳述句 QQ,
但可以透過 lambda 配合 dictionary 來模擬它。