Syllabus
  本課程主要講義 https://iottalk.vip/6  本班各同學網頁的網址
  * 🅶vm亞歷克羅斯:程式、跨領域、終身學習,是未來成功關鍵
到底要如何做 Python + Flask 做出網頁的練習? (for 第一週 & 第二週 )
(一)以下是依照我們主要講義 iottalk.vip/6 裡面解說的把網站跑在 iottalk.vip (也可選用 iottalk.club)
  (1)下載 SSH 連線工具, 阿就是 PieTTY 或 Putty, 建議初次用 PieTTY
     這在我們網頁內有很多處放連結, 包括全班網頁那 Google Sheet 甚至這裡也有;
  (2)下載之後解壓縮出 .exe 檔案, 點兩下跑起來(執行)
     這時的結果會如我們主要講義 iottalk.vip/6 的使用 SSH 處
  (3)在主機名稱內打入 iottalk.vip  或 iottalk.club
     當然也可如圖中所示順便把你帳號也打入, 這樣登入會直接問密碼
     然後就點 "連線" 那按鈕, 我把圖也顯示如下:
     
  (4)這時會出現一個黑色的命令窗, 有點像 Windows 的 CMD 命令提示窗, 但略有不同:
     
  (5)現在立即更改文字的編碼 
     請注意, 命令窗開啟後, 請立即點最上面"選項"然後把文字編碼設為 UTF-8 或 Unicode,
     否則中文字會變亂碼, 程式中有亂碼則編譯會有錯誤! 這是因為預設編碼是 Big5;
    登入後, 當然是在"家目錄" (Home Directory), 你當然可以把檔案都放這,
     不過習慣上我們會造一個目錄(檔案夾)以面以後太多檔案不好找!
     就是建立一個這次要用的子目錄, 例如以下表示建立子目錄 week01
         mkdir week01
     其實這跟在 Windows 視窗用滑鼠右鍵點選"新增資料夾"意思相同 !
     要進入該目錄:
         cd week01
     要回到上層目錄(因為 點點 .. 代表上一層目錄)
         cd ..
     要看看目前在何處(在哪個目錄):  (pwd 意思是 print  working directory)
         pwd
  (6)用 nano 命令建立檔案,
     第一個範例 w.py 太簡單, 可以直接練習 w2.py , 在黑色窗內打入:
        nano w2.py
     然後把網頁內的 w2.py 複製後貼入黑色窗內(點滑鼠右鍵會自動貼入)
     點這到我們主要講義 iottalk.vip/6 內關於 w2.py 之處
  (7)用上下左右鍵移動, 小心地把你學號與姓名打到裡面適當地方以便網頁會出現你學號姓名!
 ** 這時可以 敲 CTRL_PrintScr 抓下畫面
   然後立即開啟小畫家 (直接執行 mspaint 即可) (就是敲 視窗鍵 + R 然後輸入 mspaint)
   把抓到的螢幕截圖貼入, 然後存檔, 名稱隨便, 例如 0101.jpg  表示第一週的第一張圖
   這圖片是要放入你的 WeeBLY.com 網站內作業區的第一週作業那網頁內
  (8)回黑色SSH命令窗 敲 CTRL_S 存檔, 敲 CTRL_X 離開 nano 編輯器
  (9)執行剛剛建立的 Python 程式碼: (假設檔案名稱是 w2.py)
       python3 w2.py
    萬一有問題, 看看錯誤信息, 是否編譯錯誤, 可能是你忘了設定文字編碼為 UTF-8 或 Unicode
    如果編譯沒錯但執行有錯, (注意編譯和執行是分兩階段, 阿當然是先編譯啦 !)
    則有可能是 port 5566 已經被佔用(port 類似分機號碼, 因這機器上很多應用程式總要能區分哪個程式)
 (10)用瀏覽器開啟網頁, 注意 這 w2.py 做出兩頁(假設你登入 iottalk.vip) 
          iottalk.vip:5566
          iottalk.vip:5566/hello
 (11)確定網頁內有你學號姓名, 抓下畫面
     與前面說的類似, 用小畫家把抓到的畫面存檔以便繳交到你的 WeeBLY.com 網頁內 !
     例如存檔為 0102.jpg 和 0103.jpg   (兩個畫面也可同時抓到存一個檔案)

 (12)繼續練習 w3.py, 這個要抓到更多頁面
     這在我們主要講義 iottalk.vip/6 內都有詳細說明
 
 (13)進入你的 WeeBLY 網頁, 到第一週作業那頁,
     把練習過程抓下的圖都放進你的網頁, 這在 WeeBLY 很簡單, 因為 WeeBLY 就是設計給什麼都不會的人用的 :-)
     還有, 在圖片的上方或下方(或左右)也要拖一個文字元件來打字(就點"建立"後左邊第二項, 三條橫線那個),
     主要是寫一些關於該截圖說明或你練習過程的心得,
     不用寫很多, 但有心得則比較有加分, 
     但是要提醒大家也不要花太多時間, 必須兼顧其他功課喔 !

