---
# System prepended metadata

title: 猜數字 & 產生隨機英文單字
tags: [ALPHACampWeek1]

---

###### tags:`ALPHACampWeek1`

猜數字 & 產生隨機英文單字
===========


熱身題
---
* 我是莊家，給電腦猜數字。
* 功能
    * 指定介於 1-100 之間的數字，存在 answer 變數裡
    * 設定一個 guess 變數，代表挑戰者 (電腦) 猜的數字
        * 電腦可重覆「猜數字」
        * 比對 guess 和 answer，判斷太大或太小
    * 若兩者相等（猜對）則結束遊戲，且結束時須計算電腦猜了幾次

* 規格
    * 程式碼開頭先宣告三個變數：
        * answer：正確數字
        * guess： 挑戰者 (電腦) 猜的數字
        * count：當前回合數
    * 程式執行的過程中，請用 console.log() 把猜數字的過程輸出到 console 裡觀察
    * 運用 while 迴圈來讓電腦能持續猜數字，直到猜中時才跳出 while 迴圈
    * 運用 if/else 來根據太大、太小、猜對等狀況，切換不同的流程
    * 使用嚴格的 === 而非寬鬆的 ==
    
* 解答
    * https://replit.com/@ks0dcongra/A7-Jing-Dian-Cai-Shu-Zi-initial-code#%E7%8C%9C%E6%95%B8%E5%AD%97/guessNum1.js

進階題
---
* 演算法：
    1. 流程圖![](https://i.imgur.com/3hgmz3g.png)

    2. 運算思維
        1. 助教的運算思維![](https://i.imgur.com/Y45dYKP.png)
        2. 納豆的運算思維![](https://i.imgur.com/KtdXrrF.png)
        3. Marcus第一次的運算思維
              - 利用 Math.random() * ( max - min ) + min 產生每次猜的數字
              - 紀錄每個回合的回傳結果，回答太小則紀錄為最小值，回答太大則紀錄為最大值
              - 下次再猜的時候，再利用前一次獲得最大最小值產生猜的數字，這樣就可以有效的縮小範圍
        4. Marcus第一次的運算思維         
            - 利用 Math.floor(( max + min ) / 2) 產生每次猜的數字
            - 紀錄每個回合的回傳結果，回答太小則紀錄為最小值，回答太大則紀錄為最大值
            - 下次再猜的時候，再利用每次獲得的最大值與最小值相加除以二，這樣就可以有效的縮小範圍
        

    3. 虛擬碼 - Marcus的虛擬碼
    ![](https://i.imgur.com/cyXwvPv.png)

* 功能
    * 指定介於 1-100 之間的數字，存在 answer 變數裡
    * 設定一個 guess 變數，代表挑戰者 (電腦) 猜的數字
        * 電腦可重覆「猜數字」
        * 比對 guess 和 answer，判斷太大或太小
    * 若兩者相等（猜對）則結束遊戲，且結束時須計算電腦猜了幾次

* 規格
    * 讓電腦在 10 次以內猜中答案的限制，邏輯中需要包括根據「亂數測試的結果」縮小「猜測範圍」。

* 解答
    * https://replit.com/@ks0dcongra/A7-Jing-Dian-Cai-Shu-Zi-initial-code#%E7%8C%9C%E6%95%B8%E5%AD%97/guessNum2.js

產生隨機亂數 Math
---
Math無條件捨去
---
Math.round() 四捨五入
Math.floor() 取小於這個數的最大整數
Math.ceil() 取大於這個數的最小整數
alert(Math.round(12.3));//12
alert(Math.round(12.5));//13
alert(Math.round(12.52145));//13
```
let answer = Math.floor(Math.random() * 100) + 1 //0~100 + 1
//演算法
function randomusefloor(min,max) {
	return Math.floor(Math.random()*(max-min+1)+min);
}
```
產生隨機英文字 
---
function makerandomletter(max) {
  var text = "";
  var possible = "abcdefghijklmnopqrstuvwxyz";

  for (var i = 0; i < max; i++){
    text += possible.charAt(Math.floor(Math.random() * possible.length));
  return text;
}

產生前兩碼英文小寫,後6碼數字的樂透號碼並連接
---
<p id="demo" onclick="myrandomstring()">Click me get random string.(前2碼英文小寫,後6碼數字)</p>

function myrandomstring() {
    document.getElementById("demo").innerHTML = makerandomletter(2)+randomusefloor(1,999999);
}

另一種寫法
---
// input
let ticket = ''
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
//  process
ticket += letters[Math.floor(Math.random() * 26)]
ticket += letters[Math.floor(Math.random() * 26)]
ticket += Math.floor(Math.random() * 10)
ticket += Math.floor(Math.random() * 10)
ticket += Math.floor(Math.random() * 10)
ticket += Math.floor(Math.random() * 10)
//  output
console.log(ticket)







