0

Javascriptを使用してユーザーにランダムな数学の質問をする方法は?ユーザーが正解した場合、プログラムは「正解」と言うはずです。答えが間違っている場合、プログラムはFALSEと言うことになっています!ifステートメントとelseステートメントを使用することを考えていますが、方法がわかりません。また、ユーザーに5回異なる乱数ADDITIONの質問をするようにプログラムを作成することを考えています。最後に、プログラムはユーザーに4/5の質問が正しく答えられるなどの評価を与えます!乱数範囲:1〜10

4

3 に答える 3

2
  1. 配列で可能な操作を定義する
  2. これらの操作のいずれかをランダムに実行します
  3. いくつかの制限 (例: 0-30) の間でランダムに 2 つの数値を取得します (10 / 0 のような受け入れられないケースを確認してください)
  4. ユーザー入力と計算結果を比較します。フロートの場合は、小さな公差を適用します。

実装は非常に簡単です。

編集のヒント: すべての関数を含むオブジェクトを作成し、そこからランダムに取得します。このようにして、eval() を回避します。

var operations = {
    '+': function (a, b) {return a + b;},
    '-': function (a, b) {return a - b;},
    '/': function (a, b) {return a / b;},
    'x': function (a, b) {return a * b;}
}
于 2013-03-10T11:41:15.320 に答える
2
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");
于 2013-03-10T11:42:37.090 に答える
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 を交換することです。

于 2013-03-10T11:41:29.833 に答える