first commit
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import argparse
|
||||
import json
|
||||
import random
|
||||
from docx import Document
|
||||
from docx.shared import Pt
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
|
||||
# Define command-line arguments
|
||||
parser = argparse.ArgumentParser(description='Generate test papers, answer sheets, and marking scheme.')
|
||||
parser.add_argument('-q', '--question-bank', type=str, required=True, help='Path to JSON file containing question bank.')
|
||||
parser.add_argument('-n', '--number-question', type=int, required=True, help='Number of questions to include in the test paper.')
|
||||
args = parser.parse_args()
|
||||
|
||||
# Open JSON file and load data
|
||||
with open(args.question_bank, 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
# Select random questions
|
||||
selected_questions = random.sample(data, args.number_question)
|
||||
|
||||
# Create Test Paper, Answer Sheet, and Marking Scheme
|
||||
test_paper_doc = Document()
|
||||
answer_sheet_doc = Document()
|
||||
marking_scheme_doc = Document()
|
||||
|
||||
# Set font
|
||||
font = test_paper_doc.styles['Normal'].font
|
||||
font.name = 'Arial'
|
||||
font.size = Pt(12)
|
||||
|
||||
# Add test paper title
|
||||
test_paper_title = test_paper_doc.add_paragraph('Test Paper', style='Title')
|
||||
test_paper_title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
test_paper_doc.add_paragraph()
|
||||
|
||||
# Add answer sheet title
|
||||
answer_sheet_title = answer_sheet_doc.add_paragraph('Answer Sheet', style='Title')
|
||||
answer_sheet_title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
answer_sheet_doc.add_paragraph()
|
||||
|
||||
# Add marking scheme title
|
||||
marking_scheme_title = marking_scheme_doc.add_paragraph('Marking Scheme', style='Title')
|
||||
marking_scheme_title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
marking_scheme_doc.add_paragraph()
|
||||
|
||||
# Loop through selected questions and add to documents
|
||||
for i, question in enumerate(selected_questions):
|
||||
# Test Paper
|
||||
test_paper_doc.add_paragraph(f'{i+1}. {question["question"]}')
|
||||
test_paper_doc.add_paragraph(f' A. {question["option_a"]}')
|
||||
test_paper_doc.add_paragraph(f' B. {question["option_b"]}')
|
||||
test_paper_doc.add_paragraph(f' C. {question["option_c"]}')
|
||||
test_paper_doc.add_paragraph(f' D. {question["option_d"]}')
|
||||
test_paper_doc.add_paragraph()
|
||||
|
||||
# Answer Sheet
|
||||
answer_sheet_doc.add_paragraph(f'{i+1}. {question["question"]}')
|
||||
answer_sheet_doc.add_paragraph(f' A. {question["option_a"]}')
|
||||
answer_sheet_doc.add_paragraph(f' B. {question["option_b"]}')
|
||||
answer_sheet_doc.add_paragraph(f' C. {question["option_c"]}')
|
||||
answer_sheet_doc.add_paragraph(f' D. {question["option_d"]}')
|
||||
answer_sheet_doc.add_paragraph(f'Answer: {question["answer"]}')
|
||||
answer_sheet_doc.add_paragraph(f'Explanation: {question["explanation"]}')
|
||||
answer_sheet_doc.add_paragraph()
|
||||
|
||||
# Marking Scheme
|
||||
marking_scheme_doc.add_paragraph(f'{i+1}. {question["question"]}')
|
||||
marking_scheme_doc.add_paragraph(f'Answer: {question["answer"]}')
|
||||
marking_scheme_doc.add_paragraph()
|
||||
|
||||
# Save documents
|
||||
test_paper_doc.save('test_paper.docx')
|
||||
answer_sheet_doc.save('answer_sheet.docx')
|
||||
marking_scheme_doc.save('marking_scheme.docx')
|
||||
Reference in New Issue
Block a user