程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

MOOC——学生数据库

发布于2024-11-06 19:33     阅读(72)     评论(0)     点赞(19)     收藏(1)


我是 Python 新手,正在使用 MOOC 课程学习(和 Udemy)。我遇到了这个练习,并陷入了困境:

学生数据库练习 - 第 3 部分

我写了这段代码(未完成!),但我遇到了 add_course 函数的问题。我无法忽略添加成绩较低的课程。我也尝试了 for 循环。

有人能帮我吗?非常感谢!

# Write your solution here
def add_student(database: dict, name: str):
    courses = []
    database[name] = courses

def add_course(database: dict, name: str, course: tuple):
    courses = database[name]
    if course[1] == 0:
        pass
    elif course[0] in courses:
        pass
    else:
        courses.append(course)
    
def print_student(database: dict, name: str):
    if name not in database:
        print(f"{name}: no such person in the database")
    else:
        if len(database[name]) == 0:
            print(f"{name}:")
            print(" no completed courses")
        else:
            completed_courses = len(database[name])
            sum_grades = 0
            print(f"{name}:")
            print(f" {completed_courses} completed courses:")
            for courses in database[name]:
                sum_grades += courses[1]
                avg_grade = sum_grades / len(database[name])
                print(f"  {courses[0]} {courses[1]}")
            print(f" average grade {avg_grade}")

#def summary(database: dict):
#    pass

if __name__ == "__main__":
    students = {}
    add_student(students, "Peter")
    add_course(students, "Peter", ("Introduction to Programming", 3))
    add_course(students, "Peter", ("Advanced Course in Programming", 2))
    add_course(students, "Peter", ("Data Structures and Algorithms", 0))
    add_course(students, "Peter", ("Introduction to Programming", 2))
    print_student(students, "Peter")

尝试:对于循环,首先附加到另一个列表。

预期:如果该课程已经存在于该特定学生的信息数据库中,则重修该课程时数据库中记录的成绩绝不会降低。

现在的结果是:我得到了重复的。


解决方案


我收到了重复的邮件。

发生这种情况是因为add_course您在函数中检查:

elif course[0] in courses:

但这种比较永远是False;你没有添加course[0]到列表中;你正在添加course

courses.append(course)

您需要更新您的重复支票:

elif course in courses:

工作代码如下:

def add_course(
    database: dict[str, list[tuple[str, int]]], name: str, course: tuple[str, int]
):
    courses = database[name]
    if course[1] == 0:
        pass
    elif course in courses:
        pass
    else:
        courses.append(course)

请注意,我在这里展示了更新的类型注释,它们不会影响代码的操作,但它们会让类型检查器感到满意(如果您愿意使用类型注释,那么您应该在开发环境中运行它)。

如果您碰巧使用同一门课程但不同的成绩来调用它,这仍然可能导致名义上的重复:

add_course(students, 'Peter', ('example course', 1))
add_course(students, 'Peter', ('example course', 2))

这将导致:

>>> students
{'Peter': [('example course', 1), ('example course', 2)]}

看起来这并不是您需要担心的情​​况,但如果是的话,您可以像这样重写:

def add_course(
    database: dict[str, list[tuple[str, int]]], name: str, course: tuple[str, int]
):
    courses = database[name]
    if course[1] == 0:
        pass
    elif any(
        entry[0] == course[0] for student in database.values() for entry in student
    ):
        pass
    else:
        courses.append(course)

这仅使用课程名称来确定重复项。通过此更改,上述示例将导致:

>>> students
{'Peter': [('example course', 1)}


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2043856/52d133cd264ff837baea/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)