31 10月 2009

[婚姻]勇敢不怕男 vs. 炫麗無常女

遠遠近近的生活圈子裡,最近紛紛都出現了「男大當婚,女偏不嫁」或是「女大當嫁,男方裝傻」的囧境…

也許是年紀也到了國人平均年齡的一半,所以相識的同輩朋友漸漸都感受到了「生命的目的在於創造宇宙繼起之生命」的神秘召喚…(或是,其實是父母輩的催促呢?)

「等等,生孩子和結婚,應該是兩馬子事吧?」一位朋友在通訊軟體中這麼提醒我。
「嗯…我還不知道您老兄竟然還要把生孩子和結婚的事情分派給兩個馬子做…」我這麼回應著。

回題~

那麼,什麼是結婚呢?什麼又是婚姻關係呢?我想,對我而言,「婚姻」指的是兩個人共同承諾的一份彼此扶持且具有排他性的成長關係

我不喜歡那種「結了婚,男的就得負責養家,女生就得負責持家…」的想法。於是乎,男人就得發揮求學時的所長,努力地把自己的生命換成新台幣去餵養妻小;女人就放下自己在學校學到的東西,或是即使沒放下,也只是扮演「輔助收入」的角色,同時還要注意孩子的學習、成長、家庭空間的維持…等等。兩個人就不能彼此在各自的領域成長,並且在遇到困難的時候互相扶持嗎?只要放下這種只會弄得兩個人都不快樂的執著,男生也可以養家,女生也可以養家,兩個人都能彼此幫忙,一起持家,一起面對孩子的教育和人生的種種難題。

結婚,應是一種「相乘的力量」而不該只是單純的「一男」加「一女」的加法而已!

因為整個社會對男女之間期待的不同,於是男生最怕「入錯行」,因為他會沒有辦法養家活口。而女生就怕「嫁錯郎」,因為走入這種婚姻的時候,她也失去發揮自己潛力的機會了。

如果男生能改個觀念,在兩個人夠了解的時候結婚,而不用等到「我有經濟基礎、再加上我能養家活口、再加上我能…」我們再來「結婚」。用這種「累加型」的目標追求的話,青春有限,而欲望無窮,要到什麼時候才叫夠呢?

當一個女生願意和你談及終生大事的時候,就算你一個月只有八千元、一萬元的收入,那也有八千元、一萬元的生活方式。怕只怕,當你月入五萬以上、出入有車代步、穿得體面、住得舒服的時候,突然覺得身邊這個女孩已經不如當年那麼青春美麗了…

當一個男生和妳談及終生大事的時候,妳是不是也能堅持要有發揮自己人生價值的立場,而不是 就此步入「另一個家庭」,自以為偉大地去扮演「成就另一個男人,成就幾個孩子,犧牲自己」的角色呢?

男人啊,要當個勇敢不怕的「男」。這個世界上有個女孩為你「昏了頭」的時候,可要好好把握呢!畢竟,「女昏」的時候,可不是像麥當勞一樣到處都遇得到的。

女人啊,要做個炫麗無常「女」。當男人對你神魂顛倒地說「全世界我都不要,我只要你!」的時候,開口說明自己的底線,然後和他一起併肩爬上世界的巔峰,分享各自視野裡的絕妙風景吧!畢竟,如果只是扮演男方攻山頭時,駐在山腳的後勤支援隊的話,當他攻下山頭時,和他分享美景的,可能不是你,而是另一個隊友呢!

29 10月 2009

[好聽] Jack Johnson: Angel



下班,返回工作室的路上, Jack Johnson 的 Angel 旋律一直在腦中迴轉…我真的遇過天使哦~

這位歌手堅持用最「自然」的方式表達自己的創作。一群人搭了一間用太陽能和風力驅動的錄音室,希望能減少因為耗損能源而造成的環境負擔,甚至連 CD 內用的紙,也全部是再生紙。歌詞太美了…美得讓我只能很粗糙地將之轉成另一種語言…

