D32_W3 作業確認 + W4 NET101


Posted by Christy on 2021-05-20

第三週作業確認

原本寫這樣

function solve(lines) {
  const data = lines[0].split(' ')
  for (let i = Number(data[0]); i <= Number(data[1]); i++) {
    if (isNarcissistic(i)) {
      console.log(i)
    }
  }
}
  • 經過助教提醒,建議可以先用 map 轉換型態
function solve(lines) {
  const data = lines[0].split(' ').map(Number)  // map()
  for (let i = data[0]; i <= data[1]; i++) {
    if (isNarcissistic(i)) {
      console.log(i)
    }
  }
}
  • 另外如果可以的話,其實三元運算子可以取代 if...else...

求小於 n 的質數,為什麼求到 Math.sqrt(n) 就可以了?

  • 質數除餘範圍,LIOJ 1020,可以只求到 Math.sqrt(n),參考資料:質數有多重要?數學家歐拉和高斯是如何研究質數的?

  • 4'15" 開始,原理在 5'00" 這裡,「如果最大的數是 n 的話,其中比較小的那個因數,肯定小於 √n,把小於 √n 的質數的倍數刪去,剩下的就全部都是質數了。」

  • 例如令 n = 16,開根號以後是 4,小於 4 的質數為 2, 3,把這兩個數的倍數刪去,剩下的就是質數:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,只剩下 1, 2, 3, 5, 7, 11, 13,其中 1 不是質數也不是合數,因此答案是:2, 3, 5, 7, 11, 13

  • Mac 開根號怎麼打
    打任意次根号:
    option+shift+v,输入根的次数,按确定,就可以接着输入根号内数字。
    二次根号:
    option+v
function isPrime(n) {
  const sqrtCache = Math.sqrt(n);// 這樣寫會更簡潔
  if (n === 1) {
    return false
  }

  for (let i = 2; i <= sqrtCache; i++) {
    if (n % i === 0) {
      return false
    }
  }
  return true
}
  • 還有助教說:「javascript 的 function 不作為物件藍本的話,通常是小寫開頭哦!」

  • 可以用解構語法進行賦值,這簡直帥炸了,解構賦值

if (p === -1) {
    const temp = a
    a = b
    b = temp
}
// 寫這樣更簡潔  
if (p === -1) {
    [a, b] = [b, a]
}
  • 天啊,我居然得到助教的值得參考標籤,受寵若驚 ❤️
  • 一大早看到助教的留言,立馬笑噴,一整天心情都超好的~

MTR05 function 額外補充:part2

  • 把函式當作參數傳的講解

  • map() 可以傳三個參數,MDN

let arr = [-1, -2, 1, 2, 3]
arr.map(function(currentValue, index, array)) {
  console.log(currentValue, index, array)
}
// 會印出
-1 0 [-1, -2, 1, 2, 3]
-2 1 [-1, -2, 1, 2, 3]
1 2 [-1, -2, 1, 2, 3]
2 3 [-1, -2, 1, 2, 3]
3 4 [-1, -2, 1, 2, 3]

傳的參數是按照順序的,跟寫什麼字沒有關係 (不寫 currentValue, index, array 也可以)


NET101

  • protocol: 為什麼我們需要協定(protocol)?因為透過規範彼此才能溝通。

  • HTTP Method:

    • Get 取得資料
    • Head 跟 Get 很像,很少用,只拿 header 不要 body
    • Patch 修改部分資料,不會取代所有資料
    • Put 修改資料,會取代所有資料
    • Post 執行一些動作
    • Delete 刪除資料
    • Options 回傳這個 server 支援哪些方法
  • 常見的 HTTP Status code

    • 1 開頭:比較少見,客戶端需要處理 Hold on
    • 2 開頭:成功 Here you go
      • 204: 成功處理請求,但沒有內容;例如刪除資源成功
    • 3 開頭:重新導向 Go away
      • 301: 永久的移到新的位置
      • 302: 暫時的移到新的位置
    • 4 開頭:客戶端有錯 You fucked up
      • 語法錯誤
      • 404: Not Found 你要的東西這裡沒有
    • 5 開頭:server 端錯誤 I fucked up
      • 503: 伺服器有問題
    • 知道常見的 Code 及每個號碼開頭什麼意思
  • 實作一個超簡易 HTTP Server

    • 這裡的程式碼再多看幾遍
    • 下面的程式碼來自助教 Yakim 的 筆記,寫得好美好棒啊,謝謝助教~
let http = require('http'); // 引用 library: http 
let server = http.createServer(handleRequest);

function handleRequest(req, res) {
  console.log('request url: ', req.url);
  if (req.url === '/') {
    res.writeHead(200, { // 更改 response header
      'info': 'index'
    })
    res.write('index'); // 更改 response body
    res.end();
    return;
  }
  if (req.url === '/redirect') {
    res.writeHead(301, {
      // 'Location': '/category' // 轉址到 /category
      'Location': 'https://google.com' // 轉址到 google.com
    });
    res.end();
    return;
  }
  if (req.url === '/category') {
    res.writeHead(200, {
      'info': 'category'
    })
    res.write('category')
    res.end();
    return;
  }
  res.writeHead(404);
  res.end();
  return;
}

server.listen(5000); // 監聽 5000 這個 port









Related Posts

[ Note ]更新到最新狀態,與 Huli 的 master 同步

[ Note ]更新到最新狀態,與 Huli 的 master 同步

25. Design Principles - SOLID

25. Design Principles - SOLID

Python 程式設計入門共學營學習計劃

Python 程式設計入門共學營學習計劃


Comments