Crea una ventana de Tkinter con varios botones.


🟦 ¿Qué hace este código?

Crea una ventana de Tkinter con varios botones.
Cada botón hace algo distinto: abrir una web, llamar a una clase, o cerrar la ventana.

Además, dentro de la clase MenuApp se crean todas las herramientas que usarás en tu menú (Variables, Listas, Colores, etc.).


🟦 Explicación clara del código

1. Importaciones

import tkinter as tk
import webbrowser

  • tkinter → sirve para crear ventanas y botones.
  • webbrowser → sirve para abrir páginas web.

2. Importas tus clases

from ClassMenu import Menus
from ClassVariables import Variables
...

Estas son tus clases personalizadas.
Las usarás cuando el usuario pulse un botón.


3. Creas la clase principal del menú

class MenuApp:

Esta clase contiene todo el menú.


4. Constructor __init__

def __init__(self, root):

  • root es la ventana principal.
  • Aquí configuras la ventana y creas los botones.

5. Configuración de la ventana

self.root = root
self.root.configure(bg="#1e1e1e")
self.root.title(" Programación es Python ")

  • Guardas la ventana en self.root.
  • Le pones un color de fondo.
  • Le pones un título.

6. Creas las instancias de tus clases

self.menu1 = Variables()
self.app = AppColores()
self.numerobinario = DecimalBinario()
...

Esto significa:

👉 “Voy a usar estas clases dentro del menú, así que las preparo aquí”.


7. BOTÓN 1 → Variables

boton_variables = tk.Button(
    root,
    text="VARIABLES",
    ...
    command=lambda: (
        self.menu1.variables(),
        webbrowser.open_new_tab("https://danielcaraballo.es/variables-en-python/")
    )
)
boton_variables.pack(pady=5)

¿Qué hace este botón?

  1. Llama al método variables() de tu clase Variables.
  2. Abre tu página web sobre variables.

Todo eso ocurre al pulsarlo.


8. BOTÓN 2 → f-format

boton_format = tk.Button(
    root,
    text="f- Format",
    ...
    command=lambda: webbrowser.open_new_tab("https://danielcaraballo.es/f-f-format-de-un-strings/")
)
boton_format.pack(pady=10)

Este botón solo abre una web.


9. BOTÓN 3 → Listas

boton_listas = tk.Button(
    root,
    text="Listas",
    ...
    command=lambda: webbrowser.open_new_tab("https://danielcaraballo.es/las-listas-en-python/")
)
boton_listas.pack(pady=10)

Abre tu página sobre listas.


10. BOTÓN 4 → Instalación

boton_instalacion = tk.Button(
    root,
    text="Instalación y IDE de trabajo",
    ...
    command=lambda: webbrowser.open_new_tab("https://danielcaraballo.es/lenguaje-de-programacion-python/")
)
boton_instalacion.pack(pady=10)

Abre tu página sobre instalación de Python.


11. BOTÓN 5 → Cerrar menú

boton_volver = tk.Button(
    root,
    text="Menu anterior",
    ...
    command=root.destroy
)
boton_volver.pack(pady=10)

Este botón cierra la ventana.


12. Método para iniciar el menú

@staticmethod
def iniciar_menu():
    root = tk.Tk()
    root.geometry("300x300+900+20")
    MenuApp(root)
    root.mainloop()

Esto:

  • Crea la ventana.
  • Le da tamaño y posición.
  • Crea el menú dentro de la ventana.
  • Mantiene la ventana abierta.

🟦 Resumen súper fácil

Tu código:

  • Crea una ventana.
  • Crea varios botones.
  • Cada botón abre una web o llama a una clase.
  • El último botón cierra la ventana.
  • Todo está organizado dentro de una clase llamada MenuApp.




🔢 Variables enteras en MS‑DOS (explicado fácil y con ejemplo)

Aunque MS‑DOS no tiene “tipos de datos” como los lenguajes modernos, sí permite trabajar con números enteros usando el comando:

  • set /a

Este comando convierte el texto en valores numéricos y permite hacer operaciones aritméticas.

  • set /a numero=5
  • echo El número es: %numero%

