2016-10-03 49 views
0

我是一名初級學習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) 

回答

1

製作元音的數組,每個它自己的信元。

然後做

for letter in word: 
    if letter in vowels: 
     letter = "_" 
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

您可以使用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

你可以使用正則表達式

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

使用列表理解和設置vowelsset對象(這真的是唯一有價值的用於提高性能,如果你有話的大名單上,你會遍歷):

>>> 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 
0

回答爲什麼您的方法無效。

if letter != vowels: 

不會做你在想什麼。它實際上將字母與完整字符串"aeiouy"進行比較。它總是不相等的(例如​​爲真,其他字母也是如此)。

更有可能的是你的意思是

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) 
+0

非常感謝你,這真是太有幫助。 –

+0

沒問題。隨時接受(並upvote)這個或任何其他答案,無論你覺得最幫你。 –