【问题标题】:Solving random numbers and random variables from array Javascript从数组Javascript中解决随机数和随机变量
【发布时间】:2016-10-20 16:56:14
【问题描述】:
window.onload = start;
var nr1 = Math.floor(Math.random()*50);
var nr2 = Math.floor(Math.random()*50);
var eq1 = nr1 +"+"+nr2;
var eq2 = nr1 + "-"+ nr2;
var eq3 = nr1 +"*"+ nr2;
var eq4 = nr1 +"/"+ nr2;

var arr = [eq1,eq2,eq3,eq4];
var eq = arr[Math.floor(Math.random()*arr.length),Math.floor(Math.random()*arr.length)];

我想练习一些东西,制作一个基本的数学游戏。上面是我试图用来生成随机数和随机方程的代码,我想从我的 html 中得出这些代码。我之所以为运算符使用“”是因为我希望整个方程式以文本形式出现,我已经尝试过没有“”标记,我只是立即得到答案。

function start() {
document.getElementById("submit").onclick = submitans;
document.getElementById("question").innerHTML = eq;
}

这是我生成方程式的启动函数。现在如果你看这张照片,这在 html 中效果很好—— HTML。我的问题是,我不知道如何将方程连接到输入框中的“if(statement)”。因为脚本将命令读取为文本,所以即使我写也不行

   function submitans() {

    var correct = "Correct!";
    var wrong = "Wrong";      
    var inn = parseInt(document.getElementById("answer").value);

    for (var i = 0; i < eq.length; i++) {
       if(inn === eq[i])
        document.getElementById("input").innerHTML = "correct";
     }
  }

无论如何我可以从这个脚本中达到我想要的目标吗?我坚持使用纯 JavaScript,因为我只是一个初学者,我真的很想学习它。所以我宁愿不使用jquery。

除此之外,我打算让我的脚本显示每个正确答案的得分,我认为目标最多有 10 个正确答案,并且允许用户有 5 个错误。

【问题讨论】:

    标签: javascript random numbers equation


    【解决方案1】:

    在代码的第一个 sn-p 中,您可以为每个方程式添加答案

    var eq1 = nr1 +"+"+nr2;
    var eq2 = nr1 + "-"+ nr2;
    var eq3 = nr1 +"*"+ nr2;
    var eq4 = nr1 +"/"+ nr2;
    //answers
    var ans1 = nr1 +"+"+nr2;
    var ans2 = nr1 + "-"+ nr2;
    var ans3 = nr1 +"*"+ nr2;
    var ans4 = nr1 +"/"+ nr2;
    

    然后当你得到随机方程时,你也会得到答案

    var arr = [eq1,eq2,eq3,eq4];
    var ansArr = [ans1, ans2, ans3, ans4];
    var eqNumber = Math.floor(Math.random()*arr.length);
    var eq = arr[eqNumber];
    var ans = ansArr[eqNumber];
    

    然后像这样编辑最后一个sn-p

    function submitans() {
        var correct = "Correct!";
        var wrong = "Wrong";      
        var inn = parseInt(document.getElementById("answer").value);
    
        //for (var i = 0; i < eq.length; i++) {//delete
           if(inn == ans)
            document.getElementById("input").innerHTML = correct;
           else
            document.getElementById("input").innerHTML = wrong;
        //}//delete
     }
    

    ----------------------------------------------- ----------------------------------

    或者除了所有这些,您也只能像这样更改代码的最后一个 sn-p

    function submitans() {
        var correct = "Correct!";
        var wrong = "Wrong";      
        var inn = parseInt(document.getElementById("answer").value);
    
        //for (var i = 0; i < eq.length; i++) {//delete
           if(inn == eval(eq))
            document.getElementById("input").innerHTML = correct;
           else
            document.getElementById("input").innerHTML = wrong;
        //}//delete
     }
    

    eval 会将文本作为 javascript 运行,它会返回等式的答案。

    【讨论】:

    • 带有 eval(eq) 的那个适用于我的代码。但是你提到的第一个没有,答案总是错误的。感谢您的帮助!
    • 我想知道的还有一件事,关于除法,我如何使用 toFixed(2) 仅用 2 个小数点回答它?
    【解决方案2】:

    您也可以使用 eval 函数来获得答案。 var answer = eval(document.getElementById("question").innerHTML)获取正确答案

    【讨论】:

      【解决方案3】:

      我会改变你管理方程式的方式......也许这样的东西可能有用:

      function eq(x, y, op){
          // Find the result depending on the operation
          var res;
          switch (op){
              case: '+':
                  res = x + y;
                  break;
              case: '-':
                  res = x - y;
                  break;
              case: '*':
                  res = x * y;
                  break;
              case: '/':
                  res = x / y;
                  break;
              default:
                  throw "Error";
          }
          // Or something like is more compact
          var res2 = op == '+' ? x+y : op == '-' ? x-y : op == '*' ? x*y : op == '/' ? x/y : null;
      
          return {
              text: x + op + y,
              res: res
          }
      }
      
      // ...
      var eq1 = eq(nr1, nr2, '+');
      var eq2 = eq(nr1, nr2, '-');
      var eq3 = eq(nr1, nr2, '*');
      var eq4 = eq(nr1, nr2, '/');
      

      然后您只需在 HTML 中显示 eq.text 并检查 eq.res 以与答案进行比较...也许您可以做一些更好的事情,但它应该可以工作

      【讨论】:

        【解决方案4】:

        eval() 应该很好用,试试这个:

        function submitans() {
            var correct = "Correct!";
            var wrong = "Wrong";      
            var inn = parseInt(document.getElementById("answer").value);
        
            if(inn === eval(document.getElementById("question").innerHTML))
                document.getElementById("input").innerHTML = correct;
            else 
                document.getElementById("input").innerHTML = wrong;     
        }
        

        【讨论】:

          【解决方案5】:

          parseInt 和 Number 有区别

          var inn = parseInt(document.getElementById("answer").value);
          var inn = Number(document.getElementById("input").value);
          

          ==========================

          eval() 你需要小心。更重要的是 javascript 将如何解释给定的字符串

          var ans1 = eval( 4-3/2*39+3)
          

          添加括号将确保您获得正确的结果,您希望 evel() 返回答案。

          var ans2 = eval( (4-((3/2)*39))+3 );
          
          var ans3 = eval(document.getElementById("equation").value);
          

          很可能会像 ans1 一样返回,小心!

          解决上述问题...

          var eq1a = nr1 +"+"+nr2;
          var eq1b = nr1 + nr2
          var eq2a = nr1 + "-"+ nr2; 
          var eq2b = nr1 - nr2
          var eq3a = nr1 +"*"+ nr2;
          var eq3b = nr1 * nr2
          var eq4a = nr1 +"/"+ nr2;
          var eq4b = nr1 / nr2
          

          上面很简单.....

          下一步

          var eq1 = "nr1 + nr2"
          var eq2 = "nr1 - nr2"
          var eq3 = "nr1 * nr2"
          var eq4 = "nr1 / nr2"
          

          上面是你可以做的字符串...

          var nr1 = Math.floor(Math.random()*50);
          var nr2 = Math.floor(Math.random()*50);
          var eq1 = "nr1 + nr2"
          document.getElementById("equation").innerHTML = eq1;
          //and it will show correctly.
          var ans = eval(eq1); 
          // and it will give you the answer
          

          并且更进一步......

          var eq1 = "((nr1 + nr2) * 4 / 4)"
          document.getElementById("equation").innerHTML = eq1.regex();
          var ans = eval(eq1);
          

          我忘记了需要在 regex() 括号中放置什么以删除 ( 和 ) 括号。所以它不会将它们打印到方程式 html 元素中。

          =====================

          如果应用程序是关键应用程序,请小心使用 eval()。您的应用程序可能会很快被黑客入侵。

          【讨论】:

          • www.moodle.org php LMS(学习管理系统)有一些我上次检查时内置的各种游戏,刽子手,拼字游戏,以及相当便宜的小游戏。可能适合您,kongregate.com 也有一些用于打字/拼写的“学习”html5 游戏和一些数学游戏。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-20
          • 1970-01-01
          • 2016-11-25
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          相关资源
          最近更新 更多