这是一个我正在研究的小项目,但我对我的代码的以下部分感到困惑。
如您所见,j是一个代表学生成绩的字典。我希望j从1到n不等,其中n是一个班级中学生的总数,但因为每个字典(对应于每个学生)没有不同的名称,所以代码以“等于是” “将每个学生的成绩附加到每个词典的所有ex或hw值(除了与模型对应的词典)。
修改j的最佳方法是什么,以便我可以在unique_id中输入n个学生?
编辑:我可以用j_one,j_two等替换j并复制并粘贴“空”字典,但是如果你有280名学生(假设说),我认为这是太多的工作。
unique_id = []
model = {
"Last": "Total",
"First": "Possible on",
"id": "000000",
"ex": [],
"hw": []
}
unique_id.append(dict(model))
yes = {"yes", "ye", "y"}
ex = {"ex", "e", "exam"}
hw = {"hw", "h", "homework"}
j ={
"Last": "",
"First": "",
"id": "",
"ex": [],
"hw": []
}
new_person = input("New student? Type YES or NO. ").lower()
while new_person in yes:
j["Last"] = input("Last Name: ")
j["First"] = input("First Name: ")
j["id"] = input("ID: ")
unique_id.append(dict(j))
new_person = input("New student? Type YES or NO. ").lower()
grades = input("Input grades? ").lower()
while grades in yes:
option_grades = input("Pick EX, HW: ").lower()
if option_grades in ex:
for i in list(range(len(unique_id))):
unique_id[i]["ex"].append(input("%s %s Exam: " % (unique_id[i]["Last"], unique_id[i]["First"])))
elif option_grades in hw:
for i in list(range(len(unique_id))):
unique_id[i]["hw"].append(input("%s %s HW: " % (unique_id[i]["Last"], unique_id[i]["First"])))
grades = input("Input more grades? ").lower()
答案 0 :(得分:1)
您可以创建一个包含相关信息的模板字典,然后您可以增加模板并为每个学生增加dict_id
。
template ={
"Last": "",
"First": "",
"id": "",
"ex": [],
"hw": []
}
j ={
}
new_person = input("New student? Type YES or NO. ").lower()
dict_id = 1
while new_person in yes:
j[dict_id] = template # add new template for each student
j[dict_id]["Last"] = input("Last Name: ")
j[dict_id]["First"] = input("First Name: ")
j[dict_id]["id"] = input("ID: ")
unique_id.append(dict(j))
new_person = input("New student? Type YES or NO. ").lower()
dict_id += 1 # increment id
您可能需要添加更多逻辑,例如可能会检查学生是否已经在dict等中。但这应该可以帮助您入门。