有什么方法,我可以收集所有学生的名字和身份证,然后得到他们的分数为每项作业?目前,我的代码一次只运行一名学生,但是否有办法一次一次地回忆他们的is,然后添加他们的成绩?
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)
发布于 2018-11-26 09:31:27
首先,您需要学习一些关于Python数据类型以及如何应用它们的教程。似乎您正在试图构建一个学生数据表,包括姓名、ID和每个学生的分数列表。
这意味着一种数据框架--尽管这种数据结构可能超出了您在课堂上所学到的内容。同时,看起来你正在尝试使用dict
来完成这项工作--这是合理的。但是,您还没有按照Python所能识别的方式来设计这个结构。
我不知道您是否需要通过学生姓名或学生ID来访问数据;您发布的代码对这些关系感到困惑。假设您想要按名称执行此操作,那么您可能需要一个嵌套的dict:较高级别的名称、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}
这是否使你在某种程度上走上了通往整体解决方案的道路?
https://stackoverflow.com/questions/53486054
复制