Skip to main content
 首页 » 编程设计

Python分割奇数长度的字符串并合并

2025年05月04日23lautakyan007

我正在学习 Google 提供的免费 Python 类(class)(Link if interested),我被困在其中一个练习上。

目标: 考虑将一个字符串分成两半。 如果长度是偶数,则前半部分和后半部分的长度相同。 如果长度是奇数,我们会说额外的字符在前半部分。 例如'abcde',前半部分是'abc',后半部分是'de'。 给定 2 个字符串 a 和 b,返回以下形式的字符串 a-front + b-front + a-back + b-back

这是我目前所拥有的:

def front_back(a, b): 
    if len(a)%2 == 0 or len(b)%2 == 0: 
        firstpart , secondpart = a[:len(a)/2] , a[len(a)/2:] 
        thirdpart , fourthpart = b[:len(b)/2] , b[len(b)/2:] 
    else: 
        firstpart , secondpart = a[:len(a)+1/2] , a[len(a)+1/2:] 
        thirdpart , fourthpart = b[:len(b)+1/2] , b[len(b)+1/2:] 
    return firstpart+thirdpart+secondpart+fourthpart 

这些是测试字符串:

 test(front_back('abcd', 'xy'), 'abxcdy') 
 test(front_back('abcde', 'xyz'), 'abcxydez') 
 test(front_back('Kitten', 'Donut'), 'KitDontenut') 

每个中的第三个字符串是预期的字符串。

我做错了什么?我知道问题是无法解释奇数长度的字符串,但我已经搜索了几天,但我没有运气在网上找到答案。我也愿意接受更高效的解决方案,但我想知道为什么我的特定设置无法正常工作,以供将来引用。

谢谢!

请您参考如下方法:

您的问题是您没有将 a 和 b 视为不同的情况。考虑 a 的长度为 4 而 b 的长度为 5 的情况。在这种情况下,您将始终选择第一个分支,这将错误地对待 b。

def front_back(a, b): 
    if len(a)%2 == 0: 
        firstpart , secondpart = a[:len(a)/2] , a[len(a)/2:] 
    else: 
        firstpart , secondpart = a[:len(a)+1/2] , a[len(a)+1/2:] 
 
    if len(b)%2 == 0: 
        thirdpart , fourthpart = b[:len(b)+1/2] , b[len(b)+1/2:] 
    else 
        thirdpart , fourthpart = b[:len(b)/2] , b[len(b)/2:] 
 
    return firstpart+thirdpart+secondpart+fourthpart