Skip to main content
 首页 » 编程设计

python之1行函数获取中间字母,语法错误

2025年05月04日15qq号

尝试编写一个单行函数,该函数将获取输入字符串并根据字符串是偶数还是非偶数获取中间字母。我收到一个错误代码,指出在 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)]