<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pythonisas</title><link>https://pythonisas.github.io/</link><description>Recent content on Pythonisas</description><generator>Hugo</generator><language>es</language><lastBuildDate>Fri, 01 May 2026 00:00:00 +0200</lastBuildDate><atom:link href="https://pythonisas.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Practica 3.8 - Invasion Alienigena III: Pilotando la Nave</title><link>https://pythonisas.github.io/pygame3/</link><pubDate>Fri, 01 May 2026 00:00:00 +0200</pubDate><guid>https://pythonisas.github.io/pygame3/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/la-nabe.png"&gt;
&lt;/figure&gt;

&lt;h2 id="objetivo"&gt;Objetivo&lt;/h2&gt;
&lt;p&gt;Tu nave esta en pantalla, pero es una estatua. En esta practica le vas a dar vida: que responda al teclado y se mueva de lado a lado.&lt;/p&gt;
&lt;p&gt;Lo que parece un cambio simple esconde un patron fundamental del desarrollo de videojuegos: el &lt;strong&gt;patron flag + update&lt;/strong&gt;. Aprenderlo aqui te servira para todo lo que venga despues (disparos, enemigos, animaciones&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Al terminar seras capaz de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gestionar eventos de teclado (&lt;code&gt;KEYDOWN&lt;/code&gt; y &lt;code&gt;KEYUP&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Implementar movimiento continuo con banderas booleanas&lt;/li&gt;
&lt;li&gt;Trabajar con velocidades fraccionarias (float vs int)&lt;/li&gt;
&lt;li&gt;Limitar el movimiento a los bordes de la pantalla&lt;/li&gt;
&lt;li&gt;Refactorizar el game loop extrayendo metodos privados&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Basado en el Capitulo 12 de &lt;em&gt;Python Crash Course, 3rd Edition&lt;/em&gt; &amp;ndash; Eric Matthes&lt;/p&gt;</description></item><item><title>Practica 3.7 - Invasion Alienigena II: Añadiendo-la-imagen-de-la-Nave</title><link>https://pythonisas.github.io/pygame2/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0200</pubDate><guid>https://pythonisas.github.io/pygame2/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/nave.png"&gt;
&lt;/figure&gt;

&lt;h2 id="objetivo"&gt;Objetivo&lt;/h2&gt;
&lt;p&gt;Ya tienes un juego que abre una ventana, pinta un fondo y cierra limpiamente. Lo que falta es lo mas importante: &lt;strong&gt;algo que mirar&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En esta practica vas a colocar una nave espacial en la parte inferior de la pantalla. Parece poco, pero por el camino aprenderas tres ideas que usaras en todo lo que viene despues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cargar una imagen&lt;/strong&gt; desde disco y convertirla en algo que Pygame sabe dibujar (una &lt;em&gt;surface&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Posicionar un elemento&lt;/strong&gt; usando rectangulos (&lt;code&gt;rect&lt;/code&gt;), el sistema de coordenadas que Pygame usa para todo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ampliar la arquitectura&lt;/strong&gt; del juego con una segunda clase (&lt;code&gt;Nave&lt;/code&gt;) que se compone dentro de &lt;code&gt;InvasionAlienigena&lt;/code&gt;, igual que &lt;code&gt;Ajustes&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Basado en el Capitulo 12 de &lt;em&gt;Python Crash Course, 3rd Edition&lt;/em&gt; &amp;ndash; Eric Matthes&lt;/p&gt;</description></item><item><title>Práctica 3.6 — Invasión Alienígena I: El esqueleto del juego</title><link>https://pythonisas.github.io/pygame1/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0200</pubDate><guid>https://pythonisas.github.io/pygame1/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/space-invaders_retro3.jpg"&gt;
&lt;/figure&gt;

&lt;h2 id="planificando-tu-proyecto"&gt;🚀Planificando Tu Proyecto&lt;/h2&gt;
&lt;p&gt;Cuando estás construyendo un proyecto grande, es importante preparar un plan antes de empezar a escribir código. Tu plan te mantendrá enfocado y hará más probable que completes el proyecto.&lt;/p&gt;
&lt;p&gt;Escribamos una descripción de la jugabilidad general. Aunque la siguiente descripción no cubre cada detalle de Invasión Alienígena, proporciona una idea clara de cómo empezar a construir el juego:&lt;/p&gt;
&lt;p&gt;En nuestro juego &lt;strong&gt;*Invasión Alienígena&lt;/strong&gt;,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;el jugador controla una nave espacial que aparece en la parte inferior central de la pantalla.&lt;/p&gt;</description></item><item><title>Pygames en itch.io — ¡a Jugarr!</title><link>https://pythonisas.github.io/pygames-itch-io/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0200</pubDate><guid>https://pythonisas.github.io/pygames-itch-io/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/El-Cosmos-de-la-Modularidad-Arquitectura-para-videojuegos-Pygame.png"&gt;
&lt;/figure&gt;

&lt;p&gt;Pygame no es un juguete. Es una librería con la que se construyen juegos de verdad — juegos que puedes jugar en el navegador, descargar, compartir con tus amigos. Y muchos de ellos están publicados en &lt;a href="https://itch.io"&gt;itch.io&lt;/a&gt;, la plataforma indie por excelencia.&lt;/p&gt;
&lt;p&gt;Si bien nosotris nos centraremos en las próximas semanas en el clásico &amp;lsquo;space invaders / invasión alienígena&amp;hellip;&lt;/p&gt;
&lt;p&gt;En este artículo repasamos &lt;strong&gt;9 proyectos hechos con Pygame&lt;/strong&gt; que puedes jugar, estudiar y usar como inspiración para tus propios juegos. Cada uno enseña algo diferente — desde física 2D hasta motores narrativos.&lt;/p&gt;</description></item><item><title>Práctica 3.5 — Refactoriza el duelo de naves espaciales</title><link>https://pythonisas.github.io/poo5/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0200</pubDate><guid>https://pythonisas.github.io/poo5/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/nostromo.png"&gt;
&lt;/figure&gt;

&lt;h2 id="descripcion"&gt;Descripcion&lt;/h2&gt;
&lt;p&gt;Alguien ha escrito un &lt;strong&gt;juego de combate espacial&lt;/strong&gt; increible. Tiene de todo: menu de acciones, IA enemiga, robo de combustible, maniobras evasivas y barras visuales de escudo. Es divertido, funciona y se nota que quien lo programo sabe lo que hace.&lt;/p&gt;
&lt;p&gt;Pero hay un problema: &lt;strong&gt;la clase &lt;code&gt;Nave&lt;/code&gt; esta practicamente vacia&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En esta practica vas a tomar ese juego como punto de partida y &lt;strong&gt;mejorar su arquitectura POO&lt;/strong&gt; sin cambiar como funciona. El juego seguira siendo el mismo — pero su codigo sera mejor. Es lo que llamamos &amp;ldquo;refactorizar&amp;rdquo; el código fuente.&lt;/p&gt;</description></item><item><title>Práctica 3.4 — Clases, herencia y coches</title><link>https://pythonisas.github.io/poo4/</link><pubDate>Mon, 23 Mar 2026 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/poo4/</guid><description>&lt;h2 id="tabla-de-contenidos"&gt;Tabla de Contenidos&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#herencia"&gt;Herencia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#el-metodo-init--en-una-clase-hija"&gt;El metodo &lt;strong&gt;init&lt;/strong&gt;() en una Clase Hija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#definir-atributos-y-metodos-para-la-clase-hija"&gt;Definir Atributos y Metodos para la Clase Hija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#instancias-como-atributos"&gt;Instancias como Atributos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#a%C3%B1adir-mas-detalle-a-la-clase-bateria"&gt;Añadir mas detalle a la clase Bateria&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/poo4/#resumen-de-conceptos"&gt;Resumen de Conceptos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#diagrama-de-la-jerarquia"&gt;Diagrama de la Jerarquia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#progresion-del-codigo-las-4-versiones"&gt;Progresion del codigo&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="herencia"&gt;Herencia&lt;/h2&gt;
&lt;p&gt;Cuando escribes clases no siempre tienes que partir de cero. Si la
clase que estas escribiendo es una &lt;strong&gt;version especializada&lt;/strong&gt; de otra
clase que ya has escrito, puedes usar &lt;strong&gt;herencia&lt;/strong&gt;. Cuando una clase
&lt;em&gt;hereda&lt;/em&gt; de otra, adquiere automaticamente todos los atributos y
metodos de la clase original. La clase original se llama &lt;strong&gt;clase padre&lt;/strong&gt;
(o &lt;em&gt;parent class&lt;/em&gt;), y la nueva clase es la &lt;strong&gt;clase hija&lt;/strong&gt; (o &lt;em&gt;child
class&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>Práctica 3.3 — Modelando Naves espaciales con Python</title><link>https://pythonisas.github.io/poo3/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/poo3/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/nostromo.png"&gt;
&lt;/figure&gt;

&lt;h2 id="las-naves-espaciales-como-clases-python"&gt;Las Naves Espaciales como Clases Python&lt;/h2&gt;
&lt;h2 id="descripcion"&gt;Descripcion&lt;/h2&gt;
&lt;p&gt;Anteriormente modelamos un &lt;code&gt;Coche&lt;/code&gt;. Vamos ahora a modelar una &lt;strong&gt;nave espacial&lt;/strong&gt; usando Programacion Orientada a Objetos (POO).
La practica se compone de &lt;strong&gt;dos scripts progresivos&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;strong&gt;Script&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;Enfoque&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;Concepto clave&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nave_basica.py&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Clase sencilla con constructor y metodo&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Clase, &lt;code&gt;__init__&lt;/code&gt;, atributos, metodos&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nave_combate.py&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Clase completa con modificacion de atributos&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Setters, incrementos, logica de proteccion&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Primero construiras la nave con lo basico (&lt;code&gt;nave_basica.py&lt;/code&gt;), y despues le daras escudos, combustible y la meteras en combate (&lt;code&gt;nave_combate.py&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Empaquetar un juego Python+Pygame como ejecutable</title><link>https://pythonisas.github.io/pyinstallerexe/</link><pubDate>Sat, 14 Mar 2026 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/pyinstallerexe/</guid><description>&lt;h2 id="es-posible-sí-con-pyinstaller"&gt;¿Es posible? Sí, con PyInstaller&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;PyInstaller&lt;/strong&gt; analiza tu proyecto, detecta todas las dependencias
(incluyendo Pygame) y las empaqueta junto con el intérprete de Python
en un único binario autocontenido.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;No necesitas instalar Python en la máquina destino.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="herramientas-disponibles"&gt;Herramientas disponibles&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;strong&gt;Herramienta&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;Windows &lt;code&gt;.exe&lt;/code&gt;&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;Linux binario&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;macOS &lt;code&gt;.app&lt;/code&gt;&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;Notas&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;PyInstaller&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;La más popular y documentada&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;cx_Freeze&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Alternativa clásica&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Nuitka&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Si&lt;/td&gt;
 &lt;td&gt;Compila a C → más rápido&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Este tutorial usa &lt;strong&gt;PyInstaller&lt;/strong&gt; (KISS).&lt;/p&gt;</description></item><item><title>POO — Naves espaciales, coches y Python</title><link>https://pythonisas.github.io/poo2/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/poo2/</guid><description>&lt;h2 id="tabla-de-contenido"&gt;Tabla de Contenido&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#trabajando-con-clases-e-instancias-naves-espaciales"&gt;Trabajando con Clases e Instancias — Naves Espaciales&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#la-clase-coche"&gt;La Clase Coche&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#establecer-un-valor-por-defecto-para-un-atributo-de-nuestro-coche"&gt;Establecer un Valor por Defecto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#modificando-los-valores-de-atributos-de-nuestro-coche"&gt;Modificando los Valores de Atributos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="trabajando-con-clases-e-instancias-naves-espaciales"&gt;Trabajando con Clases e Instancias — Naves Espaciales&lt;/h2&gt;
&lt;p&gt;¿Por que naves? Porque mas adelante (Capitulo 12) crearemos nuestro
propio videojuego &lt;strong&gt;Alien Invasion&lt;/strong&gt; con Pygame, donde la clase &lt;code&gt;Ship&lt;/code&gt;
sera el corazon del juego. Esta practica es el calentamiento.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Adelanto:&lt;/strong&gt; En &lt;code&gt;alien_invasion&lt;/code&gt; la nave tendra atributos como
&lt;code&gt;posicion_x&lt;/code&gt;, &lt;code&gt;velocidad&lt;/code&gt;, &lt;code&gt;moviendo_derecha&lt;/code&gt; y metodos como
&lt;code&gt;actualiza()&lt;/code&gt; y &lt;code&gt;blitme()&lt;/code&gt;. Hoy construimos la version &amp;ldquo;sin graficos&amp;rdquo;
para dominar la mecanica de clases antes de llegar a Pygame.&lt;/p&gt;</description></item><item><title>Práctica 3.2 — Pyrro</title><link>https://pythonisas.github.io/poo/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/poo/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/pyrro-art-NLLM.png"&gt;
&lt;/figure&gt;

&lt;h2 id="práctica-poo-pyrro-programación-orientada-a-objetos-con-perros-ascii"&gt;Práctica POO — Pyrro: Programación Orientada a Objetos con perros ASCII&lt;/h2&gt;
&lt;h2 id="descripción"&gt;Descripción&lt;/h2&gt;
&lt;p&gt;Vamos a aprender &lt;strong&gt;Programación Orientada a Objetos (POO)&lt;/strong&gt; en Python paso a paso, construyendo un programa que hace &amp;ldquo;hablar&amp;rdquo; a perros en arte ASCII.&lt;/p&gt;
&lt;p&gt;La práctica se compone de &lt;strong&gt;dos scripts progresivos&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;strong&gt;Script&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;Enfoque&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;Concepto clave&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pyrro-dice.py&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Funciones puras, sin clases&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Estilo funcional&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pyrro-art.py&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Clase &lt;code&gt;Pyrro&lt;/code&gt; con métodos y atributos&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;POO (clases, objetos, métodos)&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Primero entenderás cómo funciona el script funcional (&lt;code&gt;pyrro-dice.py&lt;/code&gt;), y después darás el salto a POO con &lt;code&gt;pyrro-art.py&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Práctica 3.1 — Modelando bases de datos SQLite con Python</title><link>https://pythonisas.github.io/sqlite/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/sqlite/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/sqlite-db.jpg"&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;h2 id="descripcion"&gt;Descripcion&lt;/h2&gt;
&lt;p&gt;Queremos construir el &lt;strong&gt;prototipo&lt;/strong&gt; de una aplicacion que ayude a la gestion del dia a dia de una &lt;strong&gt;Escuela&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;El programa debera crear una base de datos SQLite con dos tablas relacionadas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TABLA &lt;code&gt;profesores&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;strong&gt;id&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;nombre&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;asignatura&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Pedro Garcia&lt;/td&gt;
 &lt;td&gt;Matematicas&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Laura Martinez&lt;/td&gt;
 &lt;td&gt;Fisica&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Jose Rodriguez&lt;/td&gt;
 &lt;td&gt;Quimica&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;TABLA &lt;code&gt;alumnos&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;strong&gt;id&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;nombre&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;edad&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;id_profesor&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Carlos Perez&lt;/td&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Ana Lopez&lt;/td&gt;
 &lt;td&gt;22&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Luis Fernandez&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Observa que &lt;code&gt;id_profesor&lt;/code&gt; en la tabla &lt;code&gt;alumnos&lt;/code&gt; es una &lt;strong&gt;clave foranea&lt;/strong&gt; (&lt;code&gt;FOREIGN KEY&lt;/code&gt;) que referencia al &lt;code&gt;id&lt;/code&gt; de la tabla &lt;code&gt;profesores&lt;/code&gt;. Asi se establece la &lt;strong&gt;relacion&lt;/strong&gt; entre ambas tablas.&lt;/p&gt;</description></item><item><title>Uso de entornos virtuales mágicos</title><link>https://pythonisas.github.io/entornos-virtuales/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/entornos-virtuales/</guid><description>&lt;h2 id="por-qué-entornos-virtuales"&gt;¿Por qué entornos virtuales?&lt;/h2&gt;
&lt;p&gt;Durante el desarrollo de aplicaciones en Python, pueden surgir problemas relacionados con el uso de diferentes versiones de bibliotecas. Por ejemplo, dos aplicaciones diferentes pueden necesitar la misma biblioteca, pero de diferentes versiones. O puede que necesites asegurar el funcionamiento correcto de una aplicación independientemente de las actualizaciones de la versión de la biblioteca que utiliza.&lt;/p&gt;
&lt;p&gt;Para solucionar estos problemas, los desarrolladores idearon una forma interesante: &lt;strong&gt;ejecutar cada aplicación con su propio conjunto de versiones de bibliotecas en entornos aislados&lt;/strong&gt;. De esta manera, un entorno virtual (&lt;em&gt;virtual environment&lt;/em&gt;) en Python permite gestionar proyectos de forma aislada:&lt;/p&gt;</description></item><item><title>Inicio</title><link>https://pythonisas.github.io/pages/inicio/</link><pubDate>Sat, 01 Jan 2022 00:00:00 +0100</pubDate><guid>https://pythonisas.github.io/pages/inicio/</guid><description>&lt;figure&gt;&lt;img src="https://pythonisas.github.io/images/pythonisa.png"&gt;
&lt;/figure&gt;

&lt;p&gt;Las Github (Web) Pages de la (auto)organización &lt;strong&gt;Pythonisas&lt;/strong&gt;. Brujas del teclado.
Alquimistas de los bits.&lt;/p&gt;
&lt;p&gt;Aquí cocinamos nuestras recetas, pócimas y encantamientos del teclado.&lt;/p&gt;
&lt;p&gt;¿Te apetece aportar tu granito de arena al arenero del que todes nos beneficiamos?&lt;/p&gt;
&lt;h2 id="recetas-y-pócimas-python"&gt;Recetas y pócimas Python&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/entornos-virtuales/"&gt;Uso de entornos virtuales mágicos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/Pythonisas"&gt;Para tus bases de datos &amp;hellip;¿Generar datos de prueba aleatoriamente?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prácticas"&gt;Prácticas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/sqlite/"&gt;Práctica 3.1 — Modelando bases de datos SQLite con Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/poo/"&gt;Práctica 3.2 — Pyrro: perros ASCII con clases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/poo2/"&gt;POO — Naves espaciales, coches y Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/poo3/"&gt;Práctica 3.3 — Modelando Naves espaciales con Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/poo4/"&gt;Práctica 3.4 — Clases, herencia y coches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/pygame1/"&gt;Práctica 3.6 — Invasión Alienígena I: El esqueleto del juego&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/pygame2/"&gt;Práctica 3.7 — Invasión Alienígena II: Añadiendo la nave&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonisas.github.io/pygame3/"&gt;Práctica 3.8 — Invasión Alienígena III: Pilotando la nave&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="recursos"&gt;Recursos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/es/3/"&gt;Documentación Oficial en ES&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://inventwithpython.com/es/"&gt;Inventa tus propios juegos de computadora con Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://pythonisas.github.io/blog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pythonisas.github.io/blog/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;
&lt;h2 id="headline-1"&gt;
Posts
&lt;/h2&gt;
&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;
&lt;div id="outline-container-adivina-el-número" class="outline-3"&gt;
&lt;h3 id="adivina-el-número"&gt;
&lt;span class="todo status-todo"&gt;TODO&lt;/span&gt;
Practica1-Adivina-el-numero
&lt;/h3&gt;
&lt;div id="outline-text-adivina-el-número" class="outline-text-3"&gt;
&lt;p&gt;Hola Programador/a! tras familiarizarte con los conceptos más básicos
del lenguaje de programación Python, como por ejemplo - el intérprete -
variables - funciones como &amp;#39;print()&amp;#39; y input()&amp;#39; ya te sientes
preparado/a para programar tu primer juego.&lt;/p&gt;
&lt;p&gt;
En esta práctica crearás el juego &amp;#34;Adivina el Número&amp;#34;. La computadora
pensará un número aleatorio entre 1 y 20, y te pedirá que intentes
adivinarlo. La computadora te dirá si cada intento es muy alto o muy
bajo. Tú ganas si adivinas el número en seis intentos o menos. Este es
un buen juego para codificar ya que usa números aleatorios y bucles, y
recibe entradas del usuario en un programa corto. Aprenderás cómo
convertir valores a diferentes tipos de datos, y por qué es necesario
hacer esto. Dado que este programa es un juego, nos referiremos al
usuario como el jugador/a. Pero llamarlo &amp;#34;usuario/a&amp;#34; también sería
correcto.&lt;/p&gt;</description></item></channel></rss>