我希望我在这里遗漏了一些明显的东西,但是我正在玩 Python CodingBat 网站,并遇到了问题front_back:
对于传入的字符串,如果字符串长度大于 1,则将其第一个和最后一个字符交换后返回。
我想出了一个我认为就足够的单行解决方案,但 Coding.bat 拒绝接受它,并出现索引超出范围错误。
我在 IDLE(64 位 Windows 版本)中玩过,我把问题归结为:
len(str) < 2 and str or 'doh ' + str + ' /doh'
奇怪的问题是设置str = ''
返回:
'doh /doh'
它不应该因为 len('') 为 0,而是str='a'
返回:
'a'
并str='abc'
返回:
'doh abc /doh'
我期望...
所以我的问题是真的;为什么检查 '' 的 len 是去三元运算符的 OR 条件,但是len('')
在控制台运行返回 0,明显小于 2?
编辑:
但是,此解决方案实际上有效:
def front_back(str):
if len(str) < 2:
return str
else:
return str[-1] + str[1:-1] + str[0]
'mtadd'; 感谢您的回答,但这不合逻辑和/或这是一个 pythonic 三元运算符:
return (statement) and <statement was true> or <statement was false>
它与 C# 相同:
return statement
? trueValue
: falseValue;