31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
from calc import evaluator, UndefinedVariable
|
|
|
|
#-----------------------------------------------------------------------------
|
|
#
|
|
# Utility functions used in CAPA responsetypes
|
|
|
|
def compare_with_tolerance(v1, v2, tol):
|
|
''' Compare v1 to v2 with maximum tolerance tol
|
|
tol is relative if it ends in %; otherwise, it is absolute
|
|
|
|
- v1 : student result (number)
|
|
- v2 : instructor result (number)
|
|
- tol : tolerance (string or number)
|
|
|
|
'''
|
|
relative = tol.endswith('%')
|
|
if relative:
|
|
tolerance_rel = evaluator(dict(),dict(),tol[:-1]) * 0.01
|
|
tolerance = tolerance_rel * max(abs(v1), abs(v2))
|
|
else:
|
|
tolerance = evaluator(dict(),dict(),tol)
|
|
return abs(v1-v2) <= tolerance
|
|
|
|
def contextualize_text(text, context): # private
|
|
''' Takes a string with variables. E.g. $a+$b.
|
|
Does a substitution of those variables from the context '''
|
|
if not text: return text
|
|
for key in sorted(context, lambda x,y:cmp(len(y),len(x))):
|
|
text=text.replace('$'+key, str(context[key]))
|
|
return text
|