Lu-yeom / mentor-program-5th-self-learning

0 stars 0 forks source link

week2(2021/4/19~2021/4/25) #2

Open Lu-yeom opened 3 years ago

Lu-yeom commented 3 years ago

日期:110年4月19日(星期一)20:00~22:30 今日進度:[CS101] 初心者的計概與 coding 火球術3-1 + [JS101] 用 JavaScript 一步步打造程式基礎(位元運算、變數-陣列)

課程筆記: 一、十進位→數字裡不會有「十」(以10為基底),9的下一個是「一零」,碰到「十」就要進位 123=1x100+2x10+3x1=1x10^2+2x10^1+3x10^0 (^為平方之意) 二、八進位→數字裡不會有「八」(以8為基底),7的下一個是「一零」,代表進位 123=1x8^2+2x8^1+3x8^0=64+16+3=83 三、十六進位→9,A(10),B(11),C(12),D(13),E(14),F(15),10,11,12...1A,1B,...1F,20 四、二進位→碰到2就進位:0,1,10,11,100…

  1. 1010=2^3+2^1=10 2.如何把56轉成二進位?
    (1)先列出2的各次方:1,2,4,8,16,32,64,128,256 (2)找最接近的數字32→56-32=24→24-16=8 (3)56=2^5(32)+2^4(16)+2^3(8)=111000 五、<<與>>: (會比一般運算還要快速,因為二進位是電腦最原始的形式) << 1 代表乘以2

    1代表除以2 非2的倍數除以2會四捨五入 六、位元運算的and(&)、or(|)、xor(^)、not(~): 可用位元運算方法知道偶數或是基數→ A & 1 ⇒ 0, A的最後一個數字是0 A & 1 ⇒ 1, A的最後一個數字是1 七、變數variable:可以想像變數是一個箱子,用箱子的名稱代指其中儲存的東西 用法: var box = 123 (=為賦值之意) 變數不可用數字、特殊符號、相關程式用語開頭,變數的取名方式有兩種,第一種是underscore式,用底線連結,如this_is_a_box;另一種是Camel-Case駝峰式,如ThisIsABox。 八、把變數+1或-1可直接輸入++或-- 九、變數型態: 1.primitive→boolean(條件判斷式true false),number(數字),string(字串’’ “”) console.log('typeof true', typeof true) console.log('typeof 30', typeof 30) console.log('typeof 0.5', typeof 0.5) console.log('typeof hello', typeof 'hello') console.log('typeof "30"', typeof '30')

console.log('typeof [1]', typeof [1]) console.log('typeof {a:1}', typeof {a: 1}) console.log('typeof null', typeof null) console.log('typeof undefined',typeof undefined) console.log('typeof function', typeof function(){})

node index.js typeof true boolean typeof 30 number typeof 0.5 number typeof hello string typeof "30" string typeof [1] object typeof {a:1} object typeof null object typeof undefined undefined typeof function function 十、陣列Array:很多性質相近的箱子(變數)擺在一起 var score = [] score[0] = 10 score[1] = 50 score[2] = 100 … 取得陣列: var score = [1,3,5,10,100] console.log(score) 取得陣列長度: var score = [1,3,5,10,100] console.log(score.length) 取得最後一個數值: var score = [1,3,5,10,100] console.log(score[score.length - 1]) 加上新的值: var score = [1,3,5,10,100] score.push(1000) console.log(score)

O: R: I: D:今天看的章節不多,但卻花了不少時間,最主要是作筆記佔了很多時間。

Lu-yeom commented 3 years ago

日期:110年4月20日(星期二)20:00~23:20 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(變數-物件-->判斷式-練習二)

課程筆記:

