字符串替换打印字符“E”的实例太多

问题描述 投票:1回答:5

我想编写一个函数,采用一个字符串作为输入,并返回与重复4次,所有的元音的字符串。

例如:apple成为aaaappleeee

它适用于每一个元音,除了E,其中重复电子商务时代的令人震惊的量。

Python 3下我曾尝试与替换功能发挥,改变了替换值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!

如前所述,功能适用于所有其他元音工作正常,但如

谢谢!

python string replace
5个回答
2
投票

你永远不会改变的东西你遍历,修改后的字存储在一个新的变量。对矫正你的代码会是这样的

def exclamation(string):
    new = ''
    for i in string:
        if i in 'aeiou':
            new += i*4
        else:
            new += i
    return new + '!'

1
投票

对于你迭代通过每一个元音,循环检查的条件,取代了相同的字符串的内容,然后通过1迭代现在是相同的字符串,但不是下一个新的字母,它现在有处理3以上同样的元音。例如:

让我们来谈谈字符串“优秀”。对于第一元音“E”,它被替换为“EEEE”产生的字符为“eeeexcellent”,第二循环开始现在,当在它开始于索引(1)这仍然是一个“e”和这保持正在进行。永远不要修改你迭代的迭代。


0
投票

这并不是说e被区别对待,而是你与e替换每个eeee尽可能多es因为有这个词。如果试图用相同元音的倍数换句话说,你会看到相同的行为存在。

相反,置换了的字符串中的每个元音的,你应该做的每一次更换,这将影响字符串中的元音的每个实例:

def exclamation(s):
    for vowel in 'aeiou':
        s = s.replace(vowel, vowel*4)
    return s + '!'

print(exclamation('excellent'))
# 'eeeexceeeelleeeent!'

需要注意的是,如果这个词已经小写(尽管这将是很容易解决,资本元音添加到环路)这仅适用。

这样做的另一种方法是定义一个翻译表来完成所有的更新换代一次:

trans = str.maketrans({vowel: vowel*4 for vowel in 'aeiou'}) 

def exclamation(s):
    return s.translate(trans)

0
投票

高清感叹号(串):

result = ''
for i in string:
    if i in 'aeiou':
        vowel = i * 4
    else:
        vowel = i
    result += vowel
return result + '!'

为什么更换没有工作优秀的原因是因为我们有3个“E”中,这意味着每个回路中的“E”的,取代将乘以4,这将肯定是在优秀的给你12“E的每一个‘E’


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)+'!'
© www.soinside.com 2019 - 2024. All rights reserved.