---
# System prepended metadata

title: 資料型態與變數

---

# 資料型態與變數
## 一、文字型(string/char) :  存放文字的資料型態


以雙、三引號包住想要存放的字串(**string**) ex : "Hello World !", '''45002931:$''', "你我,他"

以單引號存放**單一字元**(**char**) ex : 'a', '1'

---

## 1.1常用方法及函式

### 1. len(str)
使用len(字串)可以得到字串長度
> 範例:

```python=1
print(len("NCU CSIE"))  
//印出: 8
```



### 2. str + str
可以使用加號(+)來黏合字串 
> 範例:



```python=1
print("Str" + "ing")  
//印出: String
```

 
### 3. str * 次數
可以使用乘號(*)來重複印出字串 
> 範例:

```python=1
print("Str" * 3)  
//印出: StrStrStr
```


---

### 4. Index
電腦會將字串中的字元編號，當我們想特別使用字串裡的某個字時，可以使用index去檢索 

> 範例:

<font size = 6>str = "NCU CSIE"</font>


|       | N   | C   | U   |     | C   | S   | I   | E   |
| ----- | --- | --- | --- | --- | --- | --- | --- | --- |
| index | 0   | 1   | 2   | 3   | 4   | 5   | 6   | 7   |

```python=1
print(str[0])   
print(str[1:6])    //注意:這裡是1~5不包含6喔!
print(str[-1])    //印出最後一位
print(str[:])  
``` 


> 輸出
```
N
CU CS
E
NCU CSIE
```
    
---

### 5. str.split()

當我們想以空白或其他字元分割字串時可以使用 `str.split()` ，若無指定則預設為空白
<font size = 5>str.split(想分割的字元)</font>


> 範例:

```python=1
str = "NCU CSIE IS VERY GOOD !"

//以空白分割字串
print(str.split())    

//以"E"分割字串
print(str.split("E"))

//這時候再配合(四)教的index就可以輕鬆獲得想要的字串
print(str.split()[0])
```


> 範例:
```
["NCU", "CSIE", "IS", "VERY", "GOOD", "!"]

["NCU CSI", "IS V", "RY GOOD !"]

NCU
```
#### 使用時機範例:

```python=1
str = input()  //假設我們輸入:3 10 37  三個數字以空白隔開

若我們要分別存取這三個數字，就可以利用split():
a = str.split()[0]
b = str.split()[1]
c = str.split()[2]
```
    
    

## 二、數字(int/float) : 存放數字的資料型態

int: 整數型數字    ex:`-1`, `2147483647`
float: 浮點數型數字    ex:`3.14`, `2.7`

#補充:在python中不需要分各種類型的數字，但在其他程式語言中要分清楚

## 2.1特殊運算

### 1. 整數除法及小數除法

1. 小數除法 (就是平常的除法) ex : `6 / 2 = 3`,  `10 / 4 = 2.5`, `7 / 6 = 1.6666667`
2. 整數除法 (只取整數)，使用兩個除號 ex : `7 // 6 = 1`,  `3 // 6 = 0`
### 2.  指數
使用兩個乘號 `**`  ex : `2 ** 2 = 4`,  `2 ** 2 ** 2 = 16`, `2 ** 10= 1024`

### 3. 取餘數 / mod
使用 `%` 來獲得餘數 ex : `10 % 4 = 2`, `20 % 2 = 0`, `17 % 6 = 5`


## 三、邏輯型(boolean) : 存放True/False的資料型態
可以使用 `0` 或空字串 `""` 代表 `False`，而其他非零數字和字串都是 `True` ，但最常使用的是 `True(1)`,  `Flase(0)`
邏輯型最常使用在後面章節的 if-else 句型中，可以當作判斷某件事情發生的開關，或是某個條件被觸發時的訊號 


> 範例:
```python=1
TomIsGirl = False  or   0
TomIsBoy = True  or   1

print(5 > 10)   // 印出False
print(10 > 7)   // 印出True

print(10/2 == 5)   //印出True   # 在電腦中 == 代表平常在用的等於  
print(11%2 != 0)   //印出True   # 而!= 代表不等於
```
    
    
    

## 四、資料型態間的轉換
#### 學完各種資料型態後，我們其實可以把資料轉換成不同的型態

### Casting 型別轉換


|    型別轉換         | 將傳入的物件轉型為 | 
| ----------- | -------- | 
| int(object) | 整數   |  |     |
|float(object)| 浮點數
|bool(object) | 布林值
|str(object)  | 字串

> 範例

```python=1
print(int(45.23))  //印出 45
print(str(678))    //印出 678
print(bool(78))    //印出 True
print(float(True)) //印出 1.0
```
    
### type(物件)
#### 使用type()函式來確定物件的資料型態
> 範例:
    
```python=1
d = "Hello World"
e = 10.23
f = 11

print(type(d))
print(type(e))
print(type(f))
```
    
> 輸出:

    <class 'str'>
    <class 'float'>
    <class 'int'>

