首页 > 解决方案 > 在列表理解中使用 if else 语句时出现语法错误

问题描述

如果您正在进行代码大战并且尚未完成 5kyu Simple Pig Latin kata,请注意剧透

您必须在这里做的就是:

“将每个单词的第一个字母移到它的末尾,然后在单词的末尾添加“ay”。保持标点符号不变”

例如,对于输入“Pig latin is cool”,它应该返回“igPay atinlay siay oolcay”,对于“This is my string”,它应该返回“hisTay siay ymay tringsay”

我试图做一个单行解决方案,当我运行它时我的代码返回语法错误,我不知道为什么。

def pig_it(text):
    return ' '.join([word[1:] + word[0] + 'ay' for word in text.split() if word not in ',!?' else word])

问题在于else word,我的代码根本没有构建,为什么这个 else 语句会导致问题?

我的代码看起来像这样时工作正常

def pig_it(text):
    return ' '.join([word[1:] + word[0] + 'ay' for word in text.split() if word not in ',!?'])

但它并不能解决所有测试(只要有逗号、问号或感叹号)

标签: pythonlist-comprehension

解决方案


word[1:] + word[0] + "ay" if word not in ",!?" else word这是一个条件表达式,也称为三元运算符,您必须将表达式放在 for 循环语句的左侧,并将 if 条件放在列表理解中 for 循环语句的右侧。

return " ".join(
    [word[1:] + word[0] + "ay" if word not in ",!?" else word for word in text.split()]
)

推荐阅读