`取自《初學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)