首页 > 解决方案 > 有没有办法在收集分数之前收集所有的姓名和 ID?

问题描述

有没有办法在获得每个作业的成绩之前收集所有学生的姓名和 ID?目前,我的代码一次通过一个学生运行,但是有没有办法一次调用他们的 ID 以在之后添加他们的成绩?

nameID = {}

while input("Would you like to add a student? ") == "yes":
    name = input("What is the student's name?: ")
    ID = input("What is the student's ID?: ")
    nameID[ID] = name   
    scores = []
    assignments = int(input("How many assignments were given? "))

    for i in range(assignments): 
        score = int(input("Enter {}'s score for assignment {} (0-100): ".format(nameID[ID], i+1)))
        scores.append(score)

    average = (sum(scores))/assignments
    print("{}'s average score was {:.1f}".format(name, average))
    nameID[ID] = {"Name": name, "Scores": scores}

print(nameID)

标签: pythondictionary

解决方案


首先,您需要完成一些关于 Python 数据类型以及如何应用它们的教程。您似乎正在尝试构建一个学生数据表,包括每个学生的姓名、ID 和分数列表。

这暗示了一个数据框架——尽管该数据结构可能超出了您在课堂上所学的范围。与此同时,看起来您正在尝试使用 adict来完成这项工作——这是合理的。但是,您还没有以 Python 能够识别的方式设计结构。

我不知道你是否需要通过学生姓名或学生ID访问数据;您发布的代码对关系感到困惑。假设您想按名称执行此操作,也许您需要一个嵌套的字典:上层的名称,下层的 ID 和分数。

ledger = {}
while input("Would you like to add a student? ") == "yes": 
    name = input("What is the student's name?: ")
    id = input("What is the student's ID?: ")
    ledger[name] = {"ID": id}

assignments = int(input("How many assignments were given? "))

for name in ledger: 
    score_list = []
    for i in range(assignments):
        score = input("Enter {}'s score for assignment {}: ".format(name, i+1))
        score_list.append(int(score))

    ledger[name]["scores"] = {"ID": ID, "scores": scores}

这是否会让您在某种程度上走上通向整体解决方案的道路?


推荐阅读