getScore函数问题:多选题测试答案组合得分计算异常
排查
getScore()得分计算逻辑问题 让我帮你拆解这个函数里最容易踩的几个坑,结合你给出的评分规则,咱们逐个维度分析常见错误,再给出修正后的参考实现:
一、常见逻辑错误点分析
1. 年龄维度:边界划分错误 + 判断顺序问题
你的规则是:1-25岁0分,26-40岁5分,41-60岁8分,60岁以上10分。
- 最容易错的是60岁的归属:很多人会把
60岁以上写成>=60,但按规则60岁属于41-60区间(得8分),61岁及以上才是10分。 - 另外如果判断顺序颠倒(比如先判断60+再判断41-60),会导致41-60的区间被覆盖,得分错误。
2. BMI维度:区间合并遗漏或边界错误
规则是:0-25得0,26-30得0,31-35得9,35以上得10。
- 常见错误是把
35以上写成>=35,但按规则35本身属于31-35区间(得9分),>35才是10分。 - 还有人会拆分0-25和26-30的判断,但如果漏写其中一个区间,会导致部分BMI值无匹配,得分异常。
3. 家族糖尿病史:判断顺序优先级错误
规则是:无得0,祖父母有得7,兄弟姐妹/父母有得15。
- 这里要注意高权重条件优先判断:如果先判断「祖父母有病史」,再判断「父母/兄弟姐妹有病史」,那么同时满足两种情况的用户会被错误判定为7分(而不是正确的15分)。必须先检查最高权重的类别。
4. 饮食糖分:分类覆盖不全或顺序错误
规则是:低糖/正常糖得0,偏高糖得7,高糖得10。
- 容易出现的问题是:没有覆盖所有饮食糖分的情况(比如漏写高糖的判断),或者判断顺序错误(先判断偏高糖再判断高糖,导致高糖被误判为偏高糖)。
二、修正后的参考实现(JavaScript)
function getScore(age, bmi, familyHistory, sugarIntake) { let score = 0; // 计算年龄得分 if (age >= 1 && age <= 25) { score += 0; } else if (age >= 26 && age <= 40) { score += 5; } else if (age >= 41 && age <= 60) { score += 8; } else if (age > 60) { // 60岁以上指>60,60岁归到上一个区间 score += 10; } // 计算BMI得分 if (bmi >= 0 && bmi <= 30) { // 0-25和26-30合并为一个判断,都是0分 score += 0; } else if (bmi >= 31 && bmi <= 35) { score += 9; } else if (bmi > 35) { // 35以上指>35,35归到上一个区间 score += 10; } // 计算家族病史得分(优先判断高权重) if (familyHistory === '兄弟姐妹/父母有') { score += 15; } else if (familyHistory === '祖父母有') { score += 7; } else if (familyHistory === '无') { score += 0; } // 计算饮食糖分得分(优先判断高权重) if (sugarIntake === '高糖') { score += 10; } else if (sugarIntake === '偏高糖') { score += 7; } else if (sugarIntake === '低糖' || sugarIntake === '正常糖') { score += 0; } return score; }
三、验证建议
你可以用几个测试用例验证:
- 测试用例1:年龄60,BMI35,家族病史「父母有」,饮食「高糖」→ 得分应该是8+9+15+10=42
- 测试用例2:年龄25,BMI26,家族病史「无」,饮食「正常糖」→ 得分0+0+0+0=0
- 测试用例3:年龄61,BMI36,家族病史「祖父母有」,饮食「偏高糖」→ 得分10+10+7+7=34
内容的提问来源于stack exchange,提问作者Michael Wright
相关产品推荐
相关产品推荐

