在python中,如何用下划线替换单词的元音?

在python中,如何用下划线替换单词的元音?,python,Python,我是一个学习python语言的初学者,我很难理解如何使用单词的元音并用下划线替换它们 到目前为止,这是我想到的,但它根本不起作用 word = input("Enter a word: ") new_word = "" vowels = "aeiouy" for letter in word: if letter != vowels: new_word += word else: new_word += "_" print(new_

我是一个学习python语言的初学者,我很难理解如何使用单词的元音并用下划线替换它们

到目前为止,这是我想到的,但它根本不起作用

word = input("Enter a word: ")
new_word = ""
vowels = "aeiouy"


for letter in word:
    if letter != vowels:
        new_word += word
    else:
       new_word += "_"
       print(new_word)

让元音与每个元素组成一个数组,每个元素都有自己的字母

那就做吧

for letter in word:
    if letter in vowels:
        letter = "_"

列表可用于轻松构建单词,使用
.join()
可以将列表项组合成单个字符串

word = 'pizza'
vowels = "aeiouy"
new_word = []
for letter in word:
    if letter in vowels:
        new_word.append('_')
    else:
        new_word.append(letter)
print(''.join(new_word))
以下是生成器表达式中的相同内容:

word = 'pizza'
vowels = "aeiouy"
new_word = ''.join(c if c not in vowels else '_' for c in word)
print(new_word)

您可以使用
string.translate
maketrans

from string import maketrans

vowels = "aeiouy"
t = "______"
st = "trying this string"
tran = maketrans(vowels, t)

print st.translate(tran)
# Gives tr__ng th_s str_ng
您可能还需要检查大写字母。

您可以使用正则表达式

import re
print(re.sub("[aeiouAEIOU]", "_", "abc"))    # prints _bc

使用列表理解并将
元音
设置为
设置
对象(只有在迭代大量单词时,这才有助于提高性能):


回答为什么你的方法不起作用

if letter != vowels:
不做你想做的事。实际上,它将字母与完整字符串“aeiouy”进行比较。它总是不相等的(例如,
“a”!=“aeiouy”
是真的,其他字母也是真的)

你的意思很可能是

if letter in vowels:
在引擎盖下,它将迭代
元音
,并将每个字符与
字母
进行比较,如果任何字母匹配,则返回
True

第二个错误就在这里

new_word += word
您正在将原始单词添加到新词中,而不是刚刚检查的字母。那就这样吧

new_word += letter
第三点要注意的是,你的逻辑与你的意图相反。您想将元音替换为
,但您的if语句允许将元音替换为新词,并将辅音替换为下划线。所以如果你撤销if和else子句

你最后得到的一切

word = input("Enter a word: ")
new_word = ""
vowels = "aeiouy"

for letter in word:
    if letter in vowels:
        new_word += '_'
    else:
       new_word += letter

print(new_word)
如果您有Python 3,请使用构建字符串转换表:

vowels = "aeiouy"
vowels += vowels.upper()
tr = str.maketrans(vowels, '_' * len(vowels))

print('Yo, this is a wacky phrase!'.translate(tr))

显示:
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu德拉克斯:我会做得更好

def replace_vowels(word):
        vowels = ['a', 'e', 'i', 'o', 'u']
        for x in (word.lower()):
                if x in vowels:
                        word = word.replace(x, "_")
        print(word) 

replace_vowels('Stackoverflow')
输出


非常感谢,这很有帮助。没问题。请随意接受(并投票)这个或任何其他答案,无论你觉得哪个答案对你帮助最大。我也投票支持你花时间解释错误。。编辑:只看到了日期,但无论如何你值得投票;)
def replace_vowels(word):
        vowels = ['a', 'e', 'i', 'o', 'u']
        for x in (word.lower()):
                if x in vowels:
                        word = word.replace(x, "_")
        print(word) 

replace_vowels('Stackoverflow')
St_ck_v_rfl_w