Skip to content
Snippets Groups Projects
Commit db0f29d0 authored by Mathieu Loiseau's avatar Mathieu Loiseau
Browse files

shortAnswer

parent 63f3e96b
No related branches found
No related tags found
No related merge requests found
......@@ -22,7 +22,7 @@ class Quizz:
if q.attrib['type'] == "multichoice":
newQ = MCQ(q,c,len(self.questions[c]),self.folder)
elif q.attrib['type'] == "shortanswer":
newQ = Question(q,c,len(self.questions[c]),self.folder)
newQ = ShortAnswer(q,c,len(self.questions[c]),self.folder)
elif q.attrib['type'] == "truefalse":
newQ = TF(q,c,len(self.questions[c]),self.folder)
elif q.attrib['type'] == "matching":
......@@ -101,11 +101,15 @@ class Answer:
class MCQ(Question):
HORIZONTAL = 1
VERTICAL = 0
def __init__(self, xmlQ,c,n,f):
super().__init__(xmlQ,c,n,f)
self.choices = []
self.choice_type = MCQ.VERTICAL
self.env = "questionmult"
self.__parseAnswers(xmlQ)
if self.__class__.__name__ == "MCQ":
self.__parseAnswers(xmlQ)
def __parseAnswers(self, xmlQ):
self.shuffle = xmlQ.find("shuffleanswers").text == "true"
......@@ -115,25 +119,32 @@ class MCQ(Question):
fb = mlang_2_multiling(strip_tags(fb, self.folder))
self.choices.append(Answer(mlang_2_multiling(strip_tags(a.find("text").text, self.folder)), a.attrib['fraction'], self.max, fb))
def get_choice_env(self):
if self.choice_type == MCQ.VERTICAL:
return "choices"
else:
return "choiceshoriz"
def __str__(self):
res = """\\element{"""+self.category+"""}{
\\begin{"""+self.env+"""}{"""+self.id+"""}\\nbpoints{"""+score_2_str(self.max)+"""}
"""+self.q+"\n\t\t\\begin{choices}"
"""+self.q+"\n\t\t\\begin{"+self.get_choice_env()+"}"
if not self.shuffle:
res += "[o]"
res += "\n"
for c in self.choices:
res += str(c)
res += "\n\t\t\\end{choices}\n\t\\end{"+self.env+"}\n}\n\n"
res += "\n\t\t\\end{"+self.get_choice_env()+"}\n\t\\end{"+self.env+"}\n}\n\n"
return res
class TF(MCQ):
def __init__(self, xmlQ,c,n,f):
super(MCQ, self).__init__(xmlQ,c,n,f)
super().__init__(xmlQ,c,n,f)
self.choices = []
self.env = "question"
self.shuffle = False
self.__parseAnswers(xmlQ)
if self.__class__.__name__ == "MCQ":
self.__parseAnswers(xmlQ)
def __parseAnswers(self, xmlQ):
for a in xmlQ.findall("answer"):
......@@ -145,6 +156,29 @@ class TF(MCQ):
else:
self.choices.append(Answer("\\multiling{faux}{false}", a.attrib['fraction'], self.max, fb))
class ShortAnswer(TF):
def __init__(self, xmlQ,c,n,f,l=4):
super().__init__(xmlQ,c,n,f)
self.nb_lines = l
if self.__class__.__name__ == "ShortAnswer":
self.__parseAnswers(xmlQ)
def __parseAnswers(self, xmlQ):
note = 0
while note < self.max:
self.choices.append(note)
note += 0.25
def __str__(self):
res = """\\element{"""+self.category+"""}{
\\begin{"""+self.env+"""}{"""+self.id+"""}\\nbpoints{"""+score_2_str(self.max)+"""}
"""+self.q+"\n\t\t\\AMCOpen{lineheigh=0.8cm,lines="+str(self.nb_lines)+"}{"
for c in self.choices:
res += "\\wrongchoice{"+score_2_str(c)+"}\\scoring{"+score_2_str(c)+"}"
res += "\\correctchoice{"+score_2_str(self.max)+"}\\scoring{"+score_2_str(self.max)+"}"
res += "}\n\t\\end{"+self.env+"}\n}\n\n"
return res
if __name__ == "__main__":
quizz = Quizz("data/quiz-GI-4-SID-S1-top-20201204-1620.xml", "data")
#quizz = Quizz("data/quiz-GI-4.xml" , "data")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment