0

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] }

そして、私は次の機能を試しました:

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))
4

5 に答える 5

8

比較ロジックが壊れています。これ:

elif score <= 80 and score < 90:

は、「スコアが 80以下で 90 未満の場合」言います...したがって、スコアが 80.55 の場合、それは決して真ではありません。「スコアが 80 点以上 90 点未満の場合」という意味です

これを Python で書く通常の方法は次のようになります。

elif 80 <= score < 90:
于 2013-06-14T15:49:58.357 に答える
0

関数のif/elifロジックにget_letter_grade()欠陥があります。前の値はすでにそれより上のレベルをチェックしているため、スコアがそれをreturn上回っているかどうかを確認するために、次に高い値をチェックするだけでよいことを認識することで、単純化して修正できます。ifこれが私が意味することです:

def get_letter_grade(score):
    if score >= 90:
        return "A"
    elif score >= 80:  # we also know it's < 90 because the prior if failed
        return "B"
    elif score >= 70:  # we also know it's < 80 because all the prior ifs failed
        return "C"
    elif score >= 60:  # we also know it's < 70 because all the prior ifs failed
        return "D"
    else:              # we know it's < 60 because all the prior ifs failed
        return "F"

また、すべての s が失敗した場合、最後の句は前の句と同様にnot であるためelif、関数は an を返すことに注意してください。これにより、関数が を返すことがなくなります。これは、関数が「最後に落ちる」前に別の値で明示的に a を実行しない場合に実際に起こることです。"F"elseelifNonereturn

于 2013-06-14T17:52:39.450 に答える