--- title: python讀書會(一) tags: python讀書會 --- {%hackmd @themes/orangeheart %} ## 1.1 第一次嘗試 不論學習任何的程式語言,第一件學會的事情肯定是: **輸出 Hello, world!** 於是我們這麼做,直接在你的編譯器上面打上: - [x] 程式碼 1.1 ```python= print("Hello, world!") ``` ![](https://i.imgur.com/HhxUjic.gif =600x) #### 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): ![](https://i.imgur.com/9qz2E8M.png =700x) - [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): ![](https://i.imgur.com/xZl3NjM.png =600x) - [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): ![](https://i.imgur.com/XrIqsiq.png =400x) 這是正常直覺寫程式根本不會用到的酷功能:dog:~ 簡單來說,所有10進制或其它進制的數字先轉成2進位,然後do re mi sol :sparkles: ![](https://i.imgur.com/PFJpJzR.png =250x) - [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): ![](https://i.imgur.com/fy68fyi.png =200x) 這也是啊:anger:根本平常就不會用到~~吧~~!?除非是特殊用途才會用它來加速運算。 - [x] 程式碼 1.2.4 ```python= print('10 >> 2 = ', 10 >> 2) print('10 << 2 = ', 10 << 2) ``` ![](https://i.imgur.com/sjp4kS6.gif =400x) #### 1.2.5 賦值運算子(assignment operator): ![](https://i.imgur.com/barQypF.png =700x) ```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) ``` ![](https://i.imgur.com/Z1N21Rq.png =500x) #### 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的邏輯表啦~~ ::: ![](https://i.imgur.com/MVlziSt.png =300x) ![](https://i.imgur.com/jBaHh1n.png =300x) ![](https://i.imgur.com/5Kmvyz2.png =200x) - [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> ![](https://i.imgur.com/VyvvWRH.gif =600x)