基本代码战争挑战

时间:2017-01-30 07:12:52

标签: javascript if-statement

大家好,这是其中一个时代,解决方案正在盯着我,但我似乎无法找到它!所以请耐心等待我:说明如下:

完成该功能,以便找到传递给它的三个分数的平均值,并返回与该分数相关联的字母值。

数字分数字母等级

90 <= score <= 100  'A'
80 <= score < 90    'B'
70 <= score < 80    'C'
60 <= score < 70    'D'
0 <= score < 60 'F'

测试值均介于0和100之间。无需检查负值或大于100的值。

这是我的解决方案:

function getGrade (s1, s2, s3) {
  var score = (s1 + s2 + s3) / 3;
  if (90 <= score && score >= 100) {
      return 'A';
  } else if (80 <= score && score > 90) {
    return 'B';
  } else if (70 <= score && score > 80) {
    return 'C';
  } else if (60 <= score && score > 70) {
    return 'D';
  } else if (0 <= score && score > 60) {
    return 'F';
  }
}

getGrade(5,40,93);
getGrade(30,85,96);
getGrade(92,70,40);

不能为我的生活弄清楚我做错了什么。

4 个答案:

答案 0 :(得分:6)

你在if语句中的条件都是错误的。这些是正确的条件

function getGrade (s1, s2, s3) {
  var score = (s1 + s2 + s3) / 3;
  if (score >= 90 && score <= 100) {
      return 'A';
  } else if (score >= 80 && score < 90) {
    return 'B';
  } else if (score >= 70&& score < 80) {
    return 'C';
  } else if (score >= 60  && score < 70) {
    return 'D';
  } else {
    return 'F';
  }
}

答案 1 :(得分:3)

您的条件有误,如果您的代码改为此,则不需要进行多次检查:

&#13;
&#13;
function getGrade (s1, s2, s3) {
  var score = (s1 + s2 + s3) / 3;
  if (score >= 90 && score <= 100) {
      return 'A';
  } else if (score >= 80 ) {
    return 'B';
  } else if (score >= 70 ) {
    return 'C';
  } else if (score >= 60) {
    return 'D';
  } else{
    return 'F';
  }
}

console.log(getGrade(5,40,93));
console.log(getGrade(30,85,96));
console.log(getGrade(92,70,40));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您只能使用if个没有else部分的子句,并且只检查下限,因为您已经检查了上限。

缺少检查上方100,因为您的给定范围介于0100之间。

function getGrade(s1, s2, s3) {
    var score = (s1 + s2 + s3) / 3;
    if (score >= 90) {
        return 'A';
    }
    if (score >= 80) {
        return 'B';
    }
    if (score >= 70) {
        return 'C';
    }
    if (score >= 60) {
        return 'D';
    }
    return 'F';
}

console.log(getGrade(5, 40, 93));
console.log(getGrade(30, 85, 96));
console.log(getGrade(92, 70, 40));

答案 3 :(得分:0)

每当发现自己编写if-else语句的长链时,请查看是否可以找到模式并使用查找表。在这里,我们只有5个等级的水桶,但是如果我们有20或100个水桶呢?您会看到if-else方法不可扩展。

在这种情况下,如果我们使用字符串"FFFFFFDCBAA",那么我们以将分数除以10后可以索引的方式枚举了所有5个等级的存储桶。该代码为:{{ 1}},其中"FFFFFFDCBAA"[score/10|0]是下限运算,将小数点切掉。多余的| 0处理的是100。

第二,函数"A"的参数没有意义。为什么要得分3?如果我们有4分或20分,则无法使用该函数,而我们必须用正确数量的参数重写整个函数(而20个参数中的一个非常丑陋)。我知道这个标题是kata作者给您的,但是没有理由我们不能使它使用(s1, s2, s3)处理任何数量的参数并仍然通过测试。如果我们使用(...args)取参数的平均值,则剩下以下解决方案:

args.reduce((a, e) => a + e, 0) / args.length