Python 有没有办法在收集分数之前收集所有的姓名和ID?
在获得每个作业的分数之前,我有没有办法收集所有学生的姓名和ID?目前,我的代码一次运行一个学生,但是有没有办法一次调用一个学生的ID来添加他们的分数Python 有没有办法在收集分数之前收集所有的姓名和ID?,python,dictionary,Python,Dictionary,在获得每个作业的分数之前,我有没有办法收集所有学生的姓名和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?: ") nam
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和每个学生的分数列表 这表明存在一个数据框架——尽管该数据结构可能超出了您在课堂上所学的内容。同时,看起来您正在尝试使用
dict
来完成这项工作——这是合理的。但是,您还没有以Python能够识别的方式设计该结构
我不知道您是否需要通过学生姓名或学生ID访问数据;您发布的代码对关系感到困惑。假设您希望按名称执行此操作,那么可能需要在上层使用嵌套的dict:name,下面是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}
这会让您在某种程度上找到一个整体解决方案吗?首先,您需要学习一些关于Python数据类型以及如何应用它们的教程。似乎您正在尝试构建一个学生数据表,包括姓名、ID和每个学生的分数列表 这表明存在一个数据框架——尽管该数据结构可能超出了您在课堂上所学的内容。同时,看起来您正在尝试使用
dict
来完成这项工作——这是合理的。但是,您还没有以Python能够识别的方式设计该结构
我不知道您是否需要通过学生姓名或学生ID访问数据;您发布的代码对关系感到困惑。假设您希望按名称执行此操作,那么可能需要在上层使用嵌套的dict:name,下面是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}
这是否会让您在某种程度上找到一个整体解决方案?我不理解您提出的问题。为什么需要定义包含尚未定义名称的词典?字典没有索引。您正在定义一个
集合,而不是一个dict
和nameID
的集合,所以nameID[“ID”]
永远不会起作用。如果您只有一个分数
列表,您建议如何区分每个用户的分数?您将在接下来的几行中替换名称
和id
。请注意名称[0]
是学生姓名的第一个字母,我不明白你问的问题。为什么需要定义包含尚未定义名称的词典?字典没有索引。您正在定义一个集合,而不是一个dict
和nameID
的集合,所以nameID[“ID”]
永远不会起作用。如果您只有一个分数
列表,您建议如何区分每个用户的分数?您将在接下来的几行中替换name
和id
。请注意,name[0]
是学生姓名的第一个字母,而不是分数的参考。这比OP的想法要好。但是给定的ID比名字更可能是唯一的,也许ledger
应该有ID
键。这就是为什么我给出了“假设”的警告——普通人会知道学生的名字,但不会记住他们的ID。一个“适当”的实现会将其设置为一个具有数据帧、由唯一ID索引、具有按名称查找方法的类。有什么方法可以做到这一点,这样我就可以在添加分数之前添加所有学生?我更新了我的解决方案,以便在一批中最后添加分数。这比OP的想法要好。但是给定的ID比名字更可能是唯一的,也许ledger
应该有ID
键。这就是为什么我给出了“假设”的警告——普通人会知道学生的名字,但不会记住他们的ID。一个“适当”的实现会将其设置为一个具有数据帧、由唯一ID索引、具有按名称查找方法的类。有什么方法可以做到这一点,以便我可以在添加分数之前添加所有学生?我更新了我的解决方案,以便在最后一次添加分数,一批。