Моя функция всегда скажет мне, что я неправильно понял мой вопрос.Зачем? - PullRequest
0 голосов
/ 24 мая 2019

Я сделал функцию, которая будет проверять вас на Пи.За каждую правильную цифру вы получаете половину балла.Однако, даже если я просто наберу «3», он скажет, что я сделал это неправильно.Пожалуйста, помогите.

function pi() {
  var piWithoutDecimals = 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
  var yourAnswer = prompt("Pi Bonus! Half of a point for every digit of pi that you can write from memory!");
  var yourAnswerNum = parseInt(yourAnswer);
  var yourAnswerMultiplier = yourAnswerNum.toString().split(".");
  var yourAdjustedAnswer = yourAnswerNum*(10**parseInt(yourAnswerMultiplier));
  var yourAdjustedAnswerCount = yourAdjustedAnswer.toString().length;
  var yourSectionOfpiWithoutDecimals = piWithoutDecimals.toString().substring(0,parseInt(yourAdjustedAnswer-1));
  if(yourSectionOfpiWithoutDecimals==yourAnswerNum) {
    alert("Nice!! You listed "+yourAdjustedAnswerCount+" digits of Pi, and so you get "+Math.floor((yourAdjustedAnswerCount)/2)+" points!")
    points+=Math.floor((yourAdjustedAnswerCount)/2);
  } else { alert("Good try, but you got one or more digits incorrect.") }
}

pi()

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Сначала вы ошибетесь в этой строке:

var yourAnswerMultiplier = yourAnswerNum.toString().split(".");

Если вы зарегистрируете это значение, например, для ввода "314", вы получите массив ["314"] (ваш, вероятно, требуемый .split("")),Переходя оттуда, yourAdjustedAnswer будет бесконечностью (так как 10 ** 314 слишком велико и просто переполняется).Это терпит неудачу, что явно не то, что вы хотели.

В качестве рекомендации попробуйте выполнить пошаговое выполнение для простого примера, используя инструменты разработчика вашего браузера / IDE, и внимательно посмотрите, соответствует ли каждый шаг вашим ожиданиям..

@ Ответ Орхана Алиханова также может дать некоторые подсказки.

    function pi() {
      var piWithoutDecimals = 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
      var yourAnswer = prompt("Pi Bonus! Half of a point for every digit of pi that you can write from memory!");
      var yourAnswerNum = parseInt(yourAnswer);
      var yourAnswerMultiplier = yourAnswerNum.toString().split(".");
      var yourAdjustedAnswer = yourAnswerNum*(10**parseInt(yourAnswerMultiplier));
      console.log(yourAdjustedAnswer)
      var yourAdjustedAnswerCount = yourAdjustedAnswer.toString().length;
      var yourSectionOfpiWithoutDecimals = piWithoutDecimals.toString().substring(0,parseInt(yourAdjustedAnswer-1));
      if(yourSectionOfpiWithoutDecimals==yourAnswerNum) {
        alert("Nice!! You listed "+yourAdjustedAnswerCount+" digits of Pi, and so you get "+Math.floor((yourAdjustedAnswerCount)/2)+" points!")
        points+=Math.floor((yourAdjustedAnswerCount)/2);
      } else { alert("Good try, but you got one or more digits incorrect.") }
    }

    pi()
0 голосов
/ 24 мая 2019

У вас может быть простой подход.

  1. Определите ваш пи в строке
  2. Возьмите пользовательский ввод
  3. Проверьте, начинается ли ваша строка пи с того, что пользователь имеет ввод
  4. Удалить десятичную точку., и длина счета, чтобы получить количество правильно введенных цифр.
  5. Показать вывод вашей викторины

function pi() {
  const pi = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";
  const yourAnswer = prompt("Pi Bonus! Half of a point for every digit of pi that you can write from memory!");
  if(pi.startsWith(yourAnswer)) {
    const yourAdjustedAnswerCount = yourAnswer.replace('.', '').length;
    alert(`Nice!! You listed ${yourAdjustedAnswerCount} digits of Pi, and so you get ${Math.floor(yourAdjustedAnswerCount / 2)} points!`)

  } else { 
    alert("Good try, but you got one or more digits incorrect.")
  }
}

pi()
...