在JS中的亂數產生基本上和Ruby完全一致,會特別提這個是因為JS中亂數產生若要指定區間,比方說50~100 會稍微有點麻煩。老樣子,我們先來看看在python中是怎麼完成的,原諒我總是要聊python….很久沒用的話會忘記嘛
import random as r
for i in range(10):
x = r.randint(50,100)
print (x)
//產生10次來驗證一下,順帶一提我真的愛死python的for loop 整個很好用
66
100
95
72
87
51
81
96
85
63
那在JS內要怎麼完成呢?麻煩點在於JS內產生的亂數區間自動為0~1
所以需要搭配運算子來決定範圍,如下所示
x = Math.random()*100 //此會產生0~99的數字 為了取整數可以搭配前一篇提到的round floor 或是 ceil
但這樣的起始範圍永遠是0,只好另外在寫一個funtion搭配使用
function getRandom(min,max){
return Math.ceil(Math.random()*(max-min))+min;
};
這樣的寫法便可以產生介於min-max的數字,值得注意的是上下界都包含到,使用上要注意一下。
最後看一下一個簡單的猜數字遊戲要怎麼完成(In Javascript)
此為設定一個答案讓電腦去猜的版本。
// 加入math.round是為了避免使用者輸入小數造成無窮迴圈
let answer = Math.round(Number(window.prompt("請輸入介於1~100的整數", "")))
//建立一個funtion決定亂數產生的區間
function getRandom(min,max){
return Math.ceil(Math.random()*(max-min))+min;
};
while (answer <= 0 || answer > 100 || isNaN(answer) === true) {
answer = Math.round(Number(window.prompt("請輸入介於1~100的整數", "")));
}
// 建立一個計數器記錄猜過的次數
let counter = 0
let game_on = true
// 建立一個空陣列儲存猜過的數字,目的是為了減少電腦猜的次數
let wronglist = []
// 決定遊戲的起始數值
let min = 1
let max = 100
console.log(`本次的答案是 ${answer}`)
while (game_on){
let guess = getRandom(min,max)
// 若產生出的變數已經猜過,則不列入計數器並重啟迴圈
if (wronglist.includes(guess)){continue}
counter += 1
// 每次猜完後決定新的猜測區間,並將猜錯的數字放進陣列中比對避免重複猜
if (guess > answer){
console.log(`電腦猜${guess},猜的數字太大了`)
max = guess
wronglist.push(guess)
} else if (guess < answer){
console.log(`電腦猜${guess},猜的數字太小了`)
min = guess
wronglist.push(guess)
} else {
console.log(`電腦猜${guess},終於猜對了!`)
break;
}
}
console.log(`共猜了 ${counter}次`)