Qué pasa aquí:

  • set /a numero=5 → guarda el número 5.
  • %numero% → lo muestra.

➕ 2. Operaciones básicas

MS‑DOS permite sumar, restar, multiplicar y dividir:

  • set /a x=10
  • set /a y=3
  • set /a suma=x+y
  • set /a resta=x-y
  • set /a multi=x*y
  • set /a div=x/y
  • echo Suma: %suma%
  • echo Resta: %resta%
  • echo Multiplicación: %multi%
  • echo División: %div%

  • Nota: la división siempre es entera (sin decimales).



🧭 Mini‑proyecto en Python: Menús interactivos con Programación Orientada a Objetos

En este artículo te presento un pequeño proyecto en Python que demuestra, de forma sencilla y práctica, cómo aplicar Programación Orientada a Objetos (POO) para crear un menú interactivo en consola.
El objetivo es que el usuario pueda navegar por distintas categorías del blog y abrir artículos directamente en su navegador.
Es un ejemplo ideal para aprender:

  • Cómo organizar código en clases
  • Cómo crear objetos y métodos
  • Cómo encapsular comportamientos
  • Cómo usar diccionarios para mapear opciones
  • Cómo interactuar con el sistema y el navegador
    Vamos paso a paso.

🧱 ¿Por qué este proyecto es POO?
La Programación Orientada a Objetos se basa en cuatro pilares fundamentales:

  1. Clases
  2. Objetos
  3. Métodos
  4. Encapsulación
    Este proyecto utiliza los cuatro de forma clara y didáctica.

🏗️ 1. Clases: la estructura del programa
El proyecto tiene dos clases principales:

Es la clase encargada de mostrar todos los menús y ejecutar las acciones correspondientes.
Dentro de ella viven métodos como:

  • Cada método representa una pantalla o acción del programa.

    Es la clase que contiene el punto de entrada del programa.
    Su método es el encargado de:
  • Crear un objeto
  • Mostrar el menú principal
  • Leer la opción del usuario
  • Llamar al menú correspondiente

🧩 2. Objetos: instancias que ejecutan acciones
En se crea un objeto:

Ese objeto es el que:

  • Muestra los menús
  • Abre enlaces
  • Gestiona la interacción
    En POO, un objeto es una instancia de una clase, y este proyecto lo utiliza exactamente como debe ser.

🛠️ 3. Métodos: comportamientos del objeto
Cada menú es un método dentro de la clase .
Por ejemplo:

  • abre artículos según el lenguaje elegido
  • abre la categoría de cocina
  • abre la sección de historia
    En POO, los métodos representan acciones que un objeto puede realizar.
    Aquí se ve de forma muy clara.

🔒 4. Encapsulación: organización y claridad
Aunque este proyecto no usa atributos privados, sí encapsula comportamientos dentro de clases.
Esto significa:

  • El código está organizado
  • Cada clase tiene una responsabilidad clara
  • No hay funciones sueltas
  • Todo está agrupado de forma lógica
    Es exactamente lo que busca la POO:
    👉 orden, modularidad y claridad.

📁 Estructura del proyecto

🧠 ¿Qué hace cada archivo?
📌
Contiene la clase , que agrupa todos los menús y acciones.
Es el “cerebro visual” del programa.

  • Muestra el menú principal
  • Permite elegir lenguajes de programación
  • Abre categorías del blog
  • Usa diccionarios para mapear opciones
  • Usa para abrir enlaces
  • Usa para no bloquear la ejecución

📌
Contiene la clase y el método .

  • Crea un objeto
  • Muestra el menú principal
  • Lee la opción del usuario
  • Valida la entrada
  • Llama al menú correspondiente
  • Abre el blog al salir
    Además, utiliza para indicar que no necesita una instancia de la clase.

🎯 Conclusión
Este proyecto es un ejemplo perfecto de Programación Orientada a Objetos aplicada a un caso real:

  • Las clases organizan el código
  • Los objetos ejecutan acciones
  • Los métodos representan comportamientos
  • La encapsulación mantiene todo limpio y modular
    Es sencillo, práctico y útil, ideal para quienes están aprendiendo Python y quieren ver cómo se aplica la POO en un proyecto real.

