主要有两个问题,
您将在第一个元音匹配后立即返回。
您的意图是在迭代 word 时对其进行更改。
由于字符串在 Python 中是不可变的,因此每次更改字符串时都需要创建新字符串。对于这种特殊情况,我们可以使用列表推导式创建一个新的字符列表,然后最后将它们全部连接在一起,以构造一个像这样的新字符串
def replace(word):
return "".join([c * 5 if c in 'aeiouAEIOU' else c for c in word])
assert replace("a") == "aaaaa"
assert replace("ab") == "aaaaab"
assert replace("B") == "B"
该程序从带有for c in word 的单词中提取每个字符,然后检查if c in 'aeiouAEIOU'。如果为真,则将列表的当前元素设为c * 5,否则将当前元素设为c 本身。因此,在加入之前,列表看起来像这样,对于单词Welcome
def replace(word):
print [c * 5 if c in 'aeiouAEIOU' else c for c in word]
return "".join([c * 5 if c in 'aeiouAEIOU' else c for c in word])
replace("Welcome")
# ['W', 'eeeee', 'l', 'c', 'ooooo', 'm', 'eeeee']
然后我们将它们与"".join 联合起来得到Weeeeelcooooomeeeee
你可以像这样概括一下程序
def replace(word, count):
return "".join([c * count if c in 'aeiouAEIOU' else c for c in word])
assert replace("Welcome", 2) == "Weelcoomee"
assert replace("Welcome", 3) == "Weeelcooomeee"