(Python) 程式 4 法 - 四大步驟

 

Python Taiwan 線上讀書會

Ming-der Wang (王銘德) (8/15 9:00pm)

大綱

  • 程式開發 4 法 - 四個步驟
  • csv 檔與 JSON 檔案格式
  • API server 概念

如何開發一個專案, 

或是要解決一個問題

哪 4 法?

challenges -> ideas ->-> solutions -> implementations -> design -> coding

想法 -> 方法  ->-> 作法 -> 文法

 

brain storming     |     implementation

集思廣益 |  實施階段

產品經理主導    |   程式設計師主導

哪 4 法?

想法 -> 方法  ->-> 作法 -> 文法

有了問題, 你要有自己得想法。

 

例如: 平常站累了, 怎麼辦?你有什麼想法

(找個東西坐坐)

如果確定要找個東西坐坐,那你有什麼方法?

 

你可能回答: 找一張椅子坐坐, 休息休息

1. 郵購一張椅子

2. 訂做一張椅子

3. 自己做

 

如果自己做: 

a. 三隻腳 + 木板

b. 用什麼工具

Step1. 把木板鋸出三隻腳

Step2. 把木板磨成椅面 

Step3. 把腳釘到椅面下

(坐坐看)

哪 4 法 (try again)

想法 -> 方法  ->-> 作法 -> 文法

追不到某個女朋友, 你會有什麼想法。

 

例如: 想辦法, 先收集她的資料, 有了電話號碼, 再來跟她約會

找徵信社?

問她室友?

 

你可能回答: 寫一個分享網站, 大家都用了, 自然會有她電話

a. 開始想怎麼做才能做到分享

b. 用什麼語言

c. 架構如何設計, 才會容易把自己的照片電話分享出來, 且大家想都很想用

如果你選用 Python 語言

你才需要用到 Python 的文法, 撰寫程式。

 

(寫好後, 再測試看看)

大家知道我在講誰了嗎

(就是, 你可以去看 <<社群網戰>>這個故事的電影)

哪 4 法 (try again)

想法 -> 方法  ->-> 作法 -> 文法

對於言論審查, 你會有什麼想法。

 

例如: 言論自由, 在社群媒體敏感的留言不應該被刪除

關掉社群媒體?

自己不用就好?

 

你可能回答: 蓋一個永久網站, 把敏感留言複製一份讓大家查詢

a. 用"爬蟲"抓 twitter網站資料

b. 把敏感字眼的 tweets 找出來

c.將資料寫到區塊鏈裡(永遠保存)

d.在開發網站

a. b. 你要會使用 twitter APIs

c. blz.js + js 文法

d.你才需要用到 Python + Django 的文法, 撰寫網頁程式。

(再測試看看)

所以 “爬蟲” 不會是你的專案名稱

它只是第三步驟 - 作法裡的一小部分。

甚至於有些情況, 可以用工具就辦到,或用 APIs 更好。

("網路爬蟲" 的定義: 收集網頁上資料的一個方法)

四大步驟

  • 需要反覆練習
  • 前一步驟有修改, 後面的所有步驟就須改變。可能是微調, 但更有可能是大改
  • 所以 coding 是最後一個步驟而已, 前面改動, 整個程式就要重寫
  • 有些作法, 也可以不寫程式, 用工具

 

黑客松(組隊專區)

練習討論過程中, 就記錄下來.

(沒執行的 ideas,  槓掉而不要刪掉)

補充說明 - 作法

作法 - 背景知識

JSON 與 API server 是什麼?

作法 - 背景知識 (1)

*盡量利用網路, 不要只想到 "電腦主機" 而已

 所有網路裝置, 包括手機, 電腦, 都是即時 call API 抓或放資料

作法 - 背景知識 (2)

*蓋 server 不難, 盡量把資料放到雲端

簡化你的資料, 不外乎 csv 格式, 或 JSON 格式

* 把資料放在 API server 端, 才能跟其他行動裝置共享

csv 資料檔

優點:

  • 很多開放資料都用 csv 檔
  • 容易從 Excel 等輸出

 

缺點:

  • 文字為主, 數字還是文字
  • 容易有亂碼
  • 無法描述複雜物件
  • 不是標準交換格式

kaggle 有很多csv datasets

(click here)

作法 - 背景知識 (3)

csv 檔範例

id,name,amount,Remark
1,"Johnson, Smith, and Jones Co.",345.33,Pays on time
2,"Sam ""Mad Dog"" Smith",993.44,
3,"Barney & Company",0,"Great to work with
and always pays with cash."
4,Johnson's Automotive,2344,

第一行是 列標題

每一欄位, 用逗點分開

[ {
   "id": 1,
   "name": "Johnson, Smith, and Jones Co.",
   "amount": 345.33,
   "Remark": "Pays on time"
 },
 {
   "id": 2,
   "name": "Sam \"Mad Dog\" Smith",
   "amount": 993.44,
   "Remark": ""
 },  ...]

轉成 JSON 格式

總共有 4 筆資料, [ ] 表示陣列

JSON 資料檔

優點:

  • 電腦間, 通用交換格式
  • Javascript 直接使用
  • 人與機器都容易讀
  • 有數字,字串,布林,陣列 
  • 有物件, 物件陣列等...
  • 所有電腦語言都能用
  • 本身也是文字檔
  • 很多設定檔的格式

缺點:

  • 無 (或不是很重要)

kaggle 當然也有JSON datasets

(click here)

作法 - 背景知識 (4)

JSON + 手機 demo

install  Expo iOS, Android App from

https://expo.io/learn

GraphQL demo

註:GraphQL 可以由下載端自行決定下載欄位, 而無需修改任何 API

https://graphql.org/

index.py

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
    app.run()

用 now 快速部署 server

vercel.json

{ "version": 2,
    "builds": [ { "src": "*.py", "use":   

      "@liudonghua123/now-flask" } ],
    "routes": [  { "src": "/.*", "dest": "/"} ] }

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
    app.run()

requirements.txt

Flask==1.1.2
Flask-RESTful==0.3.8

Q & A

(討論一下, 組隊進度)

Made with Slides.com