for文とif文を組み合わせたクイズアプリ


JavaScriptの課題でfor文とif文を組み合わせたクイズアプリを製作しています。

処理の流れは以下のようなものを作りたいです。

  1. alertで１から５までの数値を当てるよう指示する（答えは2）
  2. okを押すとpromptで1から5までのどれかを入力するよう出てくる
  3. 外れると、間違っているので再度答えを入力するようにというpromptが出てくる
  4. 当たればalertで「おめでとう！」などのメッセージが現れゲームが終了する

for文についてどうしても理解が追いつかないのですが、for文は繰り返す回数が決まっている時に使うものですよね？この課題の場合確かに選択肢は5つしかないですが、2が当たるまでは無限に続くはずですよね？それをどうやってfor文で表せばいいのかさっぱりわかりません。  
またfor/for in/for ofのどれを使うべきなのかも不明です…

そして今のコードのままだと、何を入力しても `prompt ('Please guess 1 to 5!')` が表示される状況になっています。

いつもはメンターの方がいらっしゃるのですがその方がホリデーでいらっしゃらず、どなたかお力貸していただけると幸いです。よろしくお願いします。

下に自力で書いてみたコードがありますが全然違う気がしてるので都度指摘して頂けると助かります。

[code]

    // alertで'You got 5 guesses. Guess 1 to 5'と言うメッセージを表示させ、１から５までの数値を当てるよう指示する。
            alert ('You got 5 guesses. Guess 1 to 5');
    
    // 答えの数値を2で用意
            let correctAnswer = 2;
            let wrongAnswers = [1, 3, 4, 5]
    
    // promptで'What do you guess?'と言うメッセージとともに、記入欄を表示させる
            let result = prompt('What do you guess?');
            console.log(result);
    
    // forループで１から５までの数値で、答えの2が当たるまで推測を促すpromptを表示させる。
    // ヒント１：if文とも組み合わせて、推測が当たった場合はalertで'Good job! See what happens next :)'を表示。当たったらゲーム終了にする。
    // ヒント２：外れたらpromptで'Ops! Maybe, another try?'のメッセージとともに記入欄を表示。
    
            for (;;) {
                if (result === correctAnswer) {
                    alert ('Good job! See what happens next :)');
                    break;
                } else if (result === wrongAnswers) {
                    prompt ('Ops! Maybe, another try?');
                } else {
                    prompt ('Please guess 1 to 5!')
                }
            }
[/code]




この課題は、JavaScriptの`for`を理解するための良い課題だと思います。初心者には「for文は繰り返す回数が決まっている時に使うもの」と思われがちですが、そうではありません。

[MDNのforの説明](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for)では、以下のようになっています。

> for 文はループを作ります。丸括弧で囲まれセミコロンで分けられた、3 つの省略可能な式と、その後にループ内で実行される文が構成されます。
>
> 構文  
>  for ([initialization]; [condition]; [final-expression]) statement

それで、`for(;;)`と式を全て省略すれば、`while(true)`と同じになるし、`for(; a >
0;)`と条件のみを記述すれば、`while(a > 0)`と同じになります。普通に考えているよりも`for`は弾力的に使うことができます。

`for`には初期化と条件の式を書くことができるので、次のようなコードにしてみたらどうでしょうか。

[code]

    alert ('You got 5 guesses. Guess 1 to 5');
    let correctAnswer = '2';
    let wrongAnswers = ['1', '3', '4', '5'];
    
    for (let result = prompt('What do you guess?'); result !== correctAnswer;) {
        if(result in wrongAnswers) {
            result = prompt('Ops! Maybe, another try?');
        } else {
            result = prompt('Please guess 1 to 5!');
        }
    }
    
    alert('Good job! See what happens next :)');
[/code]




この課題は、JavaScriptの`for`を理解するための良い課題だと思います。初心者には「for文は繰り返す回数が決まっている時に使うもの」と思われがちですが、そうではありません。

[MDNのforの説明](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for)では、以下のようになっています。

> for 文はループを作ります。丸括弧で囲まれセミコロンで分けられた、3 つの省略可能な式と、その後にループ内で実行される文が構成されます。
>
> 構文  
>  for ([initialization]; [condition]; [final-expression]) statement

それで、`for(;;)`と式を全て省略すれば、`while(true)`と同じになるし、`for(; a >
0;)`と条件のみを記述すれば、`while(a > 0)`と同じになります。普通に考えているよりも`for`は弾力的に使うことができます。

`for`には初期化と条件の式を書くことができるので、次のようなコードにしてみたらどうでしょうか。

[code]

    alert ('You got 5 guesses. Guess 1 to 5');
    let correctAnswer = '2';
    let wrongAnswers = ['1', '3', '4', '5'];
    
    for (let result = prompt('What do you guess?'); result !== correctAnswer;) {
        if(result in wrongAnswers) {
            result = prompt('Ops! Maybe, another try?');
        } else {
            result = prompt('Please guess 1 to 5!');
        }
    }
    
    alert('Good job! See what happens next :)');
[/code]

