8

これが私のプログラムです

def reverse(letters):
    backwards = ""
    i = len(letters) - 1
    while i >= 0:
        backwards = backwards + letters[i]
        i = i - 1
    print (backwards)

print (reverse("hello"))

動作し、「olleh」を出力しますが、その後、新しい行に「None」を出力します。そして、私はこれがなぜなのかを尋ねています。明らかに、プログラムは単語を逆にすることであり、コードは機能し、関数がないと何も出力されないため、関数でなぜそれが行われるのかわかりません。これは別のより大きなプログラムで使用されているため、関数として必要です。また、学校用であるため、単純に .reverse() 関数を使用することは許可されていません。したがって、可能であれば、大きな変更ではなく、このコードを修正する必要があります。

4

6 に答える 6

4

関数Noneはデフォルトで戻りますので、 return backwards明示的 に行う必要があります

また、pythonic の方法を使用して問題を解決することもできます。

letters[::-1]
于 2013-10-01T00:18:45.170 に答える
3

return ステートメントを使用して、値を返す関数を終了できます。関数が return ステートメントに到達せずに最後に到達した場合、デフォルトで None が返されます

def add1(x):
   return x+1

def returnsNone():
   pass

print(add1(2))
print(returnsNone())
于 2013-10-01T00:17:07.607 に答える
1

Python では、すべての関数が何かを返します。値を明示的に返さない場合、Python には関数 return がありますNone

print実際には値を返しますが、標準出力に出力されるため、関数は実際には何も返しませんreturn。REPL では同じように見えるかもしれませんが、完全に異なります。

したがって、問題を解決するには、値を返します。

return backwards
于 2013-10-01T00:22:25.800 に答える
0

考えてみれば当然です。あなたreverseは何も返しません-結果を出力するだけです。しかし、あなたが書くときprint (reverse("hello"))、あなたは実際に何をreverse返すかを印刷しています。何も返さないので、表示Noneされます。

于 2013-10-01T00:19:39.467 に答える