2016-03-05 7 views
5

Ich habe gesucht, wie dies in Python zu tun, und ich kann keine Antwort finden. Wenn Sie eine Zeichenfolge haben:Python - Zeichen in einer Zeichenfolge um 1 erhöhen

>>> value = 'abc' 

Wie würden Sie alle Zeichen in einer Zeichenfolge um 1 erhöhen? So ist die Eingabe, die ich suche ist:

>>> value = 'bcd' 

Ich weiß, dass ich es mit einem Charakter tun ord und chr mit:

>>> value = 'a' 
>>> print (chr(ord(value)+1)) 
>>> b 

Aber ord() und chr() nur ein Zeichen nehmen. Wenn ich dieselbe Anweisung oben mit einer Zeichenfolge aus mehr als einem Zeichen verwendet habe. Ich würde den Fehler erhalten:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: ord() expected a character, but string of length 3 found 

Gibt es eine Möglichkeit, dies zu tun?

Antwort

8

Sie könnten einen Generator Ausdruck mit ''.join() wie folgt verwenden:

In [153]: value = 'abc' 

In [154]: value_altered = ''.join(chr(ord(letter)+1) for letter in value) 

In [155]: value_altered 
Out[155]: 'bcd' 

Der Generator iteriert über jedes letter im String value und erhöht sie durch eine in Ihrer Frage die chr(ord(letter)+1) Methodik vorgeschlagen. Es verwendet dann ''.join(), um die Buchstaben im Generator wieder in eine Zeichenfolge umzuwandeln.

+1

Ein Generator Ausdruck könnte hier natürlicher sein, da Sie die Liste nicht wirklich benötigen. Einfach die eckigen Klammern innerhalb des 'Join'-Aufrufs loswerden:' ".join (chr (ord (letter) +1) für Buchstaben im Wert)' – Blckknght

+0

danke @Blckknght, ich habe meine Antwort entsprechend aktualisiert – gtlambert

7

Da Gtllambert mich zu meiner ursprünglichen Antwort geschlagen hat, poste ich eine alternative Lösung. Sie können auch map und einen Lambda-Ausdruck verwenden, um dasselbe zu erreichen. Der Lambda-Ausdruck verwendet chr und ord, um jedes Zeichen um 1 zu erhöhen, und chr wird verwendet, um es zurück in ein Zeichen zu konvertieren.

value = 'abc' 
''.join(map(lambda x:chr(ord(x)+1),value)) 
0

Sehr einfache vierzeilige Stück Code:

finalMessage="" 
for x in range (0,len(value)): 
    finalMessage+=(chr(ord(value[x])+1)) 
print(finalMessage) 

Es geht durch jeden Buchstaben im String und fügt man es, aber dies mit „z“ nicht funktioniert, so konnte man tun:

value="abc testing testing, or sdrshmf" 
finalMessage="" 
for x in range(0,len(value)): 
    if ord(value[x]) in range(97,123): 
     finalMessage+=(chr(((ord(value[x])-96)%26)+97)) 
    elif ord(value[x]) in range(65,91): 
     finalMessage+=(chr(((ord(value[x])-64)%26)+65)) 
    else: 
     finalMessage+=value[x] 
print(finalMessage) 
0
value = 'abc' 
newVar=(chr(ord(value[0])+1)) 
newVar1=(chr(ord(value[1])+1)) 
newVar2=(chr(ord(value[2])+1)) 
value=newVar+newVar1+newVar2 
print(value) 

Hier ist, was ich mit aufkommen kann nicht glauben, es funktionierte tatsächlich dank für die Herausforderung mit python 3

Verwandte Themen