正法寶藏JavaScript第七堂課(初次勝利)

新莊早上的天氣有點陰暗,吃完早餐看完醫生後果不起所然的下著暴雨,研究著第六堂課第二個作業的我心想著離出門吃飯和上課還有一個小時多,希望在這之內雨下得完,還好出門雨是停了,不過到板橋的時候竟然是要人命的烈陽,不過卻也比照了最近學習的心境歷程。

八個小考題

今天又是只出席了四個人,總是無法滿人數的感覺呀,不過這也不影響上課的氣氛,由於上堂課結束後大家的程度實在跟不太上,所以老師這次的課程是出八個小題目,可以挑自認簡單的題目作答,基本上只要達到要求就算過關給一分,老師帶了三本關於程式的原文書,第一名的可以帶走兩本,而第二名就是拿走最後的一本。

說明結束了之後就開始作答,作答的時間就是一整堂上課的時間,從下午兩點半到晚上六點,基於上個禮拜的大挫折和Nic的洗禮後我蠻享受這種可以一直打code的感覺,感覺就好像是玩RPG,反正就是想辦法達到目的就對了,至於比賽什麼的其實對我來說不重要,其實有一部分是因為我覺得我也贏不了那些比我接觸程式的經驗還多很多的吧人XD,那就來分享我有做出哪些題目吧!

第一題:到 http://regexr.com/3e5ff 把meta裡有og:的程式碼一整行都hightlight

打開後我還蠻傻眼的我根本不知道要做什麼東西,之前除了看過老師稍微示範之外完全沒有用過這個網站,還有一個游標似乎在對我挑釁一樣閃爍的頻率是乎就是要單挑時挑動手指的頻率XD,好啦其實也沒這麼誇張,不過這題做出來我覺得我有佔運氣成分。

一開始在可以輸入的地方亂輸入一些字串稍微了解這個網站在幹麻,然後就點點旁邊的功能和範例,結果不小心發現原來旁邊有個global功能可以點選,點選之後就會把所有剛剛輸入的字串全部圈選起來,我以為大家都知道其實也沒有多想就開始直接在google上下一堆關鍵字找解答。

還不太會下關鍵字的時候真的是會找到五花八門的答案,甚至還會找錯功能,到後面雖然沒有一個答案是對的但是有些至少都可以做出一半我想要的效果,然後就開始像玩魔術方塊般的把解法排列組合湊出各種答案,結果真的被我湊出來了XDDDD,但我當下是沒有馬上跟老師說,因為要得分的話做出來後要給他檢查才算分,我當下只想享受這個過程,所以就默默享受這個喜悅然後去做下一題。

第二題:製作利息表單

表單要可以: 
1. 輸入本金金額、存放月數、月利率(%) 
2. 選擇單利或複利 
3. 能算出正確的利息
單利利息 = 本金 * 月利率 * 存放月數
複利利息 = 本金 * (1 + 月利率) ^ 存放月數 - 本金 

這題的過程也蠻有趣的,首先我在全域宣告三個變數,但不知道為什麼怎麼樣都進不了function裡面,害我的利息就算存了一百萬利率100%我的利息還是零元,後來不爽我直接把變數複製進去每個funcition裡面,秉持著兵不厭詐這是戰爭的精神,不管程式碼在怎麼髒我就是要把它寫出來,終於我的存款開始有了利息。

再來單利的公式很簡單,稍微照著打利息都算正常,但是複利那個次方的符號^好像就不能直接打上去了,因為我直接照著打上去的時候我本金存的越多利息竟然越少,到後面竟然還是負的啊!!!不小心就創造了一間黑道銀行,我問老師的時候老師還撲疵笑了一聲再叫我多研究XD,後來多宣告了一個變數裝Math.pow就有正常的利息了。

在做這題的途中還有同學在問第一題的事情,老師才提示說要去勾global的選項,我心想該不會是我進度超前吧?就想說先拿第一題給老師看看,幸運的先搶下一題,不過我還是想就不要想太多繼續做就對了,之後另一個同學有做出第三題,反正沒差我做完這題之後一樣默默享受喜悅去做下一題XD。

第六題:寫一個方法產生重複字元字串 ( 實作禁止用任何 loop )

老師提示的程式碼如下:

(function() {
  function repeatMyStr() {
    // your implementation

  }

  console.log(repeatMyStr('@', 3));
  console.log(repeatMyStr('#', 10));
})(); 

左完前兩題之後我就先把所有題目看過一遍,這題應該算是比較簡單的就先挑來做。

其實這題蠻簡單的,我自己自幹完之後老師說他的原始檔案裡面有題目方向要照著題目大方向做,我才恍然大悟原來每一題老師其實都有原始檔直接去改就好,不過還好剛剛做的都沒有額外提示除了這題,除了第一題以外這題算是最輕鬆的,算是迅速的又拿下了一題,不過說迅速其實也花了半小時啦XD。

第三題:猜拳

提示:設計一個和電腦猜拳的遊戲 ( random, if )

會挑這題是因為有同學做出來了就想說應該是相對簡單,禮拜天跟Nic一起學的RandomNumber就超級派上用場了,我的想法是先隨機產生數字1,2,3,如果是1代表剪刀,2代表石頭,3代表麻布,先很輕鬆的寫出了電腦隨機出拳,但....我要怎麼比對呀??

這裡我真的卡蠻久的想了很久因為我做了剪刀,石頭,麻布三個按鈕代表玩家出的拳,三個拳也都會啟動同一個function讓電腦也隨機出拳顯示在網站上,但難道要我們使用者自己去判斷輸贏嗎XD?到底要怎麼讓程式碼幫我們判斷呢?想了大概數十分鐘,沒辦法了,繼續使用兵不厭詐這是戰爭直接做了總共三個function和九個if去過濾每個可能發生的結局XDDD,雖然美中不足的是我選擇出拳之後會先alert這局的輸贏結果才會顯示電腦出什麼拳,不過老師還是算我過關了!

第八題:這是一個 JS 主宰的世界

提示:寫一個網頁, 能在沒有 JavaScript 時秀出 "你的瀏覽器不支援 JavaScript" 字樣

在做這題之前其實剩半小時了,我受不了就跑去抽煙順便分享一下心情給Nic,抽完菸上去後逛逛剩下的題目另外有兩題需要用到計時的功能想說一定要研究很久就先跳過,另一題是要做鋼琴鍵一看到就知道爆難的XD,最後就挑看起來最簡單的第八題來做做。

其實這題事後才知道一行code的就可以解決的,但是關鍵字不好下,我找了好多五花八門的解答,大多數都是解決不支援所以使用程式碼做優雅降級的動作,突然只是單純地顯示不支援JavaScript反而不知道要怎麼下關鍵字XD。

其實我途中好像有找到答案,就只有一行noscript的程式碼打在html上面而已,但是當我複製貼上的時候我不知道怎麼測試啊XDD,我不知道要怎麼關閉JavaScript來測試這個功能,後來又去找了其他方法跟得分擦肩而過,因為過不久時間就到啦!

初次勝利

老師插上投影機,畫面是紀錄我們有誰做出了哪幾題,我看我的格子有一半做出來,真的是蠻不敢相信的,後來漸漸藏不住小小的笑容,我從前幾天的超級大貧頸和挫折中到現在竟然是冠軍,從傻在電腦前一行code到現在可以自己做出骯髒小功能,老師還說其實第二名是那位同學他不意外,但我是第一名還蠻驚訝的,問我之前是不是在裝傻哈哈,聽到這邊會說不開心真的是騙人的XD,挑完書之後老師竟然還說要請冠軍和亞軍吃飯,今天的賺頭真的是不小啊!

回到家真的有久違的踏實感,畢竟我現在是待業身份而且上個禮拜寫程式還這麼低潮,其實真的是蠻慌張的,這次讓我覺得在學習上面除了找對方法之外真的很需要靠成就感去堆出成效,我很難想像假如今天沒有經過Nic的Live show洗禮而沒做出個兩三題的話回家後我會帶著什麼樣的心情去打開我的筆電,再來我覺得現在學習對我來說是一個很特別的探索旅途,脫離了學校填鴨式教育,要自己花時間去收尋和研究答案和做出成品的歷程收穫絕對不只是分數和獎品那些而已,後面知識和智慧的質量絕對是超乎想像的大。

comments powered by Disqus