Author name: 楊慶忠

多益文法與字彙之4~假設語氣

2-4:假設語氣 我們上了高中才會開始學假設語氣,因為它結合不同的時態有不同的句型,並不很好掌握。因此我們在這部份,也只討論現在式和過去式兩種,這是最常出現的時態。 「If I knew Quantum Mechanics, I could teach in the college.」這是和現在事實相反的假設語氣,表示我不懂量子力學,所以無法在學院教書。 「If I had known Quantum Mechanics, I could have taught in the college.」這是和過去事實相反的假設語氣,表示我以前不懂量子力學,所以並沒有在學院教過書。 在過去式假設語氣中,包含了第一個子句過去完成式,和第二個子句現在完成式,通常比較會出現在文字敘述中,在口語上,很少人這樣講,因為文謅謅又囉嗦。 對話中常出現的情境,多半是用第二個子句就好,語意常是用來表達檢討、懊惱、後悔等情緒。例如「You should have left your house earlier this morning.」,「I could have won the gold medal.」,這樣的句型,在日常聊天的時候,幾乎都可脫口而出。 描述臉書發跡過程的影片「社群網戰」,中間有一場戲,是賈斯汀飾演的Sean Park,用”房間有蛇”嚇唬他女友「格雷女郎」,從浴室衝出來的橋段。 女友抱怨他,「I could have been killed, …..by running too fast and getting twisted in […]

多益文法與字彙之4~假設語氣 Read More »

多益文法與字彙之3~關係代名詞

2-3:關係代名詞 關係代名詞,是連接詞加上代名詞而來,我們很快以一個例子來說明。 “Policemen arrested the man because he stole the money.”。句中用連接詞because來連接兩個子句,用代名詞he來代替前面的先行詞the man,因此,可用who來結合這兩項,讓句子變得比較精簡,「Policemen arrested the man who stole the money.」。 這時候,可以用現在分詞讓句子更加簡明一些,變成”Policemen arrested the man stealing the money.”。在這裡是用分詞片語取代關係子句,關係子句俗稱形容詞子句。 也可以用過去分詞片語將其改成被動語態,”The man arrested by policemen stole the money.”。 關係代名詞前面的先行詞,可以是一整個句子,只要中間加個逗號就可以。 “Typhoon destroyed the power plant, which made the whole city dark.”。同樣可改成「Typhoon destroyed the power plant, making the whole city dark.」。後者尤其受到新聞播報員青睞,因為唸到現在分詞making的時候,可以加重語氣。 使用現在分詞取代關係代名詞,雖然句子精簡了,但如果還有動名詞或介系詞including存在,ing會出現好幾次,反而讓句子不好看了。”The man stealing the money

多益文法與字彙之3~關係代名詞 Read More »

多益文法與字彙之2~被動語態

2-2:被動語態 在被動語態當中,比較重視的是動作的接受者,所以將其放在主詞位置。或者有時並不清楚施加動作者到底是誰,也不得不使用被動語態。例如”The patient has been treated in the hospital. “,其重點在於病人已獲得治療了,並不需要特別去瞭解,究竟是由哪位醫護人員處理的。 多益喜歡結合時態和被動語態來考試,好比上一句的完成式,可改成現在進行式”The patient is being treated in the hospital. “,如此就變成病人正在治療中了。 在聽力測驗時,如果再刻意加上連音,被誤導答錯的機會就大了。不妨試試看下面的題目,答不出來也不要氣餒,大部份的看圖辨義考題,都比這題簡單。 Question 5. 如果想去強調某個觀點,主動式要比被動式有利。”Snow covers the mountain.”,和下面相對照,”The mountain is covered with snow.”,前者傳達冷鋒來襲的動態感要比後者強。 “The experiment suggests the earth be round.”,要比下一句話有力量,”It is suggested by the experiment that the earth is round”。 中國古代也有這種例子,項羽看到秦始皇出巡時,說了句「彼可取而代之」這樣的話,劉邦卻說「大丈夫當如是」。看起來,抒發己見的時候還是主動語態來的好。 主動和被動,active、passive,日常生活也會遇得到。電子元件需要插電(由外部供給能量),稱為主動元件(active component),像半導體雷射必須有電源供應,才能展現發光的功能就是主動元件,光纖不需要插電就能發揮其導光的功能,就是被動元件(passive component)。 我們形容某人態度消極或積極,也可以用passive、active,但proactive要比active來得好,也勝過aggressive(侵略性的),或者progressive(進步的)。 圖2-2-3. 雷射是主動元件,光纖是被動元件。

