13

I've searched on how to do this in python and I can't find an answer. If you have a string:

>>> value = 'abc' 

How would you increment all characters in a string by 1? So the input that I'm looking for is:

>>> value = 'bcd' 

I know I can do it with one character using ord and chr:

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

But ord() and chr() can only take one character. If I used the same statement above with a string of more than one character. I would get the error:

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

Is there a way to do this?

brazjul
  • 339
  • 2
  • 5
  • 19

4 Answers4

13

You could use a generator expression with ''.join() as follows:

In [153]: value = 'abc'

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

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

The generator iterates over each letter in the string value and increments it by one using the chr(ord(letter)+1) methodology suggested in your question. It then uses ''.join() to convert the letters in the generator back into a string.

gtlambert
  • 11,711
  • 2
  • 30
  • 48
  • 1
    A generator expression might be more natural here, since you don't actually need the list. Just get rid of the square brackets inside the `join` call: `"".join(chr(ord(letter)+1) for letter in value)` – Blckknght Mar 05 '16 at 23:25
  • thanks @Blckknght, I've updated my answer accordingly – gtlambert Mar 05 '16 at 23:27
8

As gtllambert beat me to my original answer, I am posting an alternative solution. You can also use map and a lambda expression to achieve the same. The lambda expression uses chr and ord to increment each character by one and chr is used to convert it back to a character.

value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))
gtlambert
  • 11,711
  • 2
  • 30
  • 48
Alex
  • 21,273
  • 10
  • 61
  • 73
3
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)

Here is what I came up with can't believe it actually worked thanks for the challenge using python 3

mike S
  • 31
  • 1
1

Very simple four line piece of code:

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

It goes through each letter in the string and adds one to it, but this doesn't work with "z", so you could do:

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)