File size: 1,635 Bytes
f3fcbb0 | 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 | 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
# 建立 Gradio 介面
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() |