我真的不知道怎么弄清楚!!!
remove_middle_character("apple")
'aple'
remove_middle_character("banana")
'bana'
remove_middle_character("discount")
‘disunt‘
”“”
答案 0 :(得分:5)
因为它可能是课堂作业,所以我不打算给你代码(因为你的教育机构可能知道Stack Overflow并且会用抄袭来引诱你,所以你无论如何都会使用它。)相反,我会就你需要知道的事情提供指导。
如果字符串或大小为2或更小(我们提前处理,以便我们不必担心以下步骤中的边缘情况),只需返回一个空字符串。
否则,如果字符串的长度为奇数,则获取长度x
,并返回第一个x // 2
(//
运算符为整数除法)字符与字符起始连接在x // 2 + 1
。
否则,返回与x // 2 - 1
开头的字符连接的第一个x // 2 + 1
个字符。
将其转化为代码:
x
; len(x)
的长度
n
; x[:n]
个字符
m
; x[m:]
开始的字符
+
连接字符串;和p
测试值if (p % 2) == 0
是否均匀(当然,奇数会导致(p % 2) == 1
评估为真)。那应该所有你需要自己编写代码。
答案 1 :(得分:-1)
使用上面提到的所有优秀建议,我建议采用重构方法,其中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"))