迭代字典并将键值添加到空字典时出现意外结果

2024-10-01 22:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我理解下面的代码吗,这是关于字典的

为什么在添加最后一行之前for循环运行良好:

elif student_scores[score] <= 70:
    student_grades = student_scores[score]="Failed

我甚至尝试使用“else”条件,但结果是一样的:"Failed"

如果删除最后一部分,则结果与预期一致:

{'Harry': 'Exceeds Expectations', 'Ron': 'Acceptable', 'Hermione': 'Outstanding', 'Draco': 'Acceptable', 'Neville': 62}

为什么它只给我最后一个条件的键值,而删除所有其他条件

代码:


    student_scores = {
      "Harry": 81,
      "Ron": 78,
      "Hermione": 99, 
      "Draco": 74,
      "Neville": 62,
    }
    student_grades = {}
    for score in student_scores:
      student_grades = student_scores  
      if student_scores[score] >= 91:
        student_grades = student_scores[score]="Outstanding"
      elif student_scores[score] >= 81:
        student_grades = student_scores[score]="Exceeds Expectations"
      elif student_scores[score] >= 71:
        student_grades = student_scores[score]="Acceptable"
      elif student_scores[score] <= 70:
        student_grades = student_scores[score]="Failed"
    
    print(student_grades)

结果:失败

我非常感谢你的帮助

多谢各位


Tags: 代码for条件studentscoregradesfailedelif
3条回答

实际上,您正在用分数替换student_grades字典中的分数。如果您将最后一条语句更改为“打印学生成绩”,您将看到以下内容。要将项目添加到student_分数词典,必须使用“append”修饰符

将if语句后的每个语句更改为类似以下内容: 学生成绩[“姓名”]。附加[“学生姓名”] 学生成绩[“分数”]。附加[“超出预期”] 这将为每个学生的学生分数字典添加元素

ifelif语句之后的每行开头不需要student_grades = 。只要有student_scores[score]="Outstanding"之类的东西就行了

此外,迭代变量score也有误导性。如果你在任何时候把它打印出来,你会看到这是学生的名字,而不是他们的分数

这是因为你刚刚得到学生成绩的最后一个值

for score in student_scores:
  student_grades = student_scores  
  if student_scores[score] >= 91:
    student_grades = student_scores[score]="Outstanding"
  elif student_scores[score] >= 81:
    student_grades = student_scores[score]="Exceeds Expectations"
  elif student_scores[score] >= 71:
    student_grades = student_scores[score]="Acceptable"
  elif student_scores[score] <= 70:
    student_grades = student_scores[score]="Failed"

print(student_grades)

您的print(student_grades)在for循环之外,因此只需获取存储在学生成绩上的最后一个值。我建议你做这样的改变

student_scores = {
"Harry": 81,
"Ron": 78,
"Hermione": 99,
"Draco": 74,
"Neville": 62,
}
student_grades = student_scores
for name, score in student_scores.items():
    # We dont need to assign student_grades each time
    if student_scores[name] >= 91:
        student_grades[name] = "Outstanding"
    elif student_scores[name] >= 81:
        student_grades[name] = "Exceeds Expectations"
    elif student_scores[name] >= 71:
        student_grades[name] = "Acceptable"
    elif student_scores[name] <= 70:
        student_grades[name] = "Failed"

for grades in student_grades.items():
    print(grades)

相关问题 更多 >

    热门问题