这是我的程序
def reverse(letters):
backwards = ""
i = len(letters) - 1
while i >= 0:
backwards = backwards + letters[i]
i = i - 1
print (backwards)
print (reverse("hello"))
它有效,打印出“olleh”但之后,它在新行上打印“无”。我问这是为什么。 显然程序是反转一个单词,代码工作,没有函数它不打印任何,所以我不知道为什么它在函数中。这是在另一个更大的程序中使用,所以我需要它作为一个函数,因为它是为了学校,我不允许简单地使用.reverse()函数。所以我真的需要修复这些代码而不是大的修改,如果可能的话。
答案 0 :(得分:4)
函数返回None
,因此您应return backwards
显式
另外,您可以使用pythonic方式来解决问题:
letters[::-1]
答案 1 :(得分:3)
您可以使用return语句退出返回值的函数。如果函数在没有到达return语句的情况下到达末尾,则默认情况下它将返回None
def add1(x):
return x+1
def returnsNone():
pass
print(add1(2))
print(returnsNone())
答案 2 :(得分:1)
每个函数都在Python中返回某些。如果您没有显式返回值,Python会让您的函数返回None
。
您的函数实际上并没有返回任何内容,因为print
会打印到stdout,而return
实际上会返回一个值。他们可能在REPL中看,但它们完全不同。
为了解决您的问题,请返回一个值:
return backwards
答案 3 :(得分:1)
尝试:
reverse(hello)
事实上
print reverse(hello)
您正在打印反向的返回值。并且返回值为None。
让我给你几点一般建议:
代码中的reverse()是一个带副作用(打印)的函数。你应该避免 当你不需要副作用时,可以考虑使用reverse()返回单词而不是打印它:
def reverse(letters):
backwards = ""
i = len(letters) - 1
while i >= 0:
backwards = backwards + letters[i]
i = i - 1
return backwards
print (reverse("hello"))
此外
i = len(letters) - 1
while i >= 0:
backwards = backwards + letters[i]
i = i - 1
并不容易保留,如果你在循环中添加功能,减量i = i-1将远离它应该“概念上”的地方。你应该更喜欢与支票一起减少:
for i in xrange(len(letters)-1,-1,-1):
backwards = backwards + letters[i]
当我懒惰的时候我会写
myString = myString + fewChars
所以我可以理解你很懒。但是添加几个查询不会修改myString但会创建一个新的。如果您反复添加多个字符,很少有效的方法是逐个添加。考虑使用join()。 例如
letters = 'word'
lettersList = [letters[i] for i in xrange(len(letters)-1,-1,-1)]
myReversed ''.join(lettersList)
确定我同意不可读,甚至可能不会更快,但对于较大的字符串,它比newString = oldString + oneChar方法更好。
那就是更多的pythonic方法
letters[::-1]
已经被比我更快的人建议通常效果更好,很容易被python程序员阅读。
答案 4 :(得分:0)
如果你考虑它就有意义了。你的reverse
没有返回任何内容 - 只是打印出它的结果。但是当你写print (reverse("hello"))
时,你实际上正在打印reverse
返回的内容。由于它不会返回任何内容,因此会打印None
。
答案 5 :(得分:0)
如前所述。如果python函数没有遇到return
语句,则默认情况下会打印None
。如下所示进行一些小改动可以解决这个问题:
def reverse(letters):
backwards = ""
i = len(letters) - 1
while i >= 0:
backwards = backwards + letters[i]
i = i - 1
return(backwards) # instead of print(backwards)
print(reverse("hello"))