Re: [问题] 如何能做到字母进位呢?

楼主: Seudo (进击的三笠)   2014-12-11 22:03:09
※ 引述《yauhh (小y宝贝)》之铭言:
: ※ 引述《opengood5566 ( )》之铭言:
: : 比如说进行加一: a变b, at变au, az变ba
: : 请问有什么办法可以做到这样吗?
: : 感谢!
如果转换成26进位加一处理, z+1会是ba
(a=0,b=1, ... ,z=25)
不确定原po要的是哪种结果
所以我是用chr,ord转换 最后再加if判断
def add_one(string):
q = 1
s = ""
for c in string[::-1]:
num = ord(c) - ord('a') + q
q, r = divmod(num, 26)
s = chr(ord('a') + r) + s
return s
z+1 = a 同上
= az 加一行 if q: s = chr(ord('a')) + s
= bz 加一行 if q: s = chr(ord('a') + q) + s
: 刚好做过,是要把Excel的字段名称转换为数字。
: 首先做双向的mapping。
: def build_mapping():
: a, b = {}, {}
: for (x,y) in zip('abcdefghijklmnopqrstuvwxyz',
: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,
: 15,16,17,18,19,20,21,22,23,24,25,26]):
: a.udpate({x: y})
^^^^^^^^^^^^^^^^ a.update({x: y})
: b.update({y: x})
如果是我会直接 a[x], b[y] = y, x
: return a, b
: 然后,'at'加一变'au'是这样做:
: at = 'at'
: x, y = build_mapping() ##这行我曾经遇过assignment不成功,请告诉我为什么
: n = reduce(lambda (a,b): a * 10 + b, map(lambda z: x[z], at))
: n1 = to_list(n+1, 26) ##把n+1转换成以1为底,26进位的num list
: au = string.append(map(lambda n2: y[n2], n1), '')

Links booklink

Contact Us: admin [ a t ] ucptt.com