Author name: 楊慶忠

多益文法與字彙之7~介系詞與介副詞

2-7:介系詞與介副詞 先前提到的「完全不及物動詞」,似乎在它後面就不宜再放受詞了,但實際上還有其變化的形式。因為我們發現,即使聽不懂這些拗口的名詞,也不會妨礙對課文內容的理解。 及至年長,不免對老師的諄諄教誨感到歉意,但多少也有點抱怨,那種大範圍系統性的觀念,難道不能講得口語化一些,非得讓懵懵懂懂的青澀少年,聽得一頭霧水暈頭轉向嗎? 英文分成五大句型,還運用到主詞補語、受詞補語等來解釋,應該是外國學者和教育界人士,經過長時間思考和討論的智慧結晶。目前大家英文都學到一定的歲月了,現在再回過頭來複習一下,說不定可收溫故知新水到渠成之效。 要弄懂甚麼是「不完全不及物動詞」、「完全及物動詞」這一些,先要釐清甚麼是「及物動詞」,甚麼又是「不及物動詞」。 「完全不及物動詞」的句型是最簡單的,句子內只要有主詞和動詞就可以了,例如John cries.、Mary fainted.,哭泣cry、昏倒faint,這些動作都是自己做就可以,不需要有施予動作的對象,所以稱之為完全不及物動詞。 「不完全不及物動詞」,它是不及物動詞,但後面可以接名詞,這名詞並不是用來承接動作,而是用來補充說明主詞,所以稱之為主詞補語,主詞補語在此就等同於主詞本身。例如John becomes a good student. 主詞補語是a good student,等同於主詞John,而不完全不及物動詞become,主要用來連結John和a good student兩者關係,稱為連綴動詞(linking verb)。 「完全及物動詞」的句型也很簡單,只要有主詞和動詞和受詞就可以了,例如 I ate apples.、He drives a bus.,這些句子都有主詞、動詞、受詞,是典型的完全及物動詞。 「不完全及物動詞」的句型,也是有主詞、動詞、受詞,但是語焉不詳,必須對受詞再做補充說明,語意才會完整。例如 I heard Jane. 、I let my hair.,都使用到不完全及物動詞,只是還不清楚其完整意思,但若加上分詞片語當作受詞補語,就可表示受詞主動或被動在進行一些動作,如 I heard Jane singing a song. I let my hair cut in the barbershop. 主詞(受詞)補語如果是形容詞,表示補語在呈現主詞(受詞)的樣貌或狀態,例如This apple tastes sweet. He made me crazy. 。受詞補語也可以是原形動詞或不定詞片語,甚至介系詞片語,例如 […]

多益文法與字彙之7~介系詞與介副詞 Read More »

多益文法與字彙之6~句型與補語

2-6:句型與補語 以前高中上英文課時,只要聽到老師講到「不完全不及物動詞」、「受詞補語」這些東西,就趕緊讓腦筋切換到關機模式,以免傷及腦細胞。因為我們發現,即使聽不懂這些拗口的名詞,也不會妨礙對課文內容的理解。 及至年長,不免對老師的諄諄教誨感到歉意,但多少也有點抱怨,那種大範圍系統性的觀念,難道不能講得口語化一些,非得讓懵懵懂懂的青澀少年,聽得一頭霧水暈頭轉向嗎? 英文分成五大句型,還運用到主詞補語、受詞補語等來解釋,應該是外國學者和教育界人士,經過長時間思考和討論的智慧結晶。目前大家英文都學到一定的歲月了,現在再回過頭來複習一下,說不定可收溫故知新水到渠成之效。 要弄懂甚麼是「不完全不及物動詞」、「完全及物動詞」這一些,先要釐清甚麼是「及物動詞」,甚麼又是「不及物動詞」。 「完全不及物動詞」的句型是最簡單的,句子內只要有主詞和動詞就可以了,例如John cries.、Mary fainted.,哭泣cry、昏倒faint,這些動作都是自己做就可以,不需要有施予動作的對象,所以稱之為完全不及物動詞。 「不完全不及物動詞」,它是不及物動詞,但後面可以接名詞,這名詞並不是用來承接動作,而是用來補充說明主詞,所以稱之為主詞補語,主詞補語在此就等同於主詞本身。例如John becomes a good student. 主詞補語是a good student,等同於主詞John。而不完全不及物動詞become,主要用來連結John和a good student兩者關係,稱為連綴動詞(linking verb)。 「完全及物動詞」的句型也很簡單,只要有主詞和動詞和受詞就可以了,例如 I ate apples.、He drives a bus.,這些句子都有主詞、動詞、受詞,是典型的完全及物動詞。 「不完全及物動詞」的句型,也是有主詞、動詞、受詞,但是語焉不詳,必須對受詞再做補充說明,語意才會完整。例如 I heard Jane. 、I let my hair.,都使用到不完全及物動詞,只是還不清楚其完整意思,但若加上分詞片語當作受詞補語,就可表示受詞主動或被動在進行一些動作,如 I heard Jane singing a song. I let my hair cut in the barbershop. 主詞(受詞)補語如果是形容詞,表示補語在呈現主詞(受詞)的樣貌或狀態,例如This apple tastes sweet. He made me crazy. 。受詞補語也可以是原形動詞或不定詞片語,甚至介系詞片語,例如

