尝试从字典中获取数据时,函数返回none

0 python

我在codecademy.com上关注了一个教程,由于某些原因我无法理解,我的程序没有返回预期值,而是返回值"none".

我不明白为什么.你介意看看吗?

我使用的词典是:

lloyd = { "name": "Lloyd",
         "homework": [90.0, 97.0, 75.0, 92.0],
         "quizzes": [88.0, 40.0, 94.0],
         "tests": [75.0, 90.0] }
alice = { "name": "Alice",
          "homework": [100.0, 92.0, 98.0, 100.0],
          "quizzes": [82.0, 83.0, 91.0],
          "tests": [89.0, 97.0] }
tyler = { "name": "Tyler",
          "homework": [0.0, 87.0, 75.0, 22.0],
          "quizzes": [0.0, 75.0, 78.0],
          "tests": [100.0, 100.0] }
Run Code Online (Sandbox Code Playgroud)

我尝试了以下功能:

def average(x):
    return sum(x)/len(x)

def get_average(x):
    a = (sum(x['homework'])/len(x['homework']) * 0.1 + 
         sum(x['quizzes'])/len(x['quizzes']) * 0.3 + 
         sum(x['tests'])/len(x['tests']) * 0.6)
    return a

def get_letter_grade(score):
    if score >= 90:
        return "A"
    elif score <= 80 and score < 90:
        return "B"
    elif score <= 70 and score < 80:
        return "C"
    elif score <= 60 and score < 70:
        return "D"
    elif score < 60:
        return "F"

print get_letter_grade(get_average(lloyd))
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 8

你的比较逻辑被打破了.这个:

elif score <= 80 and score < 90:
Run Code Online (Sandbox Code Playgroud)

说,"如果分数小于或等于80,小于90" ......因此,如果得分为80.55,永远不会是真实的.你的意思是说"如果得分超过 80且低于90".

在Python中编写它的常用方法是这样的:

elif 80 <= score < 90:
Run Code Online (Sandbox Code Playgroud)

  • 同样重要的是要注意,不返回值的函数会隐式返回"None". (4认同)