以上是把"網站" 跑在 iottalk.vip 或 iottalk.club
其實也可以把網站跑在自己電腦或是學校個人電腦教室四裡的 PC

以下就來說明要怎麼 "把網站跑在 PC Windows" (以下算第二週 + 第三週一部分 的練習)
 
以下就來說明要怎麼 "把網站跑在  PC Windows"
(以下算第二週 + 第三週一部分 的練習)

(二)以下是假設在本校(交通大學校計中)電腦教室開機選第一項 "General ..." 這個開機區內已經安裝了 Python 3.6.1 + IDLE (註: IDLE 是 Python 的 IDE, 從官方 python.org 抓來安裝 Python 就會跟著在裡面) *如果你在自己電腦抓來安裝時, 記得勾選要把 Python 加入命令路徑 PATH, 如下圖: *注意如果忘了勾選, 那就有點小麻煩, 要用滑鼠點 電腦 選內容然後 進階選項 內環境變數去修改 !
想在自己電腦上安裝官方版本的 Python ?
可以 點這連到 Python 官方網站, 建議不要抓最新版(通常 Bug 多多) ! (雖然上圖顯示 3.7.2, 那是我測試安裝一下啦:-)
如果用 Windows 10, 或確定你的 Windows 是 64 位元作業系統 (用滑鼠右鍵點"電腦" 選 "內容"看看),
建議點這抓3.6.8 會連到 python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe

根據官方網站聲明: 3.6.8 是 3.6 版的最後一次修正版 !
如果你是使用 Mac OS, 則它和一般 Unix 系統一樣也已經內建了 Python2, 但也沒 Python3,
你可以用你慣用的套件管理程式安裝 Python3, 還不會的請點這看看教學文件      

如果在 Mac OS 不想安裝最新版的 Python, 請點這看這篇在StackOverflow的問答      
(20)注意, 學校電腦教室的機器登入後 Home Directory (家目錄)是在 C:\Users\user 也要確定你會開啟檔案夾以及用滑鼠切換檔案夾, 因為有時用檔案夾方式建立檔案也很方便(按滑鼠右鍵) (21)開啟 CMD 黑色的命令窗 如果連開啟 CMD 命令窗都不會的請看這裡 11 ways to launch the Command prompt
P.S. 我都是敲左下角 視窗鍵 + R 然後打入 cmd 並按 ENTER鍵
      注意所謂 "視窗鍵 + R" 意思是左手一隻指頭壓著 視窗鍵 不放,
      然後, 右手一隻指頭往 R 那個鍵 敲下去, 不是真的要打大寫 R 啦 !! 接著幫然是放掉"視窗鍵" , 廢話 :-)
