[LON-CAPA-cvs] cvs: loncom /homework default_homework.lcpm
raeburn
raeburn at source.lon-capa.org
Wed Jun 25 12:50:51 EDT 2014
raeburn Wed Jun 25 16:50:51 2014 EDT
Modified files:
/loncom/homework default_homework.lcpm
Log:
- Bugs 6609, 6611, 6614
- Optional fifth arg can be provided to &submission() to clean up learner
submitted data (e.g., in a multi-part problem) where learner data from
submissions to a numerical respnse in an earlier part will be used as
variables in the script block when calculating answers for a later part.
- "cleanupnum" arg is a ref to a hash, with one or more of the following
keys => values:
exponent => 1, comma => 1, letterforzero => 1, spaces => 1, format => 'ns'
(where n is an integer, i.e., number of significant digits).
Index: loncom/homework/default_homework.lcpm
diff -u loncom/homework/default_homework.lcpm:1.168 loncom/homework/default_homework.lcpm:1.169
--- loncom/homework/default_homework.lcpm:1.168 Wed Jun 25 15:43:04 2014
+++ loncom/homework/default_homework.lcpm Wed Jun 25 16:50:51 2014
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run()
#
-# $Id: default_homework.lcpm,v 1.168 2014/06/25 15:43:04 raeburn Exp $
+# $Id: default_homework.lcpm,v 1.169 2014/06/25 16:50:51 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1228,7 +1228,7 @@
}
sub submission {
- my ($partid,$responseid,$subnumber,$encode)=@_;
+ my ($partid,$responseid,$subnumber,$encode,$cleanupnum)=@_;
my $sub='';
if ($subnumber) { $sub=$subnumber.':'; }
my $output =
@@ -1238,11 +1238,17 @@
if ($encode) {
@items = map { &encode_response($_); } @items;
}
+ if (ref($cleanupnum) eq 'HASH') {
+ @items = map { &cleanup_numerical_response($cleanupnum,$_); } @items;
+ }
return \@items;
} else {
if ($encode) {
$output = &encode_response($output);
}
+ if (ref($cleanupnum) eq 'HASH') {
+ $output = &cleanup_numerical_response($cleanupnum,$output);
+ }
return $output;
}
}
@@ -1256,6 +1262,46 @@
return $value;
}
+sub cleanup_numerical_response {
+ my ($cleanupnum,$value) = @_;
+ if (ref($cleanupnum) eq 'HASH') {
+ if ($cleanupnum->{exponent}) {
+ if ($value =~ m{^(.*)[\*xX]\s*10\s*\^\s*(\+|\-)?\s*(\d+)(.*)$}) {
+ my $pre_exp = $1;
+ my $sign = $2;
+ my $exponent = $3;
+ my $post_exp = $4;
+ if ($pre_exp !~ /\./) {
+ $pre_exp .= '.';
+ }
+ if ($sign eq '') {
+ $sign = '+';
+ }
+ $value = $pre_exp.'E'.$sign.$exponent.$post_exp;
+ }
+ }
+ if ($cleanupnum->{comma}) {
+ $value =~ s{(\d+),(\d+)}{$1$2};
+ }
+ if ($cleanupnum->{letterforzero}) {
+ $value =~ s/^\s*o(\.\d+)/0$1/i;
+ }
+ if ($cleanupnum->{spaces}) {
+ $value =~ s{^\s+|\s+$}{}g;
+ if ($value =~ m{^(.*)\.\s+(\d+)(.*)$}) {
+ my $pre_pt = $1;
+ my $decimal = $2;
+ my $post_dec = $3;
+ $value = $pre_pt.'.'.$decimal.$post_dec;
+ }
+ }
+ if ($cleanupnum->{format} =~ /^\d+s$/i) {
+ $value = &format_significant_figures($value,$cleanupnum->{format});
+ }
+ }
+ return $value;
+}
+
sub currentpart {
return $external::part;
}
More information about the LON-CAPA-cvs
mailing list