2020年3月4日 星期三
2019年12月17日 星期二
2019年12月15日 星期日
2019年12月4日 星期三
Scratch 動畫製作
最新範例連結:
https://scratch.mit.edu/projects/346277833
1.little fish
2.shark
3.background
https://scratch.mit.edu/projects/338225806/editor
https://drive.google.com/file/d/19SjVMh-yo6Yz2_8bj9OzwqL73xkWTVTd/view?usp=sharing
https://drive.google.com/open?id=1sq_USDH3RP8E7iV6lSo-2eAQHEHmLSJ0
https://scratch.mit.edu/projects/332836249/
http://lilimetooyou.pixnet.net/album/photo/331485380#after=331485359
https://scratch.mit.edu/projects/346277833
1.little fish
2.shark
3.background
https://scratch.mit.edu/projects/338225806/editor
https://drive.google.com/file/d/19SjVMh-yo6Yz2_8bj9OzwqL73xkWTVTd/view?usp=sharing
https://drive.google.com/open?id=1sq_USDH3RP8E7iV6lSo-2eAQHEHmLSJ0
https://scratch.mit.edu/projects/332836249/
http://lilimetooyou.pixnet.net/album/photo/331485380#after=331485359
2019年11月28日 星期四
2019年11月13日 星期三
2019年10月28日 星期一
2019年8月13日 星期二
2019年6月27日 星期四
閒聊人工智慧的浪潮與科技教育的方向
最近看大家都在討論AI,我把我之前幫老師們上
一些AI相關研習課程及教育現場實施的一些感想和大家分享:
這一波 AI需要各種不同層面的人力及人才
光是從工程師角度出發就可發現各式各樣的人力需求:
1.像是要餵給機器學習的資料整理與標記就需要花相當多的人力
2.把技術套用到案場的時候
我們需要會做機器學習程式和現階段ICT設備整合的程式人才
3.porting 到硬體上的時候我們需要一些對機器學習專用的開發板
熟系的韌體工程師
4. 想要把硬體做得更小更快的時候,我們就需要IC設計的專業人員,
這些工程師,他們還要對機器學習相關理論及做法有相當理解
才可以順利地執行工作。
5.資料分析這一塊需要兼具 Domain Knowledge
及機器學習使用能力的資料科學家
6.對於底層演算法的優化及問題的深入探討,我們需要
更多來自業界及學術界功力深厚的研究人員
7.但其很多事情還是以專業人員為主,AI當作輔助
我們需要更多懂得並且願意和機器好好協作的專業人員
像是一些大型網購公司的倉儲系統,目前也是機器和人合作的狀況
另外像是醫療體系,
他們雖然也都積極地導入AI系統,並協助業界及學術單位
做資料收集及研究開發,但第一線的醫療及照護人員幾乎是完全
無法用機器取代的...
===========================================
也許 AI時代的來臨,我們除了要學會和
機器合作之外,還要思考如何發揮身為"人"的優勢,扯遠了…
===========================================
回到教育現場…
那對教育現場的我們說說,應該如何努力才可讓學生在 AI 盛行的年代找到自己的定位並對整個產業有所貢獻?
暑快到了,以我最近收到暴多 AI 相關的研習及營隊的公文來看
政府和民間似乎都有想好好投資在AI相關的教育訓練上…
以我自己本身的經驗來說,
我從成大 Machine Learning LAB 畢業
並到工研院投入相關研究,
在工研院的六年確實也接觸各種和AI相關的案子…
我深知要培育一個可以做 AI 研究的人才是需要
相當程度的知識累積,
直到後來我進入教育界
並投入生活科技與資訊教育,
更近距離地觀察台灣的資訊教育現況
和學生的素質之後…
我不得不說,如果把眼光放遠一點的話
學生首先應該把心力放在傳統的學科上
像是數學或語文這類型的科目它是需要經過時間練習累實力的,無法速成
其次才是要培養學生解決問題的能力
教書的這幾年我遇到了一些很有想法
且喜歡動手實作的學生
實際指導他們之後發現了一個共通的問題
比起了解基礎的技術原理及背景知識
他們只關心怎麼樣快速的把成品兜起來
像有一個學生看網路教程用 arduino
弄了一個 RFID Reader ,當他發現無法
存取白卡上面的的block的時候跑來請教我,
不過當我告訴他 APDU 的通訊包及原理的時候
他只關心到底要改程式的哪一個片段才可以解決問題
另外有一個學生做了一隻藍芽遙控車
問他為何馬達要接繼電器,他竟然不知道什麼是繼電器
以上種種讓我想起一些業界的朋友和我分享的經驗…
為何相較於參加比賽經驗豐富且有實作經驗的
二三流大學or碩士畢業生,在頂尖企業選才的時候
還是喜歡相對可能沒什麼實作經驗的名校畢業生?
除了因為現在人人有獎的比賽和發明展太多了
更重要的是…
他們看重的是名校畢業生的基礎學科能力和
後續發展的潛力…
很多學術知識是有一定門檻的
出社會之後想靜下心來好好重新學習是有一定難度的
像我就一直後悔大學的時候沒有修到電子學
教生活科技的時候在做一些有主動元件的電路的時候
總是無法把細節計算清楚
總結以上的論點,我覺得教學生紮實地唸好基礎學科才
是王道,不要嫌它無聊唸了也不知道幹嘛~
把它練熟了以後應用起來就會知道它威力無窮了
新課網裡面規畫的資訊科技及生活科技的內容其實相當不錯
好好地照目前課網規畫的基礎程式與資料結構修習課程
並在生活科技部分好好培養動手實作與解決問題的能力
以上如都可以做得很好的話
應該可以為國家及企業儲備更充足的工業及資通訊人才
2019年6月18日 星期二
手遊外掛於程式教育之應用
※所需安裝包:
1. opencv-contrib-python
2. pyautogui
pyautogui使用說明
https://pclearn0915.blogspot.com/2019/05/pyautogui.html
1. opencv-contrib-python
2. pyautogui
pyautogui使用說明
https://pclearn0915.blogspot.com/2019/05/pyautogui.html
超實用-人臉辨識點名系統理論與實作
拜類神經網路的發展所賜,人臉辨識的技術越來越成熟
相關的應用也如雨後春筍冒出,其實從擷取到人臉區域到校正影像並擷取特徵點,
這裡面的每一步都需要一些較複雜的理論做支撐,關於影像辨識與CNN相關的探討
可以參考底下這一篇文章:
我們比較關心的是,有沒有比較簡單的方法可以讓我們跳過那些複雜的知識理解
直接實作出的人臉識別的系統,簡單在網路上搜尋一下
透過 python 引用 opencv 及 dlib 這兩個知名的函式庫似乎是一個不錯的選擇
底下是一些網友分享的做法:
大部分的做法是一個人臉的類別只用一張照片擷取特徵後當作參考,所以我們會有一個
照片庫,裡面就是每個不同的人臉類別各放一張照片,所以人臉資料庫裡面會有很多個
照片檔,檔名各自被標記為該張人臉的姓名或ID,例如 王小明.jpg 、張三.jpg、李四.jpg ...
不想直接存照片檔的話,也可以存特徵向量,
這樣在準備人臉資料庫的時候也可以剩下一些運算時間…
照片檔,檔名各自被標記為該張人臉的姓名或ID,例如 王小明.jpg 、張三.jpg、李四.jpg ...
不想直接存照片檔的話,也可以存特徵向量,
這樣在準備人臉資料庫的時候也可以剩下一些運算時間…
剩下該做的事就是將從webcam 或擷取到的照片的特徵值和
人臉資料庫中的不同特徵值做比對,找到最相近的那一張人臉特徵 ,
假設它上面標示的名稱叫"王小明"
我們就認為待測的照片很可能對應的就是人臉資料庫裡面的這一張人臉 "王小明"
至於怎麼衡量照片間的相似度呢? 直接看特徵向量之間的歐氏距離就可以了,
距離越近相似度越高…
如果每個類別我們都收集了很多張相片,例如光是 "王小明"的照片我們就有100張
那麼這邊還可以再套一些機器學習的演算法進來改進辨識效果。
不過對一些要求不高的應用程式來說,每個類別存一張照片的方法應該已經夠用了
我這裡幫大家整理一下相關的流程把它包裝成 python 安裝包: pyfacetrace
相關使用方法可以參考新版網站:
https://reurl.cc/V65WRb
以上方法的全靠本地運算,所以可以裝到如 Raspberry Pi 或 NVIDIA 等小型處理器上面,讓 Edge端就可以直接做人臉辨識,如此能延伸許多應用,網路也有很多人在分享,相關網站如下:
缺點就是…如果Edge端的處理器運算速度不夠的話,是無法做到即時運算的
其實也有網路服務在做這一些AI的服務…
如果是靠微軟的Azure、亞馬遜的AWS或是google cloud等網路服務,扣掉網路傳輸的時間的話運算速度會快很多,不過重點就是它通常有辨識筆數的限制,要真正能夠上線運作的話還是得乖乖從口袋把錢掏出來給這一些公司。
2019年6月11日 星期二
APCS 前置作業- zerojudge 基礎題庫 by python
zerojudge 為高師附中江其勳老師開發的程式寫作 Online Judge 網站:
https://zerojudge.tw/
進入網站後到 分類題庫>基礎題庫 有一些基礎練習連結如下:
https://zerojudge.tw/Problems?tabid=BASIC#tab00
今天要幫大家介紹如何搭配 python 做幾個基礎的練習:
話說python本身在做標準輸入時不像 c++ 一樣可以直接偵測EOF
例如:
int n; while(scanf("%d",&n) != EOF) { //...主程式... }
上例c++程式中會不斷讀入整數給變數n直到讀到EOF為止
為了讓 python程式可以在 zerojude上順利執行,我們導入了 try....except的概念
(try的用法可參考:http://www.runoob.com/python/python-exceptions.html)
讓讀到 EOF 當作例外來觸發,觸發之後可視程式的需求進一步動作,或終止程式。
例外處理與程式除錯是另外一門藝術,讀者可以藉由下列實例體會在程式中使用try來跳過例外狀況的方便之處,並慢慢學習真正需要做程式除錯時,程式中如何妥善傳遞例外狀況。
題目1. a001: 哈囉
https://zerojudge.tw/ShowProblem?problemid=a001
while True: try:a=input() except:break #過濾掉 EOFError,讀到EOF後直接跳出迴圈 if not a:break #輸入空字串時跳出迴圈 print('hello,',a)
題目2. a002: 簡易加法
https://zerojudge.tw/ShowProblem?problemid=a002
while True: try: #用字串內建的 split() 函式 #將字串做分割並將結果回傳給 a,b a,b=input().split() except: break if not a:break print(int(a)+int(b))
題目3. a003: 兩光法師占卜術
https://zerojudge.tw/ShowProblem?problemid=a003
R=['普通','吉','大吉'] while True: try: M,D=input().split() except: break S=(int(M)*2+int(D))%3 print(R[S])
題目4. a004: 文文的求婚
https://zerojudge.tw/ShowProblem?problemid=a004
#西元年被4整除且不被100整除,或被400整除者即為閏年 while True: try: Y=int(input()) except: break if (Y%4==0 and Y%100!=0)or Y%400==0 : print('閏年') else : print('平年')
題目5. a005: Eva 的回家作業
https://zerojudge.tw/ShowProblem?problemid=a005
n=int(input()) for i in range(n): L=input().split() #A=[int(L[0]),int(L[1]),int(L[2]),int(L[3])] A= list(map(int,L))#一個將 L 串列中的元素取int的簡潔方法 if A[1]-A[0] == A[2]-A[1] : #等差 A.append(A[3]+A[2]-A[1]) else: #等比 A.append(A[3]*int(A[2]/A[1])) #把 A 串列中的元素塞到空字串R裡面,並用空白字元隔開 R="" for a in A: r=str(a) #別忘了 A中的元素已被轉換成int了,要做字串運算的話要再轉換回來 R=R+r+" " print(R.strip())#用字串內建strip函式將頭尾多餘的空白字元刪除
以上五題供大家參考,初學者有空可繼續把全部基本題都做完
2019年5月26日 星期日
2019年5月14日 星期二
台鐵訂票系統外掛
工具程式碼
#為什麼只要勾選「我不是機器人」,Google 就知道你不是機器人 #https://buzzorange.com/techorange/2017/09/13/captcha-and-recaptcha/ #台鐵訂票系統 #https://tip.railway.gov.tw/tra-tip-web/tip/tip001/tip121/query import pyautogui as ag import pyperclip as clip import random as rnd ID='A195077385' Departure ='台南' Destination = '台北' Date = "2019/05/19" startTime = "13" endTime = "14" Num=2 # 在螢幕上找到和影像檔 f 相似度大於 c 的位址,並移動過去 # dx,dy 代表實際目標的水平修正量及垂直修正量 def move2Pic(f,c=0.95,dx=0,dy=0,dur=0): try: x,y=ag.locateCenterOnScreen(f,confidence=0.95) ag.moveTo(x+dx,y+dy,dur) return True except:pass return False # 在螢幕上找到和影像檔 f 相似度大於 c 的位址,並移動過去點一下 # dx,dy 代表實際目標的水平修正量及垂直修正量 def clickPic(f,c=0.95,dx=0,dy=0,dur=0): if move2Pic(f,c,dx,dy,dur): ag.click() return True else: return False def R(s=0.5,e=0.9):#取亂數,預設0.5~0.914之間 return rnd.uniform(0.5,0.9) def copyPast(Text):#將文字放到剪貼簿並按下 ctrl+v clip.copy(Text) ag.hotkey('ctrl','v')主程式
clickPic('enterID.png',dy=30,dur=R())#輸入身份証 for i in range(8):ag.scroll(25) copyPast(ID) ag.time.sleep(R()) clickPic('Departure.png',dy=30,dur=R())#輸入出發站 copyPast(Departure) ag.time.sleep(R()) clickPic('Destination.png',dy=30,dur=R())#輸入抵達站 copyPast(Destination) ag.time.sleep(R()) for i in range(Num-1):#選擇數量 clickPic('plus.png',dur=R()) ag.time.sleep(R()) clickPic('asTime.png',dur=R()) #依時段 for i in range(20):ag.scroll(-25) #連點三下全選的日期 move2Pic('Date.png',dx=10,dy=30) ag.doubleClick() ag.click() ag.time.sleep(R()) copyPast(Date) #貼上目標日期 ag.time.sleep(R()) for i in range(4): ag.press('tab') ag.time.sleep(R()) ag.typewrite(startTime,R(0.1,0.5)) ag.time.sleep(R()) ag.press('tab') ag.time.sleep(R()) ag.typewrite(endTime,R(0.1,0.5)) move2Pic('imNotRobot.png',dx=-50,dur=R()) ag.time.sleep(R()) #ag.click() #move2Pic('getTicket.png',dx=-50,dur=rnd.uniform(0.5,0.9))
2019年5月13日 星期一
2019年5月4日 星期六
2019年5月3日 星期五
建立python程式自動執行批次檔(with Anaconda promt)
在windows 底 要執行 寫好的 python 程式必須打開 cmd.exe 視窗
並輸入:
python xxxx.py (xxxx.py為欲執行的程式檔名)
(別忘了要加上python的環境變數)
偷懶一點的話可以寫成批次檔,想執行的話點批次檔執行就可以了,
不過如果您的python程式是寫在 Anaconda 上的話… 就有一點麻煩了…
一般而言,我們要透過 anaconda prompt 開出來的視窗來執行在
anaconda IDE 底下寫好的程式,這樣一些函式庫的路徑才不會跑掉,
這件事如何寫成批次檔呢? 底下讓我們一起來看看
set exDir="C:\Users\xxxxx\" ===>欲執行之 .py 檔所在資料夾路徑
set exFilename=xxx.py ====>欲執行之 .py 檔名
set root="C:\ProgramData\Anaconda3"
call %root%\Scripts\activate.bat %root%
cd %exDir%
python %exFilename%
pause
並輸入:
python xxxx.py (xxxx.py為欲執行的程式檔名)
(別忘了要加上python的環境變數)
偷懶一點的話可以寫成批次檔,想執行的話點批次檔執行就可以了,
不過如果您的python程式是寫在 Anaconda 上的話… 就有一點麻煩了…
一般而言,我們要透過 anaconda prompt 開出來的視窗來執行在
anaconda IDE 底下寫好的程式,這樣一些函式庫的路徑才不會跑掉,
這件事如何寫成批次檔呢? 底下讓我們一起來看看
Step1.建立一文字文件內容如下:
set exDir="C:\Users\xxxxx\" ===>欲執行之 .py 檔所在資料夾路徑
set exFilename=xxx.py ====>欲執行之 .py 檔名
set root="C:\ProgramData\Anaconda3"
call %root%\Scripts\activate.bat %root%
cd %exDir%
python %exFilename%
pause
Step2.將文字文件另存為批次檔,例如: xxx.bat
2019年5月2日 星期四
win7+Anaconda+python+pyinstaller 打包執行檔 + cp950 解決方法
python是一種直譯式的語言,不需要經過編譯就可以執行,不過相對的一定要有對應的 python 直譯器的環境才可以運作,本篇文章將介紹把 python 打包成執行檔的方法,不過打包好的執行檔應該還有平台上的限制,在MS Windows上編譯的程式一般也只能在MS Windows相容的作業系統上運作
Google關鍵字:"anaconda 打包執行檔"
※打包命令(需先安裝 pyinstaller)
pyinstaller -w -F xx\xx\xxx.py
打包的過程會出現各種不同的錯誤訊息,詳細閱讀後找到發生問題的程式區塊及錯誤訊息內容,並 google解決方案,
下面列出幾種作者打包時出現的錯訊息:
1.Cannot find existing PyQt5 plugin directories
解決方案參考連結:https://www.twblogs.net/a/5c23a691bd9eee16b4a7c6ee
https://github.com/pyinstaller/pyinstaller/issues/3852
這個問題作者單純安裝 PyQt5 就解決了
pip install PyQt5
2.UnicodeDecodeError: 'cp950' codec can't decode ...
解決方案參考連結:
https://stackoverflow.com/questions/49021589/how-do-i-fix-this-cp950-illegal-multibyte-sequence-unicodedecodeerror-when-rea
https://blog.csdn.net/chuatony/article/details/71436582
這是個常見的編碼問題,在 python2 及 python3上的解法略有不同
作者的 python版本為 3.6
找到的發生問題的程式碼後,必然會發現程式在執行
open() 函式後,引用 read() 、write() 之類的函式後發生問題
此時只要在相關函式呼叫時,規定編碼方式為 utf-8 即可
ex:
open(filename, "r")
改成==>
open(filename, "r",encoding="utf-8")
2019年5月1日 星期三
2019年4月11日 星期四
2019年2月11日 星期一
免費繪圖軟體整理
※向量圖
1. inkscapehttps://inkscape.org/zh-hant/
2.vectr(可免安裝線上操作)
https://vectr.com/zh-Hant
※影像處理
1.Gimphttps://www.gimp.org/
2.PIXLR(可免安裝線上操作)
https://pixlr.com/editor/
3.Krita
https://www.price.com.hk/news.php?id=7367
※相片處理
1.Photocap (用一般相片洗大頭照)https://www.photocap.com.tw/
2.PhotoScap
https://www.pkstep.com/archives/7195
※ 3D建模
1.SketchUphttps://www.sketchup.com/zh-TW/plans-and-pricing/sketchup-free
https://www.youtube.com/watch?v=BJ12B8JxYTE
2.Thinkercad
https://www.tinkercad.com/
https://www.youtube.com/watch?v=OqroxPZFsiE
※其它:
win10內建 小畫家3D (去背功能做得不錯)原圖範例:
2018年12月13日 星期四
App Inventor2 Class1
※Note:
①手機若沒有內建 QR Code Reader 請先至google app store下載安裝
②由QR code下載 apk檔至手機執行之前要先處理安全性設定,參考網站如下:
http://iuiii.net/app-inventor-2/118-ai2-08-01
①手機若沒有內建 QR Code Reader 請先至google app store下載安裝
②由QR code下載 apk檔至手機執行之前要先處理安全性設定,參考網站如下:
http://iuiii.net/app-inventor-2/118-ai2-08-01
2018年12月12日 星期三
2018年12月4日 星期二
淺談浮點數
大家都知道電腦是二進位系統的計算機器,可快速計算龎大的數值
那的二進位的數值該如何表示呢?
在數學上我們大致會將實數有理數和無理數,無理數如圓周率 3.14.5.... 在小數點後可有無窮位數的延伸,電腦運算會有精確度的問題, 只找一個有理數去做逼近。
這裡我們先來談談的有理數,有理數必定可表達為兩個整數相除(分數形式)
ex: 1.5 = 3/2
那我們首先要解決在電腦中整數的二進位表達與運算的問題,二進位的表達我們在之前的文章已經討論 過了,接下來要討論的是,不全然是整數時電腦該如何表達與運算,電腦通常管這種不全然為整數的數值表示法為浮點數(float point)
電腦的整數表示法有最大值和最小值的限制
在整數運算過程中超出最大值時會產生溢位問題
而浮點數表示法可表達的最大值到最小值的範圍卻遠大於整數表示法
不過…
相對於整數,在電腦中的浮點數會有精確度的問題
先以大家比較能接受的十進制的表示法來舉例:
像我們表達 12351234567893123.46879879879686546465465465465432132112321
這一個數值時可能只能精確到
12351234567893000
而表達 0.00000000000012345645654654631321555
這一個數值時可能只能精確到
0.000000000000123456
由上面的例子你應該會注意到數值的精確度並不是我們熟係的"小數點後第n位"
當數值很大時有可能連百位數都是不精確的
為什麼會這樣? 因為表達浮點數的位元數是有限的(ex:32位元),硬要表達很大的數值時就只好把相對較小的位數捨棄掉了,這裡我們就來看看目前大部分PC通用的 IEEE 754 浮點數表示法如何運算 : 文字說明參考連結
那的二進位的數值該如何表示呢?
在數學上我們大致會將實數有理數和無理數,無理數如圓周率 3.14.5.... 在小數點後可有無窮位數的延伸,電腦運算會有精確度的問題, 只找一個有理數去做逼近。
這裡我們先來談談的有理數,有理數必定可表達為兩個整數相除(分數形式)
ex: 1.5 = 3/2
那我們首先要解決在電腦中整數的二進位表達與運算的問題,二進位的表達我們在之前的文章已經討論 過了,接下來要討論的是,不全然是整數時電腦該如何表達與運算,電腦通常管這種不全然為整數的數值表示法為浮點數(float point)
電腦的整數表示法有最大值和最小值的限制
在整數運算過程中超出最大值時會產生溢位問題
而浮點數表示法可表達的最大值到最小值的範圍卻遠大於整數表示法
不過…
相對於整數,在電腦中的浮點數會有精確度的問題
先以大家比較能接受的十進制的表示法來舉例:
像我們表達 12351234567893123.46879879879686546465465465465432132112321
這一個數值時可能只能精確到
12351234567893000
而表達 0.00000000000012345645654654631321555
這一個數值時可能只能精確到
0.000000000000123456
由上面的例子你應該會注意到數值的精確度並不是我們熟係的"小數點後第n位"
當數值很大時有可能連百位數都是不精確的
為什麼會這樣? 因為表達浮點數的位元數是有限的(ex:32位元),硬要表達很大的數值時就只好把相對較小的位數捨棄掉了,這裡我們就來看看目前大部分PC通用的 IEEE 754 浮點數表示法如何運算 : 文字說明參考連結
2018年11月21日 星期三
轉載嚴長壽先生 2014 Talk
最近聽了一個嚴長壽先生 2014 的 Talk :
11:44 他提到我們無形中被網路綁架,也提到了 Stephen Covey 的時間矩陣,網路的時代
我們是不是花了太多時間在 "不重要" 且 "不急迫" 的這個相位上了?

11:44 他提到我們無形中被網路綁架,也提到了 Stephen Covey 的時間矩陣,網路的時代
我們是不是花了太多時間在 "不重要" 且 "不急迫" 的這個相位上了?

軟體應用專輯2
※軟體應用專輯2
提到文書處理軟體如 word 、 excel 多數同學都會認為那是早就學過的東西,或是
根本不用教就可以學會的東西,在這裡幫大家整理我認為最常用且最必要熟係的
功能:
1.如何用Word做出一張履歷表?
a.如何處理表格b.如何插入圖片
c.如何插入excel圖表
==============================
2.自學Excel功能
給定excel表格: 學生成績表
※excel 表達"資料範圍"的方法:
開始欄位(左上角) : 結束欄位(右下角)ex: A1 : C3
a.如何求平均、求加總
b.如何排序
c.如何做排名 =rank( 目標欄位 , 範圍)
範圍要先用 $ 符號做鎖定 ex: R$2 : R$36
d.如何統計次數 = count( 目標欄位 , 範圍)
e.如何設定格式化條件
f. 如何利用 $ 符號鎖定欄位
g.如格凍結窗格後記:
在文書處理的世界,除了微軟的office之外還有很多其它 的選擇如 libreoffice 及 google document .... , 但其實操作方式都大同小異,在軟體著作權日益被重視的年代,各種好用的免費或開源軟體值得大家關注
APCS 考古題 Tree Analysis
APCS.2017.10.28考古題下載
Step1.將樹葉節點納入待拜訪的佇列 (queue)
Step2.逐一由佇列中取出節點並拜訪各自的父節點並更新該父節點高度值
Step3.一旦被處理的父節點之子節點皆被拜訪過後,將該父節點也塞入待拜訪佇列的尾端
Step4.重複 Step2~3 直到拜訪到根節點為止
※簡單方法(效能稍差):
※其它方法(效能較佳):(時間複雜度較小)
想法:Step1.將樹葉節點納入待拜訪的佇列 (queue)
Step2.逐一由佇列中取出節點並拜訪各自的父節點並更新該父節點高度值
Step3.一旦被處理的父節點之子節點皆被拜訪過後,將該父節點也塞入待拜訪佇列的尾端
Step4.重複 Step2~3 直到拜訪到根節點為止
import queue In = input().strip() while In!="":# while not In n= int(In) p=[-1]*(n+1) #p[i]=j,表示i的雙親為j d=[0]*(n+1) #紀錄節點深度 num=[0]*(n+1) #紀錄節點的子節點個數,子節點計算過後就減1 t =queue.Queue() #儲存待走訪之節點 for i in range(1,n+1): #為方便觀察從索引 1 開始放置元素 #line = list(map(int,f.readline().split()) ) line = list(map(int,input().split()) ) #讀入一行後轉換為 int k = line[0] num[i] = k #節點 i 的子節點個數 if k == 0: t.put(i) #葉節點先納入待走訪的節點 else: for j in line[1:]: p[j] = i #使用陣列p紀錄 j 的parent為i i = 0 node = 0 while True: node = t.get() #取出待走訪之節點 if p[node] == -1:break #沒有父節點代表它是根節點==>結束迴圈 d[p[node]]=max(d[p[node]],d[node]+1) #葉節點深度+1 和 已記錄之深度取大者作為本節點深度 num[p[node]]=num[p[node]]-1 #父節點底下未走謗過的子節點數目減1 if num[p[node]] == 0: #當所有子節點都走訪過時,將該父節點納入待走訪之節點 t.put(p[node]) print(node)#最後一個從t取出的就是根節點 print(sum(d))#最後一個從t取出的就是根節點 try:In = input().strip() except EOFError:break
2018年10月31日 星期三
2018年10月23日 星期二
電腦的數值系統
活動一、影片欣賞
資訊老師教班級相當多,無法記住每個學生的姓名時就會發生像以下影片的情形
活動二、編碼魔術:猜姓氏
step1.選出班上八位同學至白板寫下姓氏(老師背對白板且事先不知他們的姓氏)
step2.老師在黑板上寫了一些文字
step3.老師只要問三個問題,必然可以猜出任一人的姓氏
=====================================================
數值變換教學影片
測驗一、2進位轉10進位
測驗二、10進位轉2進位
測驗三、2進位轉16進位
2018年10月8日 星期一
手遊外掛程式範例 by Python
手遊外掛程式範例1 - 別踩白塊兒
桌機PC的執行效能可以比其它手持裝置高上許多,在pc上只要搭配多一點記憶體和
虛擬加速的硬體就可以在單一機器上同時運行多個不同的模擬器 (VM)
底下我們在Windows 平台上架設手機模擬器並嘗試用程式控制滑鼠鍵盤以實現手遊的外掛程式的開發
投影片下載
投影片下載
2018年10月7日 星期日
2018年9月13日 星期四
2018年9月10日 星期一
2018年8月19日 星期日
2018年8月18日 星期六
用python做線上翻譯與語音輸出
In [27]:
#Speech Recognition (語音轉文字)
import speech_recognition as sr
r = sr.Recognizer()
print('請對麥克風說話...')
with sr.Microphone() as source:
audio = r.listen(source)
textZh = r.recognize_google(audio,language='zh-TW')
print(textZh)
#google翻譯
from googletrans import Translator
ts = Translator()
textJa = ts.translate(textZh,dest='ja').text
print(textJa)
#google Text to Speech (文字轉語音)
from gtts import gTTS
tts=gTTS(text=textJa, lang='ja')
import tempfile
filename = tempfile.NamedTemporaryFile().name+'.mp3'
tts.save(filename)
#播放音TSO
from pygame import mixer
mixer.init()
mixer.music.load(filename)
mixer.music.play()
台灣
訂閱:
文章 (Atom)