作者yauhh (小y宝贝)
看板Python
标题Re: [问题] 如何能做到字母进位呢?
时间Sat Dec 13 08:38:10 2014
※ 引述《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://webptt.com/cn.aspx?n=bbs/Python/M.1418431092.A.033.html
1F:→ xatier: 你的话部份同意,不过确实大多数的情况下也是倾向写小而美 12/13 08:56
2F:→ xatier: 的函数来拼出完整的大程式,不过这边我比较倾向把题目当作 12/13 08:56
3F:→ xatier: 对 lambda 的操作练习 :P 12/13 08:57
4F:→ yauhh: 不是「小而美」,而是每一个函数我可以说出它是用来干什麽 12/13 09:11
5F:→ yauhh: 例如part_zs/1是分割出尾端纯进位部分与前端加一部分 12/13 09:13
6F:→ yauhh: 而incaz/1则是收到一个26进位数的内部表达法,则制造出 12/13 09:16
7F:→ yauhh: 下一个26进位数。 12/13 09:17
但若要说「把题目当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