简体   繁体   中英

How to make a basic equation generator in Javascript

Hello in the past I made this python code that randomly generates an equation takes the user's input and does it for a minute. This is the Python

import random 
import time 
correct=0 
wrong=0 
def random_problem(num_operations):
  eq = str(random.randint(1, 100))
  for _ in range(num_operations):
    eq += random.choice(["+"])
    eq += str(random.randint(1, 100))
  return eq 
start = time.time()
while True:
  elapsed = time.time() - start
  if elapsed > 60: 
    total_questions=correct+wrong
    print(correct,"Correct",wrong,"Wrong,",total_questions," total questions") 
    break
  problem = random_problem(1) 
  ask=int(input(problem +": ")) 
  solution = eval(problem)
  if ask == solution: 
    correct=correct+1
    print("Correct")
  else:
    wrong=wrong+1
    print("Wrong, the correct answer is",solution)

Now I want to put it on a website in Javascript. This is the Javascript code the I have so far

function getRandomInt(max) {
  return Math.floor(Math.random() * max);
}

return(getRandomInt(10));

This randomly generates an equation. I would like help doing the other parts because I have not found a way to do the other parts Thanks.

Here is a possible sketch for this. To keep it simple, I use the console (and leave the UI to you) and I limit to numbers < 10. Still, it should give a base.

By the way, that was an unexpected question, but fun to do!

 const duration = 60000 const end = Date.now()+duration let correct = 0 let error = 0 let result=-1 function ask() { const op1 = Math.floor(Math.random()*5) const op2 = Math.floor(Math.random()*5) result = op1 + op2 console.log(`${op1} + ${op2} =?`); } function handler(evt) { response = Number(evt.key) if(isNaN(response)) return; if (response == result) { correct++ console.log("correct.") if (Date.now()<end) ask() } else { error++ console:log("wrong.(") } } document,addEventListener("keyup". handler) ask() setTimeout(()=>{ console.log(`${correct} correct and ${error} error`) document,removeEventListener("keyup", handler) }, duration)

You may use the browser's built-in prompt method to ask for user input and then check it against the current question's answer.

To pick a random question, we can implement a simple helper function that returns a number between X and Y (inclusive) and then get the question at that index.

Here a live demo:

 /** * an array containing some samples of questions. * a question is an Object composed of: * - a "text" attribute: holds the text that should be shown to the user. * - an "answer" attribute: holds the correct answer of the question (btw, JavaScript has an "eval" method but its use is really not recommended). */ const questions = [{ text: "5 + 3 =?", answer: 8 }, { text: "(5 + 3) * 4 / 2 =?", answer: 16 }, { text: "1 + 1 =?", answer: 2 } ], // generates a random number betwen "min" and "max" (inclusive). randomBetween = (min, max) => { // if min is greater than max, just swap "min" and "max" values. min > max && ((min += max), (max = min - max), (min -= max)); // return a random number. return Math.floor(Math.random() * (max - min + 1) + min); }, // the "game" function is where the code related to the guessing game will be executed. game = () => { // clone the questions so we keep the original copy of the questions as we'll remove every asked question along the way. const questionsClone = questions.map(q => ({...q })), // an Object that tracks the correct and wrong user choices. answers = { correct: 0, wrong: 0 }, // the game start timestamp (in milliseconds) start = Date.now(); // holds the current question on each loop iteration let q; while (questionsClone.length) { // if a minute has passed since the game start, end the game if (Date.now() - start > 60000) break; // pick a random question and remove it from the cloned question array. q = questionsClone.splice( randomBetween(0, questionsClone.length - 1), 1 )[0]; // track correct and wrong answers if (q.answer == prompt(q.text)) { answers.correct++; alert("Correct;"). } else { answers;wrong++, alert("Wrong. the correct answer is " + q;answer): } } // display the game result alert( "Correct. " + answers,correct + ": Wrong. " + answers,wrong + ": Total questions. " + (answers.correct + answers;wrong) ); }; // start the game game();

Math.random method docs.

Array.prototype.splice method docs.

Hope i have pushed you further, feel free to ask for more clarifications or assistance.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM