python - 在列表理解中使用 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 ',!?'])
但它并不能解决所有测试(只要有逗号、问号或感叹号)
解决方案
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()]
)
推荐阅读
- javascript - 提交请求时自动关闭浏览器
- highcharts - 在 R 中使用 hctreemap2 创建具有不同颜色的 Treemap
- vb.net - 是否可以等待调用任务?
- ios - 使用 aws-sdk-ios 设置 aws-lex 请求属性
- c# - 初始化字符串的格式不符合从索引 0 开始的规范,connectionString 中没有任何拼写错误
- awk - Edit awk command to ignore specific line pattern
- sql-server - T-SQL:我正在尝试获取一列的最新行以及另一列的总和
- r - 向绘图添加垂直线时 plot.xts 的奇怪行为
- html - Chrome for Mobile 在背景颜色为 #505050 的元素上显示奇怪的像素,如网格
- ios - 如何在不同视图之间共享从 Firebase 存储下载的图像?