Este documento describe las características, requisitos, ventajas e inconvenientes del lenguaje de programación Python. Incluye un ejemplo de programa sencillo del juego del ahorcado que mantiene estadísticas de partidas jugadas, ganadas y perdidas. Finalmente, proporciona referencias sobre Python.
1. 2º Desarrollo Aplicaciones Entorno Servidor
I.E.S. Gran Capitán
Yamuza Álvarez,
Sergio
Cañas Poblete,
Antonio
1. Características 2
2. Requisitos 4
3. Ventajas 8
4. Inconvenientes 10
5. Ejemplo de un programa sencillo 11
6. Referencias 14
1. Características
1
2. Simple. Este lenguaje está caracterizado por ser de una complejidad
media/baja, simple y minimalista. El pseudo-código de Python
permite centrarse en la solución del problema, que es realmente lo
importante, y no en la sintaxis.
Sencillo de aprender. Debido a esta característica, Python se
considera uno de los lenguajes más sencillos de aprender.
Código libre. Es un ejemplo de FLOSS (Free/Libre and Open Source
Software). Es decir, se pueden distribuir copias de este software
libremente. Esta es una de las razones por las que Python es tan
bueno, ha sido creado y mejorado por una comunidad que solo
quiere ver un mejor Python.
Lenguaje de alto nivel. No hay que tener en cuenta detalles tales
como manejar la memoria empleada por el programa que se está
diseñando.
Portable. Funciona en diversas plataformas, al ser Open Source, sin
necesidad de ningún cambio. Aunque sí se deben tener en cuenta
las características del sistema: librerías, módulos exclusivos de un
sistema…
Interpretado. No existen compilaciones separadas y pasos de
ejecución, internamente se ejecuta el código fuente. No está
presente la preocupación de enlazar y cargar librerías, por tanto,
sólo se debe copiar el código del programa en cualquier otro
sistema y trabajará de igual forma.
2
3. Orientado a objetos. Permite programación orientada a
procedimientos (piezas de programa reutilizables) y objetos
(combinación de datos y funcionalidad). Respecto a otros lenguajes
como C++ y Java, Python ofrece una manera potente y simple de
emplear programación orientada a objetos.
Ampliable. En caso de requerir una pieza de código de rápida
ejecución, se puede escribir en C, y después combinarla con el
programa Python.
Incrustable. Se puede insertar dentro de un programa C ó C++ para
aprovechar las facilidades de “scripting” dentro del mismo.
Librerías extendidas. La librería estándar es muy amplia, puede
ayudar a desarrollar programas que involucran expresiones
regulares, generación de documentos, bases de datos, navegadores
web, correo electrónico, XML, archivos WAV… Además de esta
librería estándar, hay otras de calidad superior como el Python
Imaging Library, la cual permite la manipulación de imágenes.
2. Requisitos
Si nos encontrásemos delante de un servidor de tipo Unix es probable
que Python ya se encuentre instalado. Basta comprobarlo con una orden
simple en la consola de comandos:
$ python
3
4. Python 3.0.1+ (r301:69556, Apr 15 2009, 17:25:52)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>>
Ese es el intérprete de Python. Para salir escribimos exit().
>>> print “Hola DWES”;
Hola DWES
>>> exit()
Por el contrario, si nos devolviese un error del tipo
$ python
bash: python3: command not found
debemos proceder a su instalación:
En sistemas Debian y derivados:
$ sudo apt-get install python
En ArchLinux:
$ sudo pacman -S python
En RedHat y demás sistemas basados en paquetería rpm:
$ sudo yum install python
Para BSD podemos usar los ports de FreeBSD y en Solaris la herramienta
pkgadd.
En MacOSX y Microsoft Windows nos dirigimos a http://python.org/
download y descargamos el correspondiente .dmg o el instalador .exe
para la arquitectura de nuestro procesador.
4
5. Entre las herramientas más comunes podemos encontrar:
El intérprete. CPython es el más usado generalmente, aunque
hay otros muy interesantes como IronPython, Jython (en máquina
virtual Java) o Pypy (Python dentro de Python).
Easy Install. Script que se encarga de indexar, instalar,
compilar, desinstalar y actualizar de forma sencilla y segura
todos los paquetes y librerías que queramos integrar. Tiene un
funcionamiento muy completo, permite elegir la versión exacta a
instalar, por si existen problemas de dependencias. Forma parte del
paquete “setuptools“.
Virtualenv. Por las características del mismo intérprete, pudiera
ser que necesitemos distintas versiones de Python instaladas,
con distintas librerías y diferentes configuraciones. Virtualenv
es capaz de crear entornos virtuales para ejecutar programas,
completamente aislados e independientes. Instalación:
$ easy_install virtualenv==dev.
5
6. Servidor para desarrollo web. En la fase de desarrollo no es
necesario, pero sí para la producción. Y en este caso debemos
montarnos el servidor, o servidores, necesarios. Lo normal es
utilizar apache2 más el módulo WSGI para servir el contenido
dinámico, y un segundo servidor para servir todo lo estático.
Generador de documentación. Si seguimos unos estándares en
las definiciones de clases, funciones, etc. podremos aprovechar
la potencia de herramientas como Sphynx, un generador de
documentación muy potente, que nos ofrece la posibilidad de
generar la API de nuestros desarrollos consultable en una aplicación
HTML, PDF, LateX.
Compilador a exe para Windows. Esta herramienta se llama
Py2exe y consigue que podamos distribuir en plataformas Windows
nuestro software, ya que se encarga de proporcionar el intérprete y
todas las dependencias que fuesen necesarias.
Entornos y editores:
6
7. gEdit: dispone de todas las características necesarias en un
editor actual.
Vi+pyflakes: una herramienta potentísima una vez se
aprende.
Eric IDE: entorno moderno, con autocompletado, estilo
Eclipse.
3.
Ventajas.
Legibilidad
La sintaxis de Python lo convierte en un lenguaje claro y legible tanto
para expertos como para los más novatos en la programación, lo cual
le está dando cierta fama entre los docentes que eligen a éste como
7
8. un lenguaje introductorio. Su forma de organizarse impone ciertas
normas a los programadores que de manera implícita los vuelve más
productivos. Tiene menos dialectos (variaciones que no cambian la
naturaleza intrínseca del lenguaje) que, por ejemplo, Perl. El hecho de
definir los bloques mediante indentación previene los fallos causados por
un incorrecto sangrado del código.
Soporte
Existen foros de ayuda a lo largo y ancho de Internet o el canal de
IRC #Python que se encuentra en la primera posición de lenguajes
de programación. La creciente comunidad de Python se fundamenta
en el hecho de ser un lenguaje de código abierto, lo que promueve la
corrección de errores, actualización, creación de parches e innovación, ya
que cualquiera puede aportar sus conocimientos.
Fácil/rápido de aprender
Asemeja al pseudocódigo, evitando las largas y extrañas líneas de
código que podemos ver en otros lenguajes de programación. En el
mundo empresarial esto se traduce en un bajo costo al poder enseñar e
implantarlo fácil y rapidamente a su plantilla de programadores. Desde el
principio del aprendizaje pueden crearse códigos útiles casi de inmediato.
Fácil/rápido de programar
Se dice que Python es un lenguaje listo para ser ejecutado. No necesita
seguir un proceso de compilación, comprobación y ejecución ni, como
ocurre con otros lenguajes de scripting, editar el código fuera del entorno
de ejecución. Permite modificar la capa de abstracción de alto nivel de la
aplicación sin cambiar las reglas del negocio.
A modo didáctico y para pruebas, el intérprete interactivo puede ser de
gran ayuda, elevando su potencial si lo usamos para depurar trozos de
código antes de insertarlos en la aplicación. Además, éste intérprete es
facilmente extensible, incluso podemos incrustar código en C.
Reusabilidad
Hace hincapié en esto implementando módulos y paquetes. Existe
la Librería Estándar de Python, parte de distribución, con un extenso
8
9. número de módulos listos para ser usados. Además, es fácil con Python
dividir el código en módulos para compartir funcionalidades con otras
aplicaciones a modo de complementos de las mismas.
Portabilidad
No ha sido diseñado para un sistema operativo concreto. Su intérprete
se escribió en ANSI C por lo que prácticamente podemos llevarlo a
toda plataforma. No obstante ciertos módulos pueden implementar
funcionalidades específicas de los sistemas.
Programación Orientada a Objetos
En contraposición a la mayoría de lenguajes de scripting, que
implementan el nuevo paradigma como un añadido (add-on), Python se
diseñó orientado a objetos. Sin embargo, en tareas simples, podemos
seguir usando código estructurado.
4. Inconvenientes.
El código en Python es más lento que su homólogo escrito en C/C++,
puesto que no es un lenguaje compilado. No se comprueban los tipos
de variables en tiempo de compilación. Aunque esto facilite la lectura/
escritura de código, al usar unos tipos dinámicos tan flexibles, los grandes
proyectos en Python pueden ser difícilmente depurables. Además, la
librería estándar de Python no es comparable en extensión con la
de C/C++/C# o Java. Sin embargo, asciende rápidamente gracias a su
comunidad.
Pero, ¿qué opinan los programadores?
9
10. 5. Ejemplo de un programa sencillo.
# -*- coding: utf-8 -*-
# Autor: Adrigm
import random
import string
import pickle
# Crea una lista con la longitud de la palabra
def ocultar(cadena):
ocultada = []
for i in cadena:
ocultada += "_"
return ocultada
# Convierte la cadena en una lista.
def listar(cadena):
listada = []
for letra in cadena:
listada += letra
return listada
# Devuelve -1 si no encuentra un carácter en una lista.
def buscar(lista, caracter):
for i in lista:
if i == caracter:
return 1
return -1
# Sustituye la letra dada en la palabra oculta si existe en palabra.
def sustituir(palabra, oculta, letra):
n = 0
while n < len(palabra):
if palabra[n] == letra:
oculta[n] = letra
n += 1
10
11. # Quita el último caracter de una lista de palabras.
def quitarultimo(lista):
n = 0
lista2 = range(len(lista))
while n < len(lista):
palabra = lista[n]
lista2[n] = palabra[:-1]
n += 1
return lista2
# Convierte una letra en minúsculas.
def convminusculas(letra):
mayusculas = "ABCDEFGHIJKLMN?OPQRSTUVWXYZ"
minusculas = "abcdefghijklmn?opqrstuvwxyz"
n = 0
while n < len(mayusculas):
if mayusculas[n] == letra:
letra = minusculas[n]
n += 1
return letra
# Muñeco en ASCII.
muneco = ["n"*6 + " -----",
" |n"*6 + " -----",
" ______n" + " |n"*6 + " -----",
" ______n" + " | |n" + " |n"*5
+ " -----",
" ______n" + " | |n" + " O |n"
+ " |n"*4 + " -----",
" ______n" + " | |n" + " O |n"
+ " =[:]= |n" + " |n"*3 + " -----",
" ______n" + " | |n" + " O |n"
+ " =[:]= |n" + " / |n" + " |n"*2
+ " -----"]
# Lista de palabras en archivo.
f = open("palabras.txt", "r")
lista1 = f.readlines()
lista = quitarultimo(lista1)
# Asignación de palabra aleatoria y ocultar
palabra = lista[random.randint(0, len(lista)-1)]
listada = listar(palabra)
oculta = ocultar(palabra)
# Asignación de vidas.
vidas = 7
nivel = 0
# Presentación.
print "-"*20
print "?EL AHORCADO!"
print "-"*20
print "Tienes 7 vidas para adivinar la palabran"
# Bucle del juego.
while vidas > 0:
print "nTe quedan", vidas, "vidas"
print muneco[nivel]
print oculta
letra = raw_input("Escribe una letra: ")
letra = convminusculas(letra)
if string.find(palabra, letra) == -1:
vidas -= 1
nivel += 1
else:
sustituir(listada, oculta, letra)
if buscar(oculta, "_") == -1:
print oculta
11