多益文法與字彙之6~句型與補語 Read More »

增強式學習之4~Q-learning

3-4:Q-learning 增強式學習裡面,有一個很基本的技巧,叫做Q-learning。Q是Quality的意思,指在某種狀態下,採取某個行動的價值,或者說在幾個可供選擇的行動中,各個行動品質的量化評估。 Q-learning的演練例子當中,除了先前提過的迷宮遊戲之外,Open AI公司所提供的Gym Cart-Pole,「木棒平衡滑車」遊戲 ,是被引用次數相當多典型範例,它訓練滑車左右快速移動,來讓繞軸轉動的木棒可以維持平衡。 上圖的實驗是不容易複製的,除了程式設計之外,還要有精準的機械控制模組來協作,一般人是沒辦法模仿的。 所以變通的方式,就是純粹用電腦動畫遊戲來模擬看看。但模擬過程的計算還真不好處理,因為木棒的軌跡,除了移動還有轉動,要做得維妙維肖,除了程式語言,還要有力學的演算技巧。只是一般設計程式的人,往往連「角速度乘以曲率半徑等於線性速度」,這樣的物理基礎都沒有,所以設計出來的動畫遊戲,就如下圖這般形似而神異了。 Cart-Pole這個訓練遊戲的重點,是在決定整個環境(environment)有哪些狀態(state),代理人(agent)有哪些動作(action)。只不過它的四個狀態中,木棒角度和角速度就會難倒很多人,嚴格來講,這個練習並不適合讓初學者來嘗試。 值得慶幸的是它的代理人動作倒還很簡單,就是滑車在某個位置時,要決定下一步是朝左移動、朝右移動或靜止不動這三種。我們把這三種動作維持不變,場景改成類似個人版的乒乓球遊戲,狀態就可大幅簡化成三個物體的位置,如此,初學者就可以很清楚,在套用Q-learning的時候,Q-table的四軸陣列,應該要如何建立起來了。 https://mobile-learning-testing.com/wp-content/uploads/2024/12/pon.mp4 上圖的訓練遊戲,它的reward值,在球接觸到拍子的狀態,應該是一個大的正數,在球接觸到地板的狀態,應該是一個大的負數,其他的狀態,給予 -1的reward即可。它可據此算出各個狀態的最適行動Q值,來決定下一步應該採取的行動。 這整個場景像是一維半(1.5D)的乒乓球遊戲,因為兩個球都只能在垂直方向移動,如果可以讓一個球在二維平面(2D)上持續移動,那就是個人乒乓遊戲的AI版本了。

增強式學習之4~Q-learning Read More »

進階語法之6~串列、陣列與張量