I've got an angel
我曾經遇到過天使哦
She doesn't wear any wings
雖然她沒有翅膀
She wears a heart that can melt my own
但她有一顆可以融化我的心
She wears a smile that can make me wanna sing
還有一個讓我忍不住想歌唱的微笑


She gives me presents
她每次的現身
With her presence alone
都像是給我好多的禮物
She gives me everything I could wish for
她就是我所有的願望和夢想
She gives me kisses on the lips just for coming home
我不過是到家,她也會在我的脣上給我一個吻


She could make angels
她能讓身邊的人都變成天使
I've seen it with my own eyes
這我可是親眼看過的
You gotta be careful when you've got good love
如果你得到了天使的愛,那你一定要小心呵護它
Cause the angels will just keep on multiplying
這麼一來,天使就會愈來愈多囉

But you're so busy changing the world
一般人總是費力地要改變這個世界
Just one smile can change all of mine
但她的一個微笑就能改變我的全部了

We share the same soul
我們其實是同一個靈魂吧
Oh oh oh oh oh ohhh

We Share the same soul
我們其實是同一個靈魂吧
Oh oh oh oh oh ohhh

We Share the same soul
我們其實是同一個靈魂吧
Oh oh oh oh oh ohhh
Oh oh oh oh oh ohhh
Umm umm umm uhhhhhhmm

[啊?] 天才老媽的跳躍式思考!

我跟老媽說『我想養一隻巴戈犬!』
結果老媽竟然回我說『你想買車嗎?』

啊?什麼跟什麼啊?

我很喜歡腳踏車那種安安靜靜地穿過一片林子,只有風聲呼呼地從耳邊帶過的感覺。曾經也自以為是地說『我以後都不要騎摩托車!』

後來~呵呵~我「為了考機車駕照」而「去考機車駕照」。
想想…考機車駕照真的是很棒的回憶呢!

退伍後,又為了找工作方便,就考了汽車駕照。
讀碩士時,有一陣子要天天往來新竹和桃園之間,一個人開著可以載四個人的車子,穿梭在其他也是可以載四個人,卻只載了一個駕駛的車陣之間…「只是一個人而已,要車子幹嘛?」我心想著:「一個人開車真的是一種好浪費的行為啊…」

回過神來,我說「媽,巴戈犬是一種狗。我是說我想養狗啦。」
想不到老媽又回了一句「你想抱小狗哦?我想抱孫子耶?」
「啊你想抱孫子和我要不要買車有什麼關係?」
「那你想養狗和我問你要不要買車有什麼關係?」

天啊…我的天才老媽,想不到你腦袋動這麼快。不過…你還是指望老弟那裡看會不會有孫子給你抱吧!

「我養條晚上回家時可以說說話的小狗就好了…我買車幹嘛?」
「可是那種狗好醜哦!」
「就是狗很醜,所以回家的時候就會覺得『啊…我不順一天算什麼,你可是要醜一輩子耶!好可憐…來惜惜…』」

不過…話說回來,我到底要不要去買部車呢?
大家都說,車子是男人「身份地位」的象徵,開太糟的車,別人看你的眼光會…

呵~我才懶得去解釋什麼呢。被人誤解又不是一天兩天的事了,很多事情沒有人問起,我也不會主動去說明啊。何況,一個成功的男人,應該只要注意「一個人」的眼光就好了吧。還會在意「外人」的眼光?那…這位老兄的修為火候還不到家哦!

嘖嘖…我想…我還是抱抱醜不拉機的巴戈就好了。

28 10月 2009

[勵志] 誰說企鵝不會飛呢?

"馬達加斯加" 是一部很有趣的動畫電影。不過...我對裡面主角獅子的自我認同、友誼的輕重或是長頸鹿與河馬之間的跨物種戀愛...沒有什麼興趣。

我覺得最有趣的是那四隻企鵝!

我用 Linux ,它的象徵也是一隻企鵝、
我有一位很重要的朋友曾被形容為「狂奔的企鵝」...

