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

print (digits_plus(3)) 

Hier ist, was ich zurück bekam:entfernen Keine von dem Ausgang eines Funktionsaufruf

0+1+2+3+None 

„None“ existiert immer in der letzten der Leitung zurückgeführt.

Ich möchte diese zurückgegeben:

0+1+2+3+ 

BTW. Ich bin völlig neu im Programmieren. Ich habe selbst etwas recherchiert, aber die Antworten waren nicht hilfreich. Sie alle sagen mir, print zu entfernen, aber ich möchte die Zeichenfolge in der gleichen Zeile, so muss ich auch end="" enthalten. Hilfe bitte.

+0

Ihr Code wie geschrieben gibt einen IndentationError. – dan04

+1

Ich lasse das hier ... als alternative Lösung '" + ". Join (map (str, range (num + 1)))' –

+0

Es muss noch etwas anderes geben, das das Problem verursacht. Im Moment läuft Ihr Code überhaupt nicht, weil er nicht richtig eingerückt ist (vielleicht, weil Sie ihn nicht genau kopiert und eingefügt haben). Und wenn es richtig eingerückt ist (wie in [die Antwort] (http://stackoverflow.com/a/40312716/473890)), verursacht es Ihr Problem nicht. – xZise

Antwort

7

Der Grund dieses Ihnen geschieht, ist, dass Sie Druck das Ergebnis Ihrer Funktion aufrufen, in dieser Linie sind hier:

print(digits_plus(3)) 

Aber Ihre Funktion jeden Wert nicht zurück, so dass es None zurück . Und None wird gedruckt, weil Sie Python sagen, es zu drucken. (Und es ist auf der gleichen Linie wie der Rest, weil keine Ihrer anderen print s Druck ein Newline.) Um dies zu lösen, diese Zeile zu ändern, um nur:

digits_plus(3) 

Ihre Funktion den Druck tut, so gibt es keine Sie müssen auch den Rückgabewert der Funktion ausgeben.

(Sie können auch Ihre Funktion Rückkehr der gewünschten Wert revidieren, anstatt sie zu drucken, die es in der Regel sinnvoll mehr machen würde.)

+1

Möchte hinzufügen, nicht über das Drucken einer endgültigen Newline. Das ist der Grund, dass None in der gleichen Linie wie der Rest endet, zu OPs Verwirrung. –

+0

guter Vorschlag. genommen. – kindall

+0

Danke. Ich hab es geschafft. –

0

Eine mehr „Pythonic“ Lösung, mit str.join:

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

>>> print(digits_plus(3)) 
0+1+2+3 

Während Python nichtcommand-query separation erzwingen, es in der Regel am besten für eine Funktion return ein Wert xor ausführen betrachtet ist eine Seite Effekt (wie Drucken), aber nicht beides. (Obwohl, hat die Standard-Bibliothek Ausnahmen von dieser Regel, wie list.pop.)

Beachten Sie auch die + 1 im range Aufruf, da range schließt nicht seine obere Schranke.

+0

Wäre mehr Pythonie sein 'digits_plus = lambda num:" + ". Join (map (str, range (num + 1)))'? –

+1

@ cricket_007 Die [PEP 8] (https://www.python.org/dev/peps/pep-0008/#programming-recommendations) empfiehlt, den Variablen keine Lambda-Anweisungen zuzuweisen, sondern 'def' zu verwenden. – xZise

+0

Hmm. habe heute etwas gelernt. (nicht downvote, BTW) –

-1

Ihr Problem, dass digit_plus standardmäßig None zurückgibt. Mit return Anweisung überhaupt oder nur return wird implizit None zurückgegeben. Die einfachste Lösung wäre also, das Ergebnis von digit_plus nicht auszudrucken und es nur aufzurufen.

Aber das wird immer noch ein "+" am Ende drucken. Um diese zu lösen, verwenden Sie "+".join() wie andere vorgeschlagen oder fügen Sie eine Logik hinzu, um nur "+" hinzuzufügen, wenn noch Elemente übrig sind. Eine Möglichkeit, es zu tun ist, auf diese Weise:

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

In diesem Fall str(i) kann durch i als print() tut es implizit sowieso ersetzt werden.

Verwandte Themen