# Python ###### tags: `CSIE_CAMP_2020` `Python` --- # 為什麼要學 Python? ![python icon](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Python_logo_and_wordmark.svg/2880px-Python_logo_and_wordmark.svg.png =50%x) ---- - 社群驅動與管理的自由軟體 - 跨平台的直譯式語言 - 簡潔易懂的語法 - 知名的網站 (`Google`, `YouTube`) 與作業系統都在用 --- # 建置編譯環境 ---- 1. 前往 [Python官網](https://python.org) 2. 點選 `Downloads` 3. 選擇 Python **3.8.1** 版本 4. 安裝過程中記得勾選 `Add to PATH` ---- ![](https://i.imgur.com/c5vzxax.png) --- # 如何玩? ---- # 開啟Terminal / Commander 輸入`Python`並按下 <kbd>Enter</kbd> ![](https://i.imgur.com/L2OhACb.png) ---- # Python shell mode 現場即時口譯 > 你輸入什麼他就回答你甚麼? ---- ## 跟傳統的程式語言有什麼不同? | | 編譯式程式語言 | 直譯式程式語言 | | ---- |:--------------:|:--------------:| | | C/C++ | Python | | 編譯 | 透過編譯器編譯 | 不需經過編譯 | | 執行 | 直接執行 | 透過直譯器執行 | --- # Hello Python ! ```python print('Hello World') ``` ---- ## 基本運算子介紹 | 運算 | | 用法 | |:------:| --- |:--------:| | 加 | | `a + b` | | 減 | | `a - b` | | 乘 | | `a * b` | | 除 | | `a / b` | | 取商數 | | `a // b` | | 取餘數 | | `a % b` | | 次方 | | `a ** b` | ---- ## 小試身手 利用Python算出 $$3^{15} + 5^{12} = ?$$ --- # 輸入/輸出 讓程式可以根據使用者的輸入計算 </br> `print` / `input` ---- ## 輸入 ```python # input(string) return string a = input('Enter something') ``` ---- ## `string` + `string` = `string` 大部分的變數都可以使用`+`與字串組合成一個字串 方便辨識與輸出計算結果 ---- ## 小試身手 使用 `input()` 取得使用者輸入的名稱後 輸出‘Hello, (使用者名稱)’ --- # 基礎資料型態 資料是怎麼被存在電腦裡面? int, float, double, str, list...? ---- ## Python 已經幫你決定好囉 使用 `type()` 查看該變數的資料型態 ---- # 轉換資料型態 (要轉變成的型態)(要被轉變的變數) ``` python a = '11' b = int(a) b = b + 11 print(type(b)) ``` ---- ## 小試身手 使用 input 取得使用者所輸入的攝氏溫度 °C,並計算出相對應的華式溫度數值 °F 為多少? </br> 公式如下 $$ F = \frac{9}{5} \times C + 32 $$ --- # 但程式不是這樣寫的 程式通常不是一行一行的輸入進去讓使用者使用 而是寫好很多行之後一次執行 ---- # 寫成 .py 的格式後再一次執行 使用 [Sublime Text](https://www.sublimetext.com) 或是其他編輯器來撰寫 ---- ## 開啟方法 ![](https://i.imgur.com/6QBT61Y.png) ---- # 註解怎麼打? 程式寫完隔天腦袋一片空白?! </br> - 單行註解 `#` - 多行註解 `'''` or `"""` ---- ## 範例 ``` python # 註解放後面 ''' 註解放裡面 ''' ``` --- # 條件判斷 ### (if / elif / else) 根據不同的情況執行不同的動作 ---- # 電腦要怎麼知道現在該執行什麼? 當你所描述的情況為「真」的時候 bool 為 true 的時候 --- # 比較運算子 | 運算子 | | | 用法 | |:-------- |:----:| --- |:--------:| | 等於 | $=$ | | `a == b` | | 不等於 | $\neq$ | | `a != b` | | 大於等於 | $\geq$ | | `a >= b` | | 大於 | $>$ | | `a > b` | | 小於等於 | $\leq$ | | `a <= b` | | 小於 | $<$ | | `a < b` | ---- # 布林邏輯 | 運算子 | | | 用法 | |:------:| -------- | --- |:---------:| | 且 | $\wedge$ | | `a and b` | | 或 | $\vee$ | | `a or b` | | 非 | $\sim$ | | `not a` | ---- - 當情況成立的時候 得到的值就是 `True` ,反之則得到 `False` - `且`只有在兩者都為`真`時才為為`真` - `或`是只要有一者為`真`就會為`真` --- # if 當...,則... ``` python if 情況: 做什麼 ``` ---- ```python day = int(input('今天星期幾?')) if day == 1: print('憂鬱星期一:(') ``` ---- # else 與 `if` 合併使用 當...不成立時,則... ```python if 情況: 做什麼 else: 做別的 ``` ---- ```python day = int(input('')) if day == 1: print('憂鬱星期一:(') else: print('至少沒那麼憂鬱:>') ``` ---- ## 小試身手 寫一個程式判斷使用者輸入的數字是不是偶數 如果是偶數的話,輸出 `YES` 如果是奇數的話,輸出 `NO` ---- # elif 多個情況個別判斷 ```python if 情況1: 做什麼 elif 情況2: 做什麼 elif 情況3: ... else: 做什麼 ``` ---- ```python day = int(input('今天星期幾?')) if day == 1: print('憂鬱星期一:(') elif day == 5: print('要放假囉:)') else: print('至少沒那麼憂鬱:>') ``` ---- ## 小試身手 假設學期成績的分級為: 90 ~ 100 為 **A** 等級 70 ~ 89 為 **B** 等級 60 ~ 69 為 **C** 等級 0 ~ 59 為 **F** 等級 請設計一個程式判斷使用者所輸入的分數屬於哪個等級? --- # 迴圈 重複執行一些程式碼 ---- # while 迴圈 ```python while 情況: 做什麼 ``` ---- ```python money = 0 while money > 100: earn = int(input('今天賺了多少?')) money = money + earn print('存到了') # 只有在 money 超過 100 的時候才會被執行到 ``` ---- ## 小試身手 設計一個讓使用者猜數字的遊戲 --- # list, Range > Python沒有陣列 >> 不過有列表 ---- list是什麼? 可以把所有資料放在一起的一個容器 ```python a = [1, 2, 3, 'a', [5, 6], True, 'hello'] ``` ---- 如果你需要一個數列呢? ex:1 ~ 100 ```python # range(起點, 邊界) range(1, 100 + 1) # 起點從1開始 # range(邊界) range(3) # 預設起點從0開始 ``` ---- # for 將清單、範圍、字串中的元素逐一取出運算 ```python list = ['a', 1, False] for i in list: print(i) # 輸出結果: a 1 True for i in range(3): print(i) # 輸出結果: 0 1 2 3 for i in 'Hello': print(i) # 輸出結果: H e l l o ``` ---- ## 兩種迴圈的比較 | 迴圈 | 結束條件 | |:-----:|:-------------------------------- | | while | 當情況為「非」時 | | for | 當所有容器裡的元素都已經拿出來時 | ---- ## 小試身手 利用 for 迴圈計算出 $$ \sum_{i = 0}^{100} {2 \times i^2 + 5 \times i} = ? $$ --- # 檔案處理 將資料儲存起來 ```python file = open([檔案名稱], [開啟模式]) ``` ---- ## 開啟模式 | 模式 | | 字元 | |:-------- | --- |:----:| | 寫入 | | `w` | | 讀取 | | `r` | | 位元寫入 | | `wb` | ---- ```python file = open('output.txt', 'w') file.write('Hello World') file.close() file = open('output.txt', 'r') content = file.read() print(content) # output: Hello World ``` ---- ## 使用方法 ```python # 在使用 "w" 模式的時候可以使用 file.write([寫入內容]) # 將字串寫入檔案 file.close() # 儲存變更 (與使用 word 按下「儲存」概念的類似) # 在使用 "r" 模式的時候可以使用 content = file.read() # 將檔案內容存入 in 字串中 ``` ---- ## 小試身手 --- # 套件管理器 (pip) 用來管理透過 [Python套件索引(PyPI)](https://pypi.org) 下載的套件 ```shell > pip install [套件名稱] ``` ---- 安裝`requests` 與`beautifulsoup` ```shell > pip install requests > pip install beautifulsoup4 ``` ---- # 引用套件 ```python import [套件名稱] # 引用套件的所有內容 from [函式名稱] import [套件名稱] # 引用套件的部分內容 ``` --- # Python 應用 ## 爬蟲 (Spider) 依照一定規則自動抓取網路資料的程式 ---- # 用途? - 資料搜集 - 搜尋引擎的資料來源 - 社群發文留言分析 ---- # 分類有哪些? - 透過網站提供的相關接口([`API`](https://zh.wikipedia.org/zh-tw/应用程序接口)) - 透過網站原始碼(`html`, `css`, `js`)進行分析與提取 --- # 如何取得原始碼? ---- 利用`requests`套件 ```python from requests import get # 將 get 函式引入這個script res = get([URL]) # 將原始碼下載並存進 res 變數中 ``` ---- ## 確認是否取得成功 檢查 `status_code` 是否為 `200` | status_code | | 代表 | | ----------- | --- | -------- | | 200 | | 取得成功 | | 404 | | 找不到 | | 403 | | 被禁止 | ---- ## 小試身手 1. 使用 requests 的 get 方法取得[範例網站](http://nckucamp2020.000webhostapp.com/carear.html)的原始碼並確定成功取得( status_code == 200 ) 2. 計算「職業」這個詞出現在原始碼裡的個數 --- # 分析原始碼 利用 html tag 的結構來分析資料 ---- ## 使用 BeautifulSoup 套件 分析原始碼並產生出 html 的結構 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(res.text, 'html.parser') ``` ---- # 提取資料 使用 `find` 或 `find_all` 尋找具特定名稱之標籤的文字 ```python soup.find('h1') # 尋找具 h1 標籤的第一組文字 soup.find_all('h1') # 尋找所有具 h1 標籤的文字 ``` ---- 如果我們想要取得網頁的標題 我們可以這樣寫 ```python title = soup.find('title') print(title.text) # 取得具有 title 標籤的文字並印出 ``` ---- ## 網頁上還有許多特徵可以利用 我們可以透過 css 的特徵來取得特定資料 </br> > 還記得在使用 css 的時候寫過的 > `h1`, `.red`, `#first` 這些東西嗎? ---- ## 小試身手 利用 `select` 函式試著取出[範例網站](http://nckucamp2020.000webhostapp.com/index.html)的標題 --- # 一次性下載網站上的圖片 > 我們學會了迴圈跟爬蟲 > 可以開始來做一些神奇的事啦 ---- # 首先 ## 觀察網頁原始碼的特徵 按下 <kbd>F12</kbd> 開啟開發者工具 ---- 根據特徵取得所有的圖片超連結 利用以下方法儲存圖片 ```python img = get([圖片超連結]) file = open([圖片名稱], 'wb') file.write(img.content) file.close() ```
{"metaMigratedAt":"2023-06-15T03:23:56.328Z","metaMigratedFrom":"YAML","title":"Python - 成大資訊營課程","breaks":true,"slideOptions":"{\"transition\":\"convex\"}","contributors":"[{\"id\":\"59aaf2bc-cfcc-4ee3-a45e-d1046a516cbd\",\"add\":8322,\"del\":1178}]"}
    827 views