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

时间:2016-10-03 00:28:34

标签: 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_word)

8 个答案:

答案 0 :(得分:4)

您可以使用string.translatemaketrans

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

您可能还想检查大写字母。

答案 1 :(得分:1)

使元音成为一个数组,每个元素都是自己的字母。

然后做

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

答案 2 :(得分:1)

列表可用于轻松构建单词,使用.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)

答案 3 :(得分:1)

你可以使用正则表达式

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

答案 4 :(得分:1)

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

if letter != vowels:

不做你的想法。它实际上将字母与完整字符串"aeiouy"进行比较。它总是不相等的(例如"a" != "aeiouy"为True,任何其他字母也是如此)。

更可能是你的意思

if letter in vowels:

引擎盖将迭代vowels并将每个字符与letter进行比较,如果任何字母匹配,则返回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)

答案 5 :(得分:0)

使用列表推导并将vowels设置为set对象(如果您有大量的单词列表,这对于提高性能非常有用):

>>> vowels = set("aeiouy")
>>> word = 'ampersand'
>>> new_word = "".join([letter if letter not in vowels else "_" for letter in word])
>>> print(new_word)
_mp_rs_nd

答案 6 :(得分:0)

如果您使用Python 3,请使用str.maketrans来构建字符串转换表:

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

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

显示:__, th_s _s _ w_ck_ phr_s_!

答案 7 :(得分:0)

DRAX:我会做得更好!

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