Создана программа для угадывания лотерейных номеров, которая принимает число от 1 до 10 и предлагает пользователю угадать число в общей сложности 3 раза, чтобы выиграть «приз». В лотерейной части программы у меня не было проблем, но я не могу заставить программу подсчитывать количество догадок и отображать правильную сумму приза.
Вот код, который у меня есть:
<script>
var randomNum1 = Math.floor((Math.random() * 9) + 1);
var randomNum2 = Math.floor((Math.random() * 9) + 1);
var randomNum3 = Math.floor((Math.random() * 9) + 1);
console.info(randomNum1);
console.info(randomNum2);
console.info(randomNum3);
console.info(x);
var firstNum = false;
var secondNum = false;
var thirdNum = false;
var x = 0;
var moneyWon = 0;
firstNum = parseInt(prompt("Guess the first number."));;
secondNum = parseInt(prompt("Guess the second number."));;
thirdNum = parseInt(prompt("Guess the third number."));;
if ((firstNum == randomNum1) || (firstNum == randomNum2) || (firstNum == randomNum3))
{
firstNum == true;
}
if (firstNum == true)
{
moneyWon = 100;
x++;
}
else{
moneyWon = 0;
}
if ((secondNum == randomNum2) || (secondNum == randomNum1) || (secondNum == randomNum3))
{
secondNum == true;
}
if (secondNum == true)
{
moneyWon = 200;
x++;
}
else{
moneyWon = 100;
}
if ((thirdNum == randomNum2) || (thirdNum == randomNum1) || (thirdNum == randomNum3))
{
thirdNum == true;
}
if (thirdNum == true)
{
moneyWon = 500;
x++;
}
else{
moneyWon = 200;
}
alert("The computer's numbers are " + randomNum1 + " " + randomNum2 + " " + randomNum3 +
"\nYour guesses were " + firstNum + " " + secondNum + " " + thirdNum +
"\nYou got " + console.info(x) + " right" +
"\nYou've won $" + moneyWon);
</script>
🤔 А знаете ли вы, что...
JavaScript позволяет создавать динамические и интерактивные веб-приложения.
Первое, что я замечаю:
You got " + console.info(x) + " right" +
Вы не хотите console.info()
здесь, только x
Во-вторых, вы не хотите каждый раз устанавливать moneyWon
в if
, а делаете moneyWon += amount
, как вы делаете с x
.
Кроме того, в else
(указывая на то, что догадка была неверной) вы не хотите ни устанавливать, ни добавлять к сумме (я бы предложил вообще удалить эти 3 else
):
else{ moneyWon = 0; }
и второстепенное - дать осмысленные имена свойствам, т.е.
var firstNum = false
должно быть больше похоже на (is)firstNumberGuessed
(is
указывает, что это логическое значение
Я вижу, что вы на правильном пути в этом вопросе, но хорошо бы научиться не лениться в этом деле как можно скорее.
Обновлено: вы также можете отказаться от назначения true для firstNum, secondNum, ThirdNum и просто иметь это:
if ((firstNum == randomNum1) || (firstNum == randomNum2) || (firstNum == randomNum3))
{
moneyWon += 100;
x++;
}
Что ж, мне не нужно рассказывать вам, что это за ошибки и что их вызывает, поскольку мой друг Деян уже включил их в свой ответ. В своем ответе я пытаюсь реализовать его ответ, а также некоторые полезные методы javascript, которые также могут сделать вашу работу намного проще и быстрее.
Во-первых, массивы — ваши друзья. Я создал массивы для ввода пользователем, а также случайные числа и заполнил их с помощью цикла for.
Далее, поскольку мы используем массивы, мы можем использовать метод includes()
для поиска значений среди случайных чисел. Это уменьшает ваши условия if else.
Затем я использую интерполяцию строк, чтобы получить выходное сообщение.
let randoms = [];
let nums = [];
let numbers = ["first", "second", "third"];
let winPrize = [100, 200, 500];
let losePrize = [0, 100, 200];
for(let i=0; i<3; i++){
randoms.push(Math.floor((Math.random() * 9) + 1));
nums.push(parseInt(prompt(`Guess the ${numbers[i]} number.`)));
}
let x = 0;
let moneyWon = 0;
for(let i=0; i<3; i++){
if (randoms.includes(nums[i])){
x++;
moneyWon+=winPrize[i];
}else{
moneyWon+=losePrize[i];
}
}
alert(`The computer's numbers are ${randoms[0]}, ${randoms[1]} and ${randoms[2]}. \nYour guesses were ${nums[0]}, ${nums[1]} and ${nums[2]}. \nYou got ${x} right. \nYou've won $${moneyWon}`);
Я считаю, что если мы будем следовать такой практике, наш код останется коротким, а также легко читаемым и удобным для сопровождения.