---
# System prepended metadata

title: Python基礎語法筆記
tags: [Tag(change me!)]

---

# 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
