2016-05-02 136 views
-1

我真的不知道如何弄清楚它!如何删除python中的字符串中的中间字符

remove_middle_character("apple") 
'aple' 
remove_middle_character("banana") 
'bana' 
remove_middle_character("discount") 
‘disunt‘ 
”“” 
+1

嗨,欢迎来到SO!请发布您迄今为止尝试的内容。我们很乐意帮助您找出问题,但重要的是不要让其他人为您编写所有代码; )。请参阅[本](http://stackoverflow.com/help/how-to-ask)文章,了解如何提出更好的问题,这将有助于人们给你更好的答案。 –

+1

您可能想要多样化函数名称,即'remove_middle_characters()',因为对于偶数长度字符串可以删除2个字符,例如, '折扣 - >分散' – mhawke

回答

5

,因为它可能是课堂作业,我不会给你的代码(你会使用无论如何,因为你的学校也许知道堆栈溢出,并会赶你出去剽窃是不明智的)。相反,我会提供你需要知道的指导。

如果字符串或大小为2或更小(我们处理这个问题以便我们不必担心以下步骤中的边界情况),只需返回一个空字符串。

否则,如果该字符串的长度为奇数,得到长度x,并返回第一x // 2(所述//运算符是整数除法)与起始于x // 2 + 1字符级联字符。

否则,请返回第一个x // 2 - 1字符,并与起始于x // 2 + 1的字符连接。

在转弯到这码方面:

  • ,你可以得到一个字符串xlen(x)的长度;
  • 您可以通过x[:n]获得第一个n个字符;
  • 你可以得到从m开始的字符x[m:];
  • 你可以连接字符串与+;和
  • 您可以测试值p是否甚至使用if (p % 2) == 0(当然,奇数会导致(p % 2) == 1评估为true)。

这应该是全部你需要自己编写代码。

+0

尽管函数名称建议移除单个字符,但示例显示中间2个字符将被移除以获得偶数长度字符串,因此,长度为2的字符串也应返回空字符串。否则,这是一个很好的建议,不要把它全部放在盘子上。 – mhawke

+0

好点,@mhawke,标题(和例子)表明问题的真实性质 - 我已经相应地调整了答案:返回空字符串,长度为零,一个*和两个* – paxdiablo

-2

使用上面提到的所有优秀建议,我提出了一种重构方法,其中paxdiablo提到的边缘条件和mhawke增强的边缘条件都可以满足,但不需要使用if-else语句。

从paxdiablo可以看出,如果字符串长度是奇数(模数函数返回1),则该字符串的第一部分为: x // 2(相减0)。
如果字符串长度是偶数(模数函数返回0),则该字符串的第一部分为: x // 2 - 1(减1)。

在两种情况下(奇数和偶数的长度),该字符串的第二部分是: X // 2 + 1

因此,我们需要减去的反向什么字符串长度的模2将给我们。我们可以通过使偶数长度为奇数和奇数长度来做到这一点。一种可能的方式是:mod =(len(s)+ 1)%2.所以一种可能的解决方案可能看起来像:

def remove_middle_character(s): 
    h = len(s)//2 
    mod = (len(s) + 1) % 2 
    return s[:h - mod] + s[h + 1:] 

if __name__ == "__main__": 
    print(remove_middle_character("")) 
    print(remove_middle_character("x")) 
    print(remove_middle_character("xy")) 
    print(remove_middle_character("apple")) 
    print(remove_middle_character("banana")) 
    print(remove_middle_character("discount")) 
+0

有一个原因是为什么其他建议没有给出代码。如果可能,请删除此代码部分。 –

+0

非常感谢你,我也试过这种方式。它正在工作。 new_string1 =“” new_string2 =“” for char in s: if len(s)%2 == 0: new_string1 = s [:len(s)/ 2-1] new_string2 = s [len(s )/ 2 + 1:] 否则: new_string1 = S [:(LEN(S)+1)/ 2-1] new_string2 = S [长度(S)/ 2 + 1:] 返回new_string1 + new_string2 –