s2Eva_IT2011_T4 Números Romanos a decimal

Ejercicio: 2Eva_IT2011_T4 Números Romanos a decimal

Propuesta de solución en Python: python en pdf, también en versión matlab en pdf

# 2da Evaluación I Término 2011
# Tema 4. Convertir Romano a decimal
# propuesta: edelros@espol.edu.ec

import numpy as np

cadena=input('romano a decimal: ')

#Procedimiento
n=len(cadena)
cadena=cadena.upper() # todo en mayuscula

romano='IVXLCDM'
decimal=np.array([1,5,10,50,100,500,1000])

equivale=np.zeros(n,dtype=int)

for i in range(0,n,1):
    # Busca en donde equivale ;repasar numpy.where
    j=0
    donde=-1
    while not(j>=7 or donde>-1):
        if (cadena[i]==romano[j]):
            donde=j
        j=j+1
    #equivale decimal
    equivale[i]=decimal[donde]

# Sumar los datos
suma=0
i=0
while not(i>=(n-1)): #solo hasta penultimo
    signo=1
    if (equivale[i]<equivale[i+1]):
        signo=-1
    suma=suma+signo*equivale[i]
    i=i+1
suma=suma+equivale[n-1] #para el último
    
#salida
print(suma)

Ejemplo:

>>> 
romano a decimal: CLXIII
163
>>> =========== RESTART ==========
>>> 
romano a decimal: CXLIX
149
>>>