看板 Python 關於我們 聯絡資訊
: 想不到怎麼壓到一行 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
yauhh: 但你知道嗎,functional language中所謂的行數少,不是以 12/13 08:19
yauhh: 行數為根據,而是以計算的次數為根據。而且你可以寫成一行 12/13 08:20
yauhh: 但是終究因為這一行太長,必須折行。 12/13 08:20
xatier: 折行的話沒差阿,只是用同個 lambda 寫起來就會覺得比用 12/13 08:58
xatier: 多個 function 拼起來漂亮 XD 12/13 08:58
xatier: s/同個 lambda/多個 lambda/ 12/13 08:58