📝 Nota final del artículo

Crea todo el proyecto dentro de la misma carpeta.
Si colocas los archivos en directorios distintos o cambias su ubicación sin ajustar las rutas, el proyecto no funcionará correctamente.




🧾 Cómo crear un Registro de Personal en Python con JSON (guía didáctica y visual)

La estructura está pensada para que el lector aprenda, disfrute y pueda copiar el código sin miedo.
Aquí la tienes 👇

🧾 Cómo crear un Registro de Personal en Python con JSON (guía didáctica y visual)
En este artículo vamos a construir un pequeño sistema para registrar personas, guardar sus datos en un archivo JSON y buscar empleados por cargo.
Todo desde consola, paso a paso, con código limpio y explicaciones claras.
Ideal para quienes están aprendiendo Python y quieren practicar clases, archivos, JSON y bucles.

🎯 Objetivo del proyecto
Vamos a crear un programa que permita:

  • Registrar personas (nombre, edad, sexo, cargo).
  • Guardarlas en un archivo sin borrar lo anterior.
  • Mostrar los datos guardados.
  • Buscar personas por cargo.
  • Mantener un formato bonito y legible.

🧱 1. La clase
Comenzamos creando una clase que represente a cada persona:

Esta clase nos permite trabajar con objetos, pero también convertirlos a diccionarios para guardarlos en JSON.

📦 2. Guardar datos en un archivo JSON
Creamos una función que:

  1. Carga el archivo si existe.
  2. Si no existe, crea una lista vacía.
  3. Agrega la nueva persona.
  4. Guarda todo con formato bonito.

📝 3. Registrar una persona
Pedimos los datos por consola, creamos el objeto y lo guardamos:

🔍 4. Buscar personas por cargo
Ahora viene la parte interactiva: un pequeño menú para buscar empleados por cargo.

📁 5. ¿Cómo queda el archivo ?
Después de registrar varias personas, el archivo se verá así:

Cada nueva persona se agrega al final sin borrar lo anterior.

🎨 6. Explicación visual (tu toque didáctico)
Imagina el archivo JSON como una estantería de fichas:

Cada vez que registras una persona, simplemente añades una ficha más.
Y cuando buscas por cargo, el programa revisa cada ficha como si dijera:

Hasta encontrar coincidencias.

🧠 7. Qué aprende el lector con este proyecto

  • Uso de clases en Python.
  • Conversión de objetos a diccionarios.
  • Lectura y escritura de archivos JSON.
  • Manejo de errores.
  • Búsquedas dentro de listas.
  • Interacción por consola.
  • Persistencia de datos.
    Un proyecto perfecto para principiantes que quieren dar un salto hacia programas más útiles y reales.

1. Importaciones

import json

import os from os

import system

¿Qué hace cada una?

  • json → permite leer y escribir archivos JSON.
  • os → permite comprobar si un archivo existe.
  • system → permite ejecutar comandos del sistema como pause o cls.

🧱 2. Clase Personal

class Personal: def __init__(self, nombre, edad, sexo, cargo): self.nombre = nombre self.edad = edad self.sexo = sexo self.cargo = cargo

¿Qué es esto?

Es un molde para crear personas.
Cada persona tendrá:

  • nombre
  • edad
  • sexo
  • cargo

📌 Método para mostrar información

def mostrar_informacion(self):

print(f»Nombre: {self.nombre}»)

print(f»Edad: {self.edad}»)

print(f»Sexo: {self.sexo}»)

print(f»Cargo: {self.cargo}»)

Muestra los datos en pantalla de forma ordenada.

📌 Método para convertir a diccionario

def convertir_a_diccionario(self):

return { «nombre»: self.nombre, «edad»: self.edad, «sexo»: self.sexo, «cargo»: self.cargo }

Esto es necesario porque JSON no puede guardar objetos, pero sí diccionarios.

📦 3. Función para guardar en JSON

def guardar_en_json(persona_dict):

archivo = «personal.json»

if os.path.exists(archivo):

with open(archivo, «r», encoding=»utf-8″) as f: datos = json.load(f)

