2013-10-01 140 views
5

这里是我的程序的Python:我的功能是我想要做什么它

def reverse(letters): 
    backwards = "" 
    i = len(letters) - 1 
    while i >= 0: 
     backwards = backwards + letters[i] 
     i = i - 1 
    print (backwards) 

print (reverse("hello")) 

它的工作原理,它打印出“2009东海生日贺”后返回“无”,但之后,它打印“无”上新队。我在问为什么这是。 显然,程序是反转一个单词,代码工作,没有一个函数它不会不打印任何东西,所以我不知道它为什么在函数中。这是在另一个更大的程序中使用的,所以我需要它作为一个函数,并且因为它适用于学校,我不允许简单地使用.reverse()函数。所以如果可能的话,我真的需要修正这些代码而不是大的修改。

+1

[可能的函数列表中的项返回。 Python](http://stackoverflow.com/questions/18990977/return-items-from-list-in-function-python) – Freddie

回答

2

您可以使用return语句退出返回值的函数。如果函数获取到最后没有达到一个return语句,默认情况下将返回None默认

def add1(x): 
    return x+1 

def returnsNone(): 
    pass 

print(add1(2)) 
print(returnsNone()) 
+3

这是什么语言?这两个定义都不是有效的Python语法。 – Max

+0

@Max:来吧,第一个只是缺少一个冒号:) – hugomg

+1

@missingno:不仅仅如此。 'end'在Python中并不意味着什么特别。 – DSM

4

函数返回None,所以你应该return backwards明确

也可以使用Python的方式来解决问题:

letters[::-1] 
+0

upvoting pythonic的方式来解决问题。 –

0

它是有道理的,如果你考虑它。您的reverse不会返回任何内容 - 它只是打印结果。但是,当您编写print (reverse("hello"))时,您实际上正在打印reverse返回的内容。由于它不返回任何内容,因此打印None

1

每个函数在Python中返回东西。如果你没有明确地返回一个值,Python的函数返回None

因为print打印到标准输出,您的函数实际上不会返回任何内容,而return实际上会返回一个值。他们可能看起来在REPL中是一样的,但它们完全不同。

因此,要解决您的问题,返回值:

return backwards 
0

尽量只:

reverse(hello) 

其实与

print reverse(hello) 

要打印反向的返回值。那个返回值是None。

让我给你几个建议一般:

反向()在你的代码是有副作用(打印)功能。你应该避免 功能的副作用,当你不需要考虑具有反()返回这个词,而不是打印出来的:

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方法更好。

这就是说,更Python接近

letters[::-1] 

有人已经建议比我快一般的效果要好得多,很容易由Python程序员阅读。

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")) 
相关问题