Python除奇数长度字符串和组合

2024-10-02 06:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在浏览Google提供的免费Python类(Link if interested)),我正在做其中一个练习。在

目标: 考虑把一根绳子分成两半。 如果长度相等,则前后半部分的长度相同。 如果长度是奇数,我们就说多余的字符在前半部分。 e、 g.“abcde”,前半部分是“abc”,后半部分是“de”。 给定两个字符串,a和b,返回一个形式为 a-前+b-前+a-后+b-后

到目前为止,我得到的是:

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

以下是测试字符串:

^{pr2}$

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

我做错什么了?我知道这个问题是无法解释奇数长度的字符串,但我已经搜索了几天了,在网上找不到答案。我也愿意接受更有效的解决方案,但我想知道为什么我的特定设置没有成功,以供将来参考。在

谢谢!在


Tags: 字符串目标lenifgooglelink字符奇数
3条回答

你的问题是你没有把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

更简单的方法:

def front_back(a, b):
    hlena, hlenb = (len(a) + 1)/2, (len(b) + 1)/2
    return a[:hlena] + b[:hlenb] + a[hlena:] + b[hlenb:]

不需要if子句来处理空字符串大小写。代码中切片计算的操作顺序不正确。在

提示:Defore深入研究并编写代码,在replshell中处理问题,直到您对问题有了一个简洁的描述。初学者面临的最大挑战之一是他们创建的代码比需要的大得多,这使得理解和调试更加困难。从最小的可加工卡盘开始,从那里开始建造。在

您应该将实现拆分为拆分函数和合并函数。这样更容易测试。另外,通过定义拆分的方式,可以简化第一个函数:

如果字符串s的长度是偶数,整型除法中的len(s)//2与{}相同。如果是奇数,len(s)//2是小于(len(s)+1)//2的1。由于需要较长的字符串作为第一部分,拆分函数可以写为:

def splitter(s):
    mid = (len(s)+1)//2
    return s[:mid], s[mid:]

那么对于合并:

^{pr2}$

相关问题 更多 >

    热门问题