在字典中编辑列表Python 3.7

时间:2018-11-28 16:53:29

标签: python

我正在尝试打印出一个字典,其中显示了学生ID,姓名和年级,因此看起来像这样的“ ID:{'Name':'Students Name',成绩[Grade1,Grad2,Grade3...。] 。当我这样做并打印出字典时,它只会为每个学生字典打印上次作业的成绩,例如,如果学生1在最后一次作业中获得30分,而学生2在最后一次作业中获得40分。输出为:

enter code here
1:{'Name': 'Student 1', 'Grades': [30, 40]}
2:{'Name': 'Student 2', 'Grades': [30, 40]}

我最初的问题是每位学生在词典中的分数,我想我可以通过在成绩输入后清空循环中的成绩列表来解决此问题。但是现在我遇到了这个问题。我不太清楚问题是什么,我将尝试并解决问题,但会有所帮助。我的代码在下面。

enter code here
students = {}
grades = []
while True:
    blank = {} 

    student_name = input("What is the student's name?  ")
    student_id = input("What is the student's ID number?  ")
    blank['Name'] = student_name
    blank['Grades'] = grades
    students[student_id] = blank
    y_or_n = input("Would you like to enter another student? Yes or No  ")
    if y_or_n == "Yes":
        continue
    else:
        break

   homework_assignments = int(input("How many homework assignments were 
given?  "))
for i in students.keys():
    print("Please enter the grades for {}".format(students[i]['Name']))
    for j in range (1, homework_assignments + 1):
        grade =  int(input("What was the grade for homework {}?".format(j)))
    grades.append(grade)        
    for i in students.keys():
        students[i]['Grades'] = grades
        grade = []
for key in students.keys():
    print("{}:{}".format(key, students[key]))

2 个答案:

答案 0 :(得分:0)

当您致电students['Grades'] = grades时,您正在修改同一词典,同时迭代了其键。正确的代码应为students[i]['Grades'] = grades,因为您已将成绩声明为上述学生的嵌套结构。还有另一个错误,您将变量i用作索引来遍历作业和学生,这导致i以意外的方式增加。尝试以下代码段。

for i in students.keys():
    print("Please enter the grades for {}".format(students[i]['Name']))
    for j in range (1, homework_assignments + 1):
        grade =  int(input("What was the grade for homework {}? ".format(i)))
        if grade < 0 or grade > 100:
            print("Grades need to be between 0 - 100")
        grades.append(grade)

    students[i]['Grades'] = grades

答案 1 :(得分:0)

我注意到的一些事情

您对无效成绩的检查无济于事,成绩仍会错误添加。要解决此问题,您需要确保不在该范围内时不添加成绩,并且要重复第i次迭代。

在您当前的结构中使用for循环实际上不是可以完成的,也许while循环会更适合。

我还注意到您在两个循环中都使用了变量i,这意味着它已被覆盖并引起混乱。

底部有很多逻辑错误,如果您在打印students字典以查看其结构之前将其打印出来,这对您有帮助。

从我的角度来看,我看到有一些钥匙,这些钥匙是学生的ID号,以及他们的姓名和这个成绩列表的相应值。它还有一个'Grades'键,它具有相同的成绩列表。

看到所有成绩的原因是因为有关python如何处理列表的一小部分细节。您遇到的问题与assignment and copying有关-您想在那一点上复制内容,然后在分配完之后将其清空,以便下一个学生有一个空列表。您当前正在做的是分配列表,该列表实际上使每个成绩列表都指向同一列表。

我个人想避免从字面上为您编写代码,但是如果您还有其他问题,请评论一下,我会指导您完成操作。