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