如果字符串中的字母替换为字符串中的字母
我已经在询问这个问题之前检查过我的问题是否有解决方案。如果字符串中的字母替换为字符串中的字母
我在做python。我试图编写代码,它接受一个输入字符串,并且该字符串中的每个字母都是一个元音(aeiou
),用它自己替换该元音四次。然后在末尾添加一个感叹号(!
)。例如:
apple
会看起来像aaaappleeee!
。
我尝试了多次,使这项工作没有任何效果。想知道你们是否可以看看我的代码,看看我做错了什么。拥抱与亲吻。克里斯托弗
def exclamation (string):
for i in range(0,len(string)):
if string[i] in 'aeiou':
string.replace(string[i],string[i*4])
print(string + '!')
您可以使用正则表达式是:
def exclamation(string):
newString = re.sub(r'([aeiou])', r'\1\1\1\1', string)
return newString + '!'
你忘了把匹配'newString = re.sub(r'([aeiou])'',r'\ 1 \ 1 \ 1 \ 1',string) ' – helloV 2014-11-20 22:51:44
字符串是不可变的如此替换的字符串返回一个新字符串每次。而不是只建立一个字符串作为你走这样的:
def exclamation (string):
buildString = ""
for i in range(0,len(string)):
if string[i] in 'aeiou':
buildString = buildString +string[i]*4
else:
buildString = buildString +string[i]
print buildString+"!"
def exclamation(string):
new_string = ''
for c in string:
if c in 'aeiou':
new_string += c * 4
else:
new_string += c
new_string += '!'
return new_string
replace
不修改现有的字符串,它返回。还有一件事情在迭代它时不会修改列表,字符串或字典。使用string
作为变量名是不好的做法。
def exclamation(my_string):
new=''
for i in range(0,len(my_string)):
if my_string[i] in 'aeiou':
new += my_string[i]*4
else: new += my_string[i]
print(new + '!')
输出:采用
>>> exclamation('abcdef')
aaaabcdeeeef!
lambda
和map
:
>>> def exclamation(my_string):
... return "".join(map(lambda x:x in 'aeiou' and x*4 or x,my_string))+'!'
...
>>> exclamation('abcdef!')
'aaaabcdeeeef!'
您可以通过遍历字符串,所以你不必与范围的混乱,并没有按str.replace
”修改现有的字符串。总之,你可以这样做:
def exclamation(string):
for c in "aeiou":
string = string.replace(c, c*4)
print(string + "!")
您也可以使用列表理解:
>>> def exclamation(s):
... return ''.join([x*4 if x in 'aeiou' else x for x in 'apple']) + '!'
...
>>> exclamation('apple')
'aaaappleeee!'
'string.replace'没有修改字符串,它返回与更换一个新的字符串。 – Barmar 2014-11-20 22:36:11
此外,'string.replace'将替换它找到的字母的_first_副本,或者_all_;除了您要替换的特定副本之外的任何内容,因为它无法知道您要替换哪个副本。所以,如果你的单词“已经”,它会看到第一个“a”,并给你“aaaalready”,然后看到e并给你aaaalreeeeady,然后看到第二个a给你aaaaaaalreeeeady,等等。 “替换”几乎从来都不是你想要的。 – abarnert 2014-11-20 22:42:44
另外,'string [i * 4]'与'string [i] * 4'不是一回事。第一个将在字符串的后面给你一个字符,或者引发一个'IndexError'。 – abarnert 2014-11-20 22:43:46