pythonでローマ数字を作る
pythonのintをローマ数字にするやつを作ってみた。
def itoroma(x): if not 3999 >= x >= 1: raise ValueError('out of range.') result = [] ones = {0:'I', 1:'X', 2:'C', 3:'M'} fives = {0:'V', 1:'L', 2:'D'} for i, c in enumerate(int(y) for y in reversed(str(x))): try: one = ones[i] five = fives[i] nine = one + ones[i+1] except: pass if c == 4: result.append(one + five) elif c == 5: result.append(five) elif c == 6: result.append(five + one) elif c == 9: result.append(nine) elif c != 0: if c < 5: result.append(one*c) else: result.append(five + one*(c-5)) return ''.join(reversed(result)) if __name__ == '__main__': for i in (0, 1, 11, 12, 14, 18, 24, 43, 99, 495, 1888, 1945, 3999, 4000): print i, '->', try: print itoroma(i) except ValueError as e: print e
こんな感じ。
if文をずらずら並べてるのがちょっと気に食わん。誰か直して。
ちなみに出力は
0 -> out of range. 1 -> I 11 -> XI 12 -> XII 14 -> XIV 18 -> XVIII 24 -> XXIV 43 -> XLIII 99 -> XCIX 495 -> CDXCV 1888 -> MDCCCLXXXVIII 1945 -> MCMXLV 3999 -> MMMCMXCIX 4000 -> out of range.
こんな感じになるはず。