【发布时间】:2018-11-08 01:45:35
【问题描述】:
我需要找到字母范围内的字母编号,即 a = 1, b=2 , c =3.... 所以如果我得到 a 那么返回值应该是 1
在 python(inbuilt) 中是否提供了一种更短的方法来查找它,而不是声明一个包含 26 个字母的字典及其受尊重的值。
如果你知道这样的功能,请帮忙.....
【问题讨论】:
标签: python
我需要找到字母范围内的字母编号,即 a = 1, b=2 , c =3.... 所以如果我得到 a 那么返回值应该是 1
在 python(inbuilt) 中是否提供了一种更短的方法来查找它,而不是声明一个包含 26 个字母的字典及其受尊重的值。
如果你知道这样的功能,请帮忙.....
【问题讨论】:
标签: python
【讨论】:
lower() 的调用。
只是:
ord(c)%32
可以同时处理上下。
【讨论】:
% 32 会起作用。谢谢!
如果你只需要 A 到 Z,那么你可以使用 ord:
ord(c) - ord('A') + 1
【讨论】:
>>> alphadict = dict((x, i + 1) for i, x in enumerate(string.ascii_lowercase))
>>> alphadict['a']
1
【讨论】:
alphadict = dict(enumerate(string.ascii_lowercase, start=1))
start 部分很有用。
函数 ord('a') 将返回当前文本编码中 'a' 的数值。您可能可以使用它并做一些简单的数学运算来转换为 1、2、3 类型的映射。
【讨论】:
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 部分。
【讨论】: