我正在尝试将以下代码拆分为单独的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'
非常感谢您的帮助。干杯。
答案 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