Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
# Grade to grade point mapping | |
grade_points = { | |
"A": 4.0, "A-": 3.7, | |
"B+": 3.3, "B": 3.0, "B-": 2.7, | |
"C+": 2.3, "C": 2.0, "C-": 1.7, | |
"D+": 1.3, "D": 1.0, "F": 0.0 | |
} | |
def calculate_gpa(subjects, prev_credits=0, prev_gpa=0): | |
if not subjects: | |
return 0, 0 | |
df = pd.DataFrame(subjects) | |
df['Points'] = df['Grade'].map(grade_points) * df['Credit'] | |
current_points = df['Points'].sum() | |
current_credits = df['Credit'].sum() | |
current_gpa = round(current_points / current_credits, 2) if current_credits > 0 else 0 | |
if prev_credits > 0: | |
total_credits = prev_credits + current_credits | |
cgpa = round((prev_gpa * prev_credits + current_points) / total_credits, 2) | |
else: | |
cgpa = current_gpa | |
return current_gpa, cgpa | |
with gr.Blocks(title="GPA Calculator") as demo: | |
gr.Markdown("# π GPA/CGPA Calculator") | |
with gr.Row(): | |
with gr.Column(): | |
subject = gr.Textbox(label="Subject Name") | |
grade = gr.Dropdown(list(grade_points.keys()), label="Grade") | |
credit = gr.Number(3.0, label="Credit Hours", minimum=0.5, step=0.5) | |
add_btn = gr.Button("Add Subject") | |
with gr.Column(): | |
subjects_table = gr.Dataframe(headers=["Subject", "Grade", "Credit"]) | |
clear_btn = gr.Button("Clear All") | |
with gr.Accordion("Previous Semester Data (Optional)", open=False): | |
prev_credits = gr.Number(0, label="Previous Total Credits") | |
prev_gpa = gr.Number(0, label="Previous GPA", minimum=0, maximum=4.0) | |
calculate_btn = gr.Button("Calculate GPA") | |
with gr.Row(): | |
current_gpa = gr.Number(label="Current Semester GPA") | |
overall_cgpa = gr.Number(label="Overall CGPA") | |
subjects = gr.State([]) | |
def add_subject(subject, grade, credit, existing_subjects): | |
new_subject = {"Subject": subject, "Grade": grade, "Credit": credit} | |
return existing_subjects + [new_subject], pd.DataFrame(existing_subjects + [new_subject]) | |
add_btn.click( | |
add_subject, | |
inputs=[subject, grade, credit, subjects], | |
outputs=[subjects, subjects_table] | |
) | |
clear_btn.click( | |
lambda: ([], pd.DataFrame(columns=["Subject", "Grade", "Credit"])), | |
outputs=[subjects, subjects_table] | |
) | |
calculate_btn.click( | |
calculate_gpa, | |
inputs=[subjects, prev_credits, prev_gpa], | |
outputs=[current_gpa, overall_cgpa] | |
) | |
demo.launch() |