这是其中的一个时候,解决方案是盯着我的权利,在脸上,但我似乎找不到它!所以请对我耐心点。kata instruction如下:
完成该函数,以便它找到传递给它的三个分数的平均值,并返回与该等级相关联的字母值。
Numerical Score Letter Grade
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条答案
按热度按时间jchrr9hc1#
你在if语句中的条件全错了。这些都是合适的条件
sycxhyv72#
你的条件是错误的,你不需要在同一个if中进行多次检查。将你的代码改为:
np8igboo3#
您可以只使用
if
子句而不使用else
部分,并且只检查下限,因为您已经检查了上限。由于给定的范围介于
0
和100
之间,因此缺少对上限100
的检查。klh5stk14#
每当你发现自己在写一长串
if
-else
语句时,看看你是否能找到一个模式并使用一个查找表。在这里,我们只有5个等级桶,但如果我们有20个或100个呢?您可以看到if
-else
方法是不可扩展的。在本例中,如果我们使用字符串
"FFFFFFDCBAA"
,那么我们已经枚举了所有5个等级桶,让我们在将分数除以10后索引到。代码如下:"FFFFFFDCBAA"[score/10|0]
其中| 0
是取整运算,去掉小数。额外的"A"
处理100的情况。其次,函数
(s1, s2, s3)
的参数没有意义。为什么是3分?如果我们有4个score,或者20个score,函数就不能使用,我们必须用正确数量的参数重写整个函数(20个参数的函数会很难看)。我知道这个头文件是kata作者给你的,但是我们没有理由不能让它使用(...args)
处理任何数量的参数,并且仍然通过测试。如果我们使用args.reduce((a, e) => a + e, 0) / args.length
取参数的平均值,我们得到以下解决方案: