# 基本運算
在撰寫程式時,經常會需要對資料進行一些數學上的運算處理,這時我們就會運用程式碼進行基本運算,將資料轉變成適合我們使用的狀態。
## 一、 運算子
運算⼦在程式中主要幫助我們進⾏數學的運算,數值⼤⼩⽐較和條件的判斷。
> 範例
```python=1
print(3+6)
```
上例中的 `3+6` ⻑得跟數學上常⾒的式⼦⼀樣,我們稱之為運算式,
> 輸出
```
9
```
輸出的 `9` 則是運算式所得出的⼀個值。⽽式⼦裡的 `+` 就是這單元要介紹的運算⼦。
## 二、 算術運算子
算術運算⼦的主要的⼯作就是進⾏數學上的四則運算。加減乘除的規則就跟數學課學得⼀模⼀樣。
| 加 | 減 | 乘 | 浮點數除法 | 整數除法 | 取餘數 | 次方 | 小括號 |
|:---:|:---:|:---:|:-----:| :----: |:------:|:----:|:------:|
| + | - | * | / | //| % | ** | () |
> 範例
```python=1
print(1 + 2) # 加法
print(10 - 5) # 減法
print(10 * 2) # 乘法
print(10 / 4) # 浮點數除法
print(10 // 4) # 整數除法的商
print(10 % 4) # 整數除法的餘數
print(2 ** 4) # 次方
print(1 + 2 * 3) # 小括號內先運算
print( (1 + 2) * 3 )
```
> 輸出
```
3
5
20
2.5
2
2
16
7
9
```
### 1. 整數除法
整數除法不會將數字除到⼩數點後,⽽是求出⼀個商數和⼀個餘數。ex: 10 / 3 = 3…1 , 10 處以 3 的商是 3,⽽餘數是 1,所以 `10//3` 的輸出就是 `3` ,⽽ `10 % 3` 的輸出則是 `1`
### 2. 次方
2^4 = 16 在Python中以 `2**4` 表⽰,輸出為 `16`
#### 注意:<font color="#f00">
:star:浮點數的計算有時會有誤差出現 例如: 1.0-0.8 可能不等於 0.2</font>
> 範例
```python=1
print(1.0-0.8)
```
> 輸出
```
0.1999999999999996
```
## 三、指派運算子
指派運算⼦在程式中⾮常常⾒,給變數賦予值的時候就會⽤到 例如: `a = 0` , 給 `a` 變數賦予值 `0`
另外介紹⼀個結合指派運算⼦和算數運算⼦的複合運算⼦
| 原始寫法 | 簡寫 |
|:---------:|:------:|
| x = x + 1 | x += 1 |
| x = x - 1 | x -= 1 |
| x = x * 1 | x *= 1 |
| x = x / 1 | x /= 1 |
⽤法: x = x + 1 等同於 x += 1 此運算式能讓變數x的值加1
## 四、 比較運算子
⽐較運算⼦的主要功⽤就是⽐較兩個數字、字元,或是變數值的⼤⼩關係。
| 符號 | 概念|
| :---------: | :-----------: |
| == | 等於 |
| != | 不等於 |
| > | 大於 |
| >= | 大於等於 |
| < | 小於 |
| <= | 小於等於 |
⽐較運算式輸出的是布林值(True or False),跟算術運算式不同:
> 範例
```python=1
print(1==1)
print(1==2)
```
> 輸出
```
True
False
```
## 五、 邏輯運算⼦
邏輯運算⼦會以固定的⽅式決定輸出:
| 名稱 | 邏輯概念 |
| :--------: | :--------: |
| and |兩個關係都是true, 輸出true, 否則輸出false|
| or | 兩個中有⼀個關係是true, 輸出true, 否則輸出false|
| not |關係是true, 輸出false, 關係是false, 輸出true|
> 範例
```python=1
print(True and True)
print(True and False)
print()
print(True or False)
print(False or False)
print()
print(not True)
print(not False)
```
> 輸出
```
True
False
True
False
False
True
```
> 範例:( 邏輯運算⼦和⽐較運算⼦的合併使⽤ )
```python=1
print((1>2) and (3>=2))
print((1>2) or (3>=2))
```
> 輸出
```
False
True
```
# 課後測驗
## 是非題
> 串接比較運算子是合理的語法。ex:1<2<3
正確答案: 是。
解析: 比較運算子串接是Python非常便利的語法,節省了分開寫成 "1<2 and 2<3" 的時間。
> print(3+6*12)的結果為108。
正確答案: 否。
解析: Python的基本運算同樣遵守數學的四則運算,先乘除,後加減。
> print(10>=3)跟print(3=<10)的結果都是True。
正確答案: 否。
解析: 要注意>=跟<=的等號都一定要放在後面。
> not((1>2)or(1<3))的布林值為False。
正確答案: 是。
解析: (1>2)的布林值為False,(1<3)的布林值為True,or只要兩邊的布林值有一邊是True,輸出的布林值就是True,not會把布林值反轉為False,因此輸出的布林值為False。
> a=1,b=12的時候,print(a=b)的結果為False。
正確答案: 否。
解析: 等於的比較運算子為"==",print(a==b)的結果才是False。"a=b"是將變數a的值指派給變數b。
> 當and兩邊的布林值有一個為False,and輸出的布林值就一定是False
正確答案: 是。
解析: and只要兩邊布林值有一個是False,在不經過其他處理的情況下,輸出的布林值一定是False。
> "2^2" 在Python中表示的是2的2次方。
正確答案: 否。
解析: "**" 是Python中平方的符號,二的二次方是 "2**2"。
> 經過 "x+=1" 這個運算式後,變數x的值比原本多了1。
正確答案: 是。
解析: "x+=1" 就是 "x=x+1" ,將x加上1的值重新指派給x,使x的值增加了1。
> 邏輯運算子and就算有一邊是空白的,只有一邊有布林值也能進行運算。ex:(1==1)and
正確答案: 否。
解析:and跟or兩邊都一定要有值才能進行運算。
> "%" 是求整數除法的商,而 "//" 是求整數除法的餘。
正確答案: 否
解析: "//" 是求整數除法的商,而 "%" 是求整數除法的餘。
## 選擇題
> a=1
> a+=3
> b=a
> print(b)
>
> 請問output是?
> A. 1
> B. 3
> C. 4
> D. a
正確答案: C
解析: 第一行a被指派值1,之後第二行 "a+=3" 是對a指派a+3的值,所以a的值變為4,第四行b被指派a的值4,第五行則是輸出b的值,所以output的值就是變數b的值"4"。
>print(1<2>3)
>
> 請問output是?
> A. 1<2>3
> B. True
> C. False
> D. syntax error
正確答案: C
解析: "1<2>3" 跟 "1<2 and 2>3" 是一樣的意思,左邊布林值為True,右邊布林值為False,and輸出的布林值為False
> 下列運算式中,哪一個的值與其他三者相異?
> A. 10//3
> B. 3\*3
> C. 3\*\*1
> D. 3%4
正確答案: B
解析: A選項求10除以3的商,而10除以3的商是3,餘是1。B選項是求3乘以3的值,而3乘以3是9。C選項是求3的1次方,而3的1次方是3。D選項是求3除以4的餘數,而3除以4的商是0,餘是3。這之中只有B選項的值是9,其他都是3。
> 下列運算式中,哪一個的布林值是True?
> A. not(not(False))
> B. 1<2>-1<100>=45<=3
> C. 3/2>=3
> D. a=1, b=2, not(a==b)
正確答案: D
解析: A選項經過兩次not反轉,結果跟原本的布林值一樣是False。B選項只要耐心的兩兩比較,就會發現只有最右邊的 "45<=3" 是False,因為它們之間是用and連接,有一個False輸出結果就是False。C選項就比較簡單,3處以2是小於3的,所以結果是False。D選項變數a不等於b,經過not反轉,只有它的結果是True。
> print(0.3-0.2)
>
> 請問output為?
> A.0.09999999999999998
> B.0.1
> C.True
> D.False
正確答案: A
解析: 電腦在浮點數的計算有時會有誤差出現
## 程式題
請寫一個 Python 程序,要求實現以下功能:
1. 請用戶輸入一個整數,並將其存儲在變量 x 中。
2. 請用戶輸入一個浮點數,並將其存儲在變量 y 中。
3. 計算 x 除以 y 的值,並將結果存儲在變量 z 中。
4. 將 z 四捨五入到小數點後兩位,並將結果存儲在變量 z 中。
5. 輸出 z 的值。
範例:
1. 輸入整數 10,輸入浮點數 3.14159,輸出 3.18
2. 輸入整數 100,輸入浮點數 2.5,輸出 40.00
3. 輸入整數 8,輸入浮點數 0.5,輸出 16.00
4. 輸入整數 4,輸入浮點數 0.1,輸出 40.00
5. 輸入整數 20,輸入浮點數 5.5,輸出 3.64
6. 輸入整數 6,輸入浮點數 1.5,輸出 4.00
注意:
輸入時,請按照上述要求輸入整數和浮點數,不要包含其他字符或空格。
輸出時,請保留兩位小數。
變量名可以自行命名,但請注意代碼可讀性。
### 參考資料
https://openhome.cc/zh-tw/python/