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=""
。请帮助。
答案 0 :(得分:7)
发生这种情况的原因是你打印函数调用的结果,在这一行:
print(digits_plus(3))
但是你的函数没有返回任何值,所以返回None
。正在打印None
因为您要告诉Python打印它。 (并且它与其余部分在同一条线上,因为您的其他print
都没有打印换行符。)要解决此问题,请将该行更改为:
digits_plus(3)
您的功能正在进行打印,因此无需打印该功能的返回值。
(你也可以将你的功能修改为返回所需的值而不是打印它,这会使它更有用。)
答案 1 :(得分:0)
使用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 执行副作用最佳(喜欢印刷),但不是两者兼而有之。 (但是,标准库对此规则有例外,例如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()
无论如何都会隐式地替换它。