2-6:串列、陣列與張量 我們前面的單元,有提到串列(list)搭配迴圈的計算,所使用到的是一維串列。串列也可以是二維、三維或更高維,在統計分析和繪製圖表經常會接觸到,它的功能就類似別種語言的陣列。 但它在某些方面卻有迥然不同的運算方式,即以最簡單的加法而言,它的結果也出乎一般初學者的預料。比如我們把兩個一維串列(向量)相加,[1,2,3]+[4,5,6],竟然會得到[1,2,3,4,5,6]。 這樣的運算是有它的用意的。第一,它可以把分次得到的資料整理在一起;第二,它可以擁有記憶的功能。 下圖是我們先前提到的循環神經網路RNN,在右邊展開的三個時序圖中,我們可以看到,前面時序處理過的訊息,會和最新輸入的訊息結合在一起後,再做下一步的處理。這兩個訊息結合在一起,使用的就是類似這種串列加法的連接運算(concatenate),這種運算可以把新舊記憶連結起來。 如果堅持一定要使用線性代數的計算方式,就要使用到Python裡面運算功能強大的套件模組–Numpy,Numerical python。它的核心是使用C語言來開發的,很適合快速處理大量資料。 下圖第5行先匯入numpy模組並簡化其命名為np,第6、7行利用np的array函式,將串列轉換成陣列,經過加總後再輸出,就可以得到一般線性代數計算的結果。 但numpy的功能遠不止於這些,它在數學觀念上的轉變,和程式碼裡面符號的處理,是有相當程度的躍升了。 早在Matlab最活耀的時代,它已經把矩陣的符號轉換成適合程式碼輸入的形式。例如一個最簡單的3×3影像矩陣,將其灰階值表示成[25  33  120;18  95  212;130  77  255],這種矩陣表示方式可稱之為二維陣列。很顯然的,這樣的數據要輸入程式碼中是沒有問題的。相較之下,傳統的矩陣符號,是不太適合寫成程式碼的, 圖2-6-4. 傳統的矩陣表示方式,把數據夾在兩個大型中括弧內,並不適合寫成程式碼。 到了numpy的階段,它把上式二維陣列,再進一步轉換,寫成更精準的模樣,這就是所謂的ndarray(n-dimensional array),[[25  33  120]  [18  95  212]  [130  77  255]]。 這種寫法,極具擴充性,我們可以把它擴充成四維陣列,[[[[25]  [33]  [120]]  [[18]  [95]  [212]]  [[130]  [77]  [255]]]]。增加的外層維度(藍色)意思是說,除了這張影像,還可以再置入其他影像;增加的內層維度(橘色)意思是說,裡面的灰階值,可以從單一灰階值,擴充成紅綠藍三種灰階值。 嚴格來講,這邊的維度應該叫做軸度(axis)。在numpy裡面,維度(dimension),指的是向量裡面元素的個數。經常聽到的名詞「降維」(dimensionality reduction),其實是減少元素個數,來提取特徵。 最後,必須提到上圖(TensorBoard)中張量(tensor)的概念。tensor在很多方面都類似ndarray,但它是專為深度學習而設計,可運行在GPU上面,而ndarray比較常使用到CPU。 Google的深度學習模組,叫做TensorFlow,數據在上一神經層運算完畢後,再進入到下一神經層中處理,好像張量在流動一樣。 在實務工作上,TensorFlow常是深度學習工程師必備工具,但它跨入門檻不低,所以在學術研究上,很多人喜歡用臉書公司開發的技術Pytorch來發表論文。

進階語法之6~串列、陣列與張量 Read More »

進階語法之5~資料處理視覺化

