# Python
作業的截圖可以交到 ncucsiepyjh.gmail.com
或是用手機拍照,或存成文字檔,於下次上課交給助教
## 安裝Python及Pycharm
### 安裝python
https://www.python.org/downloads/windows/


**接著按Install Now**
---
### 安裝pycharm
https://www.jetbrains.com/pycharm/download/#section=windows
:::success
**按右邊的community的download**
:::

:::success
**確認選項都跟圖片一樣再按next(第三張的creat associations也要打勾)**
:::


### 創建project
:::success
按New Project
:::

:::success
接著按create
:::

### 創建python
:::success
創一個python檔
:::

:::success
為檔案命名
:::

## 資料型態
### 資料型態介紹
* **甚麼是資料型態?**
資料型態就是在Python中,各種資料,例如:數字、文字、串列等等物件的型態。

* **常見的資料型態有:**
數字:整數(int)、符點數(float)
布林值:真(True)、假(False)
文字:字串(String)、字元(Char)
其他,如:序列(List)、集合(Set)、字典(Dictionary)、元組(Tuple)
### 整數型態(int)
* **整數,即包括正整數、負整數、零這三個範圍的數字**
例如:
```
正整數:1、100、948
負整數:-2、-14、-6
零:0
```
### 浮點數型態(float)
浮點數,即我們常見到的“小數”
隨著點的位置的改變,我們稱作“浮動(floating)” ,因此小數又被稱作浮點數
```python=
x=10.0
y=-5.5
```
### 型態轉換
轉換成整數的形態時,使用int( )
轉換成浮點數的形態時,使用float( )
:::warning
註:浮點數轉整數是無條件捨去法。
:::
```python=
x=int(10.5) ## x=10
y=float(5) ## y=5.0
```
### 布林值Boolean(bool)
布林值僅有兩種,真(True)以及假(False)
有時我們也用1來表示真;用0來表示假。
```python=
b1=True
b2=False
```
### 運算子
* **什麼是運算子(符)?**
運算符就是連接左右兩邊元素,並產出結果的符號。
```
2+1==3
6*7==42
(2+1==3) and (6*7==41) → False
```
#### **算數運算子**

#### **指派運算子**

#### **關係運算子**

#### **邏輯運算子**

## 輸入(Input)與輸出(Output)(I/O)
### 輸出
在Python中,我們使用print( )來輸出我們想要的文字(Words)或數字(Number)
但是,如果在數字外加上雙引號或單引號,這個“數字”會被Python判定為“文字”
```
print(123) //int
print("123") //字串
```
### 合併輸出
當我們想合併字串、字元或數字時,我們可以直接使用+來完成
```python=
print("hello"+"world")
```
```
helloworld
```
### 輸出多次
當我們想重複輸出一個字或字串時,我們可以直接使用*來完成
```python=
print("123"*5)
```
```
123123123123123
```
:::info
註:程式碼輸出時‘ , ’(逗號)與‘ + ’(加號)的差異:
輸入:
```python=
print("a"+"b"+"c")
print("a","b","c")
```
輸出:
```
abc
a b c
```
:::
### end=“ ”
當我們想要讓輸出後不換行,我們可以使用end=“ ”來達成我們的目的,我們不難發現,當沒有end=“ ”存在的時候,系統預設的print( )在最後會自動換行
```python=
print("abc",end="def")
print("123",end="")
print("456")
```
```
abcdef
123456
```
### 輸入
當我們要輸入數字或文字到電腦時,我們在程式碼編譯處寫上input( )
如:
```python=
x = input()
```
意思是將使用者輸入的內容指派給x
想讓使用者在輸入前看到你想問的問題可以這麼做:
```python=
x = input("你要不要問問神奇海螺?")
```
這時使用者會看到:
```
你要不要問問神奇海螺?
```
### 篩選輸入的資料型態
在前面我們有提到,使用int( )、float( )可以改變數字的型態
當然,我們也可以篩選輸入的資料型態,例:
```python=
x = int(input())
```
當輸入的內容無法被轉換成整數時(字元、字串),系統會顯示錯誤
例:輸入hello

## 字串切片(Slicing;Slice)
首先,我們要先聊聊字串中每一個字的位置是如何被編排

