Re: [問題] 如何能做到字母進位呢?
※ 引述《xatier (陪在妳身邊 :))》之銘言:
: : 想不到怎麼壓到一行 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')()()
def part_zs(s):
return s.rstrip('z'), (len(s)-len(s.rstrip('z')))
def incaz((h, zn)):
return (h[:-1] + chr(ord(h[-1])+1) if h else 'a') + 'a' * zn
print(incaz(part_zs('au')))
Functional Programming的重點在於函數本身要寫得短,而且函數主題明確。
的確一個函數可以寫成一行,但是,一個目標不見得要是一行完成。
其實寫一行或寫三行,所用到的函數一樣多,擠成一行照樣該跑多久就跑多久。
擠成一行甚至卻換來難以閱讀的問題。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.162.127
※ 文章網址: http://www.ptt.cc/bbs/Python/M.1418431092.A.033.html
→
12/13 08:56, , 1F
12/13 08:56, 1F
→
12/13 08:56, , 2F
12/13 08:56, 2F
→
12/13 08:57, , 3F
12/13 08:57, 3F
→
12/13 09:11, , 4F
12/13 09:11, 4F
→
12/13 09:13, , 5F
12/13 09:13, 5F
→
12/13 09:16, , 6F
12/13 09:16, 6F
→
12/13 09:17, , 7F
12/13 09:17, 7F
但若要說「把題目當lambda練習」,意思有點像「使用class來做」一樣,意義?
我上面那三行,寫成lambda expresssions是
part_zs = lambda s: (s.rstrip('z'), (len(s) - len(s.rstrip('z'))))
incaz = lambda (x,y): (x[:-1] + chr(ord(x[-1])+1) if x else 'a') + 'a' * y
print(incaz(part_zs('au')))
與原有的多個函數寫法差別不大。
但重點是,每一個函數都是一個計算步驟,從字面上,我將這一點清楚地表達出來。
※ 編輯: yauhh (118.168.162.127), 12/13/2014 09:27:08
討論串 (同標題文章)