多益文法與字彙之2~被動語態 Read More »

多益文法與字彙之1~動詞三態

2-1:動詞三態 中文文法沒有英文複雜,並不區分現在式、過去式、過去分詞,也沒有動詞要隨主詞變化的規定,所以僅僅動詞時態這部份,就困擾很多華人,特別是在口說的時候。 動詞分時態,主要的目的是讓語言的表達更加精準。我們在和外國人對話時,即使一直使用簡單現在式,輔以肢體語言,對方還是可以大概理解你的意思,但他也會明白,恐怕沒有辦法和你進行深入交談。 就算是簡單現在式,主詞人稱單複數會決定動詞是否要加s/es,助動詞也有do或does,如果再考慮到可數名詞複數形也是加s/es,這一些攏攏總總合起來,想正確的使用現在式表達,也還沒那麼容易。 場景如果轉換至過去的時間點,則過去式動詞的切換馬上就會出狀況。「Where did you go last night?」一半以上的人會回答,「I go to a movie last night.」。即使是高級知識份子,有時也難免出這種錯誤。 動詞時態的不規則變化,在口說的時候,特別容易檢驗出學習功夫紮實與否,「My grandpa fought world war two.」大多數人都聽不懂,因為反應不過來fought是fight的過去式動詞。 到了過去分詞的階段,一定要開始多用點心了,因為一些進階的語法,都會用得到,包括現在/過去完成式、被動語態、假設語氣,和分詞構句。 「You should have broken the relationship with her.」,這樣的句子,在美國人日常口語聊天稀鬆平常,但國人常無法正確理解,對方要強調的,其實是和過去事情相反的假設。 熟稔動詞三態變化,可以幫助考試拿高分,但要在日常對話中活用它,動詞加ed之後的發音還是要再自我要求。平時有夥伴陪你練習,進步就會快,如果沒有,自言自語也是一種變通的方式。

多益文法與字彙之1~動詞三態 Read More »

多益文法與字彙