2-5:資料處理視覺化 我們在分析資料的時候,如果數據整理的結果能用圖形表示,不但可以讓一般讀者快速抓住問題重點,也可以讓有經驗的人看出其中的技術細節。 早期這方面的相關軟體,最具代表性的就是Matlab,Matrix Laboratory。它第一版是用FORTRAN編寫,著重在矩陣向量的運算,第二版改以C語言開發,加入了資料圖形視覺化的功能。 時至今日,由於大數據和人工智慧的需求,Python裡面Matplotlib.pyplot繪圖模組,結合其Pandas資料處理能力,和Numpy的陣列運算功能,形成一套很有效率的深度學習組合。 上圖上第2行匯入繪圖模組並改命名為plt,第3行讀入csv檔案後,在第4行取其中”CPM”欄位值和”CTR”欄位值,分設為x座標和y座標,繪製出上圖中之2D散佈圖。可以看得出來,搭配第1行匯入的pandas模組,整欄資料的取用計算變得非常簡便。 下圖是取用所有6個欄位的資料值,繪製出3D散佈圖。這3D圖不僅能顯示3個座標軸,還可引用另外3個變數,顯示出總共6種不同資料訊息。 第15行中,除了x,y,z等3軸座標外,還用顏色來分類”CLASS”這個欄位,而且使用數據點的大小,來顯示”ROAS”這個欄位值的多寡。甚至,還可以把”公司名”這個欄位內容,用第16、17行的敘述直接標記在數據點旁邊。 如果只比較繪圖精美的程度,Matlab因為發展既久,明顯勝過Matplotlib,但兩者處理的對象和數學的觀念,並不完全一致。 Matlab的Matrix(矩陣),主要針對科學工程可以量測的物理量,如時間、位置、頻率、強度等,做變化趨勢的計算,而Matplotlib很多是在做數據分佈的統計分析。 兩者在數學上的觀念差異,從使用的符號也可看得出來。Matlab所強調的矩陣著重在2、3維變數,很難擴充至4維以上;但Matplotlib卻很容易從陣列(Numpy Array)的操作,視需要增減它的維度。 模組搭配Python程式語言運作,在實務上比較佔優勢。Matlab因為是C語言的API,不是直接撰寫C/C++語言,在影像視訊類的第一線工作場所,有時不為基層主管所喜。 圖2-5-3. Matlab的繪圖顯示相當精美。 前面提到的FORTRAN語言,那是五年級前段班生的共同記憶。當時個人電腦並不普遍,電腦實習課都需要輸入程式至大型主機,進行分批次處理作業,再靜待編譯結果。所以不時可看到電腦教室終端機前,一群人在那裏慌慌張張、手忙腳亂,在有限時間壓力下,匆匆輸入錯誤指令。但這夢魘不會馬上終止,你還必須過一個禮拜等報表出來之後,再繼續輸入指令、然後繼續錯誤…….。 聽說早期的情況還更慘,學生是用卡片打孔方式輸入程式,有時卡片打錯了,還會有人用膠帶把打錯的孔貼起來,實行「掩耳盜鈴」政策,讓計算機老師相當頭疼,不知道該不該責備這些天真浪漫的學生。 圖2-5-4. 整張卡片代表一個指令敘述,每一行代表一個字元,最多可輸入80個字元。黑色的小框,是被打孔的位置。 圖2-5-5. 1963年,一部IBM打孔機電腦,用牛車搬運至台北羅斯福路,一路穩步向前,被戲稱為”mobile computing”的先驅。

進階語法之5~資料處理視覺化 Read More »

進階語法之4~資料處理模組

2-4:資料處理模組 我們最熟悉的試算表軟體,大概非Excel莫屬了。這個軟體,火紅到有人光憑上傳教學影片至Youtube,教導各種日常活用Excel的場景,就可以獲利上百萬美元、賺進第一桶金,簡直讓人大呼不可思議。 Excel的各項設計,讓人工處理二維表單,變得視覺化又直覺化,可以快速正確得到數值運算的結果,為使用者節省大量時間成本。 隨著大數據時代的來臨,微軟也開始多方促銷開發既久的VBA,Visual Basic Applications,用來輔助Excel程式能力之不足。但囿於試算表先天框架所限,資料必須在儲存格、表格、視窗、檔案各種物件間轉換,讓VBA程式寫起來總算差強人意。 圖2-4-1. Excel試算表裡面,附有VBA程式設計的功能。 值此同時,越來越多人使用的Python,其資料處理模組Pandas,Python and data analysis,則以快速處理大量數據的能力,攫獲學界和業界的青睞。這個模組,可將外部的csv資料檔案,讀取至程式碼裡面,再以其內建的處理函式,運算各項統計數據。 下圖是簡短程式執行第1~4行的結果,第5~8行先用註解行略過。第1行匯入pandas模組,給予簡易名稱pd;第2行使用pd的read_csv類別,輸入ads3.csv資料檔,建立二維表格資料物件df;第3行將df內容全部輸出;第4行只輸出df的兩個欄位”Coms”和”CPM”。資料有8筆,由0編號至7。 下圖則是完整程式執行第5~8行的結果,第1~4行用註解行略過。第5行是用mean( )指令,求取”CPM”欄位的平均值;第6行是用std( )指令,求取”CPM”欄位的標準差;第7行搜尋”ROAS”欄位值為5的所有紀錄;第8行則是依”ROAS”的大小,將全部紀錄做排序。 平均值、標準差、搜尋、排序,是資料統計分析最基本的運算,在pandas裡面,都可以用簡單的指令快速處理。所以有人就把pandas,比喻為Python裡面的Excel。 在DOS作業系統時代,銷量最大的試算表Lotus 1-2-3,幾乎壟斷了IBM相容電腦市場,後來IBM乾脆花天價買下此產品,引發各界議論。但如前文提到的,微軟參與蘋果麥金塔的開發,取得圖形化介面的先機,讓Excel得以蠶食視窗作業系統市場,最終迫使IBM Lotus 1-2-3於2013年停產。 個人電腦試算表原本就存在有強勁的市場需求,早在蘋果電腦Apple 2推出時,上面就搭售廣受歡迎的VisiCalc,在記憶體有限的年代,它充分利用每一位元之精妙,宛若在雕琢藝術珍品一般。但市場競爭太激烈,這個產品風光了五、六年,在摩爾定律奏效之後,就被Lotus 1-2-3大幅超越了。 圖2-4-4. VisiCalc在Apple 2螢幕上的編輯畫面,它是品項數目乘以單價加總後再課稅的運算。

