`取自《初學Python的第一本書 從基本語法到模組應用》` 周長:2 * pi * r 面積:pi * r ** 2 --- int轉換成float以後,就是多加.0在後面; float轉換成int的話,是將小數點後面的東西無條件捨棄。 四則運算的話,int和float相遇最後結果會變成float,以求保留較多的資料。 --- 布林值: 0會被當成偽,1會被當成真,但0以外的所有數字也會被當成真 --- **算術運算子** +加法 -減法 *乘法 /除法 ** 計算次方 // 整數除法 %取餘數 **指定運算子** +=、-=、*=、/=、//= **比較運算子** == 相等 != 不相等 < 小於 > 大於 <= 小於等於 >= 大於等於 **布林(邏輯)運算子** and 且,左右兩邊均為真,結果為True,否則為False or 或,左右兩邊至少有一為真,結果為True,否則為False not 非,真偽值反轉,True變為False,False變為True ⚠️使用順序為not -> and -> or --- 二進位 -> 0b或0B (b代表binary) 八進位 -> 0o或0O (o代表octal) 十六進位 -> 0x或0X (x代表hexadecimal) --- str(0o11) # 以其他基數表達的int,仍會先轉回10進位再處理 '9' **字串(str) : 是用兩個單引號或兩個雙引號括起來的** --- print(' \ 'We will rock you! \ '') # 外層的單引號仍然是用來表達字串的開頭跟結尾,但內層的單引號被轉義回一般無特殊含義的單引號 'We will rock you!' \ 轉換原先含義 \n 換行 \t Tab --- +結合、*複製、[]取字元、[start : end : step]切片、len()取長、split()分割、join()結合 ⚠️字串[起始位置:結束位置:間隔值] 串列 list,就是一連串的元素(單一的資料)放進一個表裡面的東西 ``` 指定至同個串列 lst_2 = lst_1 複製串列 lst_2 = lst_1[:] ``` join可以將串列連接,但必須要全都是字串 指定index可以對list的對應的元素做更動 --- **將資料型態轉換為整數** ``` int(欲轉換之內容) ``` * 利用int()可分別將浮點數、布林值、字串轉換為整數 * 若浮點數非整數,轉換成整數時原則上向0取整數 * 將布林值轉換為整數時,True會得到1而False會得到0 * 字串內的字元必須是整數才能進行轉換 **將資料型態轉換為浮點數** ``` float(欲轉換之內容) ``` * 利用float()可分別將整數、布林值、字串轉換為浮點數 * 將布林值轉換為浮點數時,True會得到1.0而False會得到0.0 * 字串內的字元必須是數值才能進行轉換 **將資料型態轉換為布林值** ``` bool(欲轉換之內容) ``` * 利用bool()可分別將整數、浮點數、字串轉換為布林值 * 原始資料型態為數值時,僅傳入0或0.0時會回傳False,其餘皆為True * 原始資料型態為字串時,僅傳入空字串時會回傳False,其餘皆為True **將資料型態轉換為字串** ``` str(欲轉換之內容) ``` * 利用str()可分別將整數、浮點數、布林值轉換為字串 --- * 利用upper()可將字串中的英文字母全部轉換為大寫 ``` 字串.upper() ``` * 利用lower()可將字串中的英文字母全部轉換為小寫 ``` 字串.lower() ``` --- ``` 字串.replace(舊內容, 新內容, 最大替換次數) ``` * 利用replace()可將字串內原本的內容替換為指定的新內容 * 當沒有輸入最大替換次數時,會將所有符合條件者都會被替換 * 若有輸入最大替換次數n時,則只有前n個符合條件會被替換 ``` 字串.split(分隔符號, 最大分隔次數) ``` * 利用split()可依指定的符號分隔字串,分隔後的字串會組成為一個串列 * 沒有輸入分隔符號時,預設用空格分隔 * 分隔符號可以是各種字元,包含文字、數字、符號、跳脫字元等 --- | lt.append(element) | 將element接到lt的尾巴 | | ------------------------ | ---------------------------------------------------------- | | lt.extend(lt2) | 將lt2的所有elements依序接到lt的尾巴(相當於lt+=lt2) | | lt.insert(index,element) | 在index處插入element(原本該位置及其後的元素都往後挪) | | del lt[index] | 將index處的element刪去,其他element往前遞補 | | lt.remove(name) | 從lt中搜尋符合name的element,將其刪去,其他element往前遞補 | | lt.index(name) | 從lt中搜尋符合name的element,並將其索引值回報 | | xx in lt | 如果xx這個元素在lt中的話則為True,否則為Flase | | lt.count(name) | 計算name在lt出現的次數 | | lt.join(sep) | 使用sep字串,將lt的元素一個一個接起來 | |lt2 = sorted(lt)|將lt排序過後(按元素的順序由小到大),存放到lt2。(lt不會被改變)| |lt.sort()|將lt於原地排序| |len(lt)|取得lt的元素個數。(想成取長度也行)| |lt2 = lt.copy()|lt2~lt4都代表複製lt的所有元素並產生新的list| |lt3 = list(lt) | |lt4 = lt[:]| * len(lst):計算lst有幾個內容 * lst.count(內容):計算內容在lst共有幾個 * lst.pop(位置): * 若無指定位置,程式會移除串列最後的內容 * 此指令會回傳所移除的內容 * lst.reverse():可**反轉**lst裡的內容 * lst.sort():可**排序**lst裡的內容 * 內容 in lst:指令會回傳布林值,若內容有在串列中會回傳True,否則回傳False --- **元組tuple** 是固定串列,元素無法被單獨修改 --- **字典 dict() or {}** 一個鍵(key)對一個值(value) ex: key:value, key:value (key必須要是hashable的資料型態) 要取得某個key對應的value值,就像list是用index來取得,字典則是用dict[key] | dict1.update(dict2) |將dict2的內容複製後放到dict1(key重覆時,dict2的value優先)| | -------------------- | --- | | del dict1['key'] |dict1的'key':'value'的對應從dict1中刪去| | dict1.clear() |清空整個dict1的對應( 也可以用dict1 = dict() )| | 'XXX' in dict1 |檢查dict1是否有'XXX'這個key| | dict1.keys() |給出整個dict1的所有key (如果需要用list的形式表達,請用list()將其框住)| | dict1.values() |同上,但給出的是所有value| | dict1.items() |給出一個一個的key:value對應 (每對都以tuple形式給出)| | dict2 = dict1.copy() |複製一份dict1的內容,生成一個dict2的字典。 (註:如果是用dict2 = dict1,只會讓兩者共用一個字典,修改會動到同一個!)| --- **集合 set() or {}** 本身只有key,且key不能重複 每個key之間使用','連接,增加key使用add() ( add()一次只能新增一個;update()可新增多個 ) ⚠️ { }代表字典,若要產生空集合,只能使用set() |st1 & st2 / st1.intersection(st2) |取st1和st2的交集 | | -------- | -------- | |st1 | st2 / st1.union(st2) | 取st1和st2的聯集| |st1 - st2 / st1.difference(st2)|取st1和st2的差集 |st1 ^ st2 / st1.symmetric_difference(st2)|取st1和st2的互斥或 (exclusive or,也就是只有存在在其中一個集合,不存在於另一個集合的元素才會被取出來)| |st1 <= st2 / st1.issubset(st2)|檢查st1是否為st2的子集| --- ``` if 陳述式1: 要做的事情1 elif 陳述式2: 要做的事情2 ... else: 要做的事情n --- while 陳述式: xxx yyy zzz ... while 陳述式: xxx else: ooo * break 強行終止現在所在的迴圈,不繼續往下執行 continue 跳過這次的迴圈(只跳過這次),回到while --- for xxx in ooo: --- range(start,stop,step) --- while xxx: ooo rrr while yyy: uuu vvv www xxx成立時,進入迴圈 -> ooo -> rrr yyy成立時,進入迴圈 -> uuu -> vvv -> 重新檢查yyy,若成立則繼續運行, 否則執行完www,會回到xxx檢查 ⚠️ 內層執行完才會輪到外層 ``` --- **列表生成式 list comprehension** 算式 for 單項 in 迭代項目 **字典生成式** {key:value for 單項 in 迭代項} **集合生成式** {算式 for 單項 in 迭代項目} --- 函式 function ``` def 函式名 (變數1,變數2,變數3,...): xxx yyy ... return ooo ``` --- 全域( global)變數 區域(local)變數 --- **Lambda運算式** 預設排序為小到大,若要大到小,需再下 reverse=True, ex: lt.sort(key = lambda box: box[1], reverse=True)