一、物件:陣列用[],物件用{},物件裡可以放任何東西,例如陣列、另一個物件...
var peter = { name: ‘peter’, score: 100, address: ’taipei city’ }
console.log(peter) 也可陣列和物件一起用: var student = [] var peter = { name: ‘peter’, score: 100, address: ’taipei city’ }
students.push(peter) 或是 console.log(peter.name) or console.log(peter[‘name’]) 二、變數的運算注意事項: 1.要注意型態→ var a = ‘10’ (字串) var b = 20 console.log(a + b) 不會回傳30,會回傳1020 如果要兩者相加 console.log(Number(a) + b) 才會回傳30 或是 console.log(ParseInt(a, 10) + b) 2.要注意浮點數誤差→ var a = 0.1 + 0.2 console.log(a) 不會等於0.3,因為0.1、0.2儲存在電腦裡會有誤差值,如0.100005 三、==與===: console.log(0 == ‘0’) 判斷相等(如數字和字串) console.log(0 === ‘0’) 判斷相等及型態相同,使用這個較不容易出錯 四、從 Object 的等號真正的理解變數:(重要概念) console.log({} === {}) 不相等,因為{}裡的值代表記憶體的位置,不代表其中顯示的值 物件{}除了number、string、booleen之外,其他(如陣列[])都會指向記憶體位置 五、判斷式if/else: 基礎型態→   if (ture) { console.log(123) } 例子→   var score = 70 if (score >= 60) { console.log(‘pass’) } 如果要設定兩個以上條件 var score = 65 if (score >= 60 && score <= 70) { console.log(‘pass’) } 加上else判斷式 var score = 60 if (score >= 60) { console.log(‘pass’) } else { console.log(‘fail’) } 六、判斷式if/else if: var age = 70 if (age >= 65) { console.log(‘old man’) } else if (age >= 20) { console.log(‘young’) } else { console.log(‘children’) } } 七、switch case:用於有很多條件要判斷時 var month = 1

    switch(month) {
        case 1:
            console.log(‘一月’)
        break
        case 2:
            console.log(‘二月’)
        break
        case 3:
             console.log(‘三月’)
        break
        default:
             console.log(‘false’)
     }

     另一種解法:
     var month_to_chinese = [‘一月’, ’二月’, ‘三月’]
     console.log(month_to_chinese[month -1])

八、三元運算子ternary: var score = 60 var isPass = (score >= 60) 額外補充之解法

    三元運算子:
    var score = 60
    var message = score >= 60 ? (score === 100 ? ‘no1’ : ‘pass’) : ‘fail’
    console.log(message)

九、練習一:判斷是否及格 var score = 60 var message = score >= 60 ? (score === 100 ? ‘you are no1’ : ‘pass’) : ‘fail’ console.log(message) 十、練習二:BMI 計算 var a = 70 var b = 180 var BMI = a /((b/100)*(b/100))

      if (BMI >= 18.5 && BMI < 24){
         console.log(‘正常範圍’)
      } else  if (BMI >= 24 && BMI < 27) {
        console.log(‘過重’)
     } else if (BMI >= 27 && BMI < 30) {
        console.log(‘輕度肥胖’)
       } else if (BMI >= 30 && BMI < 35){
         console.log(‘中度肥胖’) 
        } else if (BMI >= 35) {
          console.log(’重度肥胖’)  
      } else {
        console.log(‘體重過輕’)
     }

O:今天練習了很多程式碼,覺得非常有趣。 R: I: D:BMI的條件判斷式沒有成功,要再查查是怎麼一回事。

Lu-yeom commented 3 years ago

日期:110年4月21日(星期三)20:00~23:20 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(迴圈、函式)

課程筆記:

一、迴圈loop: 定義:一直做一樣的事情 無窮迴圈: 條件一直成立,迴圈一直執行 label和goto(非javascript語法) 例: var i = 1

    loop: 或 label: 
    console.log(i)
    i++
    if (i <= 100) {
       goto loop 或 label
    } 
      console.log(‘finished!’)

二、do...while… 例: var i =1

     do {
          console.log(i)
          i++
     } while(i<=100)

      console.log(‘i=’ , i )

     或是使用continue、break
     用chrome執行看看:
     <script>
     debugger
     var i =1

     do {
          console.log(i)
          i++
     } while(i<=100)

      console.log(‘i=’ , i )
      </script>

三、while迴圈: 例: var i =1 //初始值 while(i<=100) { //終止條件 console.log(i++) //i每一個迴圈要做的事情 }

      console.log(‘i=’ , i )

