"number-in-base" ``oneliner''

Andrea Griffini agriff at tin.it
Mon Nov 1 02:21:09 EST 2004


On 31 Oct 2004 21:12:49 -0800, danb_83 at yahoo.com (Dan Bishop) wrote:

>roman = lambda n: 'M' * (n // 1000) + ('', 'C', 'C', 'CCC', 'CD', 'D',
>'DC', 'DCC', 'DCCC', 'CM')[n // 100 % 10] + ('', 'X', 'XX', 'XXX',
>'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC')[n // 10 % 10] + ('', 'I', 'II',
>'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX')[n % 10]
>
>I'm sure there's a shorter way, though.

This is a bit shorter ...

roman = lambda x: "".join(["".join(map(lambda c: "IVXLCDM"[ord(c) -
ord("A")+2*N], "/A/AA/AAA/AB/B/BA/BAA/BAAA/AC".split("/")[x//10**N %
10])) for N in (3, 2, 1, 0)])

Andrea



More information about the Python-list mailing list