String 如何使用递归混合2个字符串并以1';交错';一串

String 如何使用递归混合2个字符串并以1';交错';一串,string,python-3.x,recursion,String,Python 3.x,Recursion,我写了这个程序: def mix(a,b): if len(a) != len(b): return else: return a[0]+b[0]+a[1]+b[1]+a[2]+b[2]+a[3]+b[3] 这样做的目的是,将两条线“交错”在一起。例如,如果我选择taco作为字符串1,选择bowl作为字符串2,它将返回tbaocwol。如果字符串的长度不同,我们将返回 我遇到的问题是else return语句中的递归。我如何编写它,使它可以接受

我写了这个程序:

def mix(a,b):

    if len(a) != len(b):
        return
    else:
        return a[0]+b[0]+a[1]+b[1]+a[2]+b[2]+a[3]+b[3]
这样做的目的是,将两条线“交错”在一起。例如,如果我选择
taco
作为字符串1,选择
bowl
作为字符串2,它将返回
tbaocwol
。如果字符串的长度不同,我们将返回

我遇到的问题是else return语句中的递归。我如何编写它,使它可以接受任意长度的字符串,而不限于2、3或4个字母?我在我的原始代码中硬编码了索引,以便在执行过程中看到结果,但我对此感到很失望

我不想使用任何循环或任何字符串处理函数。 我唯一愿意使用的是切片和/或全局变量。 我也不想使用
.remove()
索引
.replace()


注意:我看到了一个类似的问题,但它是在java中,我无法找出与python的等价性。

您可以传递字符串的切片版本

def mix(a,b):
    if len(a) != len(b):
        return
    elif not a:
        return ""
    else:
        return a[0] + b[0] + mix(a[1:], b[1:])
一些测试用例:

>>> print(mix("Hello", "abcde"))
Haeblcldoe
>>> print(mix("Guten Tag", "ihgfedcba"))
Giuhtgefne dTcabga
>>> print(mix("Ni Hao", "Hello "))
NHie lHlaoo

这应该能奏效

您的函数返回
None
或字符串,这真的是预期的行为吗?@asimes嗯,理想情况下,如果长度不同,我真的不希望它做任何事情。也许我可以在其中添加一个字符串
错误:两个单词的长度应该相同。
。但是,这是目前的预期行为。您可以缩短
len(a)==0:返回b elif len(b)==0:将a
返回到
而不是a:返回“”
@AlexHall,这也是一个更好的替换,因为代码越简单越好!谢谢你们两位!Python语句末尾不需要分号。
def mix(a,b):
    if len(a) != len(b):
        return ''
    if len(a) == 0:
        return ''
    else:
        return mix(a[:-1], b[:-1])+a[-1]+b[-1]