मैं एक छोटा यादृच्छिक प्रश्नोत्तरी जनरेटर बनाने की कोशिश कर रहा हूं, पहले सरणी में प्रश्न हैं और वे यादृच्छिक रूप से प्रदर्शित होते हैं (जब पृष्ठ लोड होता है या जब पृष्ठ रीफ्रेश होता है), दूसरी सरणी में उत्तर होते हैं।

अब, जब उपयोगकर्ता ने कोई उत्तर टाइप किया है, यदि वह उत्तर उत्तरों की सरणी से है, तो the correct संदेश दिखाया जाता है, भले ही वह उस प्रश्न के लिए सही न हो, और यदि उत्तर उत्तरों की सरणी से नहीं है, the not correct संदेश दिखाया गया है।

मुझे इसे हल करने के लिए एक कोड की आवश्यकता है (मैं इसे if...else और || और && ऑपरेटरों के साथ कर सकता हूं, लेकिन 5 से अधिक प्रविष्टियों के लिए कोड बहुत लंबा और बनाए रखने में बहुत कठिन हो जाता है) जावास्क्रिप्ट और एचटीएमएल कोड के नीचे

//reload whole page
function refreshMe() {
    window.location='index.html';
}

const myQs = [
    "How many sides has a hexagon", // must always be the first answer from myRs array
    "A circle has...degrees?", // must always be the second answer from myRs array
    "2^3=...?",
    "2+2:2=..?",
    "A triangle has....degrees?",
    "Square root of 2 is...?" // to be extend up to 500 entries
];


let randomItem = myQs[Math.floor(Math.random()*myQs.length)];

document.getElementById("demo").innerHTML = randomItem;

function userAnswer() {
    const check = document.getElementById('answer').value;

    const myRs = [
        "6",
        "360",
        "8",
        "3",
        "180",
        "1.41"
    ];
    // the difference between 0 and -1?
    if (myRs.indexOf(check) > -1) {
        sayMessage = check + "  is the correct answer!";
    } else {
        sayMessage = check + "  is not the correct answer....";
    }
    document.getElementById("userA").innerHTML = sayMessage;
};

एक यादृच्छिक प्रश्न के लिए, अब प्रत्येक उत्तर सही है, यदि myRs में से कोई उत्तर टाइप किया गया है, तो संदेश is not correct। मुझे एक कोड की आवश्यकता है ताकि myQs सरणी के प्रश्न myRs सरणी से अपने स्वयं के उत्तर से मेल खा सकें, सरणी में समान अनुक्रमणिका, पहले प्रश्न का पहला उत्तर हो, और इसी तरह।

मैं इसे अगर...else और के साथ कर सकता हूं || और && ऑपरेटर, लेकिन 5 से अधिक प्रविष्टियों के लिए कोड बहुत लंबा और इसे बनाए रखने के लिए बहुत कठिन हो जाता है।

 <p> The question of the moment...</p>
 <p id="demo"></p>

 <button onclick="refreshMe()">Next one&nbsp;</button><br><br>
 <input name="answer" type="text" placeholder="Your answer is....."     id="answer">
 <br><br>
 <button onclick="userAnswer()">Check answer</button>
 <p id="userA"></p>
1
mrs68tm 29 मार्च 2018, 12:36

2 जवाब

सबसे बढ़िया उत्तर

अभी आपके पास दो सूचियां हैं। एक में प्रश्न हैं, दूसरे में उत्तर हैं:

var questions = [ "2 + 2", "2 + 1", "1 + 1" ];
var answers = [ "4", "3", "2" ];

अपने उपयोगकर्ता इनपुट को आसानी से जांचने के लिए, इस डेटा संरचना को किसी ऑब्जेक्ट में कनवर्ट करना एक अच्छा विचार है जिसमें प्रश्न कुंजी है, और उत्तर मान है।

ध्यान दें कि इसके लिए आपके प्रश्न और उत्तर संयोजनों का अद्वितीय होना आवश्यक है। यानी: एक प्रश्न के एकाधिक उत्तर नहीं हो सकते हैं

var questionsWithAnswers = {
  "2 + 2": "4",
  // etc.
}

आप डेटा को जावास्क्रिप्ट में परिवर्तित कर सकते हैं, इसलिए आपको सूचियों को फिर से लिखने की आवश्यकता नहीं है:

var questionsWithAnswers = {};
for (let i = 0; i < questions.length; i += 1) {
  questionsWithAnswers[question[i]] = answers[i];
}

अब, एक प्रश्न के लिए आपका चेक है:

var answerIsCorrect = questionsWithAnswers[question] === userInput;
1
user3297291 29 मार्च 2018, 10:01

सबसे पहले, आप समझते हैं कि JS में एक प्रश्न और उत्तर उपलब्ध होना एक अच्छा विचार नहीं है, क्योंकि उपयोगकर्ता कोड देख सकता है।

वैसे भी, मैं प्रश्नों को जोड़ूंगा और एक संरचना में उत्तर दूंगा।

var QAs = [["How many sides has a hexagon", "6"],
    ["A circle has...degrees?", "360"]]; // and so on
let randomItem = QAs[Math.floor(Math.random()*myQs.length)];

document.getElementById("demo").innerHTML = randomItem[0];

function userAnswer() {
    const check = document.getElementById('answer').value;
    if (check == randomItem[1]) {  // check randomItem availability in this scope. otherwise save to to window.randowItem scope.
        sayMessage = check + "  is the correct answer!";
    } else {
        sayMessage = check + "  is not the correct answer....";
    }
    document.getElementById("userA").innerHTML = sayMessage;
}
1
andnik 29 मार्च 2018, 10:04