在Python中使用replace()函数替换字符串中的元音

在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',

我试图创建一个函数,它接受一个字符串并用其他字符替换元音

我已经写了一些代码,但是当我在空闲状态下运行它时,输出是'None',但我希望它是'4433!!ooo000 | | | |'

我有以下资料:

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)