# Python 教學 ### 1. 注意事項 * 由於沒有大括號,所以 Python 需使用「縮排」(indent)。 * Python 句末不需要分號。 * 不用使用資料型別來宣告變數。 ex : int variable; * 註解都是使用 `#`。 * 目前 Python 的社群已相當成熟,所以市面上已有許多套件可以使用,那引用這些套件就要使用以下的方法 : ```python= import os import pandas as pd from time import time ``` * Python 是使用「直譯器」。 v.s 編譯 (compile) ### 2. 變數宣告及運算 如同注意事項所說,變數宣告並不需要使用資料型別,而是直接使用 `=` 來賦予值,直譯器會「自動」幫你識別資料型態。 ```python= variable = 1 print(type(variable)) # int variable = 'a' variable = "string" variable = True ``` 而運算子有 `+`, `-`, `*`, `/`, `//`, `%`,其中 `//` 比較特殊,它是叫做整數除法,就是除完後無條件捨去小數點。 <註> : 整數並沒有範圍,可以視為無限大,但很耗空間。 ```python= num1 = 7 num2 = 3 print(num1 + num2) # 10 print(num1 - num2) # 4 print(num1 * num2) # 21 print(num1 / num2) # 2.333 print(num1 // num2) # 2 ``` 若兩個整數相除,結果還是會是小數,若我們要強制轉型 (只留整數),除了使用整數除法外,還能使用 : ```python= num3 = int(num1 / num2) ``` ### 3. if - else 呈述句 當我們面臨「滿足這些條件才要執行」的時候,我們就必須使用 if-else 呈述句,那在搭配 if-else 時會有選擇運算子,包括 `==` (等於), `!=` (不等於), `~` (否),而有多個條件時,我們還會使用 `and` (且), `or` (或)。 範例 : ```python= num = 6 if num % 2 == 0 and num < 10: print("1 yes") # 1 yes elif num % 2 == 0 and num > 10: print("2 yes") else: print("unknown") ``` 巢狀 if-else : ```python= year = 2023 if year % 4 == 0: if year % 400 == 0: print("leap year") elif year % 100 == 0: print("normal year") else: print("leap year") else: print("normal year") # normal year ``` ### 4. 迴圈 迴圈就是能夠重複地做很多事,而範圍便是由後面的 `range()` 訂的。而有以下幾種分別 : * range(a, b, n) : 從 a 到 b-1,每次增加 n * range(1, 10, 1) : 從 1 到 9,每次遞增 1 。 * range(10, 1, -1) : 從 10 到 2,每次遞增 -1 。 * range(1, 10, 2) : 從 1 到 8,每次遞增 2 。 ```python= for idx in range(1, 10, 1): print(idx) ``` while 迴圈 : ```python= cnt = 1 while cnt < 10: print(cnt) cnt = cnt + 1 ``` ### 5. 串列 (list) 串列 (list) 有點像陣列,但我們並不需要先宣告他的大小,而是直接使用 `[]` 來代表他就可以。 ```python= list1 = [1, 2, 3] ``` 而要如何將元素加進去 list 裡面呢? 使用 `append()`。 ```python= list1.append(4) print(list1) # [1, 2, 3, 4] ``` list 裡面可以包含不同類型的資料,例如 : ```python= list1 = ["I am kevin.", 1, True, [1, 2, 3]] ``` 我們可以利用 `for` 迴圈來遍歷 list,一共有兩種方法 : 1. 先利用 `len(list1)` 來取得串列的大小,在使用 `idx` 來當索引值,便可以利用索引值讀去串列的內容 : ```python= length = len(list1) # length = 4 for idx in range(length): print(list1[idx], endl=" ") # 1 2 3 4 ``` 2. 利用 `in` 來「直接讀取」串列裡面的內容 : ```python= for num in list1: print(num, endl=" ") # 1 2 3 4 ``` ### 6. 元組 (tuple) tuple 也是用來儲存資料的一種資料結構,不過不同於 list 的地方是,tuple 內部的元素並不能進行「更動」,若更動它,直譯器就會直接給我們錯誤的訊息。我們可以使用 `()` 來代表 tuple。 ```python= tuples = (1, 2, 3) tuples[2] = 4 ``` 錯誤訊息 : ``` Traceback (most recent call last): File "python.py", line 2, in <module> tuples[2] = 4 TypeError: 'tuple' object does not support item assignment ``` ### 7. 字典 (dictionary) 字典有兩種儲存的值,一個是 key,一個是 value。key 會對到 value: * 一個 key 對到 一個 value。 我們通常會以 `{}` 來代表 dictionary,而儲存格式會是 `key: value`,key 跟 value 沒有指定的資料型態,所以意思是都可以。 ```python= dict1 = { "a": 3, "b": 4, "c": 5, } ``` 若要讀取 value,則只需要讀取 `dict[key]` 即可。ex : ```python= print(dict1["a"]) ``` 如何遍歷 dictionary ? 使用 `dict.items()` 去讀取 dictionary 的每一行。 ```python= for key, value in dict1.items(): print(key, value) # a 3 # b 4 # c 5 ``` ### 8. 函式 (def) 當我們需要多次用到某段程式碼,或想要讓 debug 變方便,則我們就需要將程式碼「模組化 (module)」。 簡而言之,就是將程式碼切片(slice),變成許多大大小小的函式。 ```python= def add(a, b): return a+b c = add(1, 2) # c = 3 ``` 1. 函式可以回傳多個值。 2. 函式回傳的資料型態並不受限制。 3. 函式裡面可以再寫函式。 ```python= def calculator(a: int, b: int) -> list: def to_list(a, b, c, d): list1 = [a, b, c, d] return list1 list2 = to_list(a+b, a-b, a*b, a/b) return list2 list2 = calculator(4, 2) print(list2) ``` 如果只是想宣告,但還不想寫,我們可以利用 `pass` 來先省略。 ```python= def skip(): pass ```