Internacionalización de programas Python

La internacionalización de programas permite que estos puedan ser entendidos por personas que hablan idiomas diferentes.

En este artículo enseño cómo internacionalizar un programa escrito en Python 3. Para este propósito se suele utilizar el módulo gettext, que esta incluido en Python.

Continúa leyendo Internacionalización de programas Python

La versión 1.6.10 de Bullet dodger ya está disponible

En la última publicación que hice sobre Python os enseñé a crear este juego. A dicho juego le he añadido algunas mejoras y he hecho que se pueda instalar con el gestor de paquetes pip (leyendo la documentación sobre paquetes de Python https://packaging.python.org/distributing/ podéis aprender a hacerlo).

La instrucción para instalar el juego es sudo pip install --pre bullet_dodger (la opción --pre no hará falta cuando la versión 1.9.2 de pygame deje de estar en beta) pip install bullet_dodger. Esta orden instala las dependencias del juego (por ahora solo pygame) y también el juego. Una vez instalado, basta con ejecutar en la terminal bullet_dodger para jugar.

He añadido también mi juego como entrada en las siguientes páginas web para que más gente lo pueda encontrar:

Creación de un videojuego con pygame

En esta entrada, vamos a ver cómo crear un videojuego con Python y pygame. El videojuego se llama Bullet dodger. El objetivo es esquivar todas las balas que se disparen para conseguir el mayor número de puntos posibles. Cada bala disparada aumenta la puntuación en 1. El personaje se maneja con el ratón, y el juego tiene un modo de pantalla completa.

Antes de comenzar a programar, debes asegurarte de que tienes todos los materiales necesarios. Solamente necesitas pygame, Python y un editor de texto o IDE con el que te sientas cómodo. Abajo tienes la bala que utilizaremos para el juego; descárgala y ubícala en la carpeta donde vayas a programar. bullet

Paso 1: Crear ventana básica

Lo primero que hay que hacer para utilizar pygame, es importarlo. Normalmente son necesarias las librerías pygame y pygame.locals. Crea un archivo de llamado main.py e importa dichas librerías.

Continúa leyendo Creación de un videojuego con pygame

Barras bajas entre números grandes en Python

A partir de la versión 3.6 de Python se podrán escribir barras bajas entre números grandes. Está mejora (PEP 515) fue propuesta por Georg Brandl y Serhiy Storchaka.

¿Para qué querría alguien escribir barras bajas entre números? Para mejorar la legibilidad. Compara print(1000000) con print(1_000_000). Si lees el segundo print, podrás distinguir claramente que el número es un millón; sin barras bajas es más difícil.

Subprocesos en Python

Los subprocesos o hilos de ejecución nos permiten realizar tareas concurrentemente. En Python podemos utilizar el módulo threading, aunque hay muchos otros.

Vamos a crear varios subprocesos (threads) sencillos.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import threading
import time
import random

def sleeper(name, s_time):
    print('{} iniciado a las {}.'.format(
        name, time.strftime('%H:%M:%S', time.gmtime())))

    time.sleep(s_time)

    print('{} finalizado a las {}.'.format(
        name, time.strftime('%H:%M:%S', time.gmtime())))


for i in range(5):
    thread = threading.Thread(target=sleeper, args=(
        'Proceso ' + str(i + 1), random.randint(1, 9)))

    thread.start()

print('Yo he terminado, pero los otros subprocesos no.')

Primero, hemos importado los modulos necesarios: time, random y threading. Para crear threads solo necesitamos el último. time lo hemos utilizado para simular una tarea y obtener su tiempo de inicio y fin; random, para hacer que nuestro proceso tenga una duración aleatoria.

La función sleeper «duerme» (no hace nada) durante el tiempo que le especifiquemos, nos dice cuándo ha empezado a «dormir» y cuando ha terminado de «dormir». Como parámetros le pasamos el nombre que le queremos dar al subproceso y el tiempo que va a «dormir» la función.

Luego, creamos un bucle for que crea 5 subprocesos que ejecutan la función sleeper. En el constructor (threading.Thread), debemos indicar la función a ejecutar (target=sleeper) y los parámetros que queremos pasarle (args=('Proceso ' + str(i + 1), random.randint(1, 9)).

Proceso 1 iniciado a las 21:19:23.
Proceso 2 iniciado a las 21:19:23.
Proceso 3 iniciado a las 21:19:23.
Proceso 4 iniciado a las 21:19:23.
Proceso 5 iniciado a las 21:19:23.
Yo he terminado, pero los otros subprocesos no.
Proceso 1 finalizado a las 21:19:25.
Proceso 5 finalizado a las 21:19:26.
Proceso 4 finalizado a las 21:19:27.
Proceso 2 finalizado a las 21:19:32.
Proceso 3 finalizado a las 21:19:32.

El resultado de la ejecución es aleatorio: no sabemos cuál proceso finalizará primero.