(22)在 Windows 編輯程式有很多編輯器可以選擇, 例如記事本 Notepad 就可以啦(記得存檔時編碼要選 UTF-8) 不過既然有 Python IDLE 就使用 IDLE (或使用淡江法文系學生寫的 Notepad++ 也不錯) o讓 Windows 10 檔案總管比你想像更好用的11條小技巧 o非學不可的22個Win10操作祕技 (23)使用 IDLE, 最好把預設放檔案的目錄改為你常用的工作目錄 Change Default File Load/Save Directory for IDLE 不會的請仔細看看這篇 Some Basic Configurations regarding Python 3 如何把 Python 的 IDLE 跑起來, 請參考以下圖片: (24)再說一次, 檔案如果編碼不是 UTF-8 會有錯誤 (Notepad 預設編碼是 Big5 大五碼) 所以如果是使用記事本Notepad 則存檔時記得把編碼設為 UTF-8 所以如果是使用記事本Notepad 則存檔時記得把編碼設為 UTF-8 所以如果是使用記事本Notepad 則存檔時記得把編碼設為 UTF-8 很重要, 所以說三次 :-) (25)要記得你到底把 Python 程式碼存放在何處 ! 在 CMD 命令視窗內用 cd 切換目錄, 這時要善用 TAB 鍵, 例如打: cd \users\user\do 然後敲 TAB 應該會自動變: cd \Users\user\Documents 這時再次敲 TAB 會變如下: cd \Users\user\Download 阿意思就是只要敲開頭幾個字母就敲 TAB 以便自動完成檔案名稱(auto complete) (26)在 CMD 窗中切換到正確目錄後當然要執行你的程式碼, 假設檔案名稱 w2.py, 用以下命令執行: python w2.py 注意因為 PC Windows 上沒安裝 Python2, 所以只要用 python 命令執行, 不是 python3 你打 python3 他也不認識啦 ! 就是說, 要把在講義內提到的 python3 都改為 python 即可 執行時如果少了 flask 模組記得要做安裝: pip install flask 執行時如果少了 requests 模組記得要做安裝: pip install requests (27)成功執行後網頁在哪呢 ?! (假設你用 w2.py 且 port 用 5566 沒改) 開啟瀏覽器, 在網址列打入如下: (記得 w2.py 有兩頁網頁喔) 127.0.0.1:5566/hello 或 Localhost:5566/hello (字母 LocalHost 大小寫不拘) (28)也可以讓別的同學開啟你在 PC Windows 上跑的網頁喔 ! 如果你是自己的電腦, IP 應該是 Public IP, 則全世界都可看得到 :-) 如果你是電腦教室的電腦, IP 應該是 Private IP, 則只有該間電腦教室的電腦可以看得到 :-) 當然, 你必須先找出你電腦所用的 IP, 這很簡單, 在 CMD 黑色命令視窗內打 ipconfig 注意你的 IPV4 網址, 如下圖: (29)請一位同學和你合作, 各自開兩個瀏覽器視窗, 一個顯示自己的"網站", 要可以看到自己的學號與姓名, 一個顯示同學做的"網站", 可看到同學的學號與姓名, 兩個瀏覽器視窗儘量都顯示出來, 敲 CTRL_PrintScr 抓下全畫面, 然後貼入小畫家後存檔, 抓下這張圖當然是要繳交到你的 WeeBLY 網站 !
 
(三)以下是假設在本校(交通大學校計中)電腦教室開機 選最後那項 "Anaconda ..."
   (30)這個選項開機區已經安裝了 Anaconda + Jupyter notebook  (這是另一家公司弄的 Python)
       目前(107學年第2學期/2019年2月)學校計中電腦上安裝的版本是 Python 3.6.5
       這時雖然也是有安裝了 Python IDE, 但是 Anaconda 把它藏起來了,(自己 Google 看如何把它叫起來)
       因為 Anaconda 希望你透過網頁瀏覽器使用 Jupyter 記事本來使用 Python,
       要使用 Anaconda 的 Jupyter Notebook, 從 Windows 左下角 開始(Start)選單 找到 Jupyter Notebook 即可,
       參考以下兩張截圖:
           ( 注意 預設 Jupyter 是跑在 Port 8888 )
       
       
           ( 注意 預設 Jupyter 是跑在 Port 8888 )
       
   (32)如果你有認真看主講義 iottalk.vip/6 內關於 Jupyter 部分,
       應該也會從 PC Windows 瀏覽器使用 Server 上的 Jupyter Notebook:
         (A) jupyter notebook server (在伺服器上)執行時指定 IP 用 0.0.0.0 
                    jupyter notebook --ip=0.0.0.0 --port=8088
             這樣任何人都可從瀏覽器指定你設的 Port 連入 (例如以下我們用 8088 這 port)
               (注意在瀏覽器網址列 IP 要打該伺服器的 IP 或 Domain name, 不要真的打 0.0.0.0 喔!)
             ** 但是你要給他 密碼或 token 他才能登入
             

         (B) jupyter notebook server 執行時指定 IP 用  127.0.0.1 或 Localhost  
                    jupyter notebook --ip=127.0.0.1  --port=8088 
             這樣必須用 SSH 工具設定秘密通道Tunel連入 iottalk.vip 或 iottalk.club 使用Server端的 Anaconda,
             這在主要講義 iottalk.vip/6 內有詳細說明喔 !
       當然, 自己電腦上只要有瀏覽器就可以用該 Jupyter notebook 了 !

   (33)當然也可以透過 Ana Prompt 或 CMD 命令視窗來使用 Python, 參考下圖:

     以下是開 Windows 的 Anaconda Prompt 視窗(很像 CMD 窗) 用 Python
       

     以下是自己開 Windows 的 CMD 視窗也可用到 Python
       

   (34)前面在(二)已經練習了在自己 PC 用  Python + Flask 做出 "網站",
       所以開機到這區就不再練習網站, 
       請改用 Jupyter Notebook 練習用一些基本 Python 小片段熟悉 Python 語法,
       例如九九乘法表或網路找的一些簡單小 Sample programs 等等

   (35)當然要把練習過程抓一些畫面截圖繳交到你的 WeeBLY 網站 !
       證明你已經會用 Anaconda + Jupyter 也可以獲得加分 :-)


