用于计算字母数字的Python代码

时间:2010-11-30 22:31:38

标签: python

我需要找到字母范围内的字母数字,即a = 1,b = 2,c = 3 .... 所以如果我得到一个那么返回的值应该是1

python(内置)中是否提供了一个更短的方法来查找它,而不是声明一个包含26个字母的字典及其所谓的值。

如果您知道这样的功能,请帮忙.....

6 个答案:

答案 0 :(得分:7)

使用ord()

>>> c = 'f'
>>> ord(c) - ord('a') + 1
6

如果你想要'f'和'F'都返回6,请使用lower()

>>> c = 'F'
>>> ord(lower(c)) - ord('a') + 1
6

您可能也对chr()

感兴趣
>>> c = 'f'
>>> chr(ord(c) + 1)
'g'

答案 1 :(得分:5)

只需:

ord(c)%32

可以处理上下两个。

答案 2 :(得分:1)

如果您只需要A到Z,那么您可以使用ord:

ord(c) - ord('A') + 1

答案 3 :(得分:0)

>>> alphadict = dict((x, i + 1) for i, x in enumerate(string.ascii_lowercase))
>>> alphadict['a']
1

答案 4 :(得分:0)

函数ord('a')将返回当前文本编码中'a'的数值。您可以接受并做一些简单的数学运算来转换为1,2,3类型的映射。

答案 5 :(得分:0)

TL; DR

def lettertoNumber(letter):
    return ord(letter.upper()) - 64

长期解释

ord(char)返回该字符的Unicode数字,但是我们正在寻找a = 1, b = 2, c = 3

但是在Unicode中,我们得到A = 65, B = 66, C = 67

但是,如果我们从所有这些字母中减去64,则会得到A = 1, B = 2, C = 3。但这还不够,因为我们也需要支持小写字母!

由于小写字母,我们需要使用.upper()将字母大写,以便它可以自动使用ord()而结果不大于26,这为我们提供了 TL; DR 部分。