---
title: python讀書會(一)
tags: python讀書會
---
{%hackmd @themes/orangeheart %}
## 1.1 第一次嘗試
不論學習任何的程式語言,第一件學會的事情肯定是:
**輸出 Hello, world!**
於是我們這麼做,直接在你的編譯器上面打上:
- [x] 程式碼 1.1
```python=
print("Hello, world!")
```

#### 1.1.1 省略符號#
當想對於一個程式進行描述,使用```#```字號可以達到,而且會直接被編譯器忽略。
- [x] 程式碼 1.1.1
```python=
print("Hello, world!") ##輸出Hello, world
```
#### 1.1.2 淺談變數、函數(只是淺談而已...)
就像數學所學,我們要解決問題時,會列出**函式**以及**未知數**幫助我們。
變數有許多型態,後面的課程會慢慢做介紹。
在python中,要產生一個變數非常容易,直接宣告就可以了~
- [x] 程式碼 1.1.2a
```python=
#變數
a = 21
b = 37
print(a + b)
```
- [x] 程式碼 1.1.2b
```python=
#函數
def add1(a, b):
print(a * b)
add1(5, 6)
#############這是分隔線
def add2():
a = 33
b = 7
print(a + b)
add2()
```
#### 1.1.3 輸入input
前面我們提到了輸出Hello, world!,使用到了```print```指令來輸出我們想要顯示在螢幕上的東西,如果我們要輸入東西呢?
那就要用到```input```指令了!
- [x] 程式碼 1.1.3
```python=
a = input()#將輸入的東西儲存到a變數裡面
print(a)
```
---
## 1.2 在python上進行簡單運算
如果要計算加減乘除的時候,~~比起其他程式語言~~,python絕對是簡單又便利的工具,只需要輸入數字及運算子即可,除了加減乘除這些常見的算術運算子之外,還有其他不同功能的運算子:
#### 1.2.1 算術運算子(arithmetic operator):

- [x] 程式碼 1.2.1
```python=
print('92 / 6 = ', 92 / 6)
print('92 // 6 = ', 92 // 6)
print('92 % 6 = ', 92 % 6)
print('3 ** 4 = ', 3 ** 4)
```
#### 1.2.2 比較運算子(comparison operator):

- [x] 程式碼 1.2.2
```python=
print('5 > 6 is ', 5 > 6)
print('5 < 6 is ', 5 < 6)
print('5 == 6 is ', 5 == 6)
print('5 != 6 is ', 5 != 6)
print('5 >= 6 is ', 5 >= 6)
print('5 <= 6 is ', 5 <= 6)
```
#### 1.2.3 位元運算子(bitwise operator):

這是正常直覺寫程式根本不會用到的酷功能:dog:~
簡單來說,所有10進制或其它進制的數字先轉成2進位,然後do re mi sol :sparkles:

- [x] 程式碼 1.2.3
```python=
print('10 & 4 = ', 10 & 4)
print('10 | 4 = ', 10 | 4)
print('~ 10 = ', ~ 10)
print('10 ^ 4 = ', 10 ^ 4)
```
#### 1.2.4 移位運算子(shifting operator):

這也是啊:anger:根本平常就不會用到~~吧~~!?除非是特殊用途才會用它來加速運算。
- [x] 程式碼 1.2.4
```python=
print('10 >> 2 = ', 10 >> 2)
print('10 << 2 = ', 10 << 2)
```

#### 1.2.5 賦值運算子(assignment operator):

