Python library to populate Moodle question banks using a Cloze/XML format.
It aims to provide a functionality similar to that of PyCloze, but reducing the necessity of specific knowledge about the Moodle XML or Cloze formats.
Contents:
The moocloze
library is available as a pip package:
pip install moocloze
You can then import it as a normal package in any python code:
import moocloze
The following code (download source)
import moocloze
questions = [moocloze.Question(
name=f"How much is {i}+{i}",
contents=f"What is the result of {i}+{i}? "
f"{moocloze.Numerical(i + i)}")
for i in range(3)]
moocloze.questions_to_xml_file(questions=questions, output_path="example_quiz.xml")
generates a file in Cloze/XML format (download XML file) that can be imported in Moodle. Once imported, 3 questions are added to the bank, one of which is shown next:
The following workflow is proposed to add questions to a Moodle category
-
In your computer:
- Create a list of (related) Question instances.
import moocloze questions = [moocloze.Question(name="...", contents="..."), ...]
- Export the set of questions into an .xml file with Moodle XML/Cloze format
moocloze.questions_to_xml_file(questions=questions, output_path="my_questions.xml")
- Create a list of (related) Question instances.
-
In your Moodle course, import the questions:
-
Go to your course's Question bank
-
(Optional) Go to the question Categories page and add your category
-
Go to the question Import page, select the category where questions are to be imported (here "Raw audio file size", shown under the "General" section), upload your xml file (e.g., "my_questions.xml" in the example below) and press "Import":
-
You will be shown a confirmation page. If no errors are found, your generated questions are now read to be used!
-
If you don't have one, create a Quiz activity. Go to its Questions tab, and add them as desired. Moodle allows showing random questions from a given category. You can use it to your advantage to have each student use a randomized variation of a problem, e.g., with different numeric values.
-
You can find a complete example that produces a single question using all supported field (response) types:
moocloze.Numerical
(integers or floats, with arbitrary error tolerance)moocloze.Multiresponse
(one or more valid options using checkboxes)moocloze.Multichoice
(one valid option among several, using dropdown menus or radio buttons)moocloze.ShortAnswer
(short text)
A screenshot of the question is shown next (see full size):
Whenever you instantiate the moocloze.Question
, you can pass a general_feedback
parameter to it,
as in:
import moocloze
question = moocloze.Question(
name=f"Simple question",
contents=f"How many sides does a dodecahedron have?"
f"{moocloze.Numerical(answer=12, show_tolerance=False)}",
general_feedback="Do not confuse it with the icosahedron (20 faces).")
-
See https://docs.moodle.org/402/en/Embedded_Answers_(Cloze)_question_type for more information on the Cloze question format.
-
Check out the PyCloze library and specifically this importing tutorial for more details about how to import your XML files into Moodle and loading them into a Quiz/Questionnaire.