進階語法之4~資料處理模組 Read More »

進階語法之3~物件與視窗

2-3:物件與視窗 我們每天接觸電腦,在處理檔案資料夾的時候,習慣用滑鼠點選圖示或選單,來進行開啟、複製、貼上、刪除等動作,這種視窗操作設計,稱之為「圖形化使用者介面」(Graphical User Interface, GUI)。 早期DOS(Disk Operating System)作業系統時代,那些複製、刪除的動作,都要一行一行輸入英文指令來執行,十分費事,又容易出錯。圖形化介面的出現,是技術上相當大的進步,讓操作電腦變得十分直覺, 執行Python程式,如果只能在特定軟體中得到輸出,其實用性會有所侷限。但它其實是可以做成視窗面板的形式,再轉換成.exe執行檔,在Windows作業系統中直接開啟使用。 上圖中,第2行匯入製作視窗的模組tkinter,並簡化其命名為tk。第3行取出tk中的面板類別Tk,建立一個面板物件win,接著再取用win物件的各個函式,在第4~6行設定其外觀,後執行mainloop( )指令得到的結果,就是上圖下方500×300像素的青色面板。 下圖是完整程式執行後得到的視窗面板,它是用按鈕、文字方塊、選項鈕等元件,顯示「天增歲月人增壽」的下聯,以及顯示台南、高雄、嘉義的景點。這視窗只要再經過pyinstaller模組的打包,就可以在一般Windows電腦開啟執行了。 視窗作業系統,其發展過程風風雨雨,有牽涉到兩家電腦巨擘,蘋果和微軟。他們GUI的技術,都是源自於全錄公司(Xerox)位於加州帕洛奧圖的研究中心,全名為「Palo Alto Research Center」,簡稱PARC,該中心在個人電腦發展過程貢獻良多。 有部電影叫「Pirates of Silicon Valley」(矽谷海盜),就是在描述賈伯斯和比爾蓋茲之間,既生瑜何生亮的複雜情結。他們本是大哥帶小弟的關係,但微軟參與蘋果技術開發取得視窗訣竅,後來甚至從PARC直接挖角人才,建立自己的Windows作業系統,導致彼此反目,片中有一段精采的交鋒。 比爾蓋茲認為他和賈伯斯沒有兩樣,都好比是從有錢人鄰居Xerox夜不閉戶的住宅中,偷竊到人家的電視機,不管誰先來後到,兩人扮演的,都是竊賊的角色。 比爾蓋茲的說法其實是相當有問題的。當蘋果公司營業上億時,微軟每年營收不過八百萬美金,而且其中有一半,是來自搭配於蘋果麥金塔電腦的Word、Excel。最重要的,當時全錄公司有投資蘋果一百萬美金,所以賈伯斯才有機會進入PARC參觀。 蘋果在Sculley執行長任內,曾對微軟提起訴訟但敗訴。賈伯斯二度回鍋蘋果之後,本可以其掌握的第一手資料重擊微軟,但他是個惜才的人,他只要求比爾蓋茲投資蘋果一億美金,藉此讓外界瞭解,蘋果的技術遠較微軟優異。 相同的劇情,在手機世代又重演一次,但賈伯斯這次真的生氣了。他痛斥Google的Android作業系統,是剽竊自iOS的垃圾產品,並將Google在蘋果的一席董事Schmidt,於2006年逐出董事會。

進階語法之3~物件與視窗 Read More »

進階語法之2~物件與遊戲

