Siguiendo con los tutoriales de conversiones numéricas en Python, hoy toca el turno de convertir un número octal a uno decimal.
Dicho con otras palabras vamos a usar Python para hacer la conversión numérica de base 8 a base 10.
Lo haremos con funciones propias, es decir, será nuestro código y no una función que ya incluya el lenguaje.
Explicación del algoritmo
Al igual que cuando convertimos de binario a decimal, básicamente es recorrer la cadena octal y elevar el número de la base (8 en este caso) a la posición en la que vayamos.
Es decir, al recorrer la cadena y estar en el primer carácter vamos a elevar a la posición 0; en el segundo carácter vamos a elevar a la 1, y así hasta terminar.
Este resultado lo vamos a multiplicar por el carácter actual como entero y finalmente lo que resulte se lo agregamos al valor decimal que vamos a regresar al terminar de recorrer la cadena octal.
Por cierto, en este caso necesitamos recorrer la cadena de derecha a izquierda, así que para hacerlo fácil simplemente invertimos la cadena antes de recorrerla. Para que entiendas mejor la ejecución, te dejo un ejemplo de lo que el programa hace:
Convirtiendo el octal 5373...
El número decimal es 0
Elevamos el 8 a la potencia 0 (el resultado es 1) y multiplicamos por el carácter actual: 3
Sumamos 3 a decimal. Ahora es 3
El número decimal es 3
Elevamos el 8 a la potencia 1 (el resultado es 8) y multiplicamos por el carácter actual: 7
Sumamos 56 a decimal. Ahora es 59
El número decimal es 59
Elevamos el 8 a la potencia 2 (el resultado es 64) y multiplicamos por el carácter actual: 3
Sumamos 192 a decimal. Ahora es 251
El número decimal es 251
Elevamos el 8 a la potencia 3 (el resultado es 512) y multiplicamos por el carácter actual: 5
Sumamos 2560 a decimal. Ahora es 2811
El octal 5373 es 2811
Para este caso he convertido el número octal 5373
a decimal. Ahora que he explicado el funcionamiento del algoritmo, veamos el código fuente.
Código fuente Python – Conversión octal a decimal
Veamos el código fuente. En este caso lo importante es la función, ya que puedes invocarla desde cualquier lugar enviándole los argumentos desde cualquier parte.
Por ejemplo, yo he solicitado al usuario que ingrese el número octal usando el teclado, pero puedes usarla de la manera que quieras.
"""
https://parzibyte.me/blog
"""
def octal_a_decimal(octal):
print(f"Convirtiendo el octal {octal}...")
decimal = 0
posicion = 0
# Invertir octal, porque debemos recorrerlo de derecha a izquierda
# pero for in empieza de izquierda a derecha
octal = octal[::-1]
for digito in octal:
print(f"El número decimal es {decimal}")
valor_entero = int(digito)
numero_elevado = int(8 ** posicion)
equivalencia = int(numero_elevado * valor_entero)
print(
f"Elevamos el 8 a la potencia {posicion} (el resultado es {numero_elevado}) y multiplicamos por el carácter actual: {valor_entero}")
decimal += equivalencia
print(f"Sumamos {equivalencia} a decimal. Ahora es {decimal}")
posicion += 1
return decimal
octal = input("Ingresa un número octal: ")
decimal = octal_a_decimal(octal)
print(f"El octal {octal} es {decimal} en decimal")
Al ejecutarlo, el resultado es correcto. Lo he comprobado con mi conversor de bases numéricas:
Por cierto, como una característica adicional al programa se debería revisar que todos los caracteres sean menores que 8, pues recuerda que el octal solo contempla desde el 0 hasta el 7.
Te dejo con más tutoriales sobre Python en el blog de Parzibyte.