怎麼大家都要拿企鵝來開玩笑咧? -_-

在電影裡,出生在動物園的企鵝,只因『你不覺得不對勁兒嗎?這裡都沒有企鵝...因為我們不屬於這裡!』這樣簡單的信念,就立志要前往南極,回到那個「不曾去過的家鄉」(好奇怪的講法...)

立志沒什麼了不起的,我小時候天天也立志啊,了不起的是那股執行的意志,貫徹的行動!

電影裡的企鵝最後終於抵達南極...(結果在那裡受凍了幾天後,感想是『南極遜斃了...』)
Linux 在最近這兩年的應用也開始愈來愈普及、
我的朋友,則是狂奔到地球的另一邊去追尋夢想了!

誰說,企鵝不會飛呢?

同樣簡單的信念,我相信能「思考」的機器,是有辦法被造出來的,這幾個月來也嚐試做了一些程式碼撰寫的工作。工作單位的師長覺得『你會遇到的問題,別人一定都處理過了,你去學他們怎麼做...』如果,就要落入「一樣」的思維模式裡,那又怎麼會有突破呢?

我只用了 143 行程式碼,就做到了他們要做好幾年才得到的效果...

企鵝不只要飛,還要狂奔呢!

04 10月 2009

[自省] 一樣?不一樣?

Read for Joy 是一個很棒的部落格。最近看的一篇『我為什麼和別人不 一樣?』似乎又觸動了一直在逃避的什麼…

年紀很小的時候,我就開始體會到我和別人「不太一樣」。這句話的時候不是用那種「哈~我比較厲害!」的語氣,而是那種很氣餒的心情。

國語老師說:「回家作業是每個生字寫半行…」,每個同學繳上去的是上下半行,只有我是左右半行…一個格子左邊右邊各「塞」了一個瘦瘦長長的字。我還記得「顯」示的「顯」真是超難擠進去的。我記得老師發作業的時候,氣得把我的作業本甩得老遠…他一直以為我是故意和他作對,所以從此以後別的孩子維持寫「半行」的作業,我被罰寫「一行」。

數學試卷上我永遠只會算那幾題老師說「全年級沒有幾個人會」的題目,而剩下的基本題目…我真的算不出來。數學老師也以為我在故意耍帥…

我花了很多時間,很大的力氣想要去「和別人一樣」,但是下場往往卻是更加突顯自身的位置,而當我不再那麼努力的時候,卻當場就變成「隱形人」了。

在求異與求同之間,我像是沒做歸零的天平又配上了鏽蝕的砝碼,兩個秤盤搖來晃去讓我只在疲於奔命之間一天過了一天…

在廣告中的老提琴手問小女孩:「你為什麼要和別人一樣呢?」嘿~我也不知道,對草原上的斑馬來說,每隻長得都一樣,可以降低自己被吃掉的機率嗎?(沒有這回事兒,對任何「一隻」斑馬而言,「被吃就是被吃」;「沒被吃就是沒被吃」,這是「零」與「一」的問題,沒有中間數。)

不要再求同求異了!(也不要再相信沒有根據的說法了!拔獅子的…呃…離題了…)

就做自己吧。是同也好,是異也好。有遺憾也好,沒遺憾也罷。
我就是我,一組壞掉的秤子,我要學著接受我的不完全,帶著那股遺憾繼續活下去。

29 5月 2009

難得正經:語言學在學什麼?

大學同學 gustavw 的邀請,在他公司的美寶百科上貢獻了一個條目:
原文可以在 [這個連結] 找到,一樣都是我寫的,所以我把全文轉到獸窩來…

==語言學在學什麼?==

許多人會誤以為「外文系」或是「英文系」在學的就是「外文」(包括英文),但這種誤會就像誤以為食品系整天在吃東西讓或是森林系整天在種樹一樣讓人無言…

抱歉,外文系沒有教英文!

