2017-10-08 69 views
3

請告知下列代碼是否有效。我似乎根本不工作立即替換字符串中的多個字符

string = str(input('Enter something to change')) 
replacing_words = 'aeiou' 

for i in replacing_words: 
    s = string.replace('replacing_words', ' ') 

print(s) 

這裏我的意圖是用空格替換字符串中的所有元音。 如果這是一個錯誤的代碼,有人可以幫助正確的代碼和解釋,爲什麼它不工作?

謝謝

回答

2
  • 您在使用for循環中文字「replacing_words」,而不是變量i。
  • 你不用更換原來的字符串再次進行修改,而不是創建一個新的字符串,導致只有上次更換到顯示

這裏將是正確的代碼。

string = input('Enter something to change') 
vowels = 'aeiouy' 

for i in vowels: 
    string = string.replace(i, ' ') 

print(string) 

此外,我認爲輸入返回一個字符串'類型'。所以調用str將不起作用。不確定。也#2:y也是元音(如果你想徹底的話,還有其他變音和怪異的字符)。

1

您正在錯誤地使用replace方法。由於您要分別替換每個字符,因此每次都應該傳遞一個字符。

這裏是一個單行,做的伎倆:

string = ''.join(' ' if ch in vowels else ch for ch in string) 
+0

如果'str'先前沒有定義(並且由於它影響了內建函數,它會是一個錯誤的名稱選擇),那麼這會在'.replace'調用中出錯。另外 - 那個list-comp是錯的......所以這個要麼不會運行,要麼不會運行...... –

+0

@JonClements,謝謝你的評論,修正。 –

+0

map/lambda有點矯枉過正,但它現在至少可以工作 - 你是否只考慮過'''.join(''如果ch在元音其他字符串中ch')? –

1

試試這個代碼:

string=raw_input("Enter your something to change") 
replacing_words = 'aeiou' 
for m in replacing_words: 
    string=string.replace(m, ' ') 
print string 
3

你可以定義一個translation table。這是一個Python2代碼:

>>> import string 
>>> vowels = 'aeiou' 
>>> remove_vowels = string.maketrans(vowels, ' ' * len(vowels)) 
>>> 'test translation'.translate(remove_vowels) 
't st tr nsl t n' 

它快速,簡潔,不需要任何循環。

對於Python3,你會寫:

'test translation'.translate({ord(ch):' ' for ch in 'aeiou'}) # Thanks @JonClements. 
+1

在Python 3上,您可以使用:''test translation.translate({ord(ch):''for'aeiou'})'... –

0

在Python中,字符串是不可變的。

# Python 3.6.1 

""" Replace vowels in a string with a space """ 

txt = input('Enter something to change: ') 
vowels = 'aeiou' 
result = '' 

for ch in txt: 
    if ch.lower() in vowels: 
     result += ' ' 
    else: 
     result += ch 

print(result) 

測試它:

Enter something to change: English language 
ngl sh l ng g 

在Python 3。X,你也可以寫(沒有進口):

vowels = 'aeiouAEIOU' 
space_for_vowel = str.maketrans(vowels, ' ' * len(vowels)) 
print('hello wOrld'.lower().translate(space_for_vowel)) 

h ll w rld 
0

您可以在字符串首先檢查的話是元音字符串,然後替換:

string = str(input('Enter something to change')) 

replacing_words = 'aeiou' 

for i in string: 
    if i in replacing_words: 
     string=string.replace(i," ") 

print(string) 

如果你想保持原來的複製和也想改變字符串,則:

string = str(input('Enter something to change')) 
string1=string[:] 
replacing_words = 'aeiou' 

for i in string1: 
    if i in replacing_words: 
     string1=string1.replace(i," ") 

print("{} is without vowels : {} ".format(string,string1)) 

輸出:

Enter something to change Batman 
Batman is without vowels : B tm n