*** 以上 (二) 只要在 03/08(五) 22:59:59 之前有做完就可獲得加分
         (三) 只要在 03/11(一) 22:59:59 之前有做玩就可獲得加分


🙎 👦 本班各同學網頁的網址(開新窗)

🌐 本課程主要講義 https://iottalk.vip/6 (蓋掉此頁)
    e3new 新 E3 ;   NCTU Portal 交大入口網站            

週六和週日也可以使用 iottalk.club

* 🅶vm亞歷克羅斯:程式、跨領域、終身學習,是未來成功關鍵

Leonardo Fibonacci 的不死之兔子 (以下是用 Recursive 遞廻式寫法)
** 注意 Recursive 遞廻式寫法很好謝, 但很慢, 此例當 n 超過 50 將會非常慢 !
# Fibonacci rabbits problem
# recursive function to find fib(n)

def fib(n ):
    if(n == 0):  #  0-th month
        return 0
    elif(n == 1):  #  1-st month
        return 1
    else:
        #print(".", end="")
        return fib(n - 1) + fib(n - 2)

for k in [0, 1, 2, 3, 4, 5, 6, 15, 21, 23, 25, 28, 33]:
    print("At ", k, end="")
    if( k % 10 == 1):
       print("-st", end="")
    elif(k %10 == 2):
       print("-nd", end="")
    elif(k %10 == 3):
       print("-rd", end="")
    else:
       print("-th", end="")
    print(" month, ", end="")
    print("We will have ", fib(k), " pairs of rabbit", flush=True);


李奧納多.費費波那西(Leonardo Fibonacci)在公元1202年提出一個有趣的問題:
  (a)第一個月初有一對剛誕生的兔子
  (b)幼兔一個月可長為成兔
  (c)每對成兔過一個月可聲下一對新兔子
  (d)兔子永不死去
請問第 n 個月會有幾對兔子 ?
這就是很有名的費氏數列-費伯那西兔子問題
後來,大家才發現原來這個問題與以下黃金分割問題其實是息息相關的:
  黃金分割比(Golden ratio)

庭院深深幾許深 ?  
 深深庭院深幾許 ?  
  幾許庭院深深深 ?  
另外,
也發現了 Blaise Pascal(巴斯卡) 在 1653年提出的 巴斯卡三角形(Pascal Triangle)
竟然和 
二項式展開式的係數(Binomial coefficient)以及組合(Combination)問題其實也習習相關。

 
A simple Python program to Find the Factorial of a Number
# Python program to find the factorial of a number provided by the user.

# change the value for a different result
num = 7

# uncomment to take input from the user
#num = int(input("Enter a number: "))

factorial = 1

# check if the number is negative, positive or zero
if num < 0:
   print("Sorry, factorial does not exist for negative numbers")
elif num == 0:
   print("The factorial of 0 is 1")
else:
   for i in range(1,num + 1):
       factorial = factorial*i
   print("The factorial of",num,"is",factorial)


Using Euclidean Algorithm to find GCD ( aka HCF)
def computeHCF(x, y):

   # This function implements the Euclidian algorithm ..
   #  to find H.C.F. of two numbers
   while(y):
       x, y = y, x % y

   return x

computeHCF(121, 550)

HCF(Highest Common Factor, 最大公因素) and GCD(Greatest Common Divisor, 最大共同除數) are same. Factors or divisor can be used interchangeably. Factors or divisor are numbers that can divide another number.
歐幾里得輾轉相除演算法

Iterator
# list of vowels
vowels = ['a', 'e', 'i', 'o', 'u']

vowelsIter = iter(vowels)

# prints 'a'
print(next(vowelsIter))

# prints 'e'
print(next(vowelsIter))

# prints 'i'
print(next(vowelsIter))

# prints 'o'
print(next(vowelsIter))

# prints 'u'
print(next(vowelsIter))
###
print("========")
gg =  iter(vowels)
while True:
    try:
        # get the next item
        element = next(gg)
        print(element, end=" ")
    except StopIteration:
        # if StopIteration is raised, break from loop
        break
print( )
啥是 Iterator(疊代器) ? 有時又稱資料的游標(cursor)


https://www.datacamp.com/

Python Programming Examples