碰到一题,就是简单的string和ASCii码的转换,但是在python中,有很强大的maketrans方法可以简洁的写出代码。
题目:基本逻辑是,一个字母变成后两位的字母,比如a->c, c->e, o->q。
直接上来就用了ord方法和chr方法。前一个把char变成ASCii,后一个把number再变回char。
s = 'map'
l = []
for c in s:
temp = (ord(c)+2)
if temp > 122:
temp = 97 - 1 + temp % 122
l.append(temp)
print l
result = ''.join(chr(i) for i in l)
print result
# result
[111, 99, 114]
ocr
然后我们来看一个python的string模块。
a = 'abcdef'
b = 'efabcd'
table = string.maketrans(a, b)
print table
text = 'bed'
print text.translate(table)
# result
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efabcdghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������
fcb
fcb是我们可以推算出来的结果,之上的那一串,就是maketrans方法加密的不知道什么的输出 0.0
同时,我们要知道maketrans方法中的两个字符串需要同长度,因为他们是一对一映射的。
table = string.maketrans('', '')
text = 'bed-1234'
print text.translate(table)
print text.translate(table, 'e1298sdjf')
# result
bed-1234
b-34
第二个参数,是删除string中的相同元素。可以传不存在的元素,仅仅是删除检查到的元素而已。
总之,面试中灵活运用会有不小的亮点。