从函数调用的输出中删除None

时间:2016-10-28 20:19:57

标签: python python-3.x

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+

顺便说一句。我对编程很陌生。我自己做了一些研究,但答案并没有用。他们都告诉我删除print但我希望字符串在同一行,所以我还必须包含end=""。请帮助。

3 个答案:

答案 0 :(得分:7)

发生这种情况的原因是你打印函数调用的结果,在这一行:

print(digits_plus(3))

但是你的函数没有返回任何值,所以返回None。正在打印None因为您要告诉Python打印它。 (并且它与其余部分在同一条线上,因为您的其他print都没有打印换行符。)要解决此问题,请将该行更改为:

digits_plus(3)

您的功能正在进行打印,因此无需打印该功能的返回值。

(你也可以将你的功能修改为返回所需的值而不是打印它,这会使它更有用。)

答案 1 :(得分:0)

使用str.join

的更“Pythonic”解决方案
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 执行副作用最佳(喜欢印刷),但不是两者兼而有之。 (但是,标准库对此规则有例外,例如list.pop。)

另请注意+ 1来电中的range,因为range不包含其上限。

答案 2 :(得分:-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()无论如何都会隐式地替换它。