Solución al Ejercicio: Convertir números romanos a arábigos
📋 Copiar código
def romano_a_arabigo(s):
"""
Convierte un número romano (en mayúsculas) a su equivalente arábigo.
Args:
s: La cadena de texto que representa el número romano.
Returns:
El valor arábigo del número romano (entero).
"""
romano_valores = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
resultado = 0
i = 0
while i < len(s):
valor_actual = romano_valores[s[i]]
if i + 1 < len(s):
valor_siguiente = romano_valores[s[i + 1]]
if valor_actual < valor_siguiente:
resultado += valor_siguiente - valor_actual
i += 2
else:
resultado += valor_actual
i += 1
else:
resultado += valor_actual
i += 1
return resultado
# Ejemplos de uso
romano1 = "III"
arabigo1 = romano_a_arabigo(romano1)
print(f"'{romano1}' en arábigo: {arabigo1}")
romano2 = "IV"
arabigo2 = romano_a_arabigo(romano2)
print(f"'{romano2}' en arábigo: {arabigo2}")
romano3 = "IX"
arabigo3 = romano_a_arabigo(romano3)
print(f"'{romano3}' en arábigo: {arabigo3}")
romano4 = "LVIII"
arabigo4 = romano_a_arabigo(romano4)
print(f"'{romano4}' en arábigo: {arabigo4}")
romano5 = "MCMXCIV"
arabigo5 = romano_a_arabigo(romano5)
print(f"'{romano5}' en arábigo: {arabigo5}")
romano6 = "XIV"
arabigo6 = romano_a_arabigo(romano6)
print(f"'{romano6}' en arábigo: {arabigo6}")
romano7 = ""
arabigo7 = romano_a_arabigo(romano7)
print(f"'{romano7}' en arábigo: {arabigo7}")
Explicación del Código:
-
def romano_a_arabigo(s):
:
- Define una función llamada
romano_a_arabigo
que toma una cadena s
(el número
romano en mayúsculas) como entrada.
-
romano_valores = {'I': 1, 'V':
5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
:
- Crea un diccionario
romano_valores
que mapea cada símbolo romano a su valor arábigo correspondiente.
-
resultado = 0
:
- Inicializa una variable
resultado
a 0, que almacenará el valor arábigo final.
-
i = 0
:
- Inicializa un índice
i
para
recorrer la cadena del número romano.
-
while i < len(s):
:
- Inicia un bucle
while
que
continúa mientras el índice i
sea menor que la longitud de
la cadena romana.
-
valor_actual =
romano_valores[s[i]]
:
- Obtiene el valor arábigo del símbolo
romano actual.
-
if i + 1 < len(s):
:
- Verifica si todavía hay al menos un
símbolo romano más después del actual.
-
valor_siguiente =
romano_valores[s[i + 1]]
:
- Obtiene el valor arábigo del siguiente
símbolo romano.
-
if valor_actual <
valor_siguiente:
:
- Caso sustractivo: Si
el valor del símbolo actual es menor que el valor del siguiente símbolo
(por ejemplo, 'IV' donde I=1 y V=5), significa que se trata de una
combinación sustractiva.
resultado += valor_siguiente -
valor_actual
: Se suma la diferencia de los dos valores al
resultado (5 - 1 = 4).
i += 2
: Se incrementa el
índice en 2 para saltar ambos símbolos ya que fueron procesados juntos.
-
else:
:
- Caso aditivo: Si el
valor del símbolo actual es mayor o igual que el valor del siguiente
símbolo (o si es el último símbolo).
resultado += valor_actual
:
Se suma el valor del símbolo actual al resultado.
i += 1
: Se incrementa el
índice en 1 para pasar al siguiente símbolo.
-
else:
:
- Último símbolo: Si el
símbolo actual es el último de la cadena.
resultado += valor_actual
:
Se suma su valor al resultado.
i += 1
: Se incrementa el
índice.
-
return resultado
:
- Finalmente, se devuelve el valor
arábigo calculado.
Ejemplos de Uso:
Los ejemplos muestran cómo la función
convierte diferentes números romanos a sus equivalentes arábigos, incluyendo los
casos con combinaciones sustractivas.