2012-04-09 109 views
2

我需要创建一个查找表,其中A = 10和Z = 35(B = 11,C = 12等等),在python中完成此操作的最简单方法是什么?我知道必须有一个非常简单的方法来做到这一点,但似乎无法找到它。蟒蛇查找表

+0

你想查找表由字母与数字,号码字母,还是两者? – 2012-04-09 13:52:49

+0

我真的在做数字,但从你和其他人在下面发布的例子中得知它。非常感谢! – ouldsmobile 2012-04-09 14:10:22

回答

7

你并不需要一个查找表 - 表达

chr(c) - 54 

(与c beinig大写字母)将做的伎俩。

+6

我宁愿'chr(c)-chr('A')+ 10'。 – 2012-04-09 13:47:42

+0

@MatteoItalia:我也是,但是当我要编辑它时,Mark已经发布了它。 :) – 2012-04-09 13:48:44

+0

结束了像这个例子。谢谢! – ouldsmobile 2012-04-09 14:06:25

10

对于查找表,你可以使用一个dict

d = { 'A' : 10, 'Z' : 35 } # etc.. 

然而,在这种情况下,它似乎还有计算结果如此,而不是一个查找表的,你可以只使用一个功能用一个简单的逻辑规则一些简单的算术题:

def letterToNumber(c): 
    if not 'A' <= c <= 'Z': 
     raise ValueError('invalid character: ' + c) 
    return ord(c) - ord('A') + 10 

def numberToLetter(x): 
    if not 10 <= x <= 35: 
     raise ValueError('invalid number: ' + x) 
    return chr(x - 10 + ord('A')) 
+0

感谢您的快速响应。这种方法也起作用。 – ouldsmobile 2012-04-09 14:06:58

4

我同意,一个查询表是不必要的,但这里是一个

>>> import string 
>>> x = dict(zip(string.uppercase[:26],range(10,36))) 
>>> x['A'] 
10 
>>> x['Z'] 
35 
0

我会用简单的方法去:

import string 

def make_lookup_table(): 
    "make a lookup table where 'A' -> 10, 'B' -> 11, ..., 'Z' -> 35" 
    lookup_table = {} 
    value = 10 
    for letter in string.uppercase[:26]: 
     lookup_table[letter] = value 
     value += 1