就像生物學是以生物為研究對象,研究生物的生理結構、分類及造成這些結構和分類的原因一樣,語言學是一種以「語言」為研究對象,研究語言的結構、分類及造成這些結構和分類背後的「原因」的學科。

學這幹嘛?語言,不是會說話就好啦!

就像我們開始讀語言學的第一天,教授們就會威脅我們說:『讀語言學的社會地位很低哦!要休學的還是不想讀的快去把手續辦一辦,不要浪費自己的人生!』那…語言學到底是幹嘛的?

從比較玄一點的說法來說,人類所描述的這個世界是以「語言」建構而成的。要瞭解這個世界,你得先透過語言才能與其他人或是其他物件交流你的想法。

用比較有「錢景」的講法,如果你能把語言結構像 DNA 序列一樣地描述出來,那麼你就能讓我們這些碳基的有機生物和電腦這種矽基的無機物開始溝通交流了。

是哦…那錢景在哪裡?

當有機的人類可以把自己的創造力和無機的矽基電腦晶片的計算能力結合在一起的時候…看到錢景了嗎?

雖然這個錢景可不會在接下來的十年內看到類似的產品上市,但是不得不承認這個目的的確能帶來「巨大」的商業利益和人類文明的跳躍式發展。

語言學家的養成訓練有很大一部份是落在邏輯思考的訓練和從雜亂的資料中找出潛在的規則的能力的訓練。不管是前者還是後者,語言學的研究方法離社會科學是比較遠一些,而離自然科學是比較近一點的。

但是又因為它的研究材料是來自於人類社會,而不是實驗室,所以和其他取材於社會的人文學科一樣,通常語言學也不被當做是一門多高深或是嚴肅的學科就是了。這種心態就像是『人人都會吃雞腿,所以餐飲系就不被社會大眾視為是多重要的科系;但不是每個人都知道羧甲氧基鳥嘌呤是什麼,所以 生物系就變得很神秘了!』(神秘的東西都很高級!古時候的巫師就是很高級的職業!)

語言學家應該至少具備兩項基本能力:

1). 對目標語言發音、文法、結構和意義之間的基本認識和分析能力。用白話文說就是『這些語言學家學新的語言,會比一般人快。因為語言學家知道哪些元素的變化極限在哪裡。』所以語言學家可以利用這項技能來編寫語言文法書,而且會比市面上大部份的文法書還要「簡單」且「小本」很多。

2). 對雜亂材料中潛在規則的截取能力。就像解碼器一樣,語言學家應該要有能力從一團亂七八糟的元素裡,找到它的規則。這項能力不管是應用在商場上的指數判斷、戰場上的情報解碼甚至是停車場上的格子安排,都能有相當程度的幫助。

07 4月 2009

[美食] 烤布蕾&秘方黑咖啡

布蕾是很典型的法國點心,一如其他「法式」開頭的玩意兒,外表看起來和實際上的內涵總是有點不太一樣。也正因為這點差距,讓這個愛狗愛成痴,遍地狗屎的國家一直給人「浪漫」的印象吧。

用電烤箱烤出三個小巧可愛的烤布蕾三兄弟,待會兒還可以搭配新的秘方調製出來的黑咖啡。
但就如剛才說的,法國玩意兒一定要搞得內外不一,外冷內熱才夠法國味兒;所以法國麵包的皮硬得像牛角,內餡卻要軟得像牛油;法國的計程車也要外表看起來像是普通的標誌,內在卻是莫名奇妙地可以拍到第四集 (還愈拍愈爛…)。所以我們既然準備好了香甜的烤布蕾內餡,當然要來幫它披上一層硬硬的殼才行囉!

廢話說太多,快把機絲頭拿出來!

嚇!這不是真正的瓦斯噴燈,這只是一支 99 元卻能讓普通家用打火機搖身一變,變成殺很大的噴火龍!(根據說明書的內容,它能噴到 3000 度呢!)!打開安全栓 (對,它只賣 99 元,但是也有防小鬼拿來火燒厝的安全栓哦!),對準剛撒上去的糖粒,開始噴射吧!

#Before >>>>>>>>>>>>>>#After









一邊吃著烤布蕾,一邊啜飲著加了特別的秘方的黑咖啡。也許是無心,但是加了這個秘方以後,我的咖啡終於「完完全全地」和教我煮咖啡的師父 Mr. H 的黑咖啡一樣了…想到我這次新試的秘方,再想到剛結束一段婚姻,獨自一人帶著三個孩子的 Mr. H …我突然了解了,師父的秘方是什麼了。

05 4月 2009

[哦耶] 我也有生日禮物!(炫耀文)

的生日向來都很低調,其實只要一杯咖啡配著音樂,如果能有心中在意的人一起陪伴,靜靜地度過,就很滿足了。

想不到,今年卻在生日前收到學生親手做給我的生日禮物和卡片!真是讓人忍不住哇哈哈哈地既開心又驕傲呢!

可愛的紙袋上還寫著 "Peter is a Good Teacher!" (給我一時眼花看成 "Peter is a God Teacher" 害我一時大驚…哦?原來我在學生的心中地位這麼『神』哦!趕緊再看一眼,原來是自己白目…)


袋子裡拿出的三顆手工包裝的糖果和一張「厚工」的卡片!


另一個學生送的藍色小熊和立體的手工卡片!


哎呀呀…雖然已經拿到禮物好幾天了,但是因為自己的情緒總是來得比較慢,因此也算是暗地裡樂了好幾天吧!(哇哈哈哈哈!)

03 4月 2009

Java & Python 程式碼疊疊樂之二

週的作業是簡單的流程控制。在 Java 裡有 If...else if...else, switch...case, for, while... 和 do...while 五種,但是 Python 卻只有 if...elif...else, for...else..., while ... else 三種!差了兩種,難道 Python 比較弱嗎?其實也不是,只是 Java 已經把許多工具準備好了,在應用上會比較快一點。而 Python 的「極簡美學」是不會允許疊床架屋的取向。

廢話不多說,馬上進入本週的題目:「請寫出一個能將數字分數轉為等第分數 (e.g., A, B, C... F) 的程式!」因為每個禮拜天上午還要工作的緣故,這個禮拜的課程應該會錯過「使用者輸入」的部份,所以,我自己把題目再加上『數字分數的取得,是由使用者輸入的』的條件。經實作以後,在 Java 上,做出了以下三種版本:

Java 評等機器人一號 (完全使用 if...else if...else 的運算;耗用資源 2*5 = 10)

public class gradingRobotOne {
public static void main (String [] args) {
java.util.Scanner readingRobot = new java.util.Scanner(System.in);
System.out.print("請輸入分數:");
int input = readingRobot.nextInt();
String gradeLevel = "未判定!";
System.out.println("您輸入的分數為" + input);
System.out.println("===================");

if (input > 100 || input < 0) {
System.out.println("分數應該介於 0 到 100 之間!");
}
else {
if (input <= 100 && input > 90){
gradeLevel = "A";
}
else if (input <=90 && input > 80){
gradeLevel = "B";
}
else if (input <=80 && input > 70){
gradeLevel = "C";
}
else if (input <=70 && input >= 60){
gradeLevel = "D";
}
else {
gradeLevel = "F";
}
}
System.out.println("成績評定為:" + gradeLevel);
}
}


運作畫面:


if...else if...else 的語法像是一把雙面刃,每做「一個」判斷,就要佔「兩個」資源數,感覺實在是太不划算了。如果用 switch 的話,每做一次比對,只會佔用「一個」資源數,這麼看來,也許用 switch 會是比較好的選擇哦!依據此原則,做出機器人二號!

