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

print (digits_plus(3)) 

的輸出刪除無這裏得到了返回什麼我:從一個函數調用

0+1+2+3+None 

「無」總是在最後行的存在返回。

我想這回:

0+1+2+3+ 

BTW。我對編程完全陌生,我自己做了一些研究,但答案沒有幫助。他們都告訴我刪除print,但我想在同一行中的字符串,所以我還必須包括end=""。請幫助。

+0

你寫的代碼給出了一個IndentationError。 – dan04

+1

我會在這裏留下......作爲替代解決方案'「+」。join(map(str,range(num + 1)))' –

+0

需要有其他的東西導致問題。此刻你的代碼根本就不運行,因爲它沒有正確縮進(也許是因爲你沒有完全複製和粘貼)。如果它正確縮進(如[答案](http://stackoverflow.com/a/40312716/473890)),它不會導致您的問題。 – xZise

回答

7

,這是發生在你的原因是,你是打印你的函數調用的結果,在這條線的位置:

print(digits_plus(3)) 

可是你的函數不返回任何值,所以返回None 。而且正在打印None,因爲您要讓Python打印它。 (和它的在同一行的休息,因爲您沒有任何其他print S打印一個換行符)。爲了解決這個問題,更改了該行只是:

digits_plus(3) 

你的函數是做印刷,所以沒有還需要打印函數的返回值。

(你也可以修改你的函數回報所需的值,而不是打印出來,這將使它更普遍有用。)

+1

可能要添加一個不關於打印最終換行符。這就是OP最終導致混亂的原因。 –

+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,它通常被認爲是最好的一個功能returnXOR執行方效果(如印刷),但不是兩者。 (雖然,標準庫有例外的情況,比如list.pop

還要注意在range呼叫+ 1,因爲range不包括它的上限。

+0

會更pythonic是'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

嗯。今天學到了什麼。 (沒有downvote,順便說一句) –

-1

您的問題digit_plus默認返回None。完全不使用return聲明或僅使用return將隱含返回None。所以最簡單的解決方法是不打印digit_plus的結果,只調用它。

但是,這仍然會在最後打印「+」。爲了解決使用"+".join()像其他人建議或添加一些邏輯,只添加「+」,如果還剩下物品。做到這一點的方法之一是這樣說的:

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

在這種情況下str(i)可以通過i被替換爲print()做它含蓄反正。