我正试图从一本书中写下这个练习:
编写程序问自己,使用提示符,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
条件,将基于输入的类型。
我知道运动没有问过,但我想让它变得更好。
答案 0 :(得分: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!");
答案 1 :(得分: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;
}
或者,更具功能性:
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');
请注意,虽然eval()
只是 意味着我可以想到在这种情况下评估作为字符串传递给函数的总和,我不完全确定它是好的推荐(尽管eval()
的压力比它应得的压力更大,但 存在风险)。
答案 2 :(得分: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!")
答案 3 :(得分:0)
我将以大卫托马斯的答案为基础,因为如果你想让它变得更好,你可以很容易地把它变成一个小游戏。
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/