如何使用Javascript向用户随机询问数学问题?
如何使用Javascript向用户随机询问数学问题?如果用户回答正确,则支持程序说正确!如果答案是错误的,则支持程序说FALSE!我正在考虑使用if和else语句,但我不知道如何使用。另外,我正在考虑让程序向用户询问不同的随机数加法问题5次。最后,程序会给用户一个评分,比如4/5个问题回答正确!随机数范围:1-10如何使用Javascript向用户随机询问数学问题?,javascript,Javascript,如何使用Javascript向用户随机询问数学问题?如果用户回答正确,则支持程序说正确!如果答案是错误的,则支持程序说FALSE!我正在考虑使用if和else语句,但我不知道如何使用。另外,我正在考虑让程序向用户询问不同的随机数加法问题5次。最后,程序会给用户一个评分,比如4/5个问题回答正确!随机数范围:1-10 定义数组中可能的操作 随机选择其中一个操作 在某些限制范围内随机抽取两个数字(例如:0-30)(检查不可接受的情况,如10/0) 将用户输入与计算结果进行比较。如果浮动,则应用一个小
如果您对添加感到满意:
function question() {
this.a = Math.round(Math.random()*10);
this.b = Math.round(Math.random()*10);
this.result = this.a + this.b;
this.checkResult = function(givenResultString) {
return (""+result == givenResultString);
}
}
然后,您每次都可以使用以下工具创建一个问题:
var q = new question();
并检查答案:
var response = q.checkResult(someString) ? "Correct!" : "FALSE!";
剩下的工作是页面的机制,您可以使用表单和结果div
如果要添加更多操作,请选择随机运算符和随机输入:
function question() {
var add(x, y) { return x+y; };
var subtract(x, y) { return x-y; };
var multiply(x, y) { return x*y };
var operators = [add, subtract, multiply];
this.a = Math.round(Math.random()*10);
this.b = Math.round(Math.random()*10);
var operatorIdx = Math.min(Math.floor(Math.random()*4),3);
this.operator = operators[operatorIdx];
this.result = operator(this.a,this.b);
this.checkResult = function(givenResultString) {
return (""+this.result == givenResultString);
}
}
我在这里省略了除法,因为其余的都假定为整数,您必须更改初始化,以防止除法生成分数值。简单的方法是初始化一个乘法,然后交换结果和a 如果您对添加感到满意:
function question() {
this.a = Math.round(Math.random()*10);
this.b = Math.round(Math.random()*10);
this.result = this.a + this.b;
this.checkResult = function(givenResultString) {
return (""+result == givenResultString);
}
}
function ask() {
var a = Math.floor(Math.random() * 10) + 1;
var b = Math.floor(Math.random() * 10) + 1;
var op = ["*", "+", "/", "-"][Math.floor(Math.random()*4)];
return prompt("How much is " + a + " " + op + " " + b + "?") == eval( a + op + b);
}
var questions = [ask(), ask(), ask(), ask(), ask()],
total = questions.length,
correct = questions.filter(Boolean).length;
alert( "You got "+correct+"/"+total+" correctly");
然后,您每次都可以使用以下工具创建一个问题:
var q = new question();
并检查答案:
var response = q.checkResult(someString) ? "Correct!" : "FALSE!";
剩下的工作是页面的机制,您可以使用表单和结果div
如果要添加更多操作,请选择随机运算符和随机输入:
function question() {
var add(x, y) { return x+y; };
var subtract(x, y) { return x-y; };
var multiply(x, y) { return x*y };
var operators = [add, subtract, multiply];
this.a = Math.round(Math.random()*10);
this.b = Math.round(Math.random()*10);
var operatorIdx = Math.min(Math.floor(Math.random()*4),3);
this.operator = operators[operatorIdx];
this.result = operator(this.a,this.b);
this.checkResult = function(givenResultString) {
return (""+this.result == givenResultString);
}
}
我在这里省略了除法,因为其余的都假定为整数,您必须更改初始化,以防止除法生成分数值。简单的方法是初始化一个乘法,然后交换结果和a 我想你需要一些数学验证码,也许这篇文章或这篇文章对你有帮助。我想你需要一些数学验证码,也许这篇文章或这篇文章对你有帮助。你为什么要使用
new
?什么是q.checkResult
?@Bergi:question
现在是一个对象原型,因此q=new question()
应该生成一个新问题,其中包含新的a
和b
值。您可以使用q.checkResult
和提供的字符串检查此问题的结果。从你的声誉来看,我想你知道这一点,那么你指出了什么?不,你似乎不知道如何编写构造函数和如何使用原型。@Bergi:谢谢你的输入,我已经修改了答案。最近C++的时间太多了。如果在评论中有一些提示,我会更快到达那里,但这一点是正确的。谢谢,现在好多了。尽管如此,您仍然可以使用原型:-)顺便说一句,您的Math.min
和Math.round
对于Math.random
的奇怪组合会导致非常有偏见的运算符选择。为什么要使用new
?什么是q.checkResult
?@Bergi:question
现在是一个对象原型,因此q=new question()
应该生成一个新问题,其中包含新的a
和b
值。您可以使用q.checkResult
和提供的字符串检查此问题的结果。从你的声誉来看,我想你知道这一点,那么你指出了什么?不,你似乎不知道如何编写构造函数和如何使用原型。@Bergi:谢谢你的输入,我已经修改了答案。最近C++的时间太多了。如果在评论中有一些提示,我会更快到达那里,但这一点是正确的。谢谢,现在好多了。不过,您可以使用原型:-)顺便说一句,您的Math.min
和Math.round
对于Math.random
会导致非常有偏见的运算符选择。我认为问题。reduce(函数(a,b){return a+b},0)
看起来会更好:-)您想让我取消对此的投票吗?:-)是的,虽然xDI认为问题是安全的。reduce(函数(a,b){return a+b},0)
看起来会更好:-)你想让我删除我的投票吗?:-)是的,虽然xD在这里评估是安全的
function ask() {
var a = Math.floor(Math.random() * 10) + 1;
var b = Math.floor(Math.random() * 10) + 1;
var op = ["*", "+", "/", "-"][Math.floor(Math.random()*4)];
return prompt("How much is " + a + " " + op + " " + b + "?") == eval( a + op + b);
}
var questions = [ask(), ask(), ask(), ask(), ask()],
total = questions.length,
correct = questions.filter(Boolean).length;
alert( "You got "+correct+"/"+total+" correctly");