3

背景: Python の初心者。この質問について検索しましたが、私が見つけた答えは「なぜ」よりも「何」に関するものでした。

私が意図したこと: ユーザーから入力されたテスト スコアを取得し、グレード スケール/カーブに従って文字グレードを出力する関数を作成します。コードは次のとおりです。

score = input("Please enter test score: ")
score = int(score)

def letter_grade(score):
    if 90 <= score <= 100:
        print ("A")
    elif 80 <= score <= 89:
        print ("B")
    elif 70 <= score <= 79:
        print("C")
    elif 60 <= score <= 69:
        print("D")
    elif score < 60:
        print("F")

print (letter_grade(score))

これを実行すると、以下が返されます。

Please enter test score: 45
F
None

None意図されていません。letter_grade(score)そして、代わりにを使用するとprint (letter_grade(score))、 がNone表示されなくなることがわかりました。

私が見つけることができた最も近い答えは、「Pythonの関数は、明示的に指示されない限りNoneを返します」のようなものでした。しかし、最後の行で関数を呼び出したので、ここで少し混乱しています。

だから私の質問は次のようになると思います:何が消えたのNoneですか?これはかなり基本的なことだと思いますが、「舞台裏」のメカニズムを説明する答えを見つけることができませんでした. ですから、誰かがこれに光を当てることができれば幸いです。ありがとうございました!

4

3 に答える 3

10

Python では、関数のデフォルトの戻り値はNone.

>>> def func():pass
>>> print func()     #print or print() prints the return Value
None
>>> func()           #remove print and the returned value is not printed. 
>>>

したがって、次を使用してください:

letter_grade(score) #remove the print

別の代替手段は、すべてのプリントをreturn次のように置き換えることです。

def letter_grade(score):
    if 90 <= score <= 100:
        return "A"
    elif 80 <= score <= 89:
        return "B"
    elif 70 <= score <= 79:
        return  "C"
    elif 60 <= score <= 69:
        return "D"
    elif score < 60:
        return "F"
    else:
        #This is returned if all other conditions aren't satisfied
        return "Invalid Marks"

今使用print()

>>> print(letter_grade(91))
A
>>> print(letter_grade(45))
F
>>> print(letter_grade(75))
C
>>> print letter_grade(1000)
Invalid Marks
于 2013-06-07T01:31:16.700 に答える