:::warning
記住是從0開始編號!
:::
### 字串取值
利用[ ]來取值
```python=
x = "hello world"
print("第6個位子是:",x[6])
```
```
第6個位子是: w
```
### 起始點(Start)、停止點(Stop)以及間隔(Step)
start 預設為文字編號第一個
stop 預設為文字編號最後一個
step 預設為1

```python=
x = "hello world"
y = "12345678"
print(x[2:8])
print(y[1:6:2])
print(y[::-1])
```
```
llo wor
246
987654321
```
### 預設情況以及無效情況下的切片
```python=
x = "hello world"
print(x[7:5:3]) //無效輸入,會印出null(無)
```
### len( )函式
假設今天有一個字串x,要知道它的大小就是使用len( ),得到的結果就是x的大小囉!
```python=
x = "123456"
print(len(x))
```
```
6
```
### .count( )方法
.count( )用在檢查一句話裡有沒有某個字或某個詞的時候
```python=
x=“protocol”
print(x.count(‘o’),len(x))
```
```
3 8
```
### If
當程式流程在進行的過程中,需要根據某條件決定是否執行接下來的動作時,就需要用到 if 敘述。
其語法如下:
```
if 情況1:
動作1 (若情況1為True)
```
意思是當情況1為**True**時,執行動作1。
### 冒號與縮排
Python沒有像其他語言一樣採用{ }或其他方式分隔程式碼塊,而是採用**冒號**和**縮排**來區分程式碼層次。
縮排的空格數量是可變的,但是所有相同層次的程式碼塊都必須有相同的空格數量。
### If – Else
if 敘述還可以搭配 else 來使用,讓程式在 if 條件不成立時,便去執行 else 底下所定義的動作。
其語法如下:
```
if 情況1:
動作1 (若情況1為True)
else:
動作2 (若情況1為False)
```
意思是當情況1條件為**True**時,執行動作1;
情況1條件為**False**時,執行動作2。
#### 範例
小明決定向小美告白:
```
if 小美接受:
小明獲得女朋友:D
else:
小明獲得好朋友QQ
```
### If – Elif – Else
當需要判斷的情況有很多種時,我們可以使用 if – elif – else 來達成我們的目的。
::: warning
註: elif 的數量沒有限制。
:::
其語法如下:
```
if 情況1:
動作1 (若情況1為True)
elif 情況2:
動作2 (若情況1為False,且情況2為True)
…
elif 情況n-1:
動作n-1 (以上情況皆為False,且情況n-1為True)
else:
動作n (若以上情況皆為False)
```
#### 範例
小明被小美拒絕很傷心,想要回家討拍,所以去火車站買火車票,發現火車站用年齡來區分車票:
```
age = int(input())
if age < 18:
print("學生票")
elif age >= 65:
print("敬老票")
else:
print("全票")
```
### 巢狀If
有的時候需要判斷的可能狀況有很多種,且須依照不同情況有不同的子情況,這時候就可以使用巢狀if結構。
> 簡單來說就是if裡面還有if。
```
if 情況1:
if 情況1-1:
動作1-1 (若情況1-1為True)
elif 情況1-2:
動作1-2 (若情況1-2為True)
else:
動作1-3 (若情況1為True,且情況1-1、1-2為False)
elif 情況2:
動作2 (若情況1為False,且情況2為True)
else:
動作3 (若以上情況皆為False)
```
#### 範例
小明被小美拒絕後,在車上想著他為什麼會被拒絕,恰好他下車後去了一間餐廳吃晚餐,分別有學生優惠打8折與生日優惠送女友的方案:
```
if 小明是學生:
if 小明生日:
學生優惠8折+生日優惠送女朋友
else:
學生優惠8折
elif 小明生日:
生日優惠送女朋友
else:
沒有優惠
```
## 迴圈Loop
在程式中處理資料時,時常會需要**重複執行**某些相同的步驟。而迴圈的功用就是讓指定的程式在符合特定條件下,一直重複執行某些相同的步驟(**迭代**)。我們可以利用迴圈(Loop)來進行重覆性的資料輸入、處理與輸出。
假如我們今天要印出「你好!」100次,最直覺的想法是:
```python=
print("你好") # 第一行
print("你好") # 第二行
print("你好") # 第…行
print("你好") # 第100行
```
但是這樣100行print( )很浪費時間,當面對更多筆資料的時候,我們不想要一行一行的寫。
因此,我們使用**迴圈(Loop)。**
:::warning
「迴圈」就像是一台機器,這個機器一直做重複的事,我們只需要把東西丟進去這個機器裡,他就會自動幫我們處理這些事情,節省了許多時間。
:::
### range( )函式
在介紹for迴圈前,我們要先介紹range( )函式,這個函式常與for一起使用。
range(a) 能夠生成從 0 ~ (a的前一個) 的數列,以下是他的語法:
```python=
range(start, stop, step) # 與string的切片相同
```
start跟step可以省略,stop代表要到多少。
(start預設為0,step預設為1)
#### 範例:
```python=
range(10) # 0,1,2,3,4,5,6,7,8,9
range(3, 10) # 產生 3,4,5,6,7,8,9
range(2, 11, 2) # 產生 2,4,6,8,10
range(10, 0, -1) # 產生 10,9,8,7,6,5,4,3,2,1
```
### for迴圈
語法:
```
for 變數 in 序列:
想要重複執行的動作
```
for 會依序從序列裡取得元素,並重複執行動作1。
:::warning
註:序列可能為一連串清單資料,一組數字或一個名單。
:::
#### 範例:
小明因為被拒絕很難過,所以每天翹課,有一天老師發現不對勁,於是開始點名:
for 學生 in 點名表:
print(學生)
這樣for就會從點名表第一個人開始點到最後一個。
當for與range一起使用:
```python=
for i in range(10):
print(i, end=" ")
# 產生 0 1 2 3 4 5 6 7 8 9
for i in range(10, 0, -1):
print(i, end=" ")
# 產生 9 8 7 6 5 4 3 2 1
```
::: info
range(start, stop, step)的概念與string的切片類似。
string的內容也可以用for來迭(ㄉ一ㄝˊ)代。
```python=
for char in "尖頭,給我納命來":
print(char)
```
產生:
```
尖
頭
,
給
我
納
命
來
```
:::
### 巢狀for迴圈
何謂巢狀for迴圈?
簡單來說就是**迴圈裡面還有迴圈**,就如同早上我們所提到的巢狀if一樣,if裡面還有if。
```python=
for i in range(2):
for j in range(3):
print(char)
```
產生:
```
0 0
0 1
0 2
1 0
1 1
1 2
```
巢狀迴圈其實很像時鐘。
**內層迴圈→秒針;外層迴圈→分針。**
當內層迴圈執行一輪之後,外層迴圈才會進到下一項。
### While迴圈
語法:
while 判斷條件:
動作1
判斷條件等於True時,重複執行。
判斷條件等於False時,離開迴圈。
#### 範例1
一直翹課的小明讓賺很少的爸爸很頭痛,感覺學費都白繳了,錢包裡的錢越來越少:
```
while 錢包有錢:
錢包 -= 學費
print(“爸爸沒錢了”)
```
#### 範例2
```python=
i = 0
while i < 5:
print(i)
i = i + 1
```
產生:
```
0
1
2
3
4
```
Q. 如果我們把上面的程式碼刪去 i = i + 1 一行,會發生什麼事呢?
`i < 5 永遠為True,while迴圈不會停止,會形成無限迴圈。`
遇到這種情況該如何解決呢?
我們可以使用**continue**和**break**這兩個語句來控制程式迴圈流程。
### continue
continue會結束本次迴圈,回到迴圈的開頭,並進入下一次的循環。
#### 範例
```python=
i = 0
while i < 5:
if i == 2:
i = i + 1
continue
print(i, end=" ")
i = i + 1
# 產生 0 1 3 4
for i in range(5):
if i == 2:
continue
print(i, end=" ")
# 產生 0 1 3 4
```
### break
break會跳出整個迴圈。
#### 範例
```python=
i = 0
while i < 5:
if i == 2:
i = i + 1
break
print(i, end=" ")
i = i + 1
# 產生 0 1
for i in range(5):
if i == 2:
break
print(i, end=" ")
# 產生 0 1
```
有了break,我們能夠利用while迴圈進行重複輸入,並決定何時終止。
```python=
while True:
n = input()
if n == "end":
break
print(n)
```
```
輸入:10
輸出:10
輸入:hello
輸出:hello
輸入:end
# 程式結束
```