2016-10-28 67 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()做它含蓄反正。