Areebaaa's picture
Update app.py
445c3c5 verified
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()