第二章:多益文法與字彙 輝達(NVIDIA)執行長黃仁勳曾經說過,「未來AI時代,英語可做為通用程式語言」。他的意思是說,大型語言模型逐漸進化,電腦若能理解日常用語,屆時每個人只要熟悉英語就夠了。 這個說法有一定的依據,但有些地方仍有待釐清。首先,這個「未來」究竟還要多久?其次,非英語母語的國家不就很吃虧嗎?而且,從此大家就不用再學程式設計了嗎? 既然有這些疑點存在,大部份的人比較保險的應對方式,還是一邊學程式語言,一邊學好英語,而且有必要再把英文學得更好一些。 圖2-1:黃仁勳在台大的英語演講被評為「適度幽默、選字精準、珍視夥伴」。 想學好英文,必須持之以恆,選擇適合自己的學習模式,也要客觀評估學習成就。善用多益考試,可以同時滿足這幾項需求。 多益聽力與閱讀測驗,平均一個月考一次,很方便規劃考試時間,調整學習節奏;總分990分,可以自我觀察分數變化趨勢,評核學習成效;容易獲取各方學習資源,也有不少同儕可相互支援。 圖2-2:多益測驗在2018年又改版一次,考試時間不變,但題目份量越來越重。(取材自多益官網) 聽力和閱讀要考好,多聽和多讀當然是唯一途徑,但也有提升效率的法門。要讀懂難一點的文字,加快閱讀速度,不妨多熟練文法的應用,這是我們接下來會多著墨的;想在聽力拿高分,發音應該要多自我要求,這方面很多人都忽視了。 我聽到很多人讀到word這個簡單的字,大多會發音成[wɔrd],我常感到困惑,那麼world這個字又該怎麼讀呢? 果然,我幾乎從沒有聽過台灣人正確發音world為[wɝld],僅有的一次,是在聽Skeeter Davis唱她的名曲,”The end of the world”,才聽到標準的發音。 圖2-3:多益聽力要拿高分,平時單字的KK音標拼音不可偷懶。 會把word[wɝd]唸成[wɔrd],主要的原因,在於多數人不重視KK音標,很多是使用「自然發音」。 「自然發音」比較適合以英語為母語的國家,學童在平日耳濡目染的狀況下,自然而然可以從拼字來學習發音。但非英語為母語的國家就不適合了,經常使用「自然發音」,周遭接觸的人又不常講英文,以至於每個字都沒有把握讀的很正確,一整句唸下來就是坑坑疤疤,聽力難免會打折扣。 Skeeter Davis這首歌”The end of the world“,主詞人稱單複數以及動詞時態,相當有變化,很適合想要唱歌學英文的人。

多益文法與字彙 Read More »

基本觀念之6~函式與遞迴

1-6:函式與遞迴 Function這個英文字,我們原本是使用「函數」這個中譯,但因為它在程式裡面,除了數據的計算外,還會處理資料的存取,或者是格式的轉換等,所以更常使用「函式」這個名詞。 函式通常是在程式碼開頭先做定義,隨後在主程式中呼叫它。它就像是一個忠實的僕人,隨叫隨到、使命必達,但又有點懶,事情做完一次就休息,除非你又給它第二次指令。 主程式在呼叫它的時候,得傳遞明確的訊息,它可憑此訊息進行一系列的後續處理,之後再將結果傳回主程式。 上圖中,第1行的關鍵字def,是用來定義一個函式名稱叫做singer,後面小括弧裡面的 a, b,稱為參數(parameter),要承接主程式傳過來的引數(argument),再放進第2、3行縮排的指令中處理。 第5行進入主程式中,呼叫singer函式,小括弧當中的 “Taylor” , “Leonardo”,就是引數。參數和引數的關係,就好像是變數名稱和變數值的關係,a=”Taylor”,b=”Leonardo”。 第7行到第10行,是將程式執行後輸出結果,用註解行標示出來,方便讀者閱讀。 函式裡面,要將運算結果回傳給主程式,有一個指令return很是重要。我們把先前for迴圈的加總計算,定義成函式forloop,其參數為n,它會回傳從1累加到n的總和給主程式。 上圖第7行,在主程式中呼叫forloop,並傳遞引數100給參數 n;它會從forloop函式中,利用return指令將運算結果5050回傳,指定給變數getsumm,然後再將其輸出。 return這個指令,如果能善用它,就可以建立起功能進階的遞廻函式。 所謂遞廻函式,就是函式之中的程式碼被執行的時候,又會再次呼叫函式它自己,但使用的是不同的引數。正整數階乘的計算,是個遞迴運算的典型範例。 上圖第1行定義函式fact(n),程式執行到第5行時會回傳函式本身,其參數值為n-1,外面再乘上n,這時候得到的fact(n-1),會再回傳 (n-1)*fact(n-2),而fact(n-2)又再回傳 (n-2)*fact(n-3),如此反覆呼叫fact,直到fact(1)為止,這時候已滿足第2行條件,回傳值就只有1了。執行第7行之完整遞迴過程如第11~16行所示。 先前提到的增強式學習當中,可以看到遞迴的身影。在循環修正行動值函數的時候,是援用自下一狀態的獎勵及其行動值函數,並據此援用下下次狀態,以至於最終的狀態…..。 遞廻程式的技巧,據說是在19世紀由艾達女仕所提出的,為表彰她對計算機演算法的貢獻,美國國防部開發的程式語言Ada,就是以她來命名。艾達有個大名鼎鼎的父親,英國詩人拜倫。 我們有關Python程式設計基本概念的部份,先在這裡告一段落,日後會不定期撰寫這方面的進階題材。接下來,我們將進入到「英語檢定」單元,介紹多益測驗的學習要領,歡迎有興趣的朋友繼續閱讀本社團貼文。

