<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Prácticas on Pythonisas</title><link>https://pythonisas.github.io/tags/pr%C3%A1cticas/</link><description>Recent content in Prácticas 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/tags/pr%C3%A1cticas/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>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>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>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></channel></rss>