---
# System prepended metadata

title: Python

---

# Python 
作業的截圖可以交到 ncucsiepyjh.gmail.com
或是用手機拍照，或存成文字檔，於下次上課交給助教
## 安裝Python及Pycharm
### 安裝python
https://www.python.org/downloads/windows/
![](https://i.imgur.com/RS6fMkP.jpg)
![](https://i.imgur.com/UvUSunB.jpg)
**接著按Install Now**


---

### 安裝pycharm
https://www.jetbrains.com/pycharm/download/#section=windows

:::success
**按右邊的community的download**
:::
![](https://i.imgur.com/tiEIiIx.jpg)
:::success
**確認選項都跟圖片一樣再按next(第三張的creat associations也要打勾)**
:::
![](https://i.imgur.com/mYRKgx1.jpg)
![](https://i.imgur.com/lV9ynLR.jpg)

### 創建project
:::success
按New Project
:::
![](https://i.imgur.com/vjgxhzU.png)
:::success
接著按create
:::
![](https://i.imgur.com/5UxTdJN.png)
### 創建python
:::success
創一個python檔
:::
![](https://i.imgur.com/ZNIt8ks.png)
:::success
為檔案命名
:::
![](https://i.imgur.com/qiDFmts.png)




## 資料型態
### 資料型態介紹
* **甚麼是資料型態？**

資料型態就是在Python中，各種資料，例如：數字、文字、串列等等物件的型態。
![](https://i.imgur.com/ycRCl7W.png)
* **常見的資料型態有：**
數字：整數(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
```
#### **算數運算子**
![](https://i.imgur.com/66M8biI.png)
#### **指派運算子**
![](https://i.imgur.com/z7BUJcB.png)
#### **關係運算子**
![](https://i.imgur.com/eE119ho.png)
#### **邏輯運算子**
![](https://i.imgur.com/cfODEYx.png)
## 輸入(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
![](https://i.imgur.com/zs9Z8RB.png)
## 字串切片(Slicing；Slice)
首先，我們要先聊聊字串中每一個字的位置是如何被編排
![](https://i.imgur.com/VBaILEM.png)
:::warning
記住是從0開始編號！
:::
### 字串取值
利用[ ]來取值
```python=
x = "hello world"
print("第6個位子是:",x[6])
```
```
第6個位子是: w
```
### 起始點(Start)、停止點(Stop)以及間隔(Step)
start 預設為文字編號第一個 
stop  預設為文字編號最後一個
step  預設為1
![](https://i.imgur.com/SXEEnlT.png)
```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
# 程式結束
```