Java 評等機器人二號 (完全使用 switch...case 的運算;耗用資源 41+2*1=43)
public class gradingRobotTwo {
public static void main (String [] args) {
java.util.Scanner readingRobot = new java.util.Scanner(System.in);

System.out.print("請輸入分數:");
int input = readingRobot.nextInt();

System.out.println("你輸入的分數為:" + input);
System.out.println("====================");
char grade = 'N';

if (input > 100 || input < 0) {
System.out.println("分數應該介於 0 到 100 之間!");
System.out.println("成績無法評定");
}
else {
switch (input){
case 100:
grade = 'A';
break;
case 99:
grade = 'A';
break;
case 98:
grade = 'A';
break;
case 97:
grade = 'A';
break;
case 96:
grade = 'A';
break;
case 95:
grade = 'A';
break;
case 94:
grade = 'A';
break;
case 93:
grade = 'A';
break;
case 92:
grade = 'A';
break;
case 91:
grade = 'A';
break;
case 90:
grade = 'A';
break;
case 89:
grade = 'B';
break;
case 88:
grade = 'B';
break;
case 87:
grade = 'B';
break;
case 86:
grade = 'B';
break;
case 85:
grade = 'B';
break;
case 84:
grade = 'B';
break;
case 83:
grade = 'B';
break;
case 82:
grade = 'B';
break;
case 81:
grade = 'B';
break;
case 80:
grade = 'B';
break;
case 79:
grade = 'C';
break;
case 78:
grade = 'C';
break;
case 77:
grade = 'C';
break;
case 76:
grade = 'C';
break;
case 75:
grade = 'C';
break;
case 74:
grade = 'C';
break;
case 73:
grade = 'C';
break;
case 72:
grade = 'C';
break;
case 71:
grade = 'C';
break;
case 70:
grade = 'C';
break;
case 69:
grade = 'D';
break;
case 68:
grade = 'D';
break;
case 67:
grade = 'D';
break;
case 66:
grade = 'D';
break;
case 65:
grade = 'D';
break;
case 64:
grade = 'D';
break;
case 63:
grade = 'D';
break;
case 62:
grade = 'D';
break;
case 61:
grade = 'D';
break;
case 60:
grade = 'D';
break;
default:
grade = 'F';
break;
}
System.out.println("成績評定為:" + grade);
}
}
}

運作畫面: 本來以為一號的解法已經夠浪費資源了,想不到因為從使用者手上取得的輸入分數可能會落在 60~100 之間而有 41 種不同的可能性,每種可能性的比對都佔一個資源,再加上一開始排除 100 以上和 0 分以下的判斷,結果反而讓耗用資源數比純粹的 if...else if...else 多了一倍多呢! 為了解決以上的問題,套用「食神」裡的台詞『爭什麼爭,摻在一起做撒尿牛丸不就好了』!接下來的機器人三號,就要同時使用 if 和 switch 的語法來實作。首先要開刀切除的就是那 41 種可能性的比對,如果我們把從 60 ~ 100 之間的數字都除以 10 ,然後再取它的個位數來做比對,再把 100 這個特別的數字額外處理,這樣一下子需要比對的數字就從 41 個縮減變成 4 個了! Java 評等機器人三號 (混合 if...else if...else 和 switch...case 的運算;耗用資源 4+2*2=8)
public class gradingRobotThree {
public static void main (String [] args) {
java.util.Scanner readingRobot = new java.util.Scanner(System.in);
System.out.print("請輸入分數:");
int input = readingRobot.nextInt();
System.out.println("你輸入的分數為:" + input);
System.out.println("====================");
char grade = 'N';
int score = (int)(input*0.1);
if (score > 10 || score < 0) {
System.out.println("分數應該介於 0 到 100 之間!");
System.out.println("成績無法評定");
}
else if (score == 10){
grade = 'A';
}
else {
switch (score) {
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
case 6:
grade = 'D';
break;
default:
grade = 'F';
break;
}
}
System.out.println("成績評定為:" + grade);
}
}

運作畫面: 哈哈~做到這裡,真是忍不住說一聲「食神好棒啊!」果然讓耗用的運算資源大大降低了不少咧! Java 的部份做到這裡,那一樣的功能,在 Python 裡會怎麼做呢? 首先是 Python 的 if...elif...else 的語法。 Python 評等機器人一號(完全使用 if...elif...else 的運算;耗用資源 2*5 = 10)
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Filename: gradingRobotOne.py