else: datos = [] datos.append(persona_dict)

with open(archivo, «w», encoding=»utf-8″) as f: json.dump(datos, f, indent=4, ensure_ascii=False)

¿Qué hace?

  1. Comprueba si el archivo existe

    • Si existe → lo abre y carga su contenido.
    • Si no existe → crea una lista vacía.

  2. Agrega la nueva persona a la lista.
  3. Vuelve a guardar todo en el archivo JSON.

¿Por qué funciona tan bien?

Porque no borra lo anterior, solo añade.

🧑‍💻 4. Programa principal: registrar una persona

print(«—–Registro de Personal—–\n»)

nombre = input(«Ingrese el nombre: «)

edad = input(«Ingrese la edad: «)

sexo = input(«Ingrese el sexo: «)

cargo = input(«Ingrese el cargo: «)

Pide los datos al usuario.

📌 Crear el objeto

persona = Personal(nombre, edad, sexo, cargo)

Aquí se crea una persona real usando la clase.

📌 Mostrar y guardar

persona.mostrar_informacion() guardar_en_json(persona.convertir_a_diccionario())

  • Muestra los datos en pantalla.
  • Convierte la persona a diccionario.
  • La guarda en el archivo JSON.

📁 5. Leer el archivo JSON

with open(«personal.json», «r», encoding=»utf-8″) as archivo: datos = json.load(archivo)

Carga todas las personas registradas en una lista llamada datos.

🔍 6. Búsqueda por cargo

while True: print(«\n Estas en buscar a una persona por cargo \n»)

cargo_buscar = input(«Ingrese el cargo a buscar (o ‘salir’ para terminar): «) 

Bucle infinito hasta que el usuario escriba salir.

📌 Buscar coincidencias

encontrado = False for persona in datos:

if persona[«cargo»].lower() == cargo_buscar.lower():

print(«Persona encontrada:»)

print(json.dumps(persona, indent=4, ensure_ascii=False)) encontrado = True break

¿Qué hace?

  • Recorre todas las personas del JSON.
  • Compara el cargo ignorando mayúsculas/minúsculas.
  • Si encuentra una coincidencia:

  • La imprime en formato bonito.
  • Marca encontrado = True.
  • Sale del bucle.

📌 Si no encuentra nada

if not encontrado: print(«Cargo no encontrada.»)

📌 Pausa y limpiar pantalla

system(«pause»)

system(«cls»)

  • pause → espera que el usuario presione una tecla.
  • cls → limpia la pantalla (solo Windows).

🎯 Resumen visual del flujo

[Usuario escribe datos]

↓ [Se crea un objeto Personal]

↓ [Se convierte a diccionario]

↓ [Se guarda en personal.json]

↓ [Se cargan todos los registros]

↓ [Usuario busca por cargo]

↓ [Se muestran coincidencias]




Poo en Python muy sencillo

Código completo (para referencia)

class Animal:
    def __init__(self, nombre):
        self.nombre = nombre

    def hablar(self):
        return "Sonido genérico"
class Perro(Animal):
    def hablar(self):
        return "Guau!"
class Gato(Animal):
    def hablar(self):
        return "Miau!"
animales = [Perro("Firulais"), Gato("Misu")]

for animal in animales:
    print(f"{animal.nombre} dice: {animal.hablar()}")

Primera parte: clase Animal

class Animal:

  • class Animal:
    Declara una nueva clase llamada Animal.
    Una clase es un “molde” o “plantilla” para crear objetos del tipo Animal.
    def __init__(self, nombre):

  • def __init__(self, nombre):
    Define el método especial __init__, que es el constructor.
    Se ejecuta automáticamente cuando creas un Animal.

    • self representa al propio objeto.
    • nombre es un parámetro que recibirá el nombre del animal.

        self.nombre = nombre

  • self.nombre = nombre
    Crea un atributo llamado nombre dentro del objeto.
    Guarda en self.nombre el valor que se pasa al crear el animal.
    Es decir, el objeto recordará su nombre.
    def hablar(self):

  • def hablar(self):
    Declara un método llamado hablar para la clase Animal.
    Este será el comportamiento “genérico” de hablar.
        return "Sonido genérico"

  • return "Sonido genérico"
    Cuando se llame a hablar() en un Animal, devolverá esta cadena.
    Más adelante, las clases hijas lo cambiarán por sonidos más específicos.

