我想编写一个函数,采用一个字符串作为输入,并返回与重复4次,所有的元音的字符串。
例如:apple
成为aaaappleeee
它适用于每一个元音,除了E,其中重复电子商务时代的令人震惊的量。
Python 3下我曾尝试与替换功能发挥,改变了替换值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!
如前所述,功能适用于所有其他元音工作正常,但如
谢谢!
你永远不会改变的东西你遍历,修改后的字存储在一个新的变量。对矫正你的代码会是这样的
def exclamation(string):
new = ''
for i in string:
if i in 'aeiou':
new += i*4
else:
new += i
return new + '!'
对于你迭代通过每一个元音,循环检查的条件,取代了相同的字符串的内容,然后通过1迭代现在是相同的字符串,但不是下一个新的字母,它现在有处理3以上同样的元音。例如:
让我们来谈谈字符串“优秀”。对于第一元音“E”,它被替换为“EEEE”产生的字符为“eeeexcellent”,第二循环开始现在,当在它开始于索引(1)这仍然是一个“e”和这保持正在进行。永远不要修改你迭代的迭代。
这并不是说e
被区别对待,而是你与e
替换每个eeee
尽可能多e
s因为有这个词。如果试图用相同元音的倍数换句话说,你会看到相同的行为存在。
相反,置换了的字符串中的每个元音的,你应该做的每一次更换,这将影响字符串中的元音的每个实例:
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)
高清感叹号(串):
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’
它发生,因为你的循环会考虑更换“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)+'!'