# 班上有三個同學 annie,lydia,mary, 學科有 國文、數學、英文,請輸入三個人的三個學科的成績,最後算出第一名至第三名,並印出來
# 可以!這題我們要做的是:
# 輸入三個學生、三個科目的成績
# 計算每個學生的總分
# 根據總分排序,列出第一名至第三名
# 這裡有一個完整的程式範例(附上註解說明):
# 2025/04/16-20:10
students = ["annie", "lydia", "mary"]
subjects = ["國文", "數學", "英文"]
# 儲存成績用的字典,每個學生對應一個成績小字典
scores = {}
# 輸入每個學生每個科目的成績
for student in students:
print(f"\n請輸入 {student.capitalize()} 的成績:")
scores[student] = {}
for subject in subjects:
while True:
try:
score = int(input(f"{subject}:"))
if 0 <= score <= 100:
scores[student][subject] = score
break
else:
print("請輸入 0~100 之間的整數")
except:
print("⚠️ 請輸入正確的整數")
# 計算總分並建立新列表
total_scores = []
for student in students:
total = sum(scores[student].values())
total_scores.append((student, total))
# 排名(由高至低)
ranked = sorted(total_scores, key=lambda x: x[1], reverse=True)
# 印出排名結果
print("\n📊 成績排名:")
for i, (name, total) in enumerate(ranked, start=1):
print(f"{i}. {name.capitalize()}:總分 {total} 分")
# 範例輸出:
# 請輸入 Annie 的成績:
# 國文:90
# 數學:95
# 英文:88
# 請輸入 Lydia 的成績:
# 國文:85
# 數學:91
# 英文:90
# 請輸入 Mary 的成績:
# 國文:80
# 數學:82
# 英文:84
# 📊 成績排名:
# 1. Annie:總分 273 分
# 2. Lydia:總分 266 分
# 3. Mary:總分 246 分
########第二種寫法
# 非常適合用字典來表示學生資料!這樣資料的結構會更清晰,而且操作更方便。
# 我們來比較一下兩種做法:
# ✅ 使用「字典格式」儲存學生資料(推薦)
# 2025/04/16-20:20
students = {
"annie": {"國文": 90, "數學": 95, "英文": 88},
"lydia": {"國文": 85, "數學": 91, "英文": 90},
"mary": {"國文": 80, "數學": 82, "英文": 84}
}
# 這樣的好處是:
# 結構化:可以一眼看出每個學生的成績
# 好查詢:例如 students["lydia"]["英文"] 就是 Lydia 的英文分數
# 好加總:sum(students["annie"].values()) 就是 Annie 的總分
# 🚫 使用平行列表(不推薦)
names = ["annie", "lydia", "mary"]
chinese = [90, 85, 80]
math = [95, 91, 82]
english = [88, 90, 84]
# 雖然也能算,但資料分離、容易出錯,例如 math[1] 是誰的數學?你得記住 lydia 是第 2 位,非常不好管理。
# ✅ 使用字典 + 輸入 + 排名的完整範例
# 如果你想用字典結構從頭輸入資料並完成排名,這是更完整的寫法:
# 2025/04/16-20:25
students = {}
subjects = ["國文", "數學", "英文"]
names = ["annie", "lydia", "mary"]
# 資料輸入
for name in names:
print(f"\n請輸入 {name.capitalize()} 的成績:")
students[name] = {}
for subject in subjects:
while True:
try:
score = int(input(f"{subject}:"))
if 0 <= score <= 100:
students[name][subject] = score
break
else:
print("請輸入 0~100 之間的整數")
except:
print("⚠️ 請輸入正確的整數")
# 計算總分並排序
ranking = []
for name, score_dict in students.items():
total = sum(score_dict.values())
ranking.append((name, total))
ranking.sort(key=lambda x: x[1], reverse=True)
# 顯示排名
print("\n📊 成績排名:")
for i, (name, total) in enumerate(ranking, start=1):
print(f"{i}. {name.capitalize()}:總分 {total} 分")