第18课:简易成绩单——计算与格式化输出
🎯 本课目标
- 学习计算多个成绩的总分和平均分
- 掌握格式化输出漂亮的成绩单
- 学会判断成绩等级和给出评语
- 制作完整的成绩管理系统
- 综合运用前17课知识解决实际问题
📊 趣味引入:成为班级"小老师"
想象一下:你是班级的"小老师",需要:
- 📝 收集同学们的成绩
- 🧮 计算总分和平均分
- 📈 判断成绩等级
- 💯 生成漂亮的成绩单
- 🎯 给出学习建议
今天,让我们一起用Python制作智能成绩单系统,成为数据处理小专家!
🔧 第一部分:基础成绩计算
1.1 单个学生成绩计算
# 单个学生成绩计算
print("📊 单个学生成绩计算")
print("=" * 40)
# 输入各科成绩
print("\n请输入各科成绩:")
chinese = float(input("语文成绩:"))
math = float(input("数学成绩:"))
english = float(input("英语成绩:"))
science = float(input("科学成绩:"))
# 计算总分和平均分
total = chinese + math + english + science
average = total / 4
# 显示结果
print(f"\n{'='*30}")
print("📈 成绩统计:")
print(f"{'='*30}")
print(f"语文:{chinese:6.1f}分")
print(f"数学:{math:6.1f}分")
print(f"英语:{english:6.1f}分")
print(f"科学:{science:6.1f}分")
print(f"{'-'*30}")
print(f"总分:{total:6.1f}分")
print(f"平均分:{average:6.1f}分")
print(f"{'='*30}")
# 判断等级
if average >= 90:
grade = "A"
comment = "优秀!继续保持!"
elif average >= 80:
grade = "B"
comment = "良好!继续努力!"
elif average >= 70:
grade = "C"
comment = "中等!加油进步!"
elif average >= 60:
grade = "D"
comment = "及格!需要努力!"
else:
grade = "E"
comment = "不及格!要加油了!"
print(f"\n📈 成绩等级:{grade}")
print(f"💡 学习建议:{comment}")
1.2 多个科目扩展
# 多科目成绩计算
print("\n📚 多科目成绩计算")
print("=" * 40)
# 科目列表
subjects = ["语文", "数学", "英语", "科学", "社会", "美术", "体育", "音乐"]
scores = []
print(f"请输入{len(subjects)}科成绩:")
# 收集各科成绩
for subject in subjects:
while True:
try:
score = float(input(f"{subject}成绩:"))
if 0 <= score <= 100:
scores.append(score)
break
else:
print("⚠️ 成绩应该在0-100之间!")
except ValueError:
print("❌ 请输入数字!")
# 计算统计
total = sum(scores)
average = total / len(scores)
highest = max(scores)
lowest = min(scores)
# 显示漂亮的成绩单
print(f"\n{'='*50}")
print(f"{'📊 成绩单':^50}")
print(f"{'='*50}")
print(f"\n{'科目':<8} {'成绩':>8} {'等级':>6} {'评价':>10}")
print(f"{'-'*40}")
for i, (subject, score) in enumerate(zip(subjects, scores)):
# 判断单科等级
if score >= 90:
grade = "A"
eval_text = "优秀"
elif score >= 80:
grade = "B"
eval_text = "良好"
elif score >= 70:
grade = "C"
eval_text = "中等"
elif score >= 60:
grade = "D"
eval_text = "及格"
else:
grade = "E"
eval_text = "需努力"
print(f"{subject:<8} {score:>8.1f}分 {grade:>6} {eval_text:>10}")
print(f"{'='*50}")
# 显示统计信息
print(f"\n📈 统计信息:")
print(f" 科目数量:{len(subjects)}科")
print(f" 总分:{total:.1f}分")
print(f" 平均分:{average:.1f}分")
print(f" 最高分:{highest:.1f}分")
print(f" 最低分:{lowest:.1f}分")
# 计算与满分的差距
perfect_score = 100 * len(subjects)
gap = perfect_score - total
print(f" 与满分差距:{gap:.1f}分")
🎨 第二部分:格式化成绩单
2.1 精美成绩单模板
# 精美成绩单模板
print("🎨 精美成绩单生成器")
print("=" * 50)
# 学生信息
student_info = {
"name": "张小明",
"class": "五年级二班",
"student_id": "2023001",
"exam_date": "2023-12-20",
"teacher": "李老师"
}
# 成绩数据
grades = {
"语文": 88.5,
"数学": 92.0,
"英语": 85.0,
"科学": 90.5,
"社会": 87.0,
"美术": 95.0,
"体育": 93.0,
"音乐": 89.0
}
# 计算统计
total = sum(grades.values())
average = total / len(grades)
subject_count = len(grades)
# 生成成绩单
print("\n" + "⭐" * 20)
print(f"{'成绩报告单':^40}")
print("⭐" * 20)
# 学生信息
print(f"\n👤 学生姓名:{student_info['name']}")
print(f"🏫 所在班级:{student_info['class']}")
print(f"🆔 学号:{student_info['student_id']}")
print(f"📅 考试日期:{student_info['exam_date']}")
print(f"👨🏫 班主任:{student_info['teacher']}")
print(f"\n{'='*50}")
print(f"{'科目':<10} {'成绩':>8} {'等级':>8} {'评语':>15}")
print(f"{'='*50}")
# 各科成绩
for subject, score in grades.items():
# 判断等级
if score >= 90:
grade = "A"
comment = "优秀"
symbol = "⭐"
elif score >= 80:
grade = "B"
comment = "良好"
symbol = "👍"
elif score >= 70:
grade = "C"
comment = "中等"
symbol = "💪"
elif score >= 60:
grade = "D"
comment = "及格"
symbol = "📈"
else:
grade = "E"
comment = "加油"
symbol = "💪"
print(f"{subject:<10} {score:>8.1f}分 {grade:>8} {symbol} {comment:>10}")
print(f"{'='*50}")
# 统计信息
print(f"\n📊 成绩统计:")
print(f"{'-'*30}")
print(f" 科目总数:{subject_count:>8}科")
print(f" 总分:{total:>12.1f}分")
print(f" 平均分:{average:>11.1f}分")
print(f" 最高分:{max(grades.values()):>11.1f}分")
print(f" 最低分:{min(grades.values()):>11.1f}分")
# 总体评价
if average >= 90:
overall = "🏆 优秀!继续保持!"
elif average >= 80:
overall = "🎯 良好!继续努力!"
elif average >= 70:
overall = "💪 中等!加油进步!"
elif average >= 60:
overall = "📈 及格!需要加倍努力!"
else:
overall = "🚩 不及格!要加油了!"
print(f"\n💬 总体评价:{overall}")
print(f"\n⭐" * 20)
print(f"{'祝学习进步!':^40}")
print("⭐" * 20)
2.2 带进度条的成绩单
# 带进度条的成绩单
print("📈 可视化成绩单")
print("=" * 50)
# 模拟数据
subjects = ["语文", "数学", "英语", "科学", "美术", "体育"]
scores = [85, 92, 78, 88, 95, 90]
print(f"\n📊 成绩进度图")
print(f"{'='*50}")
# 显示每个科目的进度条
for subject, score in zip(subjects, scores):
# 计算进度条长度(每个百分点用2个字符)
bar_length = int(score * 0.4) # 100分对应40个字符
# 选择颜色
if score >= 90:
bar_char = "█"
color = "🟩" # 绿色
elif score >= 80:
bar_char = "▓"
color = "🟨" # 黄色
elif score >= 70:
bar_char = "▒"
color = "🟧" # 橙色
elif score >= 60:
bar_char = "░"
color = "🟥" # 红色
else:
bar_char = " "
color = "⬛" # 黑色
# 生成进度条
progress_bar = bar_char * bar_length
# 判断等级
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "E"
# 显示
print(f"{subject:4} [{color}{progress_bar:40}] {score:3}分 ({grade})")
print(f"{'='*50}")
# 计算统计
total = sum(scores)
average = total / len(scores)
highest = max(scores)
lowest = min(scores)
# 平均分进度条
avg_bar_length = int(average * 0.4)
avg_bar = "█" * avg_bar_length
if average >= 90:
avg_color = "🟩"
avg_grade = "优秀"
elif average >= 80:
avg_color = "🟨"
avg_grade = "良好"
elif average >= 70:
avg_color = "🟧"
avg_grade = "中等"
elif average >= 60:
avg_color = "🟥"
avg_grade = "及格"
else:
avg_color = "⬛"
avg_grade = "需努力"
print(f"\n📈 平均分 [{avg_color}{avg_bar:40}] {average:5.1f}分 ({avg_grade})")
# 显示统计
print(f"\n📊 统计信息:")
print(f" 总分:{total:6.1f}分")
print(f" 平均分:{average:5.1f}分")
print(f" 最高分:{highest:5.1f}分")
print(f" 最低分:{lowest:5.1f}分")
print(f" 科目数:{len(subjects):6}科")
# 进步空间
improvement = 100 - average
print(f" 进步空间:{improvement:4.1f}分")
if improvement < 10:
print("\n💡 建议:已经很棒了!保持就是进步!")
elif improvement < 20:
print("\n💡 建议:很不错!再努力一点点!")
elif improvement < 30:
print("\n💡 建议:有进步空间,继续加油!")
else:
print("\n💡 建议:需要制定学习计划,稳步提升!")
📁 第三部分:成绩管理系统
3.1 单个学生成绩管理
# 单个学生成绩管理系统
print("🎒 单个学生成绩管理系统")
print("=" * 50)
# 学生类
class Student:
def __init__(self, name, student_id, class_name):
"""初始化学生信息"""
self.name = name
self.student_id = student_id
self.class_name = class_name
self.grades = {} # 科目:成绩
self.comments = [] # 评语
def add_grade(self, subject, score):
"""添加成绩"""
self.grades[subject] = score
def calculate_total(self):
"""计算总分"""
return sum(self.grades.values())
def calculate_average(self):
"""计算平均分"""
if not self.grades:
return 0
return self.calculate_total() / len(self.grades)
def get_highest(self):
"""获取最高分"""
if not self.grades:
return 0
return max(self.grades.values())
def get_lowest(self):
"""获取最低分"""
if not self.grades:
return 0
return min(self.grades.values())
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 "E", "需努力"
def get_overall_evaluation(self):
"""获取总体评价"""
average = self.calculate_average()
if average >= 90:
return "🏆 优秀!学习态度认真,成绩优异!"
elif average >= 80:
return "🎯 良好!学习努力,继续保持!"
elif average >= 70:
return "💪 中等!有进步空间,继续加油!"
elif average >= 60:
return "📈 及格!需要更加努力!"
else:
return "🚩 不及格!要制定学习计划,迎头赶上!"
def display_report(self):
"""显示成绩报告"""
print(f"\n{'='*60}")
print(f"{'📊 学生成绩报告单':^60}")
print(f"{'='*60}")
# 基本信息
print(f"\n👤 学生姓名:{self.name}")
print(f"🏫 所在班级:{self.class_name}")
print(f"🆔 学号:{self.student_id}")
print(f"\n{'='*60}")
print(f"{'科目':<10} {'成绩':>8} {'等级':>8} {'评价':>12} {'排名':>8}")
print(f"{'='*60}")
# 各科成绩
for i, (subject, score) in enumerate(self.grades.items(), 1):
grade, evaluation = self.get_grade_level(score)
# 选择图标
if grade == "A":
icon = "⭐"
elif grade == "B":
icon = "👍"
elif grade == "C":
icon = "💪"
elif grade == "D":
icon = "📈"
else:
icon = "💪"
print(f"{subject:<10} {score:>8.1f}分 {grade:>8} {icon} {evaluation:>10} #{i:>6}")
print(f"{'='*60}")
# 统计信息
print(f"\n📈 成绩统计:")
print(f"{'-'*40}")
print(f" 科目总数:{len(self.grades):>6}科")
print(f" 总分:{self.calculate_total():>10.1f}分")
print(f" 平均分:{self.calculate_average():>9.1f}分")
print(f" 最高分:{self.get_highest():>9.1f}分")
print(f" 最低分:{self.get_lowest():>9.1f}分")
# 总体评价
print(f"\n💬 总体评价:{self.get_overall_evaluation()}")
# 学习建议
average = self.calculate_average()
if average >= 90:
suggestion = "继续保持优秀的学习习惯,可以挑战更高难度的学习内容。"
elif average >= 80:
suggestion = "良好的基础,可以在薄弱科目上多下功夫,争取全科优秀。"
elif average >= 70:
suggestion = "有进步空间,建议制定学习计划,重点突破薄弱科目。"
elif average >= 60:
suggestion = "需要加倍努力,建议寻求老师或同学帮助,打好基础。"
else:
suggestion = "需要立即制定详细学习计划,从基础开始,逐步提高。"
print(f"\n💡 学习建议:{suggestion}")
print(f"\n{'='*60}")
print(f"{'祝:学习进步,天天向上!':^60}")
print(f"{'='*60}")
# 使用示例
print("\n🎯 创建学生档案")
# 输入学生信息
name = input("学生姓名:")
student_id = input("学号:")
class_name = input("班级:")
# 创建学生对象
student = Student(name, student_id, class_name)
# 输入成绩
print(f"\n📝 输入{name}的成绩(输入'完成'结束):")
subject_count = 0
while True:
subject = input(f"\n科目{subject_count+1}名称(输入'完成'结束):")
if subject.lower() in ['完成', 'done', 'end']:
break
while True:
try:
score = float(input(f"{subject}成绩:"))
if 0 <= score <= 100:
student.add_grade(subject, score)
subject_count += 1
break
else:
print("⚠️ 成绩应该在0-100之间!")
except ValueError:
print("❌ 请输入数字!")
# 显示成绩报告
if student.grades:
student.display_report()
# 保存到文件
save = input("\n💾 是否保存成绩报告到文件?(是/否): ")
if save.lower() in ['是', 'yes', 'y']:
filename = f"{name}_成绩报告.txt"
try:
with open(filename, 'w', encoding='utf-8') as f:
# 这里可以添加文件保存代码
f.write(f"学生姓名:{name}\n")
f.write(f"学号:{student_id}\n")
f.write(f"班级:{class_name}\n\n")
for subject, score in student.grades.items():
f.write(f"{subject}:{score}分\n")
f.write(f"\n总分:{student.calculate_total()}分\n")
f.write(f"平均分:{student.calculate_average():.1f}分\n")
print(f"✅ 已保存到:{filename}")
except:
print("❌ 保存失败!")
else:
print("❌ 没有输入任何成绩!")
3.2 班级成绩管理系统
# 班级成绩管理系统
print("👥 班级成绩管理系统")
print("=" * 50)
class ClassGradeManager:
def __init__(self, class_name, teacher):
"""初始化班级信息"""
self.class_name = class_name
self.teacher = teacher
self.students = [] # 学生列表
self.subjects = ["语文", "数学", "英语", "科学", "社会"]
def add_student(self, name, student_id):
"""添加学生"""
student = {
"name": name,
"id": student_id,
"grades": {},
"total": 0,
"average": 0,
"rank": 0
}
self.students.append(student)
print(f"✅ 添加学生:{name} (学号:{student_id})")
def input_grades(self):
"""输入成绩"""
if not self.students:
print("❌ 还没有学生!")
return
print(f"\n📝 输入{self.class_name}班成绩")
print("-" * 30)
for student in self.students:
print(f"\n👤 学生:{student['name']} (学号:{student['id']})")
total = 0
for subject in self.subjects:
while True:
try:
score = float(input(f" {subject}成绩:"))
if 0 <= score <= 100:
student['grades'][subject] = score
total += score
break
else:
print(" ⚠️ 成绩应该在0-100之间!")
except ValueError:
print(" ❌ 请输入数字!")
student['total'] = total
student['average'] = total / len(self.subjects)
def calculate_ranks(self):
"""计算排名"""
# 按总分排序
sorted_students = sorted(self.students, key=lambda x: x['total'], reverse=True)
# 分配名次
for i, student in enumerate(sorted_students, 1):
student['rank'] = i
def display_class_report(self):
"""显示班级成绩报告"""
if not self.students:
print("❌ 还没有学生数据!")
return
self.calculate_ranks()
print(f"\n{'='*70}")
print(f"{'📊 班级成绩报告单':^70}")
print(f"{'='*70}")
print(f"\n🏫 班级:{self.class_name}")
print(f"👨🏫 班主任:{self.teacher}")
print(f"👥 学生人数:{len(self.students)}人")
print(f"📚 考试科目:{len(self.subjects)}科")
print(f"\n{'='*70}")
print(f"{'排名':<6} {'姓名':<8} {'学号':<10}", end="")
for subject in self.subjects:
print(f" {subject:<6}", end="")
print(f" {'总分':<8} {'平均分':<8} {'等级':<6}")
print(f"{'-'*70}")
for student in sorted(self.students, key=lambda x: x['rank']):
# 判断等级
avg = student['average']
if avg >= 90:
grade = "A"
grade_icon = "⭐"
elif avg >= 80:
grade = "B"
grade_icon = "👍"
elif avg >= 70:
grade = "C"
grade_icon = "💪"
elif avg >= 60:
grade = "D"
grade_icon = "📈"
else:
grade = "E"
grade_icon = "💪"
# 显示学生信息
print(f"{student['rank']:^6} {student['name']:<8} {student['id']:<10}", end="")
# 显示各科成绩
for subject in self.subjects:
score = student['grades'].get(subject, 0)
print(f" {score:>6.1f}", end="")
# 显示统计
print(f" {student['total']:>8.1f} {student['average']:>8.1f} {grade_icon} {grade:>6}")
print(f"{'='*70}")
# 班级统计
class_total_avg = sum(s['average'] for s in self.students) / len(self.students)
class_highest_avg = max(s['average'] for s in self.students)
class_lowest_avg = min(s['average'] for s in self.students)
# 各科平均分
print(f"\n📈 班级各科平均分:")
for subject in self.subjects:
subject_avg = sum(s['grades'].get(subject, 0) for s in self.students) / len(self.students)
print(f" {subject}:{subject_avg:6.1f}分")
print(f"\n📊 班级总体统计:")
print(f" 班级平均分:{class_total_avg:6.1f}分")
print(f" 最高平均分:{class_highest_avg:6.1f}分")
print(f" 最低平均分:{class_lowest_avg:6.1f}分")
# 优秀率(平均分≥85)
excellent_count = sum(1 for s in self.students if s['average'] >= 85)
excellent_rate = (excellent_count / len(self.students)) * 100
# 及格率(平均分≥60)
pass_count = sum(1 for s in self.students if s['average'] >= 60)
pass_rate = (pass_count / len(self.students)) * 100
print(f"\n📈 班级评级:")
print(f" 优秀率:{excellent_rate:6.1f}% ({excellent_count}/{len(self.students)})")
print(f" 及格率:{pass_rate:6.1f}% ({pass_count}/{len(self.students)})")
# 班级评价
if class_total_avg >= 85:
eval_text = "🏆 优秀班级!继续保持!"
elif class_total_avg >= 75:
eval_text = "🎯 良好班级!继续努力!"
elif class_total_avg >= 65:
eval_text = "💪 中等班级!加油进步!"
else:
eval_text = "📈 需要努力!一起加油!"
print(f"\n💬 班级评价:{eval_text}")
print(f"{'='*70}")
# 使用示例
print("\n🏫 创建班级信息")
class_name = input("班级名称:")
teacher = input("班主任:")
# 创建班级管理器
manager = ClassGradeManager(class_name, teacher)
# 添加学生
print(f"\n👥 添加学生(输入'完成'结束):")
student_count = 0
while True:
name = input(f"\n学生{student_count+1}姓名(输入'完成'结束):")
if name.lower() in ['完成', 'done', 'end']:
break
student_id = input(f"学号:")
manager.add_student(name, student_id)
student_count += 1
# 输入成绩
if manager.students:
input_grades = input("\n📝 现在输入成绩吗?(是/否): ")
if input_grades.lower() in ['是', 'yes', 'y']:
manager.input_grades()
# 显示报告
display_report = input("\n📊 显示班级成绩报告吗?(是/否): ")
if display_report.lower() in ['是', 'yes', 'y']:
manager.display_class_report()
# 保存报告
save = input("\n💾 是否保存班级报告?(是/否): ")
if save.lower() in ['是', 'yes', 'y']:
filename = f"{class_name}_成绩报告.txt"
try:
with open(filename, 'w', encoding='utf-8') as f:
f.write(f"班级:{class_name}\n")
f.write(f"班主任:{teacher}\n")
f.write(f"学生人数:{len(manager.students)}\n\n")
for student in manager.students:
f.write(f"{student['name']}:")
for subject in manager.subjects:
score = student['grades'].get(subject, 0)
f.write(f"{subject}{score}分 ")
f.write(f"总分{student['total']}分\n")
print(f"✅ 已保存到:{filename}")
except:
print("❌ 保存失败!")
else:
print("❌ 没有输入成绩!")
else:
print("❌ 没有添加学生!")
📈 第四部分:进阶功能
4.1 成绩趋势分析
# 成绩趋势分析
print("📈 成绩趋势分析工具")
print("=" * 50)
def analyze_grades(grades_dict):
"""
分析成绩趋势
参数:
grades_dict: 科目成绩字典
返回:
分析结果字典
"""
if not grades_dict:
return {"error": "没有成绩数据"}
subjects = list(grades_dict.keys())
scores = list(grades_dict.values())
# 基础统计
total = sum(scores)
average = total / len(scores)
highest = max(scores)
lowest = min(scores)
# 找出最高和最低的科目
highest_subject = subjects[scores.index(highest)]
lowest_subject = subjects[scores.index(lowest)]
# 分析优势科目和薄弱科目
strong_subjects = []
weak_subjects = []
for subject, score in grades_dict.items():
if score >= 90:
strong_subjects.append((subject, score))
elif score < 70:
weak_subjects.append((subject, score))
# 计算与平均分的差距
gaps = {}
for subject, score in grades_dict.items():
gaps[subject] = score - average
return {
"total": total,
"average": average,
"highest": highest,
"lowest": lowest,
"highest_subject": highest_subject,
"lowest_subject": lowest_subject,
"strong_subjects": strong_subjects,
"weak_subjects": weak_subjects,
"gaps": gaps,
"subject_count": len(subjects)
}
def display_analysis(analysis):
"""显示分析结果"""
if "error" in analysis:
print(analysis["error"])
return
print(f"\n{'='*50}")
print(f"{'📈 成绩分析报告':^50}")
print(f"{'='*50}")
print(f"\n📊 基础统计:")
print(f" 科目总数:{analysis['subject_count']:>6}科")
print(f" 总分:{analysis['total']:>10.1f}分")
print(f" 平均分:{analysis['average']:>9.1f}分")
print(f" 最高分:{analysis['highest']:>9.1f}分 ({analysis['highest_subject']})")
print(f" 最低分:{analysis['lowest']:>9.1f}分 ({analysis['lowest_subject']})")
# 优势科目
if analysis['strong_subjects']:
print(f"\n⭐ 优势科目:")
for subject, score in analysis['strong_subjects']:
print(f" • {subject}: {score:.1f}分 (优秀!)")
# 薄弱科目
if analysis['weak_subjects']:
print(f"\n📈 需要加强的科目:")
for subject, score in analysis['weak_subjects']:
gap = 70 - score
print(f" • {subject}: {score:.1f}分 (还需提高{gap:.1f}分)")
# 与平均分的差距
print(f"\n📉 各科与平均分的差距:")
for subject, gap in analysis['gaps'].items():
if gap > 0:
print(f" • {subject}: +{gap:.1f}分 (高于平均分)")
elif gap < 0:
print(f" • {subject}: {gap:.1f}分 (低于平均分)")
else:
print(f" • {subject}: 正好是平均分")
# 学习建议
print(f"\n💡 学习建议:")
if analysis['average'] >= 90:
if analysis['weak_subjects']:
print(" 优势明显,重点加强薄弱科目,争取全科优秀!")
else:
print(" 全科优秀!可以挑战更高难度的学习内容。")
elif analysis['average'] >= 80:
if analysis['weak_subjects']:
print(" 整体良好,集中精力提高薄弱科目。")
else:
print(" 各科均衡,稳步提高,争取进入优秀行列。")
elif analysis['average'] >= 70:
print(" 中等水平,需要制定详细学习计划,重点突破。")
elif analysis['average'] >= 60:
print(" 及格水平,需要加倍努力,从基础开始巩固。")
else:
print(" 需要立即寻求帮助,制定个性化学习方案。")
print(f"\n{'='*50}")
# 使用示例
print("\n📝 输入成绩进行分析")
grades = {}
while True:
subject = input("\n科目名称(输入'完成'结束):")
if subject.lower() in ['完成', 'done', 'end']:
break
try:
score = float(input(f"{subject}成绩:"))
if 0 <= score <= 100:
grades[subject] = score
else:
print("⚠️ 成绩应该在0-100之间!")
except ValueError:
print("❌ 请输入数字!")
# 进行分析
if grades:
analysis = analyze_grades(grades)
display_analysis(analysis)
else:
print("❌ 没有输入成绩!")
4.2 目标成绩计算器
# 目标成绩计算器
print("🎯 目标成绩计算器")
print("=" * 50)
def calculate_target(current_grades, target_average, new_subjects_count=0):
"""
计算需要达到的目标成绩
参数:
current_grades: 当前成绩列表
target_average: 目标平均分
new_subjects_count: 新增科目数量
返回:
计算结果字典
"""
if not current_grades:
return {"error": "没有当前成绩数据"}
# 当前统计
current_total = sum(current_grades)
current_count = len(current_grades)
current_average = current_total / current_count
# 计算需要的总成绩
total_subjects = current_count + new_subjects_count
needed_total = target_average * total_subjects
# 计算需要在新增科目中获得的分数
if new_subjects_count > 0:
needed_new_total = needed_total - current_total
needed_new_average = needed_new_total / new_subjects_count
else:
needed_new_total = 0
needed_new_average = 0
# 计算平均需要提高的分数
improvement_per_subject = (target_average - current_average) * total_subjects / current_count
return {
"current_average": current_average,
"target_average": target_average,
"current_total": current_total,
"needed_total": needed_total,
"improvement_needed": target_average - current_average,
"improvement_per_subject": improvement_per_subject,
"needed_new_average": needed_new_average,
"current_subject_count": current_count,
"new_subject_count": new_subjects_count
}
def display_target_calculation(result):
"""显示目标计算结果"""
if "error" in result:
print(result["error"])
return
print(f"\n{'='*50}")
print(f"{'🎯 目标成绩分析':^50}")
print(f"{'='*50}")
print(f"\n📊 当前情况:")
print(f" 当前平均分:{result['current_average']:.1f}分")
print(f" 目标平均分:{result['target_average']:.1f}分")
print(f" 需要提高:{result['improvement_needed']:.1f}分")
if result['new_subject_count'] > 0:
print(f"\n📈 新增{result['new_subject_count']}科后:")
print(f" 需要在新增科目中平均获得:{result['needed_new_average']:.1f}分")
print(f"\n💡 达成目标的建议:")
improvement = result['improvement_needed']
if improvement <= 0:
print(" ✅ 已经达到目标!继续保持!")
elif improvement <= 5:
print(f" 📈 只需提高{improvement:.1f}分,轻松可达!")
print(" 建议:保持当前学习节奏,注意细节。")
elif improvement <= 10:
print(f" 🎯 需要提高{improvement:.1f}分,需要努力!")
print(" 建议:增加学习时间,重点复习薄弱点。")
elif improvement <= 20:
print(f" 💪 需要提高{improvement:.1f}分,需要加倍努力!")
print(" 建议:制定详细计划,寻求老师帮助。")
else:
print(f" 🚩 需要提高{improvement:.1f}分,需要重大改进!")
print(" 建议:全面调整学习方法,从基础开始。")
# 分科目提高建议
if result['current_subject_count'] > 0 and improvement > 0:
per_subject = result['improvement_per_subject']
print(f"\n📚 分科目提高建议:")
print(f" 平均每科需要提高:{per_subject:.1f}分")
if per_subject <= 3:
print(" • 每次作业多检查一遍")
print(" • 上课多回答一个问题")
elif per_subject <= 6:
print(" • 每天多复习30分钟")
print(" • 多做一套练习题")
elif per_subject <= 10:
print(" • 制定每日学习计划")
print(" • 重点攻克薄弱知识点")
else:
print(" • 需要系统性的学习计划")
print(" • 考虑课外辅导或学习小组")
print(f"\n{'='*50}")
# 使用示例
print("\n🎯 计算目标成绩")
# 输入当前成绩
current_grades = []
print("\n📝 输入当前各科成绩(输入'完成'结束):")
while True:
try:
grade_input = input(f"科目{len(current_grades)+1}成绩(输入'完成'结束):")
if grade_input.lower() in ['完成', 'done', 'end']:
break
grade = float(grade_input)
if 0 <= grade <= 100:
current_grades.append(grade)
else:
print("⚠️ 成绩应该在0-100之间!")
except ValueError:
print("❌ 请输入数字!")
if current_grades:
# 输入目标
while True:
try:
target_average = float(input("\n🎯 目标平均分:"))
if 0 <= target_average <= 100:
break
else:
print("⚠️ 平均分应该在0-100之间!")
except ValueError:
print("❌ 请输入数字!")
# 是否新增科目
new_subjects = input("\n📚 下学期会增加新科目吗?(是/否): ")
new_subjects_count = 0
if new_subjects.lower() in ['是', 'yes', 'y']:
while True:
try:
new_subjects_count = int(input("新增几门科目?"))
if new_subjects_count >= 0:
break
else:
print("⚠️ 请输入非负数!")
except ValueError:
print("❌ 请输入整数!")
# 计算
result = calculate_target(current_grades, target_average, new_subjects_count)
display_target_calculation(result)
else:
print("❌ 没有输入成绩!")
📅 下节课预告
第19课:单位转换器——长度、重量、温度转换
下节课你将学习:
- 长度单位转换(米、厘米、千米、英尺、英寸)
- 重量单位转换(千克、克、斤、磅)
- 温度单位转换(摄氏度、华氏度)
- 制作多功能单位转换器
- 实际生活中的单位转换应用
预习思考:
- 1米等于多少厘米?多少英尺?
- 1千克等于多少克?多少斤?
- 摄氏度和华氏度如何转换?
💬 给家长的话
亲爱的家长:
今天孩子学习了成绩单的制作和分析,这是将编程与学习结合的实际应用,能帮助孩子更好地理解数据处理和数学计算。
孩子今天学会了:
- ✅ 计算多个成绩的总分和平均分
- ✅ 制作格式化的漂亮成绩单
- ✅ 判断成绩等级和给出评语
- ✅ 管理班级成绩数据
- ✅ 分析成绩趋势和制定目标
成绩管理的实际价值:
| 技能 | 在成绩管理中的应用 | 教育意义 | 能力培养 |
|------|------------------|---------|---------|
| 数学计算 | 计算总分、平均分 | 数学应用 | 计算能力 |
| 数据处理 | 管理多科成绩 | 数据分析 | 逻辑思维 |
| 格式化输出 | 制作成绩单 | 展示能力 | 审美能力 |
| 条件判断 | 判断等级、给出评语 | 评价思维 | 判断能力 |
您可以这样做:
学习应用:
- 实际使用:用这个程序管理孩子的真实成绩
- 目标设定:一起设定学习目标并跟踪进度
- 数据分析:分析成绩趋势,找出强弱项
- 学习计划:根据分析结果制定学习计划
思维训练:
- 讨论:如何公平地评价学习成绩?
- 思考:成绩单应该包含哪些信息?
- 设计:如何改进成绩单的显示效果?
- 实践:用程序帮助管理学习进度
温馨提示:
- 成绩是学习的反馈,不是唯一标准
- 鼓励孩子关注进步过程,而不只是分数
- 通过数据分析找到学习方法
- 用技术帮助学习,让学习更有趣
🏆 今日成就
完成了今天的学习,你:
📊 掌握了成绩计算方法
🎨 学会了格式化输出
📈 能制作专业成绩单
🎯 会分析成绩趋势
💡 能给学习建议
挑战任务:
- 制作自己的真实成绩单
- 为班级制作成绩管理系统
- 设计个性化学习目标计算器
- 分析一学期的成绩变化趋势
🌟 编程心法
数据是学习的一面镜子
成绩是努力的一个标尺
用代码收集数据
用计算分析趋势
用格式呈现结果
用建议指引方向
编程让学习可视化
数据让进步可衡量
从今天起
用技术管理学习
用数据驱动进步
记住:编程不仅是创造工具,更是解决问题的方法。用编程帮助学习,让技术为成长服务!
第18课结束。你现在已经是成绩管理小专家了!
实践任务:
1. 制作个人学期成绩单
2. 设计班级成绩管理系统
3. 创建学习目标计算器
4. 分析成绩进步趋势
下节课,让我们学习单位转换,用编程解决实际问题!
第19课见!📏