四、for loop迴圈: (已知迴圈數的情況) 例: for (var i =1; i<=100; i++ ) { //要有3個條件 console.log(i) } 與陣列結合: var scores = [1,2,3,4,5]

    for (var i=0; i<scores.length; i++) {
    console.log(scores[i])
    }

五、函式function: y = f(x), y=回傳值, f(x)=函數, x=參數 例: function f(a, b, c) { return a + 2b + c3 } console.log(f(1,2,3)) 例、印出1~10: function generateArray(n) { var result = [] for (var i = 1; i <=n ; i++) { result.push(i) } return result }

        console.log(generateArray(10))
       例、印出3~10:
        function generateArray(from, to) {
        var result = []
        for (var i = from; i <=to ; i++) {
            result.push(i)
        }
        return result
        }

        console.log(generateArray(3,10))
        例、印出1~100的基數
        funtion logEven(number) {
           if (number%2) {
              console.log(number)             
         }
       }

        function print1to100 () {
            for (var = 1; i <=100; i++) {
                 logEven(i)              
       }
     }
      console.log(print1to100())

六、宣告函式的其他方式: 例1: var hello = function() { console.log(‘hello’) } 例2: function print(anything) { anything() } 例3:(重要!) function transform(arr, transformFunction) { var result = [] for(var i = 0; i<arr.length, i++) { result.push(transformFunction(arr[i])) } return result }

     function double(x) {
          return x*2
     }

    console.log(
         transform([1,2,3], double)
     )
    例4、匿名函式:
     function transform(arr, transformFunction) {
          var result = []
          for(var i = 0; i<arr.length, i++) {
          result.push(transformFunction(arr[i]))
      }
      return result
     }

    console.log(
         transform([1,2,3], function(x)) {
             return x=3
         })

七、參數和引數: 參數parameter→function transform(arr, transformFunction) 底線為參數 引數Argument→transform([1,2,3], function(x)) 底線為引數 javascript特有例: function add(a,b) { console.log(arguments[0]) return a+b } console.log(add(2,5)) 八、arguments代表物件 九、function傳參數的運作機制,使用function的注意事項 交換兩個變數的函式例: function swap(a, b) { var temp = 0 a = b b = temp } 如果變數為物件,可能會影響到原本的參數 十、return 不需要知道結果→function不加return的話,預設為undefined 需要回傳結果→需要加return 注意→function遇到return會立刻執行,所以如果要設條件或計算要放在return前面

O: R:金句→如果不會解題,可以先做出函式的格式,再用另一個function補充條件 I: D:function部分的理解還是有點模糊,要再找時間重看或是查詢資料。

Lu-yeom commented 3 years ago

日期:110年4月22日(星期四)20:00~22:20 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(常用的內建函式)

課程筆記:

一、Number 類型的內建函式: 字串轉數字→console.log(a + Number(b)) console.log(a + parseInt(b)) console.log(a + parsefloat(b).toFixed(2))//浮點數toFixed(2)取小數點2位 console.log(Number.MAX_VALUE)//數字越大計算越不精準 console.log(Number.MIN_VALUE) console.log(Math.PI) //PI是常數,常數通常用大寫表示 console.log(Math.ceil(10.5))//小數點自動進位 console.log(Math.floor(10.9))//小數點無條件捨去 console.log(Math.round(10.4))//小數點四捨五入 console.log(Math.sqrt(9)) //開根號 console.log(Math.pow(2, 10)) //次方 console.log(Math.random()) //取0~<1的隨機數 console.log(Math.floor(Math.random*10 +1)) //產生1~10的隨機數 數字轉字串: var a = 2 a.toString() 或是 (a + ‘’) ※可參考MDN web docs網站

二、String 類型的內建函式: 變大寫→ var a = ‘abc’.touppercase console.log(a) 變小寫→ var a = ‘ABC’.tolowerCase console.log(a) 知道字串的charcode→   var a = ‘A’ var aCode = charCodeAt(0) console.log(aCode) 知道charcode的字串→   var a = ‘a’ var aCode = a.charCodeAt(0) var str = String.fromCharCode(65) console.log(str) ※大寫和小寫的charcode差32,也可用推斷方式求出 var a = ‘g’ var aCode = a.charCodeAt(0) var str = String.fromCharCode(aCode - (‘a’.charCodeAt(0) - ‘A’.charCodeAt(0))) console.log(str) 尋找字串中的關鍵字→   var str = ‘hey hello world yoyoyo’ var index = str.indexOf(‘hello’) console.log(index) 替換字串中的字→    var str = ‘hey hello world yoyoyo’.replace(/y/g, ’!!!’) console.log(str) 切開字串→    var str = ‘hey hello world yoyoyo’ console.log(str.split(‘,‘)) 去掉空格→    var str = ‘hey hello world yoyoyo’ console.log(str.trim(‘)) 用迴圈將字串隔開→    var str = ‘data1,data2, data3, data4’ console.log(str.length)

    for(var i=0; i<str.length; i++) {
      console.log(str[i])
    } 

三、Array 類型的內建函式: 結合join→   var arr = [1, 2, 3] console.log(arr.join(‘!’)) map用函式代入,取代原本陣列內的值→   var arr = [1, 2, 3]

   function double(x) {
        return x*2
   }
   console.log(arr.map(double))

四、filter排除負數→   var arr = [1, 2, 3, -1, -2, -5]

   console.log(
     arr
     .map(function(x) {
        return x*2
   })
      .filter(function(x) {
         return x>0 
   })
   )

五、slice取出想要的部分: var arr = [0,1,2,3,4,5,6]

   console.log(arr.slice(3)) 或是 console.log(arr.slice(2, 4))

六、splice可插入、刪除元素: var months = [‘Jan’,’March’,’April’,’June’] console.log(months.splice(1,0,’Feb’)) 七、sort排序: var months = [‘Jan’,’March’,’April’,’June’] console.log(months.sort(’)) 如果是要依數字由小到大排列→   var arr = [1,30,4,21] arr.sort(function(a, b) { if (a===b) return 0 if (b>a) return -1 return 1 }) console.log(arr) 如果要依數字由大到小排列→   var arr = [1,30,4,21] arr.sort(function(a, b) { if (a===b) return 0 return a>b ? -1 : 1 }) console.log(arr) 用數學運算方法→   var arr = [1,30,4,21] arr.sort(function(a, b) { return a - b 或 b - a }) console.log(arr)

O:今天也是很多函式的運用,還無法一下子記住。 R: I: D:huli老師提供的網站有很多函式與應用範例,很方便。

Lu-yeom commented 3 years ago

日期:110年4月23日(星期五)22:30~24:00 今日進度: [JS101] 用 JavaScript 一步步打造程式基礎(新手最會出錯的地方)

課程筆記:

一、「回傳」與「印出」的差異: 執行函式時return會回傳執行的值,但是不會印出,需再加上console.log才會印出值。 二、超級無敵重要的 Immutable (不可變)觀念:   除object物件以外其他為immutable value,如boolean、string 例(字串): //不會改動到原本的值,需要指定一個變數讓新的值回傳 var a = “hello” //a的值為字串hello,放在0x01的記憶體位置 a = a.toUpperCase() //指定一個a變數,回傳變為大寫的a的值 console.log(a) //將變為大寫的a的值印出,但並不表示a變成”HELLO”

     例(陣列): //可能會改動到原本的值
     var arr = [1,2,3] 
     arr.push(4)  //可直接在原本的陣列加上4,不用另外指定變數arr
     console.log(arr)

三、愛用console.log,如果發現回傳值有誤,多用console.log來確認 例(判斷質數):

      function isPrime(num) {
          if (num === 1) return false
          if (num === 2) return true
          for(var i =2; i<num; i++) {
             if (num % i ===0) {
                return false
               } else {
                    return true
                }
            }
         }
        console.log(isPrime(3))  //但是會出現錯誤,如15回傳true

        修正:
        function isPrime(num) {
          console.log(‘num:’ , num)
          if (num === 1) return false
          if (num === 2) return true
          for(var i =2; i<num; i++) {
             console.log(‘i:’ , i)
             if (num % i ===0) {
                console.log(‘num % i === 0:’ , num, i )
                return false
               } else {
                     console.log(‘else’ , num, i)

                    return true
                }
            }
         }
        console.log(isPrime(3))
        再修正:
         function isPrime(num) {
          if (num === 1) return false
          if (num === 2) return true
          for(var i =2; i<num; i++) {
             if (num % i ===0) {
                return false
               } 
                return true
              }
             }
        console.log(isPrime(3))

四、 練習一:印出一到九 (一) for loop for (var i = 1; i<10; i++) { console.log(i) }

(二)while
      var i = 1
      while(i<10) {
          console.log(i++)
      }   

O:huli老師提醒了很多概念跟撇步,雖然還沒有完全理解,但很受用。 R: I: D:明天要把本週進度看完,開始寫作業。

Lu-yeom commented 3 years ago

日期:110年4月24日(星期六)21:00~01:00 今日進度:寫作業

O:今天作業進度hw1、hw3、hw4 R: I: D:hw2沒有想到好解法,睡個覺再繼續~

Lu-yeom commented 3 years ago

日期:110年4月25日(星期日)11:00-12:30、19:00-22:00 今日進度:寫作業(hw2、hw5、hw6) 我是笨蛋又看錯章節,以為是看到Unit1的第4段,結果竟然是要把Unit1~4全部看完...要另外找時間補了>”<