这是我的python2代码,比较幼稚有些地方很不严谨高手请蛋定  - #!/usr/bin/python2
- ROM = [['I', 'V'], ['X', 'L'], ['C', 'D'], ['M']]
- GEN = lambda a, b, c, d, e, f, r: a * ROM[b][c] + d * ROM[e][f] + r
- LAM = [[3, lambda m, i, r: (0, i, 0, m, i, 0, r)],
- [5, lambda m, i, r: (1, i, 0, 5 - m, i, 1, r)],
- [8, lambda m, i, r: (1, i, 1, m - 5, i, 0, r)],
- [9, lambda m, i, r: (10 - m, i, 0, 1, i + 1, 0, r)]]
- def A2R(n, i=0, R=''):
- if n is 0: return R
- n, m = divmod(n, 10)
- return A2R(n, i + 1, GEN(*next(l(m, i, R) for v, l in LAM if m <= v)))
- test = [6, 9, 10, 11, 76, 499, 3888]
- good = ['VI', 'IX', 'X', 'XI', 'LXXVI', 'CDXCIX', 'MMMDCCCLXXXVIII']
- for I, N in enumerate(test):
- rom = A2R(N)
- print N, '=', rom, ':', rom == good[I]
复制代码 |