2015-11-02 194 views
-3

我正在做一个递归函数,将字符串切片,直到它为空。当它为空时,它可以选择字符,并打印或返回值。在这种情况下,我期待我的函数返回两个单词'Hello'和'World'。也许我错了,但我不明白的是,我的函数不让我打印或返回字符串。我不寻求帮助,但我想解释一下:)谢谢Python:函数可以返回一个字符串吗?

def lsubstr(x): 
    a= '' 
    b= '' 
    if x == '': 
     return '' 
    else: 
     a = a + x[0:] 
     b = b + x[1:] 
     lsubstr(x[2:]) 
     #print (a,b) 
     return a and b 

lsubstr('hweolrllod') 

,所以我改变了我的代码如下:

def lsubstr(x): 

if len(x) <1: 
     return x 
else: 
     return (lsubstr(x[2:])+str(x[0]),lsubstr(x[2:])+str(x[1])) 
lsubstr('hweolrllod') 

什么,我想说明的是一个元组这将储存装置2对字符并连接下一个的,

错误我得到的是 类型错误:无法将“元组”对象隐含str的

究竟是GOI ng错误,我已经检查可视化,它在拼接时遇到了麻烦。

+1

是,函数*可以*返回一个字符串。你的问题至少是你的一个问题,就是你根本没有从递归调用返回(例如'return lsubstr(..)')。其次,什么是'a和b'应该准确返回?! – deceze

+1

'和'运算符通常用于布尔逻辑。我相信你想用'+'连接字符串。 –

+0

你的问题的一部分可能是你没有对任何调用'lsubstr'返回的值做任何事情。也许你想打印出来或分配给一个变量或东西? – Duncan

回答

2

and关键字是一个布尔运算符,这意味着它比较两个值,并返回其中一个值。我想你想返回一个元组,而不是像这样:

... 
return (a, b) 

然后你就可以使用访问值索引操作是这样的:

a = lsubstr(...) 
a[0] 
a[1] 

或者:

word1, word2 = lsubstr(...) 
+0

@deceze我编辑了我的问题,如果这使得更好。 –

+1

我可能仍然对'和'是一个“布尔”运算符的描述有问题......但其余部分现在更有意义。 ; o) – deceze

+0

如果我返回类似“return(a,b)”的东西,它给了我一个错误 – Rectifier

相关问题