TIL80. CodeKata (6)


質問する


アルファベットを数字1~3999の間のアルファベットsに変換してパラメータとして使用する場合は、該当する数字を返します.
ローマ数字を数字としてマークします.
SymbolValueI1V5X10L50C100D500M1000
ローマ字を数字で読む方法は、左からローマ字を順番に付けます.
III = 3
XII = 12
XXVII=27.
しかし表現4の場合はIIIではなくIV
後ろの数字から前の数字を引けばいいです
9はIXです.
VとXの前に来て、4、9
XはLとCの前40,90に来る
CはD,Mの前に来て,400,900

私の答え

def roman_to_num(s):
        symbol = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500,'M': 1000}
        result = 0
        for i in range(len(s)):
            if symbol[s[i]] == 5 or symbol[s[i]] ==10:
              if symbol[s[i-1]] == 1:
                result+=symbol[s[i]] - 2*symbol[s[i-1]]
                
            if symbol[s[i]] == 50 or symbol[s[i]] ==100:
              if symbol[s[i-1]] == 10:
                result+=symbol[s[i]] - 2*symbol[s[i-1]]

            if symbol[s[i]] == 500 or symbol[s[i]] ==1000:
              if symbol[s[i-1]] == 100:
                result+=symbol[s[i]] - 2*symbol[s[i-1]]
            else:
              result+=symbol[s[i]]
             
            
        return result
3つのテストケースが合格したが、1つも合格しなかったので、答えを間違えた.