我怎样才能编写一个带字符串的函数,并将每个元音替换为自身的任意数量的连续副本进行RETURNS。
def replace(word):
for c in word:
if c in 'aeiouAEIOU':
return word.replace(c, c*5)
我的代码只将更改应用到第一个元音然后停止,我认为是因为我使用"返回"而不是" print"。然而,我的作业在创建"返回"的功能时非常具体。或"打印" - 这个人说"返回"一个新的字符串。
答案 0 :(得分:2)
有两个主要问题,
在第一次元音配对后,您将立即返回。
您的目的是在迭代时更改word
。
由于字符串在Python中是不可变的,因此每次更改字符串时都需要创建新字符串。对于这种特殊情况,我们可以使用list comprehension创建一个新的字符列表,然后最后将它们连接在一起,构造一个像这样的新String
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"
答案 1 :(得分:1)
使用列表:
def replace(word):
newword=[]
for c in word:
if c.lower() in 'aeiou':
newword.append(c*5)
else:
newword.append(c)
return ''.join(newword)
或使用字符串替换
def vowelreplace(word):
vowels='aeiouAEIOU'
for c in vowels:
word=word.replace(c, c*5)
return word
列表理解的最简单方法:
def vowelreplace(word):
return ''.join([i*5 if i in 'aeiouAEIOU' else i for i in word])