En este ejercicio ingresaremos un año y lo imprimiremos como numero romano.


In [1]:
# suponemos que ponemos un año de verdad, por eso no pongo condiciones
año = int(input("Ingrese su año: "))


Ingrese su año: 1997

In [2]:
añooriginal = año

La idea es ir achicando el año, con el mayor numero romano posible, sin embargo nos dimos cuenta que teniamos problemas con los "9", por lo que agregamos 900, 400, 90, 40, 9 y 4.


In [3]:
resultado = ""
while año != 0:
    if año >= 1000:
        veces = año // 1000
        resultado += "M" * veces
        año %= 1000
    elif año >= 900:
        año -= 900
        resultado += "CM"
    elif año >= 500:
        año -= 500
        resultado += "D"
    elif año >= 400:
        año -= 400
        resultado += "CD"
    elif año >= 100:
        veces = año // 100
        resultado += "C" * veces
        año %= 100
    elif año >= 90:
        año -= 90
        resultado += "XC"
    elif año >= 50:
        año -= 50
        resultado += "L"
    elif año >= 40:
        año -= 40
        resultado += "XL"
    elif año >= 10:
        veces = año // 10
        año -= 10
        resultado += "X"
    elif año >= 9:
        año -= 9
        resultado += "IX"
    elif año >= 5:
        año -= 5
        resultado += "V"
    elif año >= 4:
        año -= 4
        resultado += "IV"
    else:
        resultado += "I" * año
        año = 0

In [4]:
print(resultado)


MCMXCVII

Vimos que el if es muy extenso, podemos usar lista, o mejor "tuplas".


In [5]:
valores = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)

In [6]:
letras = ("M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I")

In [7]:
valores[3]= 123
# nos damos cuenta que la tupla no se puede modificar a diferencia de la lista...


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-ba75a818ed7e> in <module>()
----> 1 valores[3]= 123
      2 # nos damos cuenta que la tupla no se puede modificar a diferencia de la lista...

TypeError: 'tuple' object does not support item assignment

In [8]:
año = añooriginal
res = ""
while año != 0:
    for i in range(len(valores)):
        if valores[i] <= año:
            res += letras[i]
            año -= valores[i]
            break

In [9]:
print(res)


MCMXCVII