使用python编写程序完成下面问题附带案例代码

题目描述

一个 班有若干名学生, 每名学生已修读了若干门课程并有考试成绩,把学生姓名(假设没有重名学生)和修读的课程名及考试成绩等信息保存起来 ,编写程序实现如下功能(可针对每一项编写一个程序)

(1)根据输人的姓名 ,输出该学生修读的所有课程的课程名及成绩。

(2)根据输人的课程名 ,输出修读了该课程的学生姓名及该门课程

(3)输出所有有不及格成绩的学生姓名及不及格的门数。

(4)输出所有学生已修读课程的课程名, 重复的只输出一次。

(5)按平均成绩的高低输出学生姓名及平均成绩。数据不少于10个

案例代码

以下是根据题目要求编写的Python程序:

class Student:
    def __init__(self, name):
        self.name = name
        self.courses = []
        
    def add_course(self, course_name, score):
        self.courses.append((course_name, score))
        
    def get_courses(self):
        return self.courses
    
    def get_average_score(self):
        total_score = 0
        for _, score in self.courses:
            total_score += score
        return total_score / len(self.courses)
        

students = []

# 添加学生信息
def add_student(name, courses):
    student = Student(name)
    for course_name, score in courses:
        student.add_course(course_name, score)
    students.append(student)

# 根据姓名输出课程名及成绩
def output_courses_by_name(name):
    for student in students:
        if student.name == name:
            for course_name, score in student.get_courses():
                print(f"课程名:{course_name},成绩:{score}")
            return
    print("未找到该学生!")

# 根据课程名输出学生姓名及成绩
def output_students_by_course(course_name):
    students_list = []
    for student in students:
        for course, score in student.get_courses():
            if course == course_name:
                students_list.append(student.name)
                break
    if len(students_list) > 0:
        print(f"修读了该课程的学生姓名及该门课程:{','.join(students_list)}")
    else:
        print("没有学生修读该课程!")

# 输出不及格成绩的学生姓名及门数
def output_failed_students():
    for student in students:
        failed_count = 0
        for _, score in student.get_courses():
            if score < 60:
                failed_count += 1
        if failed_count > 0:
            print(f"学生姓名:{student.name},不及格的门数:{failed_count}")

# 输出所有已修读课程的课程名
def output_course_names():
    course_names = set()
    for student in students:
        for course, _ in student.get_courses():
            course_names.add(course)
    print("所有已修读课程的课程名:")
    for course_name in course_names:
        print(course_name)

# 按平均成绩高低输出学生姓名及平均成绩
def output_students_by_average_score():
    sorted_students = sorted(students, key=lambda student: student.get_average_score(), reverse=True)
    print("按平均成绩高低输出学生姓名及平均成绩:")
    for student in sorted_students:
        print(f"学生姓名:{student.name},平均成绩:{student.get_average_score()}")


# 添加学生信息
add_student("张三", [("数学", 90), ("语文", 85), ("英语", 92)])
add_student("李四", [("数学", 88), ("语文", 76), ("英语", 80)])
add_student("王五", [("数学", 65), ("语文", 80), ("英语", 70)])
add_student("赵六", [("数学", 78), ("语文", 92), ("英语", 85)])
add_student("钱七", [("数学", 82), ("语文", 75), ("英语", 88)])
add_student("孙八", [("数学", 70), ("语文", 60), ("英语", 65)])
add_student("周九", [("数学", 95), ("语文", 88), ("英语", 90)])
add_student("吴十", [("数学", 72), ("语文", 78), ("英语", 82)])
add_student("郑十一", [("数学", 85), ("语文", 90), ("英语", 76)])
add_student("王十二", [("数学", 88), ("语文", 95), ("英语", 92)])

# 根据姓名输出课程名及成绩
output_courses_by_name("张三")

# 根据课程名输出学生姓名及成绩
output_students_by_course("数学")

# 输出不及格成绩的学生姓名及门数
output_failed_students()

# 输出所有已修读课程的课程名
output_course_names()

# 按平均成绩高低输出学生姓名及平均成绩
output_students_by_average_score()

请根据实际情况自行修改学生信息和函数调用部分的数据。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享