2 usuarios conectados

Convertir números romanos a arábigos. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada romano_a_arabigo que tome una cadena de texto que representa un número romano (en mayúsculas) como entrada y devuelva su equivalente en número arábigo (entero). La función debe manejar los símbolos básicos (I, V, X, L, C, D, M) y sus combinaciones sustractivas (IV, IX, XL, XC, CD, CM).


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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:

  1. 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.
  2. 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.
  3. resultado = 0:

    • Inicializa una variable resultado a 0, que almacenará el valor arábigo final.
  4. i = 0:

    • Inicializa un índice i para recorrer la cadena del número romano.
  5. while i < len(s)::

    • Inicia un bucle while que continúa mientras el índice i sea menor que la longitud de la cadena romana.
  6. valor_actual = romano_valores[s[i]]:

    • Obtiene el valor arábigo del símbolo romano actual.
  7. if i + 1 < len(s)::

    • Verifica si todavía hay al menos un símbolo romano más después del actual.
  8. valor_siguiente = romano_valores[s[i + 1]]:

    • Obtiene el valor arábigo del siguiente símbolo romano.
  9. 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.
  10. 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.
  11. 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.
  12. 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.