比this SO question更复杂,我想你的测验得分计算,这是我的情景:
我有X个选项(任何HTML元素都可以作为选项提供),用户可以从中选择一个选项组合作为答案。到目前为止,我试图通过以下方式保持通用:
以下示例:假设选择了6个节点0,1,2正确的分心节点。 'selectedAnswers
'是一个包含任何选定干扰物的索引值的数组。 “correctAnswers
”是一组预先确定的正确的干扰指数。
// Each option is worth a standardised amount, unless custom weightings
// are required - not implemented.
var weighting = (100/this.distractors.length);
var score = 0;
for(var i=0;i<this.selectedAnswers.length;i++){
if( ut.arrayContains(this.correctAnswer, this.selectedAnswers[i]) ){
// Correct answer found, increase total
score += weighting*2;
} else {
if( yd.hasClass(this.distractors[ this.selectedAnswers[i] ], SELECTED_CLASS) ){
// Penalise the score by a double weightingfor selecting an incorrect answer
score -= weighting*2;
//log('reducing score by 2 weightings');
} else {
// Penalise the score by a single weighting for leaving an incorrect node unselected
score -= weighting;
//log('reducing score by 1 weighting');
}
}
}
this.score( (score<0)? 0 : Math.ceil(score) );
当一个选项未被选中时,如果选择它会不正确,那么降低分数似乎是违反直觉的 - 但它似乎让我更接近我所追求的逻辑。事实上,在您考虑选择越来越多不正确的选项和不正确的选项的情况之前,所提供的分数似乎相当准确。
如果必须的话,我会从我们的构建中创建一个演示并将它现场直播,让我知道!
编辑: 呃,对不起,我在想这个问题,问题是:
如何在考虑错误和正确答案的情况下提供准确的百分比?
答案 0 :(得分:0)
我已经确定了这一点,但我仍然认为它没有足够的理由:
var correctWeighting = 100/this.correctAnswer.length;
var incorrectWeighting = 100/(this.distractors.length-this.correctAnswer.length);
var score = 0;
for(var i=0;i<this.selectedAnswers.length;i++){
// Scan through all selected distractors and determine if they are in/correct,
// adjusting the score accordingly
if( ut.arrayContains(this.correctAnswer, this.selectedAnswers[i]) ){
score += correctWeighting;
} else {
score -= incorrectWeighting;
}
}
// The score can be calculated to be <0 if there are many incorrect distractors
// selected, which isn't technically wrong (if a bit imprecise?), but a workable
// score should be in the 0-100 range.
this.score( (score<0)? 0 : Math.ceil(score) );
它似乎有效,但是,当选择了许多不正确的答案并且很少或没有正确答案时(分数进入底片)。这可能不够好的一个例子是,如果我有10个左右的选项,其中3个是正确的,我选择了1个正确(+ 34%),其中3个以上被选中但不正确。在这种情况下,合理地说用户的1个正确选择的答案应该至少获得一些功劳是合理的。
我觉得我需要根据围绕“correctWeighting
”的某些因素来调整“incorrectWeight
”。