grade = raw_input("請輸入分數: ") #利用 raw_input 的函式取得鍵盤輸入
score = int(grade) #從 raw_input 取得的字串類型 (String) 資料,轉換為 int 的類型
print "====================="
print "您輸入的分數為:", score

gradeLevel = "未判定!" #預設成績等級為「未判定!」
#利用判斷式把輸入的成績分等級
if score > 100 or score < 0:
print "分數應該介於 0 到 100 之間!"
elif score <= 100 and score >= 90:
gradeLevel = "A"
elif score <= 89 and score >= 80:
gradeLevel = "B"
elif score <= 79 and score >=70:
gradeLevel = "C"
elif score <= 69 and score >=60:
gradeLevel = "D"
else:
gradeLevel = "F"

print "成績評定為:", gradeLevel #印出評定結果

運作畫面: 整體看起來,和 Java 版本的評等機器人一號幾乎沒什麼分別。只是 Python 的程式碼結構較為簡單,掐頭去尾大概可以少個七~十行左右吧!果然是「載入 Python,少做多玩」的精神。 寫到這裡,應該就沒有其他的 Python 寫法了吧?畢竟 Python 本身是沒有帶著 switch 的語法的。而在 Java 版本的評等機器人二號和三號裡,switch 都是主要的判斷式呢。嗯…不過我不信邪,難道先天沒有,後天不能學嗎?在網路上查了查, Python 的 switch 能力,可以透過它特有的 dictionary 資料結構配合預先制定的 function 來達成。這樣說起來太玄了,還是直接看看程式碼配合在其中的註解來神遊一下吧! Python 評等機器人二號 (使用「自製的」switch 配合 if...elif...else 的句法;耗用資源數:5+2*3 = 11)
#! /usr/bin/python
# -*- coding: utf-8 -*-
# Filename: gradingRobotTwo.py

grade = raw_input ("請輸入分數: ") #利用 raw_input 的函式取得鍵盤輸入
score = int(grade) #從 raw_input 取得的字串類型 (String) 資料,轉換為 int 的類型
numLevel = int(score * 0.1)
print "====================="
print "您輸入的分數為:", score

gradeLevel = '未判定!' #預設成績等級為「未判定!」

#建立模擬 switch 語法的執行內容
def funcA():
gradeLevel = 'A'
return gradeLevel
def funcB():
gradeLevel = 'B'
return gradeLevel
def funcC():
gradeLevel = 'C'
return gradeLevel
def funcD():
gradeLevel = 'D'
return gradeLevel
def funcF():
gradeLevel = 'F'
return gradeLevel
#利用 dictionary 的資料結構建立模擬 switch 語法的 case 條件
values = {
9:funcA,
8:funcB,
7:funcC,
6:funcD,
5:funcF,
}
#設定判斷式,先排除超過 100 和低於 0 分,再額外設定 100 分和所有低於 60 分的條件,餘項目呼叫模擬 switch 的內容
if score > 100 or score < 0:
print "分數應該介於 0 到 100 之間!"
elif score == 100:
gradeLevel = 'A'
elif score <= 59:
values.get('5')()
else:
gradeLevel = values[numLevel]()

print "成績判定為:" + gradeLevel #印出結果

運作畫面: 哈~雖然用自製的 switch 在 Python 下編寫出的程式耗用資源還是比 Java 的評等機器人三號多了些,但是 Python 的程式是不用「預先編譯」的哦!所以如果遇上一個評等標準要一直改來改去的操作環境時, Python 評等機器人二號就比 Java 的評等機器人三號更能勝任愉快了! (ps.我覺得我好像有一點對 Python 偏心…) Note: Thanks for the feedback from an expert. Now I know that there is a handy module which can do better than the Python version of gradingRobotTwo.py (感謝匿名的高手回覆,我才知道還有一個好用的模組可以達到和 Python 版機器人二號一樣的目的,但卻更省資源的寫法) Python gradingRobotThree (By adopting bisect module, CPU resource consuming drop down to the lowest record: 2*1 = 2)(Python 評等機器人三號!藉由 bisect 模組的採用,這個版本的資源耗損達到了歷史的新低點: 2*1 = 2)
#! /usr/bin/python
# -*- coding:utf-8 -*-
# Filename: gradingRobotThree.py

from bisect import bisect #Thanks for the feedback with this handy module :)

grade = raw_input ("Please key-in the grade: ")
score = int(grade)
#numLevel = int(score * 0.1)
print "====================="
print "The grade is:", score

gradeLevels = "FDCBA"
breakpoints = [60, 70, 80, 90] # This can be rughly seen as [F < 60 => D < 70 => C < 80 => B < 90 => A]

def grading(total):
return gradeLevels[bisect(breakpoints, total)]

if score > 100 or score < 0:
print "The score number should be between 0 and 100 !"
else:
print "The grade level is:" + grading(score)

Screenshot:

22 3月 2009

Python & Java 程式碼疊疊樂之一

個月以來我一直在工作之餘自學 Python。這套程式語言在國內的資源很少,所以許多文件都是原文寫就。但畢竟自己總是外文系畢業的,所以這倒是不對我造成什麼困擾。

與此同時,也因為 Java 和 Python 一樣都是屬於物件導向 (Object-oriented) 的語言。所以我在學習 Python 的同時,也摸索著 Java 的同一功能的實作方式,並且記在一本很有趣的筆記本上。我把筆記本的左頁寫著 Java 該功能的概念和實作法;右頁則是記著在 Python 中的實作方式。

兩個月過去,自己用 Python 配合 wxPython 開發自己的第一支「有圖形介面」(GUI) 的程式給自己工作室使用!但是對使用 Java ,仍然不是一個很有自信的語言。

今天,終於排到了電腦補習班的 Java 課,開始「真正地」跟老師學習這套號稱簡單,實則「眉角」很多的程式語言!為了繼續維持這種「同時學兩種語言」的感覺,從現在開始,就把每次的 Java 作業,同時也實作一份 Python 的版本,放在這裡當做是筆記。同時這種「疊疊樂」的行為,也的確是所有宅男會對自己手邊的新玩意兒做的事情呀!

如果在少少的讀者中有人看出了什麼問題,因而得到指教的話,那對自己也是好事一件呢。

本週的 Java 作業:變數的屬性和 System.out.println() 的功能!
---------------------------------------------------------------
public class dataType {
public static void main (String [] args){

System.out.println("整數");
byte b = 7;
short s = 77;
int i = 777;
long l = 7777;
System.out.println("byte: " + b);
System.out.println("short: " + s);
System.out.println("int: " + i);
System.out.println("long: " + l);
System.out.println();//空一行

System.out.println("浮點數");
float f = 7.0f;
double d = 7.7;
System.out.println("float: " + f);
System.out.println("double:" + d);
System.out.println();//空一行

System.out.println("字元");
char c = 'P';
System.out.println("char: " + c);
System.out.println();//空一行

System.out.println("布林值");
boolean boo = true;
System.out.println("boolean:" + boo);
System.out.println(); //空一行

}
}


---------------------------------------------------------------
同樣的功能,在 Python 下的寫法就簡單許多!

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Filename: dataType.py

print "整數"
b = 7
s = 77
i = 777
l = 7777
print 'byte: ', b
print 'short:', s
print 'int: ', i
print 'long: ', l
print '' #空一行


print "浮點數"
f = 7.0
d = 7.7
print 'float:', f
print 'double:', d
print '' #空一行

print "字元";
c = 'P'
print 'char:', c
print '' #空一行

print "布林值"
boo = True
print 'boolean:', boo
print '' #空一行


這次最有趣的發現是原來 Java 的布林值是 true/false 而 Python 是用大寫的 True/False!