在Python中使用replace()函数替换字符串中的元音
我试图创建一个函数,它接受一个字符串并用其他字符替换元音 我已经写了一些代码,但是当我在空闲状态下运行它时,输出是'None',但我希望它是'4433!!ooo000 | | | |' 我有以下资料:在Python中使用replace()函数替换字符串中的元音,python,Python,我试图创建一个函数,它接受一个字符串并用其他字符替换元音 我已经写了一些代码,但是当我在空闲状态下运行它时,输出是'None',但我希望它是'4433!!ooo000 | | | |' 我有以下资料: def vowel_swapper(string): for char in string: if char in 'aeiouAEIOU': char.replace('a', '4').replace('A', '4').replace('e',
def vowel_swapper(string):
for char in string:
if char in 'aeiouAEIOU':
char.replace('a', '4').replace('A', '4').replace('e', '3').replace('E', '3')\
.replace('i', '!').replace('I', '!').replace('o', 'ooo').replace('O', '000').replace('u', '|_|').replace('U', '|_|')
print(vowel_swapper("aA eE iI oO uU"))
我哪里出了问题
编辑:感谢所有的回复。我还将听取有关使用词典的建议并加以研究。在使用
replace
时,您不需要检查每个字符是否为元音,因为str.replace
返回replace new string和所有replace character with new one
def vowel_swapper(string):
res = string.replace('a', '4').replace('A', '4').replace('e', '3').replace('E', '3')\
.replace('i', '!').replace('I', '!').replace('o', 'ooo').replace('O', '000').replace('u', '|_|').replace('U', '|_|')
return res
print(vowel_swapper("aA eE iI oO uU"))
输出
44 33 !! ooo000 |_||_|
在使用
replace
时,您不需要检查每个字符是否为元音,因为str.replace
返回replace new字符串,其中包含所有替换字符
def vowel_swapper(string):
res = string.replace('a', '4').replace('A', '4').replace('e', '3').replace('E', '3')\
.replace('i', '!').replace('I', '!').replace('o', 'ooo').replace('O', '000').replace('u', '|_|').replace('U', '|_|')
return res
print(vowel_swapper("aA eE iI oO uU"))
输出
44 33 !! ooo000 |_||_|
在python中,不是就地修改。它返回所述修改的结果,而不是执行就地修改
对于您想要实现的目标,在字符串中循环并可能将每个已更改的char
分配给字符串时,您不能这样做。Python字符串是不可变的
相反,你应该这样做-
def元音交换器(s:str):
返回s.replace('a','4')。replace('a','4')。replace('e','3')。replace('i','!')。replace('i','!')。replace('o','ooo')。replace('o','000')。replace('u','| |')。replace('u','| |')
它将一次替换所有要替换的字符并返回结果
输出-
4433!!ooo000|_||_|
然而,更优雅的方法是使用dict
def元音交换器(s:str):
替换项={'a':'4','a':'4','e':'3','e':'3','i':'!','i':','o':'ooo','o':'000','u':'| | |','u':'
返回“”。join([replacements.get(c,c)表示s中的c])
输出-
4433!!ooo000|_||_|
在这里,我们使用(带有默认值)来高效和pythonically地替换和映射python中给定字符串中的每个字符,而不是就地修改。它返回所述修改的结果,而不是执行就地修改
对于您想要实现的目标,在字符串中循环并可能将每个已更改的char
分配给字符串时,您不能这样做。Python字符串是不可变的
相反,你应该这样做-
def元音交换器(s:str):
返回s.replace('a','4')。replace('a','4')。replace('e','3')。replace('i','!')。replace('i','!')。replace('o','ooo')。replace('o','000')。replace('u','| |')。replace('u','| |')
它将一次替换所有要替换的字符并返回结果
输出-
4433!!ooo000|_||_|
然而,更优雅的方法是使用dict
def元音交换器(s:str):
替换项={'a':'4','a':'4','e':'3','e':'3','i':'!','i':','o':'ooo','o':'000','u':'| | |','u':'
返回“”。join([replacements.get(c,c)表示s中的c])
输出-
4433!!ooo000|_||_|
在这里,我们使用(带有默认值)以pythonical方式高效地替换和映射给定字符串中的每个字符该方法处理整个字符串,并返回一个新字符串
通过将字符串转换为小写,几乎将调用的方法减半,可以节省时间
def元音交换程序(字符串):
返回字符串。replace('o','ooo')。replace('o','000')。lower()。replace('a','4')。replace('e','3')。replace('u','u124; |'))
该方法处理整个字符串,并返回一个新字符串
通过将字符串转换为小写,几乎将调用的方法减半,可以节省时间
def元音交换程序(字符串):
返回字符串。replace('o','ooo')。replace('o','000')。lower()。replace('a','4')。replace('e','3')。replace('u','u124; |'))
作为执行replace().replace().replace()…
的替代方法,您可以在替换字符的dict()
上使用str.maketrans()
,然后在字符串上运行translate()
:
def vowel_swapper(string):
table = str.maketrans({'a': '4', 'A': '4',
'e': '3', 'E': '3',
'i': '!', 'I': '!',
'o': 'ooo', 'O': '000',
'u': '|_|', 'U': '|_|',
}
)
return string.translate(table)
print(vowel_swapper("aA eE iI oO uU"))
输出:
44 33 !! ooo000 |_||_|
作为执行
replace().replace().replace()…
的替代方法,您可以在替换字符的dict()
上使用str.maketrans()
,然后在字符串上运行translate()
:
def vowel_swapper(string):
table = str.maketrans({'a': '4', 'A': '4',
'e': '3', 'E': '3',
'i': '!', 'I': '!',
'o': 'ooo', 'O': '000',
'u': '|_|', 'U': '|_|',
}
)
return string.translate(table)
print(vowel_swapper("aA eE iI oO uU"))
输出:
44 33 !! ooo000 |_||_|
您正在字符串中循环,而不是使用replace方法更新字符串中字符的值 您可以使用:
def vowel_swapper(string):
return string.replace('a', '4').replace('A', '4').replace('e', '3').replace('E', '3').replace('i', '!').replace('I', '!').replace('o', 'ooo').replace('O', '000').replace('u', '|_|').replace('U', '|_|')
vowel_swapper("aA eE iI oO uU")
我可以建议另一种解决问题的方法,使用dictionary而不是多次使用replace方法吗
string= "aA eE iI oO uU xx"
swap_dic= {'a':'4', 'e':'3','i':'!','o':'000','u':'|_|' }
string= string.lower()
for char in string:
if char in swap_dic.keys():
string= string.replace(char,swap_dic[char])
print(string)
您正在字符串中循环,而不是使用replace方法更新字符串中字符的值 您可以使用:
def vowel_swapper(string):
return string.replace('a', '4').replace('A', '4').replace('e', '3').replace('E', '3').replace('i', '!').replace('I', '!').replace('o', 'ooo').replace('O', '000').replace('u', '|_|').replace('U', '|_|')
vowel_swapper("aA eE iI oO uU")
我可以建议另一种解决问题的方法,使用dictionary而不是多次使用replace方法吗
string= "aA eE iI oO uU xx"
swap_dic= {'a':'4', 'e':'3','i':'!','o':'000','u':'|_|' }
string= string.lower()
for char in string:
if char in swap_dic.keys():
string= string.replace(char,swap_dic[char])
print(string)
当使用char.replace()时,请记住它是一个方法,因此您可以从中获得一个值
此外,您的函数没有返回值
:)
当使用char.replace()时,请记住它是一个方法,因此您可以从中获得一个值
此外,您的函数没有返回值
:)在
dict
中使用需要从字符串中删除的字母(我们可以在O(1)
时间复杂度中访问dict)
我们的输入字符串,例如:
sst="fpooabraabdbuuososso"
在
dict
中使用需要从字符串中删除的字母(我们可以在O(1)
时间复杂度中访问dict)
我们的输入字符串,例如:
sst="fpooabraabdbuuososso"
首先,您的
元音交换程序
函数不返回任何内容,因此您可以期望您的print语句打印None
(不显式返回内容的函数总是隐式返回No)