###### 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)
{"metaMigratedAt":"2023-06-16T15:47:37.018Z","metaMigratedFrom":"Content","title":"猜數字 & 產生隨機英文單字","breaks":true,"contributors":"[{\"id\":\"05a05317-6b4f-4499-afdb-93a0a65a594e\",\"add\":3155,\"del\":280}]"}
Expand menu