Segunda parte: clase Perro que hereda de Animal

class Perro(Animal):

  • class Perro(Animal):
    Crea una clase Perro que hereda de Animal.
    Eso significa que Perro tiene todo lo de Animal (como nombre), pero puede añadir o cambiar cosas.
    def hablar(self):

  • def hablar(self):
    Define el método hablar en Perro.
    Este método sobrescribe (reemplaza) el hablar genérico de Animal.
        return "Guau!"

  • return "Guau!"
    Cuando se llame a hablar() en un Perro, devolverá "Guau!".

Tercera parte: clase Gato que también hereda de Animal

class Gato(Animal):

  • class Gato(Animal):
    Declara la clase Gato que también hereda de Animal.
    Igual que Perro, tiene nombre y puede hablar.
    def hablar(self):

  • def hablar(self):
    Sobrescribe el método hablar para los gatos.
        return "Miau!"

  • return "Miau!"
    Cuando se llame a hablar() en un Gato, devolverá "Miau!".

Cuarta parte: creando objetos y usando polimorfismo

animales = [Perro("Firulais"), Gato("Misu")]

  • animales = [...]
    Crea una lista llamada animales.
  • Perro("Firulais")
    Crea un objeto de tipo Perro con nombre = "Firulais".
    Internamente llama a __init__ de Animal y guarda ese nombre.
  • Gato("Misu")
    Crea un objeto de tipo Gato con nombre = "Misu".
    También usa el constructor heredado.
  • La lista contiene ahora dos objetos: un perro y un gato.
for animal in animales:

  • for animal in animales:
    Inicia un bucle que recorre cada elemento de la lista animales.
    En cada vuelta, la variable animal será:

    • Primero, el Perro("Firulais")
    • Después, el Gato("Misu")

    print(f"{animal.nombre} dice: {animal.hablar()}")

  • print(f"{animal.nombre} dice: {animal.hablar()}")
    Usa una f-string para formatear el texto.

  • Aquí es donde aparece el polimorfismo:

    • Si animal es un Perro, hablar() devuelve "Guau!".
    • Si animal es un Gato, hablar() devuelve "Miau!".

  • En pantalla verás:

    • Firulais dice: Guau!
    • Misu dice: Miau!




📝 Cómo crear una calculadora en C# paso a paso

🎯 Objetivo del artículo

En este tutorial vamos a construir una calculadora básica en C# que permita sumar, restar, multiplicar y dividir dos números. El programa será interactivo, mostrará un menú de opciones y validará las entradas para evitar errores. Además, veremos cómo mostrar el resultado en formato matemático, por ejemplo:

  • 12 + 12 = 24

🔧 Conceptos básicos que usaremos

  • Clases y métodos: para organizar el código en bloques (Sumar, Restar, Multiplicar, Dividir).
  • Console.WriteLine y Console.ReadLine: para interactuar con el usuario.
  • int.TryParse: para validar que la entrada sea un número entero.
  • Bucles while y do-while: para repetir acciones hasta que el usuario elija salir.
  • switch: para ejecutar la operación elegida en el menú.

📜 Código completo con explicaciones

🖥️ Ejemplo de ejecución

Seleccione una operación:

1. Sumar

2. Restar

3. Multiplicar

4. Dividir

5. Salir

Opción: 1

——————————ESTÁS EN SUMA———————————–

Ingrese el primer número: 12

Ingrese el segundo número: 12

12 + 12 = 24

Presione una tecla para continuar… 

🎓 Conclusión

Con este ejercicio hemos aprendido:

  • Cómo organizar un programa en clases y métodos.
  • Cómo validar entradas para evitar errores.
  • Cómo usar un menú interactivo con bucles y switch.
  • Cómo mostrar resultados en un formato claro y matemático.

Este es un excelente primer proyecto para principiantes en C#, porque combina lógica básica, interacción con el usuario y buenas prácticas de programación.




