4

我正在做一个项目,经常需要这个功能

'b' + 1 #=> 'a' and 'b' - 1 #=> 'a'

现在我的解决方案非常乏味:

str(unichr((ord('b')+ 1))) 

有没有更优雅的方法来做到这一点?

4

5 回答 5

5

str(unichr(c))可以替换为chr(c).

简化版:

chr(ord('b') + 1)
于 2012-10-09T09:40:28.733 回答
5

定义自己的功能:

In [103]: def func(c,n):
    return chr(ord(c)+n)
   .....: 

In [105]: func('a',-1)
Out[105]: '`'

In [106]: func('b',-1)
Out[106]: 'a'

In [107]: func('c',2)
Out[107]: 'e'
于 2012-10-09T09:41:13.303 回答
1

Python 是强类型的,考虑字符串和整数是不同的,并且不会隐式地将一个转换为另一个。

但是,您的代码可能可以简化为

chr(ord('b') + 1)

如果你经常使用它,把它放在一个函数中,不要再担心它了:

def incr_char(c, n):
    return chr(ord(c) + n)
于 2012-10-09T09:41:43.670 回答
0

试试这个:

>>> import string
>>> string.letters[string.letters.index('a')+1]
'b'

只为阿什维尼:

>>> string.letters[string.letters.index('a')-1]
'Z'
于 2012-10-09T09:42:05.970 回答
0

您可以执行以下操作:

class char(unicode):
    def __add__(self, x):
        return char(unichr(ord(self) + x))

print char('a') + 1 # b
于 2012-10-09T09:43:15.750 回答