Spaces:
Sleeping
Sleeping
File size: 2,561 Bytes
445c3c5 e23d813 445c3c5 e23d813 445c3c5 e23d813 445c3c5 e23d813 445c3c5 e23d813 445c3c5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
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() |