--- title: Python 第1堂課講義 tags: Python --- Python基本語法 === ## 變數 電腦用來**儲存資料**的物件,即稱為「變數」 其中,會用「=」==賦值==變數,將右邊的變數(或資料)儲存到左邊變數 ``` python= #EX1: 資料儲存到變數 x = 3.14159 #pi的近似值 y = 2.71828 #e的近似值 print(x+y) #EX2: 變數儲存到變數 x = x + y print(x) ``` :::warning 注意 :zap: Python中變數**不需要宣告即可使用** 因此使用變數時不用指定資料型態,Python會自動根據變數設定資料型態 例如上述例子中y的資料型態為浮點數(float) ::: :::success 補充 :mega: 「#」為Python的註解符號,#後面的程式碼並不會被執行,會直接跳過。 在Vscode中,可以選取要註解的程式碼按「ctrl+/」快速註解。 ::: ### 變數命名規則 為變數命名時須遵守特定規則,否則執行時會產生錯誤,在許多程式語言都有限制, 下列是python變數命名時的規則: 1. 變數名稱的第一個字母必須是「大小寫字母」、「 _ 」、「中文」 2. 只能由大小寫字母、數字、下底線或中文組成變數名稱 3. 英文字母大小寫不同視為不同變數 4. **變數名稱不能與Python內建保留字相同** ```python= #錯誤例子 return = 12 7eleven = 777 G&M = 85 ``` :::success 補充 :mega: 雖然Python3有支援中文變數,但建議**最好還是不要使用中文變命名!!** ::: ### 變數資料型態 在程式語言中,變數是儲存資料(數據)的記憶體空間,變數的值可被讀取及修改,除了數值以外還可以處理文本、圖形、音頻、視頻等各式各樣的數據類型,因此不同的數據就需要定義不同的儲存類型,Python數據類型很多,也允許自定義新類型的數據類型,標準的類型包含以下幾種: - **數值型態:** 1. **整數型(int):** 支援二進位、八進位、十進位、十六進位的整數型態。 2. **浮點數型(float):** 也就是小數型態,之所以稱為浮點數是因為科學記號表示法時,一個浮點小數點位置是可移動(根據所需誤差大小改變)。 3. **布爾型(bool):** 布爾值只有True與False兩種值(亦可用1或0表示)。 4. **複數型:** 形如:3+5j,跟數學上意義相同,只是虛部i改為j。 :::success 補充 :mega: 可以使用type()函式檢查變數資料型態。 ::: ```python= x = 12 y = 3.14 z = True print(type(x)) #整數(int) print(type(y)) #浮點數(float) print(type(z)) #布爾值(bool) ``` - **字串型態:** 1. **字元型態(chr):** 字元就是組成字串的元素,原則上來說電腦都是用bit儲存資料,所以電腦儲存的資料都是數字而無法直接儲存字元,所以會用相對應的數字代表字元,以英文為主的文字處理適用ASCII code,若是非英文的語言,現在多使用Unicode這個內碼制來儲存多國的語言,像是中文就是用Unicode(或是UTF-8)來編碼。 2. **字串型態(str):** 字串資料是以**單引號**或是**雙引號**所包起來的文字資料,由一串字元所組成。 ```python= str1 = "Hello World!" str2 = "Python程式語言課程\n真有趣!" print(type(str1)) print(type(str2)) ``` :::success 補充 :mega: 如果字串中需要打到特殊字元,例如:tab、雙引號、換行等符號,可利用脫逸字元,拖逸字元是以「\」為開頭,後面跟著特定格式的字元。 | 脫逸字元 | 意義 | 脫逸字元 | 意義| |:------:|:-----------:|:------:|:-----------:| | \\' | 單引號「'」 | \\''|雙引號「''」| | \\\ | 反斜線「\」 | \n | 換行 | | \\t | tab鍵| \f | 換頁 | ::: - 容器型態: list、dict、tuple 此在初階課程略過不提 ### 資料型態轉換 - **int() 轉換為整數** - **float() 轉換為浮點數** - **str() 轉換為字串** ```python= a = 123 b = "12.5" print(type(a)) #整數型態 print(type(b)) #字串型態 A = str(a) B = float(b) print(type(A)) #字串型態 print(type(B)) #浮點數型態 ``` --- ## 變數輸出(Print函式) Print函式能輸出(列印)指定項目的內容**顯示在終端機上**,語法為: ```python= print(項目1,[,項目2,..., sep = 分隔字元, end = 結束字元]) ``` - **項目1,項目2,... :** print函式可以一次列印多個項目資料,項目之間以逗號分隔。 - **分隔字元:** 代表項目之間的分隔方式,預設值為一個空白字元("")。 - **結束字元:** 列印完畢後自動加入的字元,預設值為換行字元(\n)。 ### 格式化輸出 Print函式支援參數格式化的功能,進行資料處理時,很多時候都需要對數值進行格式化轉為字串做拼接,或是某段字串與變數做串連。Python的字串格式化用於簡化靜態字串和變數的串接,並格式化變數,當然也可以對數值進行格式化成字串,字串格式化的方式有四種: **1. `百分比(%)`** 為Python最早格式化字串的方法,透過%運算符號,將在tuple中的一組變數依照指定的格式化方式輸出。如格式化: 字串(`%s`)、 十進位整數(`%d`)、浮點數(`%f`)等。 ```python= print('%d' % 50) # 格式化整數 print('%f' % 3.76) # 預設保留6位小數 print('%.1f' % 2.54) # 取1位小數 print('My name is %s'% 'Amy') # 格式化字串 ``` :::danger 缺點 :fire: - 不適合多個變數 - 可讀性低 ::: **2. `str.string`** 相較於第一個格式化方法,`'{}'.format()`方法更好用,使用大括號{}作為特殊字元,放在目標字串的指定位置,`format()`中則放入要拼接的變數、字串或數值。 - **不指定順序:** 若`{}`內不指定索引值,則依序從0開始 ```python= name = "Amy" age = 21 strr = "my name is {} and my age is {}".format(name, age) ``` - **指定順序:** 只要在`{}`內加入索引值或是關鍵字(可混合使用) ```python= >>> '{0} is {1}!!'.format('Justin', 'caterpillar') 'Justin is caterpillar!!' >>> '{real} is {nick}!!'.format(real = 'Justin', nick = 'caterpillar') 'Justin is caterpillar!!' >>> '{real} is {nick}!!'.format(nick = 'caterpillar', real = 'Justin') 'Justin is caterpillar!!' >>> '{0} is {nick}!!'.format('Justin', nick = 'caterpillar') 'Justin is caterpillar!!' >>> '{name} is {age} years old!'.format(name = 'Justin', age = 35) 'Justin is 35 years old!' ``` - **排版:** str-formatting 除了可以指定格式化變數名稱及它的位置外,亦可調整輸出樣式,只要加入^(置中)、<(向左對齊)、>(向右對齊)等字元。 ```python= # ========== 向右對齊 ============= print('{:>10}'.format('test')) # ========== 向左對齊 ============= print('{:10}'.format('test')) # 等同 print('{:<10}'.format('test')) # ============ 置中 =========== print('{:^10}'.format('test')) ``` :::danger 缺點 :fire: - 當變數太多時,要撰寫的程式碼就會過長 ::: **3. `f-string`** Python3.6+方可使用,只需要在字串前面加個f即可進行格式化,並將{}填入目標變數。把剛剛的範例改寫成f-string的方式 ```python= # f-string name = "Amy" age = 20 strr = f"my name is {name} and my age is {age}" print(strr) ``` - **排版:** 可以透過在變數後面加上冒號「:」,指定小數點後位數、或是排版格式 ```python= height = 165.57893 weight = 65.6849852 strr = f"my name is {height:.2f} and my age is {weight:.3f}" print(strr) ``` :::warning 注意 :zap: **str.string排版的方法,可以繼續沿用到f-string** ::: **4. `樣板字串(Template String)`** 在此省略不談,此方法適用於工程師在設計安全性程式碼,避免惡意代碼注入(Code injection)才會使用的方法,為較高階的編碼方式。 ### 總結 以`f-string`為Pythonic的方式,也是最簡便、好用的格式化輸出方式, 但是需要Python版本3.6+以後才可使用! 其中,`f-string`可直接在`{}`放表達式與呼叫函數。 ```python= print(f'A total number of {100 * 2 + 20}') print(f'Complex number {(2 + 2j) / (2 - 3j)}') print(f'convert STUDENT to lower words are {"STUDENT".lower()}') import math print(f'The answer is {math.log(math.pi)}') score = 90 print(f'My score is {score}, so I am {"good" if score > 80 else "bad"}.') ``` --- ## 運算子 - **算術運算子** +, -, *, /, %(取餘數), //(取得整除的商數), ** (次方, 7**2 = 49) ```python= a = 100 b = 2 print(a%b) print(a//b) print(a**b) ``` - **關係運算子** ==(等於), !=(不等於), >(大於), <(小於), >=(大於或等於), <=(小於或等於) ```python= a = 50 b = 30 print(a==b) print(a!=b) print(a>b) ``` - **邏輯運算子** not(否), and(且), or(或) - **複合指定運算子** +=, -=, *=, /=, %=, //=, **= ```python= x += x #相當於 x = x + 2 x -= x #相當於 x = x - 2 #其他依此類推 ``` ## 條件判斷式 ```flow st=>start: 條件 e=>end: 執行條件內敘述 op=>operation: 敘述1、敘述2... op2=>operation: 跳出判斷式 cond=>condition: 是否滿足條件 st->op->cond->op2 cond(yes)->e cond(no)->op2 ``` ```python= if(condition): statement elif(condition): statement else: statement ``` :::success 補充 :mega: - if 後面的條件可以加括號,也可以省略,如果沒加括號需要有一空白隔開。 - **巢狀判斷式**表示許多層判斷式疊加。 ::: --- ## 縮排 Python程式語言裡面的縮排可用來判斷「**代碼與前一行的關係**」,功能就如同C、C++語言裡面的大括號,**可以將程式不同的「層級」作區分**,**通常在「:」下一行就需要縮排,表示那個程式區塊為函式「內部程式」**。 ```python= a = 5 b = 3 if a > b: print(f'a+b={a+b}') ``` 此時,`print(f'a+b={a+b}')`前面就有縮排(tab鍵),**表示這個程式區塊在if內部執行**,符合「if」條件才會執行,如果不滿足就不會執行。 :::danger 挑戰 :fire: - f-string進階用法: https://tw511.com/a/01/9107.html :::