Spaces:
Sleeping
Sleeping
File size: 3,215 Bytes
8f1690f 2cb9b91 8f1690f 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 5bc09a4 2cb9b91 8f1690f 2cb9b91 8f1690f 2cb9b91 62d21f3 2cb9b91 62d21f3 cd281b7 62d21f3 2cb9b91 62d21f3 2cb9b91 cd281b7 2cb9b91 8f1690f 3ea9b67 |
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import gradio as gr
import pandas as pd
# Grading scheme mapping function
def percentage_to_gpa_letter(percent):
if percent >= 90:
return 4.0, "A+"
elif percent >= 85:
return 4.0, "A"
elif percent >= 80:
return 3.66, "A-"
elif percent >= 75:
return 3.33, "B+"
elif percent >= 71:
return 3.0, "B"
elif percent >= 68:
return 2.66, "B-"
elif percent >= 61:
return 2.0, "C"
elif percent >= 50:
return 1.0, "D"
else:
return 0.0, "F"
# Calculate projected GPA based on weightage and achieved percentages
def calculate_projected_gpa(df):
total_score = 0
total_weight = 0
for _, row in df.iterrows():
# Calculate total score based on weightage and achieved %
total_weight_row = row['Assignment Weight'] + row['Quiz Weight'] + row['GDB Weight'] + row['Midterm Weight'] + row['Final Weight']
achieved = (row['Assignment Weight']*row['Assignment Achieved'] +
row['Quiz Weight']*row['Quiz Achieved'] +
row['GDB Weight']*row['GDB Achieved'] +
row['Midterm Weight']*row['Midterm Achieved'] +
row['Final Weight']*row['Final Achieved']) / total_weight_row
gpa, grade = percentage_to_gpa_letter(achieved)
df.at[_, 'GPA'] = gpa
df.at[_, 'Grade'] = grade
total_score += gpa
total_weight += 1
projected_gpa = total_score / total_weight if total_weight != 0 else 0
return df, f"{projected_gpa:.2f}"
# Default course table
data = {
"Include": [True]*5,
"Course Code": ["CS401","CS403","CS502","CS604","MTH501"],
"Assignment Weight": [10,10,10,10,10],
"Quiz Weight": [10,10,10,10,10],
"GDB Weight": [10,10,10,10,10],
"Midterm Weight": [30,30,30,30,30],
"Final Weight": [40,40,40,40,40],
"Assignment Achieved": [80,70,90,85,75],
"Quiz Achieved": [85,75,95,80,70],
"GDB Achieved": [90,80,85,90,75],
"Midterm Achieved": [75,70,80,85,70],
"Final Achieved": [50,50,50,50,50], # Default slider value
"GPA": [0]*5,
"Grade": [""]*5
}
df = pd.DataFrame(data)
# Gradio app
with gr.Blocks() as app:
gr.Markdown("## 📊 Projected CGPA Calculator (Weighted Scores)")
with gr.Row():
with gr.Column(scale=3):
table = gr.Dataframe(
value=df,
headers=list(df.columns),
datatype=["bool","str"] + ["number"]*10 + ["number","str"],
row_count=(5,"dynamic"),
interactive=True
)
with gr.Column(scale=1):
gr.Markdown("### 🎓 Projected CGPA")
cgpa_display = gr.Textbox(value="0.00", interactive=False, elem_id="gpa_big", lines=1)
# Slider style for Final Achieved
app.css = """
#gpa_big textarea {
font-size: 120px !important;
font-weight: bold;
text-align: center;
color: #1a73e8;
}
"""
# Update GPA function
def update_table(df):
df, projected_gpa = calculate_projected_gpa(df)
return df, projected_gpa
table.change(update_table, inputs=table, outputs=[table,cgpa_display])
app.launch()
|