### 進位轉換
將數字轉成二進位bin()、八進位oct()、十六進位hex()


|   進位轉換    |  將數字轉為n進位 |
| ----- | -------- |
| bin() |    二進位      |
| oct() |     八進位     |
| hex() | 十六進位|


    
### 常用的型別轉換:
> 範例:

```python=1
str = input() //假設輸入為 12 34兩個數字    #input()讀取時為字串!!!

num1 = str.split()[0]   // "12"
num2 = str.split()[1]   // "34"
```
    

若我們想要將num1+num2的值印出來：

    print(num1 + num2)   // 印出1234
    
這時候因為num1, num2是字串, 所以"12"+"34"印出來為1234
    
所以這時候我們需要把num1, num2轉成數字才能進行運算並得到我們想要的結果
 
    print(int(num1) + int(num2)) //印出46

# 變數
變數是可以**存放資料**的一個**容器**
變數名稱只能是**英文、數字、底線的組合**，且名稱開頭**不能是數字**
錯誤範例: `#a`, `1234abc`, `a;bc`
正確範例: `apple`, `Aabc123`, `wow_22`

## 一、 宣告變數
**<font size = 4>變數名稱(自訂) = 想要存放的資料</font>**
> 範例:

    ApplePrice = 100
    fruit = "Apple"
    Check = True
---

#補充: 其他程式語言要多寫一個資料型態

**資料型態 變數名稱(自訂) = 想要存放的資料**
> 範例:

    string fruit = "apple"
    int number = -23
    float = 3.14
    bool check = true
  
---

## 二、 變數內的資料處理


若我們想將一個變數裡的數字加1
要寫成 `number = number + 1` 或是 `number += 1`
> 範例：

```python=1
number = 10
number = number + 1
print(number) //印出11
```


> 範例:

若我們想將驚嘆號加到變數裡的字串的後面，可以寫成 `str = str + " !"` 或是 `str += "!"`

```python=1ㄋ
str = "I love coding"
str += " !"
print(str)   // 印出 I love coding !
```


## 三、 變數優點

### 1. 可重複使用
> 範例:

```python=1
money = 1000
print("I have " + str(money*4) + " dollars.")
print("Iris has " + str(money*3) + " dollars.")
print("Michael has " + str(money*2) + " dollars.")
```
    
> 輸出:

    I have 4000 dollars.
    Iris has 3000 dollars.
    Michael has 2000 dollars.

### 2. 增加可讀性
> 範例:
    
    The_longest_English_word = "Pneumonoultramicroscopicsilicovolcanoconiosis"
    




### 3. 方便修改 
> 範例:

    fruit = "apple"
    print("I like " + fruit + ".")
    print("Tom likes " + fruit + ", too.")
    print("But Cindy doesn't like " + fruit + ".")

> 輸出1

    I like apple.
    Tom likes apple, too.
    But Cindy doesn't like apple.
    
這時候我們把fruit裡的資料改成banana，其餘不變
    
    fruit = "banana"
    print("I like " + fruit + ".")
    print("Tom likes " + fruit + ", too.")
    print("But Cindy doesn't like " + fruit + ".")
    
> 輸出2

    I like banana.
    Tom likes banana, too.
    But Cindy doesn't like banana.

所有的apple都會變為banana了

因此使用變數可以方便我們管理資料以及增加我們的效率



# 練習題
## 一、是非題
1. ( ) 只要使用雙引號括起來的任何字元都是屬於文字型(字串)
2. ( ) `2**3 ` 是`2乘以3再乘以3`的意思
3. ( ) `length(字串)` 可以得到字串的長度
4. ( ) 若要分辨`23841039`1是不是偶數，我們可以判斷 `238410391 % 2` 是不是等於`0`
5. ( ) 若想要以空白分割字串，可以使用 `split(字串)`

## 二、選擇題
1. 以下何者為變數的優點
a. 可重複使用
b. 增加可讀性
c. 方便修改 
d. 以上皆是
2. 請問以下程式碼的輸出為何者?
a. 17
b. 71
c. 89
d. 98

```
a = input()  //輸入為8
b = input()  //輸入為9

print(b+a)
```

## 三、程式題(大家可以在自己的編譯器上試試看)
小百今天體育課測100公尺，但在起跑時不幸摔倒，當他去問體育老師自己跑幾秒時，老師卻只委婉地跟他說他的平均速率是5m/s，請完成下列程式碼幫助小明得到自己的成績。
**hint:平均速率(speed) = 總距離(distance)/總時間(time)**
```
distance = 
speed = 
time =                 //請完成前三行程式碼

print("小百100公尺跑了"+time+"秒!")
```

體育老師幫大家100公尺測完秒數後，想要把大家的平均速率都算出來，請幫他寫出一個程式碼，要有兩個輸入(時間、同學名字)，輸出為平均速率
**hint:可以參考前一題的程式碼**
```
distance = 
time = 
name = 
speed =                 //請完成前四行程式碼

print(name+distance+"公尺的平均速率為"+speed+"m/s!")
```