如何使用Javascript向用户随机询问数学问题?

如何使用Javascript向用户随机询问数学问题?,javascript,Javascript,如何使用Javascript向用户随机询问数学问题?如果用户回答正确,则支持程序说正确!如果答案是错误的,则支持程序说FALSE!我正在考虑使用if和else语句,但我不知道如何使用。另外,我正在考虑让程序向用户询问不同的随机数加法问题5次。最后,程序会给用户一个评分,比如4/5个问题回答正确!随机数范围:1-10 定义数组中可能的操作 随机选择其中一个操作 在某些限制范围内随机抽取两个数字(例如:0-30)(检查不可接受的情况,如10/0) 将用户输入与计算结果进行比较。如果浮动,则应用一个小

如何使用Javascript向用户随机询问数学问题?如果用户回答正确,则支持程序说正确!如果答案是错误的,则支持程序说FALSE!我正在考虑使用if和else语句,但我不知道如何使用。另外,我正在考虑让程序向用户询问不同的随机数加法问题5次。最后,程序会给用户一个评分,比如4/5个问题回答正确!随机数范围:1-10

  • 定义数组中可能的操作
  • 随机选择其中一个操作
  • 在某些限制范围内随机抽取两个数字(例如:0-30)(检查不可接受的情况,如10/0)
  • 将用户输入与计算结果进行比较。如果浮动,则应用一个小公差
  • 实现起来再简单不过了

    编辑提示:构造一个包含所有函数的对象并从中随机抽取。这样可以避免eval():

  • 定义数组中可能的操作
  • 随机选择其中一个操作
  • 在某些限制范围内随机抽取两个数字(例如:0-30)(检查不可接受的情况,如10/0)
  • 将用户输入与计算结果进行比较。如果浮动,则应用一个小公差
  • 实现起来再简单不过了

    编辑提示:构造一个包含所有函数的对象并从中随机抽取。这样可以避免eval():


    如果您对添加感到满意:

    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");