Как мне заставить это приложение терминала пройти тест узла? - PullRequest
0 голосов
/ 26 октября 2019

Итак, это небольшая терминальная игра, ножницы из каменной бумаги, и мне нужна помощь в написании оставшегося кода, чтобы он мог пройти мои тесты узлов. Я смог написать код и ввести решение для hand1 и hand2 и получить результат, показывающий, кто победил, но он не пройдет тесты узлов, когда я их запускаю.

Тест узлов обнаруживает "tie "как правильно, но не определяет выигранные руки или ввод скраба как правильный, но все это работает, когда я использую его в терминале. Вот изображение того, что говорит тест узла

Код, который нужно переписать, находится внутри функции rockPaperScissors (hand1, hand2) ниже

    'use strict';

const assert = require('assert');
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});


function rockPaperScissors(hand1, hand2) {

  if (hand1 === hand2) {
    return "It's a tie!";
  } else if (hand1 === 'rock') {
    if (hand2 === 'paper') {
      return "Hand two wins!";
    } else if (hand2 === 'scissors') {
      return "Hand one wins!";
    } 
  }

  if (hand1 === 'paper') {
    if (hand2 === 'rock') {
      return "Hand one wins!";
    } else if (hand2 === 'scissors') {
      return "Hand two wins!";
    }
  }

  if (hand1 === 'scissors') {
    if (hand2 === 'paper') {
      return "Hand one wins!";
    } else if (hand2 === 'rock') {
      return "Hand two wins!";
    }
  }




}











function getPrompt() {
  rl.question('hand1: ', (answer1) => {
    rl.question('hand2: ', (answer2) => {
      console.log( rockPaperScissors(answer1, answer2) );
      getPrompt();
    });
  });
}

// Tests

if (typeof describe === 'function') {

  describe('#rockPaperScissors()', () => {
    it('should detect a tie', () => {
      assert.equal(rockPaperScissors('rock', 'rock'), "It's a tie!");
      assert.equal(rockPaperScissors('paper', 'paper'), "It's a tie!");
      assert.equal(rockPaperScissors('scissors', 'scissors'), "It's a tie!");
    });
    it('should detect which hand won', () => {
      assert.equal(rockPaperScissors('rock', 'paper'), "Hand two wins!");
      assert.equal(rockPaperScissors('paper', 'scissors'), "Hand two wins!");
      assert.equal(rockPaperScissors('rock', 'scissors'), "Hand one wins!");
    });
    it('should scrub input to ensure lowercase with "trim"ed whitepace', () => {
      assert.equal(rockPaperScissors('rOcK', ' paper '), "Hand two wins!");
      assert.equal(rockPaperScissors('Paper', 'SCISSORS'), "Hand two wins!");
      assert.equal(rockPaperScissors('rock ', 'sCiSsOrs'), "Hand one wins!");
    });
  });
} else {

  getPrompt();

}

1 Ответ

0 голосов
/ 27 октября 2019

Вам необходимо обрезать и в нижнем регистре значения hand1 и hand2 параметров:

function rockPaperScissors(hand1, hand2) {
  hand1 = hand1.trim().toLowerCase();
  hand2 = hand2.trim().toLowerCase();
  ...

обрезка функция удаления лишних пробелов из текста. toLowerCase Функция преобразования всех символов в нижний регистр.

теперь ваша rockPaperScissors функция выглядит следующим образом:



function rockPaperScissors(hand1, hand2) {
  hand1 = hand1.trim().toLowerCase();
  hand2 = hand2.trim().toLowerCase();

  if (hand1 === hand2) {
    return "It's a tie!";
  } else if (hand1 === 'rock') {
    if (hand2 === 'paper') {
      return "Hand two wins!";
    } else if (hand2 === 'scissors') {
      return "Hand one wins!";
    } 
  }

  if (hand1 === 'paper') {
    if (hand2 === 'rock') {
      return "Hand one wins!";
    } else if (hand2 === 'scissors') {
      return "Hand two wins!";
    }
  }

  if (hand1 === 'scissors') {
    if (hand2 === 'paper') {
      return "Hand one wins!";
    } else if (hand2 === 'rock') {
      return "Hand two wins!";
    }
  }




}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...