尝试编写一个单行函数,该函数将获取输入字符串并根据字符串是偶数还是非偶数获取中间字母。我收到一个错误代码,指出在 else if 之后的第一个 len(s) 处存在语法错误。第三行代码应该在第二行继续。
代码:
def get_middle(s):
return m = s[int(len(s/2))] if type(len(s)/2) is float else if
s[int(len(s)/2)-1:int(len(s)/2)]
错误:
Traceback (most recent call last):
File "main.py", line 1, in <module>
from solution import *
File "/home/codewarrior/solution.py", line 2
return m = s[len(s/2)] if type(len(s)/2) is float else if
s[int(len(s)/2)-1:int(len(s)/2)]
^
SyntaxError: invalid syntax
请您参考如下方法:
type(len(s)/2) is float 不是检查偶数-奇数长度,正如您在下面看到的,偶数和奇数字符串长度都评估为 True 以检查您有,因为两个分区都是浮点值
4/2 = 2.0 和 5/2=2.5
In [16]: s = 'abcd'
In [17]: type(len(s)/2) is float
Out[17]: True
In [18]: s = 'abcde'
In [19]: type(len(s)/2) is float
Out[19]: True
为什么不通过检查偶数/奇数长度是否被 2 整除来保持简单。 检查数字长度是奇数还是偶数,并相应地选择中间字符。
def get_middle(s):
#If even length, select 2 characters
if len(s)%2 == 0:
return s[int(len(s)/2)-1:int(len(s)/2)+1]
#If odd length, select 1 character
else:
return s[int(len(s)/2)]
print(get_middle('a'))
print(get_middle('ab'))
print(get_middle('abc'))
print(get_middle('abcd'))
print(get_middle('abcde'))
输出将是
a
ab
b
bc
c
从这里开始,我们可以很容易地写出一行代码
def get_middle(s):
return s[int(len(s)/2)-1:int(len(s)/2)+1] if len(s)%2 == 0 else s[int(len(s)/2)]
