我需要找到字母范围内的字母数字,即a = 1,b = 2,c = 3 .... 所以如果我得到一个那么返回的值应该是1
python(内置)中是否提供了一个更短的方法来查找它,而不是声明一个包含26个字母的字典及其所谓的值。
如果您知道这样的功能,请帮忙.....
答案 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 部分。