```a = 5```是一個簡單的賦值運算,將左邊的變數```a```設定為5。
程式語言當中的```=```不可以看做是數學式中的等於,```==```在程式裡才是等於的意思(**1.2.2**有提到)。
```a += 5```意思相當於```a = a + 5```。
寫白話一點就是高中學的等差數列的遞迴關係式$\displaystyle a_{n+1}=a_n+5$,最後的a會被設定成剛剛的a~n+1~,來跑一下程式:eyes:
- [x] 程式碼 1.2.5a
```python=
a = 5
a += 5
print(a)
```
- [ ] 程式碼 1.2.5b
```python=
a = 5
a = a + 5
print(a)
```
#### 1.2.6 運算子的優先順序
處理數量少又簡單的問題時,程式好好的;當一堆運算子同時要運行就可能亂成一團,所以在此之前要先知道運算子的優先順序!
以國小學的"括號內的算式要先處理",順位最前面的算子當之無愧地是```()```。
1. ```()```
2. ```**```
3. ```+```(正)、```-```(負)、```~```
4. ```%```、```//```、```/```、```*```
5. ```+```(加)、```-```(減)
6. ```<<```、```>>```
7. ```&```、```|```、```^```
8. ```<```、```>```、```=<```、```=>```、```==```、```!=```
9. ```=```、```+=```、```-=```、```*=```、```/=```、```%=```、```<<=```、```>==```、```&=```、```^=```、```|=```
10. ```in```、```not in```、```is```、```is not```
11. ```and```、```or```、```not```
---
## 1.3 在python中的關鍵字
有些關鍵字出現在程式碼當中會有一些特定的用途,因此我們不能將關鍵字用作變數名稱或函數名稱,讓我們來了解一下有哪些關鍵字:
- [ ] 程式碼 1.3
```python=
#執行以下這段可以讓我們看見有特定功能的關鍵字列表
#不同版本的python可能有不一樣的關鍵字
import keyword
print(keyword.kwlist)
```

#### 1.3.1 True, False, and, or, not
True和False是Python中的**真值**。它們是Python中比較邏輯及運算的結果,True即是1,False即是0。
- [x] 程式碼 1.3.1a
```python=
print(1 == 1)
print(5 > 3)
print(10 <= 1)
```
以下是真值表:
:::info
:smile:其實真值表就是and的邏輯表啦~~
:::



- [x] 程式碼 1.3.1b
```python=
print( True and False )
print( True or False )
print( not True )
##進階
print(True == 1)
print(True + True)
```
#### 1.3.2 None
```None```表示沒有值或空值,而且```None```非常特別,因為它的資料型態就是```NoneType```。
- [x] 程式碼 1.3.2a
```python=
print(None == 0)
print(None == False) #None並不是False的意思喔
print(None == [])
print(None == None)
```
- [x] 程式碼 1.3.2b
```python=
x = None
y = None
print(x == y) #結果蠻神奇的www
```
**再進階一點的~:fire:**
沒有設定任何回傳值的函數```void_function```,就會自己回傳一個```None```。
- [x] 程式碼 1.3.2c
```python=
def void_function():
a = 1
b = 2
c = a + b
x = void_function()
print(x)
```
#### 1.3.3 is, is not
```is``` ```is not```它們用於檢查兩個值(或變數)是否位於內存的同一部分。
- [x] 程式碼 1.3.3
```python=
x1 = 5
y1 = 5
x2 = 'Hello'
y2 = 'Hello'
x3 = [1,2,3]
y3 = [1,2,3]
print(x1 is not y1)
print(x2 is y2)
print(x3 is y3)
```
執行1.3.3的程式碼後,會發現```x3```不等於```y3```,它們看起來雖然長得一樣,但這兩個list資料並沒有被存在同一個地方,因此顯示False。
想知道```x3```、```y3```是否存在不同位置,我們可以利用```id()```去查詢它的地址:
- [ ] 程式碼 1.3.3-Extra
```python=
##接續上一段的程式碼
print(id(x3))
print(id(y3))
```
#### 1.3.4 in, not in
```in``` ```not in```用於測試是否在序列(string, list, tuple, set 和 dictionary)中找到值或變數。
- [x] 程式碼 1.3.4
```python=
x = 'Hello world'
y = {1:'a',2:'b'} ##這是一個dictionary型態的資料
print('H' in x)
print('hello' not in x)
print(1 in y)
print('a' in y)
```
## Homework 1
因為我懶得出題(* ̄3 ̄)╭,所以出題就都交給[ZeroJudge](https://zerojudge.tw)了~
我不會檢查有沒有做,請自行好好努力呀!!
* 本周題目(可以在ZeroJudge上搜題號):
<font color = gray>a001: 哈囉 </font>
<font color = gray>a002: 簡易加法</font>
<font color = gray>a006: 一元二次方程式</font>
