如何将其拆分为单独的if语句?

时间:2019-05-16 12:15:17

标签: python

我正在尝试将以下代码拆分为单独的if语句。

def second_half(s):
    return s[len(s)//2 if len(s)%2 == 0 else ((len(s)//2)+1):]

我已经尝试执行以下操作:

def second_half(s):
    if len(s) % 2 == 0:
        return s[len(s)//2]
    else:
        return s[((len(s)//2)+1):]

并在我的doctest中收到以下输出(尽管我通过了其他大多数测试):

Failed example:
    second_half("abcdef")
Expected:
    'def'
Got:
    'd'

非常感谢您的帮助。干杯。

3 个答案:

答案 0 :(得分:1)

在您原始的列表理解代码中,将计算切片的起始索引,而最后一个索引将作为(len(s)

但是当您将其转换为两个if语句时,您在第一个:条件中忘记了分片运算符if,这导致仅返回一个元素,但是您想要的是两个条件中的整个切片,当您在第一个return s[len(s)//2:]条件中执行return s[len(s)//2]而不是if时会发生

所以更新后的代码将是

def second_half(s):

    if len(s) % 2 == 0:
        #Added the missing slice
        return s[len(s)//2:]
    else:
        return s[((len(s)//2)+1):]

该代码将按预期工作

print(second_half('abcde'))
#de
print(second_half('abcdef'))
#def

答案 1 :(得分:0)

这里发生了什么

len(s)//2 if len(s)%2 == 0 else ((len(s)//2)+1)
  

三元运算符表达式:

     

语法:

     

value_when_true 如果条件否则 value_when_false

这部分代码将返回整数(some_integer)

然后您将拥有:

 s[some_integer:] # a[start:] items start through the rest of the array
  

切片字符串:

     

语法:

     

substring = original_string [first_pos:last_pos]

def second_half(s):
    if len(s) % 2 == 0:
        n=len(s) // 2
    else:
        n=(len(s)//2)+1

    return s[n:]

print (second_half("abcdef"))


def second_half(s):
    if len(s) % 2 == 0:
        return s[len(s)//2:]
    else:
        return s[len(s)//2)+1]

输出:

def

答案 2 :(得分:0)

如前所述,您的第一个返回项缺少冒号。 这称为possibilities,有关更多信息,请参见here

java.sql.SQLException: ORA-06550: line 1, column 67:
PLS-00103: Encountered the symbol "" when expecting one of the following:

. ( ) , * @ % & = - + < / > at in is mod remainder not rem =>
   <an exponent (**)> <> or != or ~= >= <= <> and or like like2

结果:

list slicing