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

看板Python作者 (陪在妳身邊 :))時間9年前 (2014/12/13 04:44), 9年前編輯推噓1(105)
留言6則, 2人參與, 最新討論串12/14 (看更多)
: 想不到怎麼壓到一行 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
但你知道嗎,functional language中所謂的行數少,不是以
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
折行的話沒差阿,只是用同個 lambda 寫起來就會覺得比用
12/13 08:58, 4F

12/13 08:58, , 5F
多個 function 拼起來漂亮 XD
12/13 08:58, 5F

12/13 08:58, , 6F
s/同個 lambda/多個 lambda/
12/13 08:58, 6F
文章代碼(AID): #1KYrF9ep (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 12 之 14 篇):
文章代碼(AID): #1KYrF9ep (Python)