字符串替换打印了太多字符'e'的实例

时间:2019-02-10 21:25:16

标签: python string replace

我正在尝试编写一个函数,该函数将字符串作为输入,并返回所有元音重复4次的字符串。

例如:apple变成aaaappleeee

e 以外,它对每个元音都有效,在其中重复 e 的次数很多。

Python 3.我尝试使用replace函数,将替换值更改为i+i+i+ii*4i(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 之外的所有其他元音都适用。

谢谢!

5 个答案:

答案 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'也视为字符串的元素。

这就是我的意思:

  • 字符串很棒
  • 遍历字符串并检查字母是否为元音
    • 如果字母是元音,则将该元音写4次。

通过执行上述步骤,我们将在第一次迭代中找到该结果。

第一次迭代将对第一个字母“ 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)+'!'