# Python基礎語法筆記
## 一、變數
### 1、命名規則
由英文、數字、底線組成,但不可用數字開頭,也不能與python內建保留字相同。
:::info
例:
| 變數名 | 可否使用 |
|:------- |:------------------ |
| abc_123 | 可 |
| a bc | 不可(空白字元) |
| Class | 不可(與保留字相同) |
:::
### 2、指派
不須宣告,依指派值自動設定資料型態。
:::success
語法:變數名稱 = 指派值
:::
:::info
例:
```python
a=5 #a為整數,值為5
b=3.14 #b為浮點數,值為3.14
d='abc' #c為字串,值為abc
d=[1,'a','ABC'] #d為列表,值為1,'a','ABC'
```
:::
## 二、資料型態
### 1、型態類別
* 數值型態:int(整數)、float(浮點數)、bool(布林)
* 字串型態:str(字串)、chr(字元)
* 容器型態:list(列表)、dict(字典)、tuple(元組)、set(集合)
### 2、型態轉換
* python自動轉換
:::info
例:
```python
a=10 #a的型別為int,值為10
a=a+1.5 #a的型別此時被轉變成float,值為11.5
```
:::
* 程式碼強制轉換
:::success
語法:資料型態()
:::
:::info
例:
```python
int() #將括號內的資料轉換為int
float() #將括號內的資料轉換為float
str() #將括號內的資料轉換為str
list() #將括號內的資料轉換為list
```
:::
## 三、輸出與輸入
### 1、輸出
:::success
基本格式:print(項目1,項目2,......,sep=分隔字元,end=結束字元)
其中sep預設為' '(空白字元),end預設為'\n'(換行字元)
:::
:::info
例:
```python
print('abc',123) #輸出為abc 123
print(1,45,sep='23',end='67')#輸出為1234567
````
:::
補充:跳脫字元
:::spoiler
| 跳脫字元 | 說明 |
|:--------:|:-----------:|
| \\ | 輸出\ |
| \' | 輸出' |
| \n | 換行字元 |
| \t | (tab) |
| \b | (backspace) |
:::
#### 格式化輸出
有三種方式可以達成格式化輸出,分別是:
* %-formatting
* str.format (Python 2.6+)
* f-string (Python 3.6+)
:::info
例:
```python
#%-formatting
print('a%s,%d %f') % ("bc",123,3.14) #輸出為abc,123 3.140000
#str.format
s='a{e},{f} {g}'.format(e='bc',f=123,g=3.14)
print(s) #輸出為abc,123 3.14
#f-string
e,f,g='bc',123,3.14
print(f'a{e},{f} {g}') #輸出為abc,123 3.14
```
:::
### 2、輸入
:::success
語法:變數=input([提示字串])
經由input( )函式讀入的資料,其資料型態皆為字串
:::
:::info
例:
```python
s=input() #s為字串
i=int(input) #i會將輸入的字串轉移成數字
a,b=map(int,input().split()) #一行輸入多個變數時須使用map
l=list(map(int,input().split())) #l將單行輸入的數字轉移成列表儲存
m=[int(x)for x in input().split()] #效果同上
```
:::
### 3、註解
* #為單行註解
* 多行註解可使用'''前後包括
:::info
例:
```python
a=0
# a=1 這是單行註解
'''
a=2
a=3 這是多行註解
'''
a=a-1
print(a) # -1
```
:::
## 四、運算子與運算式
* 算術運算子:+, -, *, /, %, //(整數除法), **(次方)
* 關係運算子:>, <, >=, <=, ==, !=
* 邏輯運算子:and, or, not
* 成員運算子:in
* 位元運算子:&(且), |(或), ^(互斥或), ~(反相)
* 位移運算子:<<(向左位移), >>(向右位移)
其中算術運算子可以簡寫 例如將a=a+1簡寫成a+=1
成員運算子的運算結果會回傳布林值
## 五、if敘述
:::success
語法:if(條件式):程式區塊
若程式區塊有多行 則須寫在下一行並tab一大格 不可直接寫在條件式右側
切記條件式後方要接冒號
:::
可與if搭配的還有else和elif,else的後方不須條件式
程式放if的數量沒有限制(可以巢狀放置)
:::info
例:
```python
#正負數判斷
s=int(input())
if(s>0):print(1)
elif(s==0):print(0)
else:(print(-1))
```
```python
#閏年判斷
y=int(input())
if(y%100==0):
if(y%400==0):print(1)
else:(print(0))
else:
if(y%4==0):print(1)
else:(print(0))
```
:::
## 六、迴圈
### 1.for
:::success
語法:for 變數 in 序列:程式區塊
若程式區塊有多行 則須寫在下一行並tab一大格 不可直接寫在條件式右側
切記序列後要接冒號
:::
變數會依序走訪序列中元素
序列可為range函式、string、list、tuple、dict、set
:::info
例:
```python
for i in range(6):print(i)
#0
#1
#2
#3
#4
#5
```
```python
a=['a','b','c']
for j in a:print(j)
#a
#b
#c
```
:::
### 2.while
:::success
語法:while 條件式:程式區塊
若程式區塊有多行 則須寫在下一行並tab一大格 不可直接寫在條件式右側
切記條件式後要接冒號
:::
:::info
例:
```python
a=5
while(a>0):
print(a,end='')
a-=1
#54321
```
:::
### 3.break&continue
* break置於迴圈內可直接跳出迴圈
* contiune置於迴圈內可立刻執行下一次迴圈
:::info
例:
```python
a=5
while(a>0):
if a==4:
a-=1
continue
if a==1:break
print(a,end='')
a-=1
#532
```
:::
### 4.巢狀迴圈
同if 可以在迴圈內放迴圈
:::info
例:
```python
a=5
for i in range(a):
for j in range(i+1):print('*',end='')
print()
#*
#**
#***
#****
#*****
```
:::
## 七、常用內建函數
* abs():回傳絕對值
* chr():ASCII轉字元
* ord():字元轉ASCII
* eval():執行字串運算式,例:eval('pow(7,2)')=49
* float():將括號內資料轉成服點數
* int(x,base=10):將(base)10進制的表達式(字串)轉成10進制整數
* len():回傳物件長度
* list():將字串、元組等可迭代序列轉換列表
* map():將可迭代序列丟入函數運算,回傳一個迭代器(輸入時常用)
* max():回傳括號內最大值
* min():回傳括號內最小值
* pow(base,exp[,mod]):回傳$base^{exp}\%mod$
* bin():將括號內10進制數字轉成2進制
* oct():將括號內10進制數字轉成8進制
* hex():將括號內10進制數字轉成16進制
## 八、字串
Python對於字串的操作能力相當強大,可以直接進行串接或者擷取
:::info
例:
```python
s='0123456789abcde'
print(s[10:]) #abcde
print(s[:5:]) #01234
print(s[3:7]) #3456
print(s[::-1]) #edcba9876543210 題外話:s[::-1]可以得到s的反轉字串
a='fghi'
s=s+a
print(s[10:]) #abcdefghi
```
:::
## 九、例題
:::info
## 輸入&輸出
### toj - 5 / Hello World!
https://toj.tfcis.org/oj/pro/5/
### toj - 92 / 天線寶寶說你好
https://toj.tfcis.org/oj/pro/92/
:::
:::info
## if敘述
### TOJ - 94 / 判斷季節
https://toj.tfcis.org/oj/pro/94/
### TOJ - 109 / 猜拳比賽
https://toj.tfcis.org/oj/pro/109/
### TOJ - 114 / 我閉著眼
https://toj.tfcis.org/oj/pro/114/
:::
:::info
## 迴圈
### TOJ - 3 / GCD
https://toj.tfcis.org/oj/pro/3/
### TOJ - 597 / 單層迴圈12
https://toj.tfcis.org/oj/pro/597/
### TOJ - 104 / 星星樹
https://toj.tfcis.org/oj/pro/104/
### TOJ - 110 / 六芒星的祝福
https://toj.tfcis.org/oj/pro/110/
### TOJ - 170 / 各種星星樹
https://toj.tfcis.org/oj/pro/170/
:::
---
# THE END