| | import gradio as gr |
| |
|
| | def calculate_grade(att_weeks, ass_count, mid, fin): |
| | |
| | att_score = (att_weeks / 18) * 100 * 0.50 |
| | ass_score = (ass_count / 18) * 100 * 0.20 |
| | mid_weighted = mid * 0.10 |
| | fin_weighted = fin * 0.20 |
| | |
| | total = att_score + ass_score + mid_weighted + fin_weighted |
| | |
| | |
| | status = "✅ PASS - 及格" if total >= 60 else "🛑 FAIL - 不及格" |
| | |
| | result_text = f""" |
| | ### 📊 計算結果 |
| | - **最終總分:{total:.2f} 分** |
| | - **判定結果:{status}** |
| | --- |
| | #### 詳細得分明細: |
| | - 出席得分:{att_score:.1f} / 50 |
| | - 作業得分:{ass_score:.1f} / 20 |
| | - 期中得分:{mid_weighted:.1f} / 10 |
| | - 期末得分:{fin_weighted:.1f} / 20 |
| | """ |
| | return result_text |
| |
|
| | |
| | with gr.Blocks() as demo: |
| | gr.Markdown("# 🎓 18週課程成績直覺計算器") |
| | gr.Markdown("請輸入你的各項成績,系統將自動換算加權總分。") |
| | |
| | with gr.Row(): |
| | att_input = gr.Slider(0, 18, step=1, label="📍 出席週數 (0-18)") |
| | ass_input = gr.Slider(0, 18, step=1, label="📝 作業完成次數 (0-18)") |
| | |
| | with gr.Row(): |
| | mid_input = gr.Number(label="📝 期中考分數 (0-100)", value=0) |
| | fin_input = gr.Number(label="📝 期末考分數 (0-100)", value=0) |
| | |
| | calc_btn = gr.Button("計算總分", variant="primary") |
| | output = gr.Markdown() |
| | |
| | |
| | calc_btn.click( |
| | fn=calculate_grade, |
| | inputs=[att_input, ass_input, mid_input, fin_input], |
| | outputs=output |
| | ) |
| |
|
| | demo.launch() |