🔹 ¿Qué es una variable en C#?

Al igual que en C, una variable es un espacio en memoria con un nombre y un tipo de dato.
La diferencia es que C# es un lenguaje orientado a objetos y más moderno, con reglas más estrictas y características adicionales como var, dynamic y const.

🔹 Sintaxis básica

tipo nombreVariable = valorInicial;

Ejemplo:

  • int edad = 25;
  • float altura = 1.75f; // el sufijo f indica float
  • char inicial = ‘D’;
  • string nombre = «Daniel»; // cadenas de texto

🔹 Tipos de variables más comunes

Tipo Descripción Ejemplo
int Enteros int contador = 10;
float Decimales de precisión
simple
float pi = 3.14f;
double Decimales de precisión
mayor
double e = 2.718281828;
char Un solo carácter char letra = 'A';
string Texto string saludo = "Hola";
bool Verdadero/Falso bool activo = true;

🔹 Variables especiales en C#

  • var → El compilador infiere el tipo según el valor asignado.

    • var numero=42; // se convierte en int
    • var mensaje =» Hola «; // Se convierte en string

  • dynamic → Tipo flexible que puede cambiar en tiempo de ejecución.

    • dynamic dato =10;
    • dato = » Texto «; // Permitido

  • const → Valor constante que nunca cambia.

    • const double PI = 3,14159;

  • readonly → Similar a const, pero puede asignarse en el constructor de una clase.

🔹 Ámbito y vida de las variables

  • Locales → Dentro de un método, solo existen mientras se ejecuta.
  • Globales (campos estáticos) → Dentro de una clase, accesibles por toda la aplicación.
  • Campos de instancia → Variables asociadas a un objeto específico.
  • Variables automáticas (var) → Solo dentro de métodos, no se pueden usar como campos globales.

Ejemplo:

  • using System;
  • class Programa {

    • static int global = 10; // variable global (campo estático)
    • static void Ejemplo() {

      • int local = 5; // variable local
      • Console.WriteLine(«Local: » + local);
      • Console.WriteLine(«Global: » + global);
      • }

    • static void Main() {

      • Ejemplo();

    • }

  • }

🔹 Buenas prácticas en C#

  • Usa nombres descriptivos y estilo camelCase para variables locales (contadorTotal).
  • Usa PascalCase para propiedades y métodos (CalcularPromedio).
  • Inicializa siempre las variables.
  • Prefiere var cuando el tipo es obvio, pero evita abusar de dynamic.



🚀 Tutorial: Instalar Mojo con Pixi en WSL

🚀 Tutorial: Instalar Mojo con Pixi en WSL

1️⃣ Preparar el entorno en Windows

  • Activa WSL (Windows Subsystem for Linux) si no lo tienes:
  • Reinicia tu PC y abre una terminal en Ubuntu (WSL).

2️⃣ Instalar Pixi

Pixi es el gestor oficial recomendado para Mojo.

curl -fsSL https://pixi.sh/install.sh | bash

  • Verifica la instalación:

pixi –version

3️⃣ Crear un proyecto con Mojo

  • Crea un directorio para tu proyecto:
  • Inicializa Pixi:
  • Añade Mojo como dependencia:

pixi add mojo

Esto generará un pixi.toml y un pixi.lock, garantizando reproducibilidad.

4️⃣ Ejecutar Mojo

Dentro del entorno Pixi:

pixi run mojo helloworld.mojo

Ejemplo de archivo helloworld.mojo:

fn main(): print(«¡Hola desde Mojo con Pixi!»)

5️⃣ Integrar UV y Pip

Pixi puede usar UV para resolver dependencias de PyPI:

  • Instala UV dentro del entorno:
  • Instala paquetes de PyPI con UV:

uv pip install numpy

Si prefieres usar pip directamente:

pixi run pip install requests

👉 La diferencia es que UV es mucho más rápido y reproducible que pip.

6️⃣ Usar Conda (opcional)

Si ya trabajas con Conda:

conda create -n mojo-env python=3.11 conda activate mojo-env pip install mojo

Pero recuerda: Pixi es más ligero y reproducible para Mojo.




