2

我正在尝试从一本书中编写这个练习:

编写一个程序问自己,使用提示符,2 + 2 的值是多少。如果答案是“4”,用警觉说赞美的话。如果是“3”或“5”,说“几乎!”。在其他情况下,说一些意味深长的东西。

我做了这个尝试:

var input = "" || 'number'
prompt ("How many is 2+2 ?", input)
if (input = 4)
  print ("Awesome !");
else if (input = 3 || input = 5)
  print ("Close !");
else if (input = 'number'
  print ("wrong number");
else if (input = 'random text')
  print ("use numbers only!")

我知道这是错误的。这是我打算做的:

  • 我需要确定 的类型var,而不仅仅是值。我需要制作var数字或字符串(根据typeof)。为什么 ?对于prompt输入,因为以下else if条件,将基于输入的类型。

  • 我知道运动并没有要求它,但我想让它变得更好。

4

4 回答 4

3

=是赋值。==是比较。

prompt将给您的字符串转换为数字,请使用parseInt(input,10)- 也就是说,JavaScript 将为您进行类型转换,因此这里没有真正的需要。isNaN(input)您甚至可以通过测试您的“仅使用数字”结果来判断用户是否输入了不是数字的内容。

所以是这样的:

var input = parseInt(prompt("How much is 2 + 2?",""),10);
if( input == 4) alert("Awesome!");
else if( input == 3 || input == 5) alert("Almost!");
else if( input == 10) alert("No GLaDOS, we're working in Base 10 here.");
else if( input == 42) alert("That may be the answer to Life, the Universe and Everything, but it's still wrong.");
else if( isNaN(input)) alert("Use numbers only please!");
else alert("You are wrong!");
于 2013-08-22T20:26:42.190 回答
3

我个人建议:

var guess = parseInt(prompt('What is 2 + 2?'), 10);

switch (guess) {
    case 4:
        console.log('Well done!');
        break;
    case 3:
    case 5:
        console.log('Almost!');
        break;
    default:
        console.log('Seriously? No.');
        break;
}

JS 小提琴演示

或者,为了更实用:

function answerMath (sum) {
    var actual = eval(sum),
        guess = parseInt(prompt('What is ' + sum + '?'),10);
    if (guess === actual) {
        console.log('Well done!');
    }
    else if (guess + 1 === actual || guess - 1 === actual) {
        console.log('Almost!');
    }
    else {
        console.log('Seriously? No.');
    }
}

answerMath ('2*3');

JS 小提琴演示

请注意,虽然eval()是在这种情况下我能想到的将传递给函数的总和作为字符串评估的唯一方法,但我并不完全确定这是一个好的建议(尽管它的eval()坏消息可能比它应得的要多,尽管它确实如此目前的风险)。

于 2013-08-22T20:27:08.020 回答
1

在大多数编程语言中,=是赋值和==相等性测试。所以

a = 4将数字 4 分配给变量 a。但a == 4检查 a 是否等于 4。

因此,对于您的代码,您需要:

var input = "" || 'number'
prompt ("How many is 2+2 ?", input)
if (input == 4)
  print ("Awesome !");
else if (input == 3 || input == 5)
  print ("Close !");
else if (input == 'number')
  print ("wrong number");
else if (input == 'random text')
  print ("use numbers only!")
于 2013-08-22T20:26:21.477 回答
0

我将在 David Thomas 的答案的基础上再做一点,因为如果你想让它变得更好,你可以很容易地把它变成一个小游戏。

var numa = Math.round(Math.random() * (100 - 1) + 1);
var numb = Math.round(Math.random() * (100 - 1) + 1);
var answer = numa + numb;
var guess = parseInt(prompt('What is ' + numa + ' + ' + numb + '?'), 10);

switch (guess) {
    case answer:
        alert('Well done!');
        break;
    case (answer - 1):
    case (answer + 1):
        alert('Almost!');
        break;
    default:
        alert('Seriously? No.');
        break;
}

您可以做的进一步的事情是包括一个计时器,以查看用户回答问题所用的时间,并询问他们是否可以在正确时再次玩。

这是一个小提琴:http: //jsfiddle.net/6U6eN/

于 2013-08-22T20:33:53.157 回答