我正在尝试编写一个函数,该函数将字符串作为输入,并返回所有元音重复4次的字符串。
例如:apple
变成aaaappleeee
除 e 以外,它对每个元音都有效,在其中重复 e 的次数很多。
Python 3.我尝试使用replace函数,将替换值更改为i+i+i+i
,i*4
,i(4)
,(i+i)*2
,但似乎无济于事。
def exclamation(string):
for i in string:
if i in 'aeiou':
string = string.replace(i, i*4)
return string + '!'
exclamation('excellent')
应该返回eeeexceeeelleeeent!
但是,它返回:
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeexceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeelleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeent!
如前所述,该功能对于除 e 之外的所有其他元音都适用。
谢谢!
答案 0 :(得分:2)
您永远不要修改要迭代的内容,将修改后的单词存储在新变量中。修改代码就像
def exclamation(string):
new = ''
for i in string:
if i in 'aeiou':
new += i*4
else:
new += i
return new + '!'
答案 1 :(得分:1)
对于您要遍历的每个元音,循环将检查条件,替换相同字符串中的内容,然后以1进行迭代,该字符串现在是相同的字符串,但现在必须处理下一个新字母3个相同的元音。例如:
让我们谈谈字符串“ excellent”。对于第一个元音“ e”,将其替换为“ eeee”,导致字符串为“ eeeexcellent”,现在,当第二个循环开始时,它从仍为“ e”的index(1)开始,并且一直持续下去。 永远不要修改要迭代的迭代器。
答案 2 :(得分:0)
并不是说e
的处理方式有所不同,而是要用e
替换每个eeee
的{{1}}字样。如果您尝试使用其他带有相同元音的倍数的单词,则会在此处看到相同的行为。
应该替换一次而不是替换字符串中的每个元音,这将影响字符串中该元音的每个实例:
e
请注意,这仅在单词已经小写的情况下才有效(尽管很容易解决,但请在循环中添加大写元音)。
执行此操作的另一种方法是定义一个转换表以一次完成所有替换:
def exclamation(s):
for vowel in 'aeiou':
s = s.replace(vowel, vowel*4)
return s + '!'
print(exclamation('excellent'))
# 'eeeexceeeelleeeent!'
答案 3 :(得分:0)
def感叹号(字符串):
result = ''
for i in string:
if i in 'aeiou':
vowel = i * 4
else:
vowel = i
result += vowel
return result + '!'
replace不能很好地工作的原因是因为我们有3个'e',这意味着对于循环中的每个'e',replace将乘以4,这肯定会为您提供12个'e'优秀的一个'e'
答案 4 :(得分:0)
之所以发生这种情况,是因为您的循环还将替换的'e'也视为字符串的元素。
这就是我的意思:
通过执行上述步骤,我们将在第一次迭代中找到该结果。
第一次迭代将对第一个字母“ e”起作用,并将其替换为“ eeee”。因此,在第一次迭代结束时,我们的最终字符串将是:'eeeexcellent'
现在进行第二次迭代,它将考虑第一次迭代后得到的最终字符串。对于第二次迭代,要考虑的单词将仅是“ e”。如您所见,您需要在每次迭代后保持字符串不变,并将替换后的结果保存到新字符串中。 (毕竟它永远是一个新的字符串,因为字符串是不可变的)
def exclamation(string):
tmp = '' #taking temporary variable to store the current data
for i in string:
if i in 'aeiou':
tmp += i*4 # i*4 only if i is vowel
else:
tmp += i # keeping i as it is if it's not vowel
return tmp + '!'
您还可以尝试易于理解的列表列表理解:
def exclamation(string):
newstr = [ i*4 if i in 'aeiou' else i for i in string]
return ''.join(newstr)+'!'