基本觀念之6~函式與遞迴 Read More »

基本觀念之5~巢狀結構與輸出格式

1-5:巢狀結構與輸出格式 如果有兩個以上迴圈包含在一起,其中內部迴圈縮排,從屬於外部迴圈,則稱此種迴圈為巢狀結構。很多情況會用到此種結構,例如一張圖片中像素值的處理,就要用到一個二維串列,再搭配上巢狀迴圈。另外,如果在選擇敘述 if 式子裡面,還有其它縮排的 if 敘述,也可稱為巢狀結構。 在這裡,我們使用大家都知道的九九乘法表,來舉例說明巢狀迴圈的特點,並且結合數據字串輸出設定,讓乘法表能夠格式化整齊排列。 巢狀結構,外層迴圈變數每變化一個值,內層迴圈變數值就要全部變化一次,所以可以戲稱:「外圈慢慢走,內圈跑斷腿。」。 上圖中,第1行的外層迴圈變數 i ,當其取出值為1或2或3或其他,內層迴圈變數 j 就要從1到9全部變化一次。所以外層迴圈變數 i 總共從1到9只跑一遍,但內層迴圈變數 j 從1到9跑了九遍。請讀者思考第3、4行兩個print( )的縮排位置不同之原因。 第3行print(f”{ j }*{ i }={ i*j:2d }”,end=” “)的小括弧中,後面的end=” “,表示每次輸出後會空一格再接續下次輸出,比較重要的,是前面 f”{ j }*{ i }={ i*j:2d }” 的部份。 左右兩個雙引號 “…..” 表示,當中的…..被視為輸出字串,但 f”…..” 又再特別表示,其內的成對大括弧 { i }、{ j }, 是要將 i、j 所代表的變數值取出,f”…..” 的f代表格式化(format)的意思。 甚至{ i*j : 2d}還更進一步要求,i*j 的變數值輸出,必須合乎 2d 的格式,要預留兩個字元空位給預設靠右對齊的整數,所以乘法表中等號右邊的值,其個位數才能夠垂直對齊。2d的d,原文是decimal,表十進位的整數。 在上圖第1行中的7d,表預留7個字元空位給整數123輸出,123靠右對齊後,左邊會留下4個空格。第2行的7.2f,表預留7個字元空位給浮點數123.456輸出,而且小數點第2位以下四捨五入。第3行的7s,表預留7個字元空位給字串 ‘apple’ 輸出,字串預設是靠左對齊,所以會在右邊留下2個空格。

基本觀念之5~巢狀結構與輸出格式 Read More »

基本觀念之4~串列與迴圈

