python - 有没有办法在收集分数之前收集所有的姓名和 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)
解决方案
首先,您需要完成一些关于 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}
这是否会让您在某种程度上走上通向整体解决方案的道路?
推荐阅读
- r - 每个子组的计算和重塑数据框
- azure - 有一种方法可以删除 azure webapp 上的 http 到 https 重定向?
- django - 运行 docker-compose 时出错:django.db.utils.OperationalError:致命:用户“postgres”的密码验证失败
- three.js - 使用 OBJLoader2 加载 Obj 以加载顶点颜色
- c# - 删除 DataGrid 行单击图像
- python - SMOTE with multiple bert inputs
- haskell - 制作 Semigroup 的参数化数据类型实例
- python - 如果有数字,正则表达式根本不匹配
- django - Django 调试工具栏并包含在 urls.py 中(据说)
- maven - 如何在没有休眠的情况下使用 Spring MVC 和 JPA 创建 maven 项目?