2016-10-28 33 views
3
def digits_plus(num): 
    for i in range (num+1): 
     print (str(i)+"+",end="") 

print (digits_plus(3)) 

の出力からNoneを削除していないここに私は戻ってしまったものです:が関数呼び出し

0+1+2+3+None 

「なし」常に返さラインの最後に存在していません。

私はこれが返さたい:ところで

0+1+2+3+ 

。私は全く新しいプログラミングです。私は自分自身でいくつかの研究をしましたが、答えは役に立たなかった。それらはすべてprintを削除するように私に指示しますが、同じ行に文字列を入れたいので、end=""も含める必要があります。助けてください。

+0

あなたのコードは、IndentationErrorを返します。 – dan04

+1

私はこれをここに残しておきます... "+" join(map(str、range(num + 1))) ' –

+0

問題の原因となるものが他にも存在する必要があります。現時点では、コードが正しくインデントされていないため、コードがまったく実行されません(多分、コピー&ペーストしなかったためかもしれません)。そして、それが([回答](http://stackoverflow.com/a/40312716/473890)のように)正しくインデントされても、問題は発生しません。 – xZise

答えて

7

これがあなたに起こっている理由は、ここでこの行で、印刷あなたの関数呼び出しの結果であるということです。それはNoneを返すので、

print(digits_plus(3)) 

しかし、あなたの関数は値を返しません。 。そしてNoneが印刷されているのは、Pythonにそれを印刷するように指示しているからです。 (あなたの他のprintの印刷のいずれも改行のでそしてそれは他の部分と同じ行にあります。)この問題を解決するには、その行だけのように変更:

digits_plus(3) 

あなたの機能は、印刷を行うので、ノーがあるさ関数の戻り値も出力する必要があります。

は(またリターンそれは、より一般的に有用になるだろう代わりにそれを印刷し、所望の値にあなたの関数を修正できます。)

+1

最終改行を印刷しないようにしたいかもしれません。それが、OPの混乱のために、Noneが残りの部分と同じ行に終わる理由です。 –

+0

良い提案。撮影。 – kindall

+0

ありがとうございます。わかった。 –

0

より「Python的」ソリューションを、str.joinを使用して:

def digits_plus(num): 
    return '+'.join(str(i) for i in range(num + 1)) 

>>> print(digits_plus(3)) 
0+1+2+3 
Pythonは command-query separationが適用されませ んが、それは一般的にreturnに機能するために最善と考えられています

XORはサイドを実行しますエフェクト(印刷のような)が、両方ではありません。 rangeはその上限を含まないので(ただし、標準ライブラリlist.popのように、この規則の例外があります。)

はまた、range呼び出しで+ 1に注意してください。

+0

'' digits_plus = lambda num: "+" join(map(str、range(num + 1))) '? –

+1

@ cricket_007 [PEP 8](https://www.python.org/dev/peps/pep-0008/#programming-recommendations)では、変数にラムダステートメントを割り当てず、 'def'を使うことを推奨しています。 – xZise

+0

Hmm。今日何かを学んだ。 (downvoteしなかった、btw) –

-1

問題はdigit_plusがデフォルトでNoneを返します。 return文をまったく使用しないか、またはreturnだけを使用すると、暗黙的にNoneが返されます。したがって、最も簡単な修正は、digit_plusの結果を出力せず、それを呼び出すことだけです。

これでも、最後に「+」が表示されます。これを解決するには、他の人のように"+".join()を使用するか、まだ項目が残っている場合にのみ "+"を追加するロジックを追加してください。これを行う方法の1つは、この方法です:その場合は

for i in range(num + 1): 
    if i > 0: # not the first time 
     print("+", end="") 
    print(i, end="") 

str(i)print()としてiに置き換えることができ、暗黙的にとにかくそれをしません。

関連する問題