Этот код возвращает значение «0» независимо от того, какую римскую цифру я ввожу. Почему это так? - PullRequest
0 голосов
/ 14 июля 2020
    import re
    d = { ' M ' :1000, ' CM ' :900, ' D ' :500, ' CD ' :400, ' C ' :100, ' XC ':90,
    ' L ' :50, ' XL ' :40, ' X ' :10, ' IX ' :9, ' V ' :5, ' IV ' :4, ' I ' :1}
    pattern = re.compile(r"""(?x)
                             (M{0,3})(CM)?
                             (CD)?(D)?(C{0,3})
                             (XC)?(XL)?(L)?(X{0,3})
                             (IX)?(IV)?(V)?(I{0,3})""")
   
    num = input( ' Enter Roman numeral: ' ).upper()
    m = pattern.match(num)

    sum = 0
    for x in m.groups():

        if x!=None and x!= '' :
            if x in [ ' CM ' , ' CD ' , ' XC ' , ' XL ' , ' IX ' , ' IV ' ]:
                sum+=d[x]
            elif x[0] in ' MDCLXVI ' :
                sum+=d[x[0]]* len(x)
   print(sum)

Когда я запускаю этот код, он дает 0 на выходе независимо от того, какую римскую цифру я ввожу. Что я сделал не так? Проблема в пробелах? Например: введите римскую цифру I 0 введите римскую цифру X 0

...