1-4:串列與迴圈 我們前面曾提到過,變數包括有變數名稱和變數值兩部份,其中的變數值除了單一數據外,也可以指定為多個數據,例如一個班上的數學成績可能有幾十筆,都屬於同一個變數。這種情況,在平日生活中,常有機會碰到,所以多個數據的資料表示方式,及其運算處理技巧,在Python裡面是相當重要的。 在這裡,我們先熟悉一種資料型態叫做串列(list),它是好幾個數據被中括弧包含起來,彼此間用逗號分開,比如像變數 lista = [11, 22, 33, 44],其中括弧內的每個數據可稱之為元素(element)。 這種資料型態也叫做容器(container),非常適合使用for迴圈來處理運算,因為它的資料整齊排列,被限制在一定範圍內,讓人很直覺的看出來,每個數據可以依序被迴圈取出。所以要輸出所有數據,或者加總其數據,都可以援用上一次的做法。 上圖中,第2行和第7行,for迴圈中的 i,現在是 in 在lista裡面了,可想而知,就是隨著不同次的迴圈,依序把11、22、33、44分別指定給變數 i ,然後把它的值印出來或加總。 這種 in 在某個容器內,然後隨著迴圈將元素一一取出的方法,非常直覺,但很好用,也有一些變化的型式。 在上面的程式執行過程當中,我們不得不將所有元素一口氣處理完畢,但如果要個別取出某個元素,就要用到索引的技巧了。 上述的11、22、33、44,它們在lista裡面的索引值,分別是0、1、2、3,可以利用中括弧加索引值將lista編號,個別取出裡面的元素。當然也可利用迴圈變數當作編號,一一將元素值取出,如下圖所示。 在第2行最右邊,我們使用反斜線””來強迫換行,讓太長的程式碼變得比較好閱讀。讀者可以自行print(lista)看看,觀察其和第3行輸出的異同處,並想辦法解釋其差異。 第5和第6行當中的迴圈變數 i,在這裡,不再直接取用來輸出,而是將它當作串列的索引值,把每個元素都編號後,再做輸出。讀者也可以用這種方法,將元素值加總看看。索引加迴圈,是初學者開始會感到挫折的地方,動手多練習,是克服困難的唯一良方。 容器(container) 有多個種類,中括弧裡面的數據如果用空格代替逗號,就是陣列(array);大括弧裡面數據用逗號分開的稱為集合(set),如果數據是成對的則稱為字典(dictionary);小括弧裡面數據用逗號分開的,稱為元組(tuple)。 元組(tuple)這個字中英文看起來都有點彆扭,不容易顧名思義,剛開始都會聯想到元祖雪餅。它其實只是一組相關的數據被整理在一起,目的在便於閱讀及取用其訊息,而非將數據做運算處理。例如記錄陣列的維度、函式的多個回傳值等。

基本觀念之4~串列與迴圈 Read More »

基本觀念之3~for迴圈

1-3:for迴圈 迴圈,會重複執行相同的程式碼來進行工作,執行次數可以一開始就做設定,每次在重複相同指令時,其迴圈變數都會增減一個固定數量,一直到條件滿足為止。我們先用for迴圈來舉例說明。 在這個練習中,我們在print( )括弧中加上一些參數和字元,來設定它的輸出格式。如果加上end=” , “參數,表示每次輸出不要自動換行,只在後面加逗號,下次輸出會在逗號後面接續下去。 print( )中加”n”字元,表示自動換行一行,加三個”n”字元,表示自動換行三行。適當做這樣的設定,會讓程式輸出結果比較好閱讀。 第2行for的敘述,表示對 i 這個迴圈變數而言,它是在range(6)範圍之中從0到5的整數。每執行完一次第3行縮排的print(i,end=”,” )指令,就是跑1次迴圈,總共要跑6次迴圈,這6次依序先把0、1、2、3、4、5分別指定給變數 i ,然後把它的值印出來。 第6行for敘述的範圍,變成range(1,6),就是從1到5的整數1、2、3、4、5。 第10行for敘述的範圍,變成range(1,6,2),就是從1到5每差2取一個整數,得到1、3、5。 for迴圈最普遍的用途,就是累加一系列相關的數據。日常所見最簡單的累加像1加到5,這數據少到甚至可以直接print(1+2+3+4+5),但如果從1累加到100甚至1000,這樣就行不通了。我們先看看下圖第14行到第20行,這是累加計算的程式碼,看起來好像更麻煩。 但我們注意到從第15到19行,它們有些動作是重複的。它們都是從變數summ裡面先把舊值取出來,加上一個新的數據後,存到summ裡面去,下次再取用,而每次加上的新數據,都比前一次的數據大 1 。 這就可以用第23、24行的for迴圈來代替了。因為新加的數據每次都比前一次大 1 ,我們就可以用 i 迴圈變數來代替這些新數據,它是範圍在range(1,6)的5個整數,依序被取出。每次summ的舊累加值加上新數據後,將這新的累加值存進summ裡面,再進行下一次迴圈。 上面第25行程式碼,試著將它縮排4個空格後再執行,看看結果有甚麼不同,並想辦法解釋原因。 程式碼中的range(1,6),如果改成range(1,101),就會讓我們聯想到德國數學家高斯的故事了,只不過他小時候是用肉眼找對稱再相乘,現在電腦裡面的運算大多是快速計算加法所得。 圖1-3-3:高斯和他弟子黎曼所在的哥廷根大學,是歐洲數學重鎮。當時流傳一句話:「想學好你的數學嗎?打起你的背包,到哥廷根去。」