🧩 Conceptos básicos de POO en Mojo

Mojo combina la sintaxis de Python con optimizaciones de bajo nivel. La POO en Mojo sigue principios similares a Python, pero con algunas diferencias importantes:

  • Clases: Se definen con class.
  • Métodos: Se definen dentro de la clase, usando def.
  • Constructores: Se usan con __init__.
  • Atributos: Se declaran en el constructor o directamente en la clase.
  • Tipado: Mojo favorece el tipado estático para rendimiento, aunque admite dinámico.

📌 Ejemplo sencillo: Clase Calculadora

class Calculadora:

  • var resultado: Int
    def __init__(self):
        self.resultado = 0

    def sumar(self, a: Int, b: Int) -> Int:
       self.resultado = a + b
       return self.resultado

    def restar(self, a: Int, b: Int) -> Int:
       self.resultado = a - b
       return self.resultado

    def mostrar(self) -> None:
       print("Resultado actual:", self.resultado)

Uso:

let calc = Calculadora()
print(calc.sumar(5, 3)) # 8
print(calc.restar(10, 4)) # 6
calc.mostrar() # Resultado actual: 6

🚀 Diferencias clave con Python

  • Mojo exige tipos explícitos (Int, Float, etc.) para mayor rendimiento.
  • Usa var y let para declarar variables:

    • var → mutable.
    • let → inmutable.

  • La POO se siente muy similar a Python, pero con un enfoque más cercano a C++ en cuanto a eficiencia.



Cómo instalar WSL correctamente

Cómo instalar WSL correctamente

  • Desde la línea de comandos (PowerShell o CMD):

    1. Abre PowerShell como administrador.
    2. Ejecuta:

  • wsl –install

Desde la Microsoft Store:

  • Busca Windows Subsystem for Linux en la tienda de Microsoft y pulsa Instalar.
  • También puedes instalar distribuciones específicas como Ubuntu, Debian, Kali, etc.

Requisitos previos:

  • Windows 10 versión 2004 (compilación 19041) o superior, o cualquier versión de Windows 11.
  • Tener habilitada la característica de Virtual Machine Platform.

⚠️ Riesgos y aclaraciones importantes

  • No descargues “wsl.exe” de sitios externos: cualquier archivo que se ofrezca fuera de Microsoft es sospechoso y puede ser malware.
  • El comando wsl.exe ya está incluido en Windows una vez que habilitas la característica. No necesitas un instalador aparte.
  • Versiones antiguas de Windows 10 requieren pasos adicionales como habilitar manualmente características desde Panel de control → Activar o desactivar

📚 Recursos oficiales

Respuesta rápida: No existe un archivo independiente llamado wsl.exe para descargar. El Subsistema de Windows para Linux (WSL) ya viene integrado en Windows 10 (versión 2004 o superior) y Windows 11. Se instala directamente desde la línea de comandos o la Microsoft Store, no como un ejecutable suelto.

🔑 Cómo instalar WSL correctamente

  • Desde la línea de comandos (PowerShell o CMD):

    1. Abre PowerShell como administrador.
    2. Ejecuta:
    3. Esto descargará e instalará automáticamente el paquete de WSL junto con una distribución de Linux (por defecto, Ubuntu).

  • Desde la Microsoft Store:

    • Busca Windows Subsystem for Linux en la tienda de Microsoft y pulsa Instalar.
    • También puedes instalar distribuciones específicas como Ubuntu, Debian, Kali, etc.

  • Requisitos previos:

  • Windows 10 versión 2004 (compilación 19041) o superior, o cualquier versión de Windows 11.
  • Tener habilitada la característica de Virtual Machine Platform.

⚠️ Riesgos y aclaraciones importantes

  • No descargues “wsl.exe” de sitios externos: cualquier archivo que se ofrezca fuera de Microsoft es sospechoso y puede ser malware.
  • El comando wsl.exe ya está incluido en Windows una vez que habilitas la característica. No necesitas un instalador aparte.
  • Versiones antiguas de Windows 10 requieren pasos adicionales como habilitar manualmente características desde Panel de control → Activar o desactivar características de Windows.

📚 Recursos oficiales

👉