2017-10-08 4 views
3

Bitte beraten, wenn der folgende Code funktioniert. Mine scheint überhaupt nicht zu funktionierenErsetzen Sie mehrere Zeichen in einer Zeichenfolge auf einmal

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

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

print(s) 

Meine Absicht hier ist, alle Vokale in der Zeichenfolge durch ein Leerzeichen zu ersetzen. Wenn dies ein falscher Code ist, könnte jemand mit den richtigen Codes und Erklärungen helfen, warum es nicht funktioniert hat?

Danke

Antwort

2
  • Sie sind eine wörtliche 'replacing_words' anstatt die Variable i in Ihrem for-Schleife.
  • Sie ersetzen nicht die Original-Zeichenkette, die es wieder zu ändern, können Sie stattdessen eine neue Zeichenfolge erstellen, nur den letzten Ersatz in resultierenden der richtigen Code gezeigt

Hier wäre werden.

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

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

print(string) 

Auch denke ich, Eingabe gibt eine Zeichenfolge "Typ" zurück. Also wird das Aufrufen von str keine Wirkung haben. Nicht sicher. Auch # 2: y ist auch ein Vokal (also sind åäö und andere Umlaute und seltsame Zeichen, wenn du gründlich sein willst).

1

Sie verwenden die replace Methode falsch. Da Sie jedes Zeichen einzeln ersetzen möchten, sollten Sie jedes Mal ein einzelnes Zeichen übergeben. Hier

ist ein Einzeiler, die der Trick:

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

Wenn 'str' nicht vorher definiert wurde (und es wäre eine schlechte Wahl des Namens, da es ein eingebautes Shadowing ist), dann wird dies beim' .replace' Aufruf fehlschlagen. Auch - diese Liste-Comp ist einfach falsch ... So wird entweder nicht ausgeführt oder wird nicht funktionieren ... –

+0

@ JonClements, danke für den Kommentar, behoben. –

+0

Die Map/Lambda ist ein bisschen übertrieben, aber es funktioniert zumindest jetzt - haben Sie nur '' '.join (' 'wenn ch in Vokalen anderes ch für ch in string) ''? –

1

Versuchen Sie diesen Code:

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

Sie könnten einen translation table definieren. Hier ist ein Python2 Code:

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

Es ist schnell, präzise und keine Schleife benötigen.

Für Python3, würden Sie schreiben:

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

In Python 3 könnten Sie folgendes verwenden: ''test translation'.translate ({ord (ch):' 'für ch in' aeiou '})' ... –

0

In Python sind Strings unveränderlich.

# 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) 

Testing es:

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

In Python 3.x, können Sie auch schreiben (nichts zu importieren):

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

h ll w rld 
0

Sie zuerst in Zeichenfolge überprüfen können, ob Worte in Vokal-String sind dann ersetzen:

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) 

Und wenn Sie Original behalten möchten und wollen auch dann Zeichenfolge ändern:

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

Ausgang:

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