基本觀念之3~for迴圈 Read More »

基本觀念之2~條件敘述

1-2:條件敘述 條件敘述的語法很簡單,就是if(假如)….else(否則),其精神也很好掌握,假如條件成立,就做某些事,否則就做其他的事(或者甚麼事也不做)。很容易用日常生活所見,舉例來說明它的適用情況。 例如有一所M理工學院名聞遐邇,它的入學標準非常嚴格,假如PR>=95才會通知接受(accept),否則一律通知拒絕(reject),這就可以寫成下列程式碼: 上面程式碼第3行,在 if PR>=95的敘述中,條件PR>=95是需要做判斷的,可因為第2行已經設定PR=98,滿足了這個條件,所以判斷為真(True),會直接執行下面第4行print(“accept”)。 但到了第8行,PR改成88,做PR>=95判斷的結果為假(False),所以會執行第11行else下面的print(“reject”)。 要注意在程式碼冒號(:)後面按下Enter鍵時,系統會自動在下一行做縮排(indent),有縮排的程式碼是從屬於沒有縮排的上一行。程式碼上下之間,如果有從屬階層關係就會有縮排,初學者沒有理解這點,即使打字沒有打錯,也會產生編譯執行錯誤。 圖1-2-1:AMD執行長蘇丰姿曾質疑:「沒道理麻省電機博士,要在哈佛企管碩士下面做事。」  上面的程式碼,可以將else及從屬於它的部份省略,只單獨使用if的部份,用以表示這個條件敘述,只在乎判斷為真的時候該做些甚麼,判斷為假的時候,它甚麼事都不做。從另一個角度來看,也就是容許把功能再擴充,讓條件敘述並不僅僅只能做二元判斷,還可以有多重的選擇。 例如另一所鄰近的H大學,學術聲譽並不弱於M理工學院,但其選才標準比較多元,認為課外活動的表現也不容忽視,所以PR值的設定較為寬鬆。PR>=95是一定會接受的,但在85和95之間的學生,它會給予考慮,當然,PR<85它也會拒絕了,程式碼就可以改成下列內容: 我們在上圖第5行,插入了elif指令,它其實是else+if的綜合體,else的部份表示不滿足前面的條件PR>=95,也就是得到PR<95;if的部份表示,在這種情況下(PR<95),再給它設定條件PR>=85。所以這個elif指令得到的整合條件,就是85<=PR<95。 第7行的else,表示在不滿足前面所有條件的情況下,只剩下PR<85的條件了。 因為第2行設定PR=88,所以這個程式會執行第5行elif下面第6行縮排的指令,輸出”consider”。 在條件有好幾項且彼此互斥的情況下,elif可以多次使用。例如學生成績的分等第,就可以善用elif的功能。

基本觀念之2~條件敘述 Read More »

Shopping Cart