Objetivo de aprendizaje
¿Qué vamos a lograr?
Dominar la representación, conversión y aplicación de los sistemas de numeración decimal, binario, octal y hexadecimal en Python, explorando activamente las funciones nativas del lenguaje y desarrollando algoritmos propios, para comprender cómo los sistemas numéricos subyacen en el funcionamiento de las computadoras y resolver problemas reales relacionados con la representación de datos digitales, cultivando así una mentalidad analítica, lógica y creativa frente a los desafíos de la programación.
Contextualización
¿Por qué importan los sistemas numéricos?
Imagina que estás enviando un mensaje a un amigo desde tu celular. Cada letra, cada emoji, cada imagen que compartes se transforma en una secuencia de ceros y unos antes de viajar por la red. Es como un código secreto que solo las computadoras entienden.
Los sistemas de numeración son los lenguajes ocultos que permiten que la tecnología funcione. Cuando juegas un videojuego, cuando ves un video en streaming, cuando usas una red social, detrás de todo hay números representados de maneras especiales que hacen posible la magia digital.
Reflexiona: ¿Alguna vez has notado cómo los colores en una página web a veces se representan con códigos como #FF5733? Ese es el sistema hexadecimal en acción. O cuando configuras permisos en un archivo en Linux y usas números como 755, estás trabajando con octal. Estos sistemas están más presentes en tu vida digital de lo que imaginas.
En este taller no solo aprenderás a convertir números entre sistemas, sino que descubrirás el "porqué" detrás de cada representación, conectando conceptos abstractos con aplicaciones concretas que usas cada día.
Desarrollo de la actividad
Fundamentos conceptuales
Cada sistema de numeración tiene una base que determina cuántos símbolos diferentes utiliza:
- Decimal (base 10): Usa los dígitos 0-9. Es nuestro sistema cotidiano.
- Binario (base 2): Usa solo 0 y 1. El lenguaje nativo de las computadoras.
- Octal (base 8): Usa los dígitos 0-7. Útil para representar permisos en sistemas Unix.
- Hexadecimal (base 16): Usa 0-9 y A-F. Ideal para representar colores y direcciones de memoria.
Exploración práctica con Python
Python tiene funciones integradas para trabajar con estos sistemas. Vamos a experimentar:
def explorar_sistemas_numericos():
# Número decimal (nuestro sistema habitual)
numero_decimal = 42
print(f"Decimal: {numero_decimal}")
# Convertir a binario
binario = bin(numero_decimal)
print(f"Binario: {binario}") # Resultado: 0b101010
# Convertir a octal
octal = oct(numero_decimal)
print(f"Octal: {octal}") # Resultado: 0o52
# Convertir a hexadecimal
hexadecimal = hex(numero_decimal)
print(f"Hexadecimal: {hexadecimal}") # Resultado: 0x2a
# Convertir de vuelta a decimal
print(f"Binario a decimal: {int('101010', 2)}")
print(f"Octal a decimal: {int('52', 8)}")
print(f"Hexadecimal a decimal: {int('2a', 16)}")
# Ejecutar la función
explorar_sistemas_numericos()
Desafío de exploración: Modifica el código anterior para:
- Cambiar el número decimal a tu edad
- Agregar conversión del año actual a los diferentes sistemas
- Crear una función que convierta cualquier número decimal a los cuatro sistemas
Aplicación en el mundo real
Vamos a crear un programa que simula cómo se representan los colores en HTML/CSS usando hexadecimal:
"""Convierte valores RGB (0-255) a código hexadecimal"""
def a_hex(valor):
# Asegurar que el valor esté entre 0 y 255
valor = max(0, min(255, valor))
# Convertir a hexadecimal y formatear a 2 dígitos
return format(valor, '02X')
hex_color = '#' + a_hex(rojo) + a_hex(verde) + a_hex(azul)
return hex_color
# Probamos la función con algunos colores
print("Rojo puro:", mezclar_colores(255, 0, 0))
print("Verde puro:", mezclar_colores(0, 255, 0))
print("Azul puro:", mezclar_colores(0, 0, 255))
print("Un color personalizado:", mezclar_colores(100, 200, 50))
Reflexión: ¿Qué ventajas crees que tiene usar hexadecimal para representar colores en lugar del sistema decimal? Piensa en cómo se almacena la información en la memoria de la computadora.
El reto final
La misión: Codificador/Decodificador Universal
Tu desafío es crear un programa en Python que funcione como un codificador y decodificador entre los cuatro sistemas de numeración. El programa debe:
- Solicitar al usuario un número y el sistema en el que está representado (decimal, binario, octal o hexadecimal)
- Validar que el número ingresado sea correcto para el sistema especificado
- Convertir el número a los otros tres sistemas
- Mostrar los resultados de forma clara y organizada
- Permitir al usuario realizar múltiples conversiones hasta que decida salir
Nivel de desafío adicional (opcional):
Extiende tu programa para que también pueda realizar operaciones aritméticas básicas (suma, resta, multiplicación) entre números de diferentes sistemas, mostrando el resultado en los cuatro sistemas.
Pistas para comenzar:
- Recuerda que la función int() puede convertir desde cualquier base si especificas el segundo parámetro
- Puedes usar diccionarios para mapear las opciones del usuario a las funciones correspondientes
- Considera manejar errores con try-except para entradas inválidas
Evaluación lúdica
Test: El desafío numérico
Responde las siguientes preguntas para poner a prueba tu comprensión de los sistemas de numeración. ¡Cada respuesta correcta vale 20 puntos!