Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from fpdf import FPDF | |
| import tempfile | |
| import datetime | |
| # -------------------------- | |
| # Questions Bank | |
| # -------------------------- | |
| english_questions = [ | |
| { | |
| "question": "Choose the correct synonym of 'Happy':", | |
| "options": ["Sad", "Joyful", "Angry", "Tired"], | |
| "answer": "Joyful" | |
| }, | |
| { | |
| "question": "Choose the correct antonym of 'Cold':", | |
| "options": ["Hot", "Freezing", "Cool", "Chilly"], | |
| "answer": "Hot" | |
| }, | |
| { | |
| "question": "Fill in the blank: She _____ to school every day.", | |
| "options": ["go", "goes", "gone", "going"], | |
| "answer": "goes" | |
| } | |
| ] * 10 # Repeat to make 30 for example | |
| islamiat_questions = [ | |
| { | |
| "question": "Who was the first Caliph of Islam?", | |
| "options": ["Hazrat Umar (RA)", "Hazrat Abu Bakr (RA)", "Hazrat Ali (RA)", "Hazrat Usman (RA)"], | |
| "answer": "Hazrat Abu Bakr (RA)" | |
| }, | |
| { | |
| "question": "How many times Muslims pray in a day?", | |
| "options": ["3", "4", "5", "6"], | |
| "answer": "5" | |
| }, | |
| { | |
| "question": "Which Surah is the shortest in the Quran?", | |
| "options": ["Al-Fatiha", "Al-Ikhlas", "Al-Kawthar", "Al-Nas"], | |
| "answer": "Al-Kawthar" | |
| } | |
| ] * 10 # Repeat to make 30 | |
| math_questions = [ | |
| { | |
| "question": "What is 15 + 6?", | |
| "options": ["21", "20", "22", "19"], | |
| "answer": "21" | |
| }, | |
| { | |
| "question": "What is 9 × 7?", | |
| "options": ["63", "72", "56", "49"], | |
| "answer": "63" | |
| }, | |
| { | |
| "question": "What is 100 ÷ 4?", | |
| "options": ["20", "25", "24", "30"], | |
| "answer": "25" | |
| } | |
| ] * 10 # Repeat to make 30 | |
| questions_bank = { | |
| "English": english_questions, | |
| "Islamiat": islamiat_questions, | |
| "Math": math_questions | |
| } | |
| # -------------------------- | |
| # PDF Generation Function | |
| # -------------------------- | |
| def generate_pdf(name, father_name, roll_number, score, total): | |
| percentage = (score / total) * 100 | |
| pdf = FPDF() | |
| pdf.add_page() | |
| pdf.set_font("Arial", size=16) | |
| pdf.cell(200, 10, txt="5th Class Test Result Card", ln=True, align='C') | |
| pdf.ln(10) | |
| pdf.set_font("Arial", size=12) | |
| pdf.cell(200, 10, txt=f"Name: {name}", ln=True) | |
| pdf.cell(200, 10, txt=f"Father's Name: {father_name}", ln=True) | |
| pdf.cell(200, 10, txt=f"Roll Number: {roll_number}", ln=True) | |
| pdf.cell(200, 10, txt=f"Score: {score}/{total}", ln=True) | |
| pdf.cell(200, 10, txt=f"Percentage: {percentage:.2f}%", ln=True) | |
| pdf.cell(200, 10, txt=f"Date: {datetime.date.today()}", ln=True) | |
| temp_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") | |
| pdf.output(temp_pdf.name) | |
| return temp_pdf.name | |
| # -------------------------- | |
| # Test Logic | |
| # -------------------------- | |
| def test_app(name, father_name, roll_number, *answers): | |
| score = 0 | |
| total = sum(len(q_list) for q_list in questions_bank.values()) | |
| # Check answers | |
| idx = 0 | |
| for section in questions_bank: | |
| for q in questions_bank[section]: | |
| if answers[idx] == q["answer"]: | |
| score += 1 | |
| idx += 1 | |
| pdf_path = generate_pdf(name, father_name, roll_number, score, total) | |
| return f"You scored {score}/{total} ({(score/total)*100:.2f}%)", pdf_path | |
| # -------------------------- | |
| # Build Gradio Interface | |
| # -------------------------- | |
| inputs = [ | |
| gr.Textbox(label="Name"), | |
| gr.Textbox(label="Father's Name"), | |
| gr.Textbox(label="Roll Number") | |
| ] | |
| # Add questions dynamically | |
| for section, q_list in questions_bank.items(): | |
| inputs.append(gr.Label(value=f"--- {section} Section ---")) | |
| for q in q_list: | |
| inputs.append(gr.Radio(choices=q["options"], label=q["question"])) | |
| outputs = [ | |
| gr.Textbox(label="Result"), | |
| gr.File(label="Download Result PDF") | |
| ] | |
| demo = gr.Interface(fn=test_app, inputs=inputs, outputs=outputs, title="5th Class Test") | |
| if __name__ == "__main__": | |
| demo.launch() |