第25课:成绩评定系统——根据分数判断等级
🎯 本课目标
- 综合运用条件判断知识制作完整系统
- 掌握多等级评定的逻辑设计
- 学会根据分数给出详细评语和建议
- 培养系统化思考和程序设计能力
- 制作可复用的成绩评定函数
🤔 趣味引入:老师的"评分秘籍"
想象一下:老师批改试卷时,心里有个"评分秘籍":
- 📝 100分 → "满分!太厉害了!"
- 🌟 90-99分 → "优秀!继续保持!"
- 👍 80-89分 → "良好!不错的表现!"
- 💪 70-79分 → "中等!还有进步空间!"
- 📈 60-69分 → "及格!需要更努力!"
- 📚 0-59分 → "不及格!要加油了!"
今天,让我们一起用Python制作智能成绩评定系统,成为老师的得力助手!
🔧 第一部分:基础成绩评定
1.1 简单的等级判断
# 基础成绩评定
print("📊 基础成绩评定系统")
print("=" * 50)
def get_grade(score):
"""根据分数返回等级"""
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
def get_grade_name(grade):
"""根据等级返回中文名称"""
if grade == "A":
return "优秀"
elif grade == "B":
return "良好"
elif grade == "C":
return "中等"
elif grade == "D":
return "及格"
else:
return "不及格"
# 测试不同分数
test_scores = [95, 82, 73, 68, 45, 100, 59, 88]
print("📋 成绩等级对照表:")
print("-" * 40)
print(f"{'分数':>8} {'等级':>6} {'评价':>10}")
print("-" * 40)
for score in test_scores:
grade = get_grade(score)
grade_name = get_grade_name(grade)
print(f"{score:>8}分 {grade:>6} {grade_name:>10}")
print("-" * 40)
1.2 带评语的评定系统
# 带评语的成绩评定
print("\n📝 带评语的成绩评定系统")
print("=" * 50)
def evaluate_score(score):
"""评定成绩并返回详细评语"""
if score < 0 or score > 100:
return "❌ 无效分数!请输入0-100之间的分数"
if score == 100:
grade = "A+"
comment = "🏆 满分!你是最棒的!继续保持!"
suggestion = "挑战更高难度的题目吧!"
elif score >= 95:
grade = "A"
comment = "⭐ 非常优秀!接近满分!"
suggestion = "检查一下哪里扣分了,争取下次满分!"
elif score >= 90:
grade = "A-"
comment = "🌟 优秀!掌握得很好!"
suggestion = "继续保持,向满分冲刺!"
elif score >= 85:
grade = "B+"
comment = "👍 良好!表现不错!"
suggestion = "再细心一点,就能进入优秀行列!"
elif score >= 80:
grade = "B"
comment = "👌 良好!基础扎实!"
suggestion = "多做一些练习题,巩固知识!"
elif score >= 75:
grade = "C+"
comment = "💪 中等偏上!有进步!"
suggestion = "找出薄弱环节,针对性复习!"
elif score >= 70:
grade = "C"
comment = "📈 中等!还有提升空间!"
suggestion = "制定学习计划,每天进步一点点!"
elif score >= 65:
grade = "D+"
comment = "📖 及格偏上!需要努力!"
suggestion = "多花时间复习,不懂就问老师!"
elif score >= 60:
grade = "D"
comment = "📚 刚好及格!要加油了!"
suggestion = "需要更加认真对待学习!"
else:
grade = "F"
comment = "💔 不及格!需要加倍努力!"
suggestion = "从基础开始复习,寻求老师和同学的帮助!"
return {
"score": score,
"grade": grade,
"comment": comment,
"suggestion": suggestion
}
# 交互式评定
print("欢迎使用智能成绩评定系统!")
print("=" * 40)
try:
user_score = float(input("请输入考试成绩(0-100):"))
result = evaluate_score(user_score)
if isinstance(result, dict):
print(f"\n{'='*40}")
print(f"📊 成绩评定结果")
print(f"{'='*40}")
print(f"📝 分数:{result['score']}分")
print(f"🏅 等级:{result['grade']}")
print(f"💬 评语:{result['comment']}")
print(f"💡 建议:{result['suggestion']}")
print(f"{'='*40}")
else:
print(result)
except ValueError:
print("❌ 请输入有效的数字!")
📊 第二部分:多维度评定系统
2.1 多科目成绩评定
# 多科目成绩评定
print("\n📚 多科目成绩评定系统")
print("=" * 50)
def evaluate_subject(subject, score):
"""评定单科成绩"""
if score >= 90:
level = "优秀"
emoji = "🌟"
elif score >= 80:
level = "良好"
emoji = "👍"
elif score >= 70:
level = "中等"
emoji = "💪"
elif score >= 60:
level = "及格"
emoji = "📈"
else:
level = "不及格"
emoji = "📚"
return f"{emoji} {subject}:{score}分 - {level}"
def calculate_average(scores_dict):
"""计算平均分"""
total = sum(scores_dict.values())
count = len(scores_dict)
return total / count
def get_overall_grade(average):
"""根据平均分返回总体等级"""
if average >= 90:
return "A", "优秀", "🏆"
elif average >= 80:
return "B", "良好", "🎯"
elif average >= 70:
return "C", "中等", "💪"
elif average >= 60:
return "D", "及格", "📈"
else:
return "F", "不及格", "📚"
# 输入各科成绩
print("请输入各科成绩:")
print("-" * 30)
subjects = ["语文", "数学", "英语", "科学"]
scores = {}
for subject in subjects:
while True:
try:
score = float(input(f"{subject}成绩:"))
if 0 <= score <= 100:
scores[subject] = score
break
else:
print("⚠️ 成绩应在0-100之间!")
except ValueError:
print("❌ 请输入数字!")
# 显示各科评定
print(f"\n{'='*50}")
print(f"{'📋 成绩评定报告':^50}")
print(f"{'='*50}")
print(f"\n各科成绩评定:")
for subject in subjects:
print(evaluate_subject(subject, scores[subject]))
# 计算总体
average = calculate_average(scores)
grade, grade_name, emoji = get_overall_grade(average)
print(f"\n{'='*50}")
print(f"📊 总体评定:")
print(f" 平均分:{average:.1f}分")
print(f" 总体等级:{emoji} {grade}({grade_name})")
# 总体评语
if average >= 95:
print(f"\n💬 评语:全能学霸!各科都很优秀!")
elif average >= 90:
print(f"\n💬 评语:非常优秀!继续保持!")
elif average >= 85:
print(f"\n💬 评语:整体表现良好!")
elif average >= 80:
print(f"\n💬 评语:基础扎实,继续努力!")
elif average >= 70:
print(f"\n💬 评语:有进步空间,加油!")
elif average >= 60:
print(f"\n💬 评语:刚过及格线,需要更努力!")
else:
print(f"\n💬 评语:需要认真反思,加倍努力!")
# 找出最强和最弱科目
best_subject = max(scores, key=scores.get)
worst_subject = min(scores, key=scores.get)
print(f"\n📈 科目分析:")
print(f" 🏆 最强科目:{best_subject}({scores[best_subject]}分)")
print(f" 📚 待加强:{worst_subject}({scores[worst_subject]}分)")
# 给出针对性建议
print(f"\n💡 学习建议:")
if scores[worst_subject] < 60:
print(f" • {worst_subject}需要重点补习!")
print(f" • 建议每天多花30分钟复习")
elif scores[worst_subject] < 70:
print(f" • {worst_subject}还有提升空间")
print(f" • 多做题,查漏补缺")
if best_subject == worst_subject:
print(" • 各科均衡发展,很好!")
else:
gap = scores[best_subject] - scores[worst_subject]
if gap > 20:
print(f" • 注意平衡各科,避免偏科")
2.2 进步趋势分析
# 进步趋势分析
print("\n📈 进步趋势分析系统")
print("=" * 50)
def analyze_progress(scores_list):
"""分析成绩进步趋势"""
if len(scores_list) < 2:
return "需要至少两次成绩才能分析趋势"
changes = []
for i in range(1, len(scores_list)):
change = scores_list[i] - scores_list[i-1]
changes.append(change)
total_change = sum(changes)
avg_change = total_change / len(changes)
max_improve = max(changes)
max_decline = min(changes)
return {
"changes": changes,
"total_change": total_change,
"avg_change": avg_change,
"max_improve": max_improve,
"max_decline": max_decline,
"count": len(scores_list)
}
def get_trend_description(analysis):
"""获取趋势描述"""
total = analysis["total_change"]
if total > 30:
return "🚀 飞速进步!太棒了!"
elif total > 20:
return "📈 明显进步!继续保持!"
elif total > 10:
return "👍 有所进步!继续加油!"
elif total > 0:
return "📊 小幅进步,再接再厉!"
elif total == 0:
return "➡️ 成绩稳定,寻求突破!"
elif total > -10:
return "📉 略有退步,需要重视!"
elif total > -20:
return "⬇️ 退步明显,找出原因!"
else:
return "🔻 大幅退步,紧急补救!"
# 输入多次成绩
print("欢迎使用进步趋势分析系统!")
print("请输入同一科目的多次考试成绩\n")
subject = input("科目名称:")
scores_list = []
print(f"请输入{subject}的各次考试成绩(输入-1结束):")
while True:
try:
score = float(input(f"第{len(scores_list)+1}次成绩:"))
if score == -1:
break
if 0 <= score <= 100:
scores_list.append(score)
else:
print("⚠️ 成绩应在0-100之间!")
except ValueError:
print("❌ 请输入数字!")
if len(scores_list) >= 2:
analysis = analyze_progress(scores_list)
print(f"\n{'='*50}")
print(f"{'📊 进步趋势分析报告':^50}")
print(f"{'='*50}")
print(f"\n📝 科目:{subject}")
print(f"📋 成绩记录:{scores_list}")
print(f"\n📈 成绩变化:")
for i, (before, after) in enumerate(zip(scores_list[:-1], scores_list[1:]), 1):
change = after - before
if change > 0:
arrow = "↑"
color = "📈"
elif change < 0:
arrow = "↓"
color = "📉"
else:
arrow = "→"
color = "➡️"
print(f" 第{i}次→第{i+1}次:{before}→{after} {color} {arrow}{abs(change):.1f}分")
print(f"\n📊 统计分析:")
print(f" 总变化:{analysis['total_change']:+.1f}分")
print(f" 平均每次变化:{analysis['avg_change']:+.1f}分")
print(f" 最大进步:+{analysis['max_improve']:.1f}分")
if analysis['max_decline'] < 0:
print(f" 最大退步:{analysis['max_decline']:.1f}分")
print(f"\n💬 总体评价:{get_trend_description(analysis)}")
# 给出建议
if analysis['total_change'] > 0:
print(f"💡 建议:继续保持好的学习方法!")
elif analysis['total_change'] == 0:
print(f"💡 建议:尝试新的学习方法,寻求突破!")
else:
print(f"💡 建议:找出退步原因,调整学习策略!")
if analysis['max_decline'] < -10:
print(f" 特别注意:第{analysis['changes'].index(analysis['max_decline'])+1}次退步较大")
elif len(scores_list) == 1:
print(f"\n📝 只有一次成绩:{scores_list[0]}分")
print("💡 再多考几次才能分析趋势哦!")
else:
print("❌ 没有输入有效成绩!")
🎯 第三部分:综合成绩管理系统
3.1 完整成绩管理系统
# 完整成绩管理系统
print("\n🏫 完整成绩管理系统")
print("=" * 50)
class GradeManager:
"""成绩管理器类"""
def __init__(self, student_name, class_name):
self.student_name = student_name
self.class_name = class_name
self.scores = {}
self.subjects = []
def add_subject(self, subject, score):
"""添加科目成绩"""
if 0 <= score <= 100:
self.scores[subject] = score
if subject not in self.subjects:
self.subjects.append(subject)
return True
return False
def remove_subject(self, subject):
"""删除科目"""
if subject in self.scores:
del self.scores[subject]
self.subjects.remove(subject)
return True
return False
def update_score(self, subject, new_score):
"""更新成绩"""
if subject in self.scores and 0 <= new_score <= 100:
self.scores[subject] = new_score
return True
return False
def get_total(self):
"""计算总分"""
return sum(self.scores.values())
def get_average(self):
"""计算平均分"""
if not self.scores:
return 0
return self.get_total() / len(self.scores)
def get_max_subject(self):
"""获取最高分科目"""
if not self.scores:
return None, 0
subject = max(self.scores, key=self.scores.get)
return subject, self.scores[subject]
def get_min_subject(self):
"""获取最低分科目"""
if not self.scores:
return None, 0
subject = min(self.scores, key=self.scores.get)
return subject, self.scores[subject]
def get_grade_level(self, score):
"""获取等级"""
if score >= 90:
return "A", "优秀", "🌟"
elif score >= 80:
return "B", "良好", "👍"
elif score >= 70:
return "C", "中等", "💪"
elif score >= 60:
return "D", "及格", "📈"
else:
return "F", "不及格", "📚"
def get_overall_evaluation(self):
"""获取总体评价"""
avg = self.get_average()
if avg >= 95:
return "🏆 全能学霸!各科都非常优秀!"
elif avg >= 90:
return "🌟 非常优秀!继续保持!"
elif avg >= 85:
return "🎯 表现良好!再接再厉!"
elif avg >= 80:
return "👍 基础扎实!继续进步!"
elif avg >= 75:
return "💪 中等偏上!有提升空间!"
elif avg >= 70:
return "📈 中等水平!需要更多努力!"
elif avg >= 60:
return "📚 刚过及格线!要加油了!"
else:
return "💔 需要认真反思,加倍努力!"
def display_report(self):
"""显示成绩报告"""
print(f"\n{'='*60}")
print(f"{'📋 学生成绩报告单':^60}")
print(f"{'='*60}")
print(f"\n👤 姓名:{self.student_name}")
print(f"🏫 班级:{self.class_name}")
print(f"📅 评定日期:2024年1月")
print(f"\n{'='*60}")
print(f"{'科目':<10} {'成绩':>8} {'等级':>6} {'评价':>12} {'建议':>20}")
print(f"{'='*60}")
for subject in self.subjects:
score = self.scores[subject]
grade, grade_name, emoji = self.get_grade_level(score)
# 根据等级给出简短建议
if grade == "A":
advice = "继续保持!"
elif grade == "B":
advice = "争取优秀!"
elif grade == "C":
advice = "多多练习!"
elif grade == "D":
advice = "需要努力!"
else:
advice = "加紧补习!"
print(f"{subject:<10} {score:>8.1f}分 {emoji} {grade:<4} {grade_name:<10} {advice:<12}")
print(f"{'='*60}")
# 统计信息
avg = self.get_average()
total = self.get_total()
max_sub, max_score = self.get_max_subject()
min_sub, min_score = self.get_min_subject()
print(f"\n📊 统计信息:")
print(f" 科目数:{len(self.subjects)}科")
print(f" 总分:{total:.1f}分")
print(f" 平均分:{avg:.1f}分")
print(f" 最高分:{max_sub}({max_score:.1f}分)")
print(f" 最低分:{min_sub}({min_score:.1f}分)")
# 等级分布
print(f"\n📈 等级分布:")
for grade_name in ["优秀", "良好", "中等", "及格", "不及格"]:
count = 0
for subject in self.subjects:
_, name, _ = self.get_grade_level(self.scores[subject])
if name == grade_name:
count += 1
if count > 0:
bar = "█" * count
print(f" {grade_name}:{bar} {count}科")
# 总体评价
print(f"\n💬 总体评价:{self.get_overall_evaluation()}")
# 学习建议
print(f"\n💡 学习建议:")
if min_score < 60:
print(f" • 重点关注{min_sub},需要补习基础")
if max_score - min_score > 20:
print(f" • 注意平衡各科,避免偏科")
if avg < 70:
print(f" • 建议制定每日学习计划")
print(f" • 多向老师和同学请教")
elif avg < 80:
print(f" • 找出薄弱环节,针对性提高")
else:
print(f" • 保持良好的学习状态")
print(f" • 挑战更高难度的内容")
print(f"\n{'='*60}")
print(f"{'祝学习进步!':^60}")
print(f"{'='*60}")
# 使用成绩管理器
print("欢迎使用成绩管理系统!")
print("-" * 30)
name = input("学生姓名:")
class_name = input("班级:")
manager = GradeManager(name, class_name)
print("\n请输入各科成绩(输入-1结束):")
while True:
subject = input(f"\n科目名称(输入-1结束):")
if subject == "-1":
break
try:
score = float(input(f"{subject}成绩:"))
if score == -1:
break
if manager.add_subject(subject, score):
print(f"✅ 已记录:{subject} {score}分")
else:
print("❌ 成绩无效(0-100)")
except ValueError:
print("❌ 请输入数字!")
if manager.subjects:
manager.display_report()
# 保存报告
save = input("\n💾 是否保存成绩报告?(是/否):")
if save == "是":
filename = f"{name}_成绩报告.txt"
with open(filename, "w", encoding="utf-8") as f:
f.write(f"学生:{name}\n")
f.write(f"班级:{class_name}\n\n")
for subject in manager.subjects:
f.write(f"{subject}:{manager.scores[subject]}分\n")
f.write(f"\n平均分:{manager.get_average():.1f}分\n")
print(f"✅ 已保存到:{filename}")
else:
print("❌ 没有输入成绩!")
3.2 成绩预测系统
# 成绩预测系统
print("\n🔮 成绩预测系统")
print("=" * 50)
def predict_final_score(midterm_score, homework_avg, quiz_avg):
"""预测期末成绩"""
# 权重分配
midterm_weight = 0.4
homework_weight = 0.3
quiz_weight = 0.3
predicted = (midterm_score * midterm_weight +
homework_avg * homework_weight +
quiz_avg * quiz_weight)
return predicted
def get_prediction_advice(predicted, target):
"""根据预测给出建议"""
gap = target - predicted
if gap <= 0:
return "🎯 目标可达!保持现状即可!"
elif gap <= 5:
return f"💪 只差{gap:.1f}分,稍微努力就能达到!"
elif gap <= 10:
return f"📈 还差{gap:.1f}分,需要加倍努力!"
elif gap <= 20:
return f"📚 差距较大({gap:.1f}分),需要制定详细计划!"
else:
return f"🚩 差距很大({gap:.1f}分),建议调整目标或全力冲刺!"
print("欢迎使用成绩预测系统!")
print("我可以根据期中成绩、作业和测验预测期末成绩\n")
try:
midterm = float(input("期中考试成绩:"))
homework = float(input("平时作业平均分:"))
quiz = float(input("小测验平均分:"))
target = float(input("目标期末成绩:"))
if all(0 <= x <= 100 for x in [midterm, homework, quiz, target]):
predicted = predict_final_score(midterm, homework, quiz)
print(f"\n{'='*50}")
print(f"{'🔮 成绩预测报告':^50}")
print(f"{'='*50}")
print(f"\n📊 输入数据:")
print(f" 期中成绩:{midterm}分(权重40%)")
print(f" 作业平均:{homework}分(权重30%)")
print(f" 测验平均:{quiz}分(权重30%)")
print(f" 目标成绩:{target}分")
print(f"\n📈 预测结果:")
print(f" 预测期末成绩:{predicted:.1f}分")
grade, grade_name, emoji = get_grade_level(predicted)
print(f" 预测等级:{emoji} {grade}({grade_name})")
print(f"\n💡 建议:{get_prediction_advice(predicted, target)}")
# 如果需要努力,给出具体建议
if predicted < target:
needed = target - predicted
print(f"\n📋 提升计划:")
print(f" 需要提高:{needed:.1f}分")
# 建议提高哪方面
if homework < 80:
print(f" • 提高作业质量:作业每提高10分,总分提高3分")
if quiz < 80:
print(f" • 加强测验准备:测验每提高10分,总分提高3分")
if midterm < 80:
print(f" • 复习期中内容:期中每提高10分,总分提高4分")
print(f" • 每天多花30分钟复习")
print(f" • 每周做一套模拟题")
else:
print("❌ 所有成绩应在0-100之间!")
except ValueError:
print("❌ 请输入有效的数字!")
def get_grade_level(score):
"""辅助函数:获取等级"""
if score >= 90:
return "A", "优秀", "🌟"
elif score >= 80:
return "B", "良好", "👍"
elif score >= 70:
return "C", "中等", "💪"
elif score >= 60:
return "D", "及格", "📈"
else:
return "F", "不及格", "📚"
📅 下节课预告
第26课:简易计算器升级版——带错误处理的四则运算
下节课你将学习:
- 综合运用条件判断和错误处理
- 制作带异常处理的计算器
- 处理除零等特殊情况
- 优化用户交互体验
- 制作可连续运算的计算器
预习思考:
- 计算器会遇到哪些错误情况?
- 如何优雅地处理程序错误?
- 怎样让计算器更易用?
💬 给家长的话
亲爱的家长:
今天孩子制作了完整的成绩评定系统,这是综合运用条件判断知识的实践项目。通过这个项目,孩子学会了如何设计和实现一个完整的程序。
孩子今天学会了:
- ✅ 设计多等级评定逻辑
- ✅ 根据分数给出详细评语和建议
- ✅ 制作多科目成绩管理系统
- ✅ 分析成绩进步趋势
- ✅ 预测期末成绩
成绩评定的教育价值:
| 能力 | 在项目中的应用 | 培养价值 |
|------|---------------|---------|
| 分类思维 | 划分成绩等级 | 逻辑分类 |
| 系统设计 | 设计完整系统 | 架构思维 |
| 数据分析 | 分析成绩趋势 | 数据思维 |
| 建议生成 | 给出学习建议 | 指导能力 |
| 预测分析 | 预测期末成绩 | 前瞻思维 |
您可以这样做:
学习应用:
- 实际使用:用程序管理孩子的真实成绩
- 目标设定:一起设定学习目标并跟踪
- 趋势分析:分析成绩变化趋势
- 学习计划:根据分析制定计划
温馨提示:
- 成绩是学习的反馈,不是唯一标准
- 关注进步过程,而不只是分数
- 用数据分析找到学习方法
- 鼓励孩子用技术帮助学习
🏆 今日成就
完成了今天的学习,你:
📊 制作了成绩评定系统
🏅 设计了多等级评定
📈 分析了进步趋势
🔮 实现了成绩预测
💡 给出了学习建议
挑战任务:
- 添加更多评定维度(如态度、努力程度)
- 制作班级成绩排行榜
- 添加成绩可视化图表
- 实现成绩导出功能
🌟 编程心法
成绩是一面镜子
反映努力的成果
但分数不是终点
进步才是目标
用代码分析数据
用逻辑给出建议
让每一次评定
都成为成长的动力
让每一个建议
都指明前进的方向
学会用技术
帮助自己和他人
这是编程的意义
也是学习的价值
记住:成绩评定不是为了评判,而是为了帮助成长。用编程让学习更有方向,让进步更有力量!
第25课结束。你现在已经是一个成绩评定专家了!
实践任务:
1. 用程序管理真实成绩
2. 制作班级成绩系统
3. 分析进步趋势
4. 给出学习建议
下节课,让我们升级计算器,学习错误处理!
第26课见!