import xml.etree.ElementTree as ET import random from math import gcd def create_cloze_question(name, questiontext, correct_answers, wrong_answers, feedback, tags): question = ET.Element('question', attrib={'type': 'cloze'}) name_elem = ET.SubElement(question, 'name') text_elem = ET.SubElement(name_elem, 'text') text_elem.text = name questiontext_elem = ET.SubElement(question, 'questiontext', attrib={'format': 'html'}) text_elem = ET.SubElement(questiontext_elem, 'text') # Erstelle die Tabelle für die Lücken cloze_text = "
Zähler: {{1:SHORTANSWER:={correct_answers[0]}~%0%{wrong_answers[0][0]}#{wrong_answers[0][1]}}} | " cloze_text += "
Nenner: {{1:SHORTANSWER:={correct_answers[1]}~%0%{wrong_answers[1][0]}#{wrong_answers[1][1]}}} | " cloze_text += "
Gekürzter Zähler: {{1:SHORTANSWER:={reduced_numerator}~%0%{wrong_answers[2][0]}#{wrong_answers[2][1]}}} | " cloze_text += "
Gekürzter Nenner: {{1:SHORTANSWER:={reduced_denominator}~%0%{wrong_answers[3][0]}#{wrong_answers[3][1]}}} | " cloze_text += "
Berechne und kürze das Ergebnis, wenn möglich:
\\( \\Large \\displaystyle \\frac{{{numerator1}}}{{{denominator}}} {operations[0]} \\left(\\frac{{{numerator2}}}{{{denominator}}} {operations[2]} \\frac{{{numerator3}}}{{{denominator}}}\\right) = \\)
" # Antworten correct_answers = [result_numerator, denominator] if needs_reduction: common_divisor = gcd(result_numerator, denominator) reduced_numerator = result_numerator // common_divisor reduced_denominator = denominator // common_divisor correct_answers.extend([reduced_numerator, reduced_denominator]) # Füge gekürzte Antworten hinzu wrong_answers = [ (result_numerator + random.randint(1, 5), "Dieser Zähler ist zu hoch."), # Falscher Zähler (result_numerator - random.randint(1, 5), "Dieser Zähler ist zu niedrig."), # Falscher Zähler (reduced_numerator + random.randint(1, 3), "Dieser gekürzte Zähler ist nicht korrekt."), # Falscher gekürzter Zähler (reduced_denominator - random.randint(1, 3), "Dieser gekürzte Nenner ist nicht korrekt.") # Falscher gekürzter Nenner ] else: wrong_answers = [ (result_numerator + random.randint(1, 5), "Dieser Zähler ist zu hoch."), # Falscher Zähler (result_numerator - random.randint(1, 5), "Dieser Zähler ist zu niedrig.") # Falscher Zähler ] feedback = "Richtig! Die Lösung ist korrekt." # Frage erstellen und hinzufügen questions.append(create_cloze_question( f"Addition/Subtraktion von 3 Brüchen {i}", questiontext, correct_answers, wrong_answers, feedback, ["Mathematik", "Brüche", "Addition", "Subtraktion"] )) # Erstelle das Quiz quiz = create_quiz(questions) # Speichere die XML-Datei save_to_file(quiz, 'cloze_fraction_addition_subtraction_quiz.xml') print("Moodle-XML-Datei 'cloze_fraction_addition_subtraction_quiz.xml' erfolgreich erstellt.")