2-2:物件與遊戲 在個人電腦興盛之前,一般人常玩的電子遊戲機有幾款熱門的機型,包括賽車遊戲、太空大戰,以及乒乓球遊戲等,深受美國社會各階層歡迎。 設計這些電玩遊戲的工程師技藝高超,光憑電子電路,不需要寫一行程式碼,就可以做出令人廢寢忘食的電子遊戲。在這當中,乒乓球遊戲的發展過程,特別具有戲劇性。 當時矽谷的傳奇電玩公司雅達利(Atari),其老闆布許聶爾在商展的電視遊樂器中,發現了一款乒乓球遊戲,沒有音效、沒有計分,而且球還是正方形的,卻居然有不少人喜歡玩。於是他把它改良後再推出,想不到一炮而紅。 可這種遊戲有個小缺點,就是必須要有兩個人一起玩才行。但很多電玩怪咖都是獨來獨往的,有迫切需要再開發一套個人版來滿足這些人,所以更加傳奇的蘋果電腦創業夥伴,賈伯斯和渥茲尼克這時候粉墨登場了,哥倆好肩負起這個重責大任,而且還真的不辱使命,打造出來的個人版乒乓球遊戲,正就是後來大家熟悉的”打磚塊”。 打磚塊這個遊戲,一直到個人電腦普及後,仍舊深受歡迎。在程式設計上面,也很適合拿它來說明物件與類別的建立與使用。 https://mobile-learning-testing.com/wp-content/uploads/2024/10/Clipchamp7.mp4 提起蘋果創辦人賈伯斯,他的生平事蹟真的三天三夜也講不完,但他極浪漫的一面倒是鮮為人知。 他很崇拜美國歌手Bob Dylan,崇拜到竟然追求其前妻,另一位知名歌手Joan Baez,女方大他十幾歲,兩人還一度論及婚嫁。Bob Dylan後來以歌詞上的創作,獲得諾貝爾文學獎。 Joan Baez則以其感傷又具人文關懷的歌聲,撫慰了多少在外求學就業的年輕心靈,尤其一首”Five hundred miles away from home“,更是娓娓訴說了離鄉背井的無奈與難捨。 電腦遊戲,在迷你電腦時代,為程式設計的發展,製造了推波助瀾的效果。迷你電腦或稱小型電腦(minicomputer),它的體積並不特別小,而是介於大型電腦和個人電腦之間,迪吉多公司的PDP-8是其中的代表性產品。 當年創立Artificial Intelligence一詞的先驅,達特茅斯學院的助理教授麥卡錫,後來跳槽至麻省理工學院建立人工智慧實驗室,他和另一位AI要角閔斯基,兩人旗下聰明又愛搞怪的徒子徒孫們,用PDP-1設計出太空大戰電腦遊戲,並在其他電腦中心流行起來,各方狂熱彷彿欲罷不能。搞到後來,迪吉多公司每次要出貨電腦前,一定要先把太空大戰安裝在PDP來滿足「顧客」需求。 網際網路的發展也有類似的情節,它一開始也是使用迷你電腦來處理介面訊息,當時主要功能是在傳遞電子郵件,後來到傳遞圖片甚至影片的階段,頻寬的需求就越來越多。當一些電腦宅男高手,開始在傳送色情圖片影片的時候,各種擴充頻寬的技巧,更是一發不可收拾。 圖2-2-4. 第一代電腦遊戲Spacewar,使用PDP-1設計。

進階語法之2~物件與遊戲 Read More »

進階語法之1~物件與類別

2-1:物件與類別 類別(class)和物件(object),這兩者是緊密相關連的,在進階一點的程式碼中,不時可看到其活躍的身影。 類別是一種複合式的資料型態,裡面可包含有數種屬性,以及處理這些屬性的函式;物件就是變數,只不過其資料型態為某種類別,此類別的屬性值一旦被指定,物件即在當時被建立完成,一個類別可以建立許多類似的物件。 我們以下列的程式碼,來說明這看似莫測高深的名詞,其實可以很直覺的來理解它。 在上圖第1~3行中,等號 = 的左手邊是變數名稱,右邊是變數值。由變數值可以看得出來,變數name的資料型態是字串(str),height的資料型態是整數(int),而weight的資料型態是浮點數(float)。 第4行等號左邊的bigball,和第5行的smallball,看起來也像是變數,但等號右邊的ball(50)、ball(25),實在看不出來是甚麼資料型態。 在這裡,我們刻意將ball的資料型態設定為類別,在主程式之前就應該先幫它做好定義,所以變數bigball、smallball,就是指定不同屬性值50、25給ball的類似物件。 在上圖中,我們用關鍵字class定義一個圓形類別ball,裡面用def宣告三個函式。 第一個函式_ _init_ _必然要存在,它叫做建構子,負責在建立物件時,將傳遞過來的變數值,指定成為自己的屬性值。在此做這個動作的,就是第3行的self . rad=rad,其中self是物件自己,它用點運算符 . 來連結其半徑屬性rad。等號右邊的rad,即將承接由第10、11行傳來的50、25。 第二個函式area(self),其功能是使用半徑屬性self.rad,來計算該圓形物件面積。因為self就是物件自己,所以不需要再另外傳遞參數給它。 第三個函式draw(self,x,y,a,b,c),是要將此圓形物件繪製出來,所以必須傳遞其位置座標x,y,以及圓形顏色的三個灰階值a,b,c給它。 接著,主程式在第10行指定半徑值50給類別ball,以建立一個大的圓形物件bigball;並在第11行指定半徑值25給類別ball,建立另一個小的圓形物件smallball。 上圖是定義類別、建立物件、呼叫物件函式的完整過程。主程式中第12行、15行,物件是經由點運算符來取用計算圓面積的函式area;第13行、16行函式draw繪圖的結果,出現在上圖右上及右下。 圓的半徑大小是在建立物件時就指定的,是不宜再頻繁改變了;但其位置和顏色的值是在呼叫繪圖函式時,才傳遞給它,卻是可以再視情況調整的。請注意這兩者的區別。 這個章節,我們先探討物件的建立及其含義,下一次就可以用它來設計複雜一點的電腦遊戲了。屆時將可發現,很多遊戲中的角色和物體的重複建立,使用的多是物件類別的技巧。

進階語法之1~物件與類別 Read More »

多益文法與字彙之5~分詞構句

2-5:分詞構句 以前讀高中時上到「分詞構句」這個章節,英文老師告訴我們說,有位學長考取大學之後,因為懂得活用分詞構句來寫作,獲得了教授的讚賞。他的意思是說,即使上了大學,能夠善用高中進階文法的人,其實並不很多。 分詞構句可以用其所省略的連接詞來分類。連接詞分對等連接詞和從屬連接詞,前者包括and、or….等,通常放在句子中間;後者有although, because, when….等,可視情況將其放在句首或句中。 對等連接詞的情況比較單純,如下例所示,「John stood on the street and waited for a taxi.」,兩個動詞stood、waited,經由and共用一個主詞John,可將其改成分詞構句「John stood on the street, waiting for a taxi.」,前一個動作的目的,有點是在引導下一個動作。 從屬連接詞所引導的句子稱為副詞子句,大多是在句首做轉換,例如「When I walked along the river, I met an old friend .」,可省略連接詞和主詞轉換成現在分詞片語,改成「Walking along the river, I met an old friend .」。 被動語態的副詞子句,如「Because John was hit by a car, he looked very uncomfortable.」,可保留過去分詞片語,改為「Hit by a car, John looked very uncomfortable.」。 句子變長了,一定會引用到連接詞和代名詞,適當使用分詞片語取代,可以讓句子結構變精簡,口語表達也更能強調重點。 以前在大同技術學院教書的時候,有個夜間部年齡稍長的同學跑來旁聽英文,那位女生在課堂上告訴我,說她高職上英文課的時候,只要校長在巡堂當中,有看到老師把黑板寫滿,那堂課就皆大歡喜了。 她在同學面前談到這件事情,語氣雖和緩但情緒是波動的,對於還有心想再學習的人來說,那種情況真是糟透了。 其實不要小看學生的潛能,只要有耐心和教學技巧,高職生還有很大的成長空間。隨著年齡漸增,理解力會慢慢提升,原先生吞活剝、死記強背的東西,開始會比較清楚它背後的涵義。 但就是不要一直教授新的、複雜的內容,打擊學生的信心,若能適當的放緩腳步,將基本的東西反覆熟練,同學也會越來越開竅的。

多益文法與字彙之5~分詞構句 Read More »

Shopping Cart