Re: [問題] 如何能做到字母進位呢?
: 想不到怎麼壓到一行 XD
你的好做
(lambda s:
lambda sFixed=s.rstrip('z'):
lambda lz=len(s)-len(sFixed):
(sFixed[:-1] + chr(ord(sFixed[-1])+1) if sFixed else 'a') + 'a'*lz)
('a')()()
不過我也在想我的作法一行要怎麼壓 XD
不過 baseN 操作沒辦法偷偷藏在 lambda 裏面w 所以只好拿出來 QQ
baseN = lambda n,b=26,d="abcdefghijklmnopqrstuvwxyz":
(not n and d[0]) or (baseN(n // b, b, d).lstrip(d[0]) + d[n % b])
(lambda s : (lambda x=(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in
enumerate(s)])+1) : lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('az')
'ba'
(lambda s : (lambda x=(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in
enumerate(s)])+1) : lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('aa')
'ab'
(lambda s : (lambda x=(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in
enumerate(s)])+1) : lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('at')
'au'
作法基本上就是換 26 進位然後加一
不過最內層考慮到 leading zero 會是 'a' 但還是要補上去
(lambda s :
(lambda x=
(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in enumerate(s)])+1) :
# 26 進位換算 ( Σ 26 的幾次方 * 係數 )
lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('at')
# 補個 0 ,如果原本有的話
<del>其實我們在寫 Scheme 對吧 </del>
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.249.144
※ 文章網址: http://www.ptt.cc/bbs/Python/M.1418417097.A.A33.html
※ 編輯: xatier (140.113.249.144), 12/13/2014 04:48:58
推
12/13 08:19, , 1F
12/13 08:19, 1F
→
12/13 08:20, , 2F
12/13 08:20, 2F
→
12/13 08:20, , 3F
12/13 08:20, 3F
→
12/13 08:58, , 4F
12/13 08:58, 4F
→
12/13 08:58, , 5F
12/13 08:58, 5F
→
12/13 08:58, , 6F
12/13 08:58, 6F
討論串 (同標題文章)