Re: [問題] 如何能做到字母進位呢?

看板Python作者 (進擊的三笠)時間11年前 (2014/12/11 22:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/14 (看更多)
※ 引述《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), '') -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.215.46 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1418306593.A.ADF.html
文章代碼(AID): #1KYQGXhV (Python)
討論串 (同標題文章)
文章代碼(AID): #1KYQGXhV (Python)