Corrección: Sí se puede saber la
posición del lápiz:
def pos():
... from turtle import _pen
... pos_abs=_pen._position
... orig=_pen._origin
... return (pos_abs[0]-orig[0],-pos_abs[1]+orig[1])
|
Y si tenemos varios lápices y queremos
saber la posición de alguno en concreto:
def pos(lapiz):
from turtle import _pen
pos_abs=lapiz._position
orig=lapiz._origin
return
(pos_abs[0]-orig[0],-pos_abs[1]+orig[1])
|
Pruebas Para el Programa
Células de MTP
Una de las tareas más tediosas
después de haber escrito un programa es probarlo y depurarlo. Y
más si se necesitan complicados datos de prueba.
Afortunadamente, esto se puede automatizar. Un ejemplo de
automatización es la creación de ficheros de prueba con
toda la información necesaria para el programa. Además
esta información es aleatoria (salvo ciertos parámetros
que es mejor ajustar a mano) con lo que las pruebas serán mucho
mejores y exhaustivas.
Este programa genera ficheros de datos para el
program Células. Si quieres ver las especificaciones de este
programa,
aquí las tienes. Ajusta
a tu gusto los parámetros iniciales (simplemente modifica las
constantes iniciales) y ejecuta la función run() del
módulo. Obtendrás un fichero de datos aleatorio en el
formato exigido. Se acabó poner las posiciones de los virus a
mano !!
Si este programa te ha resultado útil o
tienes sugerencias que hacer, por favor házmelo saber.
Aquí también puedes ver una muestra de un
fichero de prueba .
POO con Python. La Clase
TBaraja
Como sabrás, Python es un lenguaje orientado
a objetos. Esto significa que podemos utilizar esta útil
metodologia para resolver problemas de programación. En este caso
modelizamos mediante clases de objetos una Baraja. Con ella estudiaremos
que solitarios de los que habitualmente realizamos son buenos o malos.
Aquí puedes ver el diagrama de clases. Quizá no sea el
más adecuado, pero de momento sirve para ilustrar el uso de
clases en Python:
Esta es sólo una primera versión.
Añadiremos más métodos y otras barajas como la
francesa o la española de 52 cartas.
En estos ejemplos estoy procurando seguir todos los
convenios de la programación "elegante" en Python como las
cadenas de documentación etc...
El solitario de
los 4 reyes
Seguro que todos conocéis este solitario.
Para los que no, os lo explico un poco.
Se ponen cuatro cartas destapadas sobre la mesa. De
las cartas que quedan vamos sacando una a una. Si el número de la
carta coincide con alguna de las de 4 cartas destapadas se desechan,
salvo que se trate de reyes. Con los reyes no se pueden formar parejas
(de hecho el objetivo es dejar los 4 reyes arriba). Si el número
de la carta que sacamos no coincide con las de arriba se coloca en otro
mazo. Entonces a la hora de buscar parejas siempre miraremos
también la primer carta del mazo de las desemparejadas. Si
hacemos una pareja, repondremos las cartas superiores con el mazo de las
desemparejadas, y si no hay cartas con el mazo de mano.
Supongo que con estas explicaciones no te
habrás enterado de nada, así que lo mejor es que te mires
el código ;)
En mi opinión, un solitario es bueno si no
sale demasiadas veces. Pienso que el porcentaje de acierto ha de estar
entre un 5 y un 10%. Realizando pruebas con este programa y el script
que te adjunto a continuación, nos sale que este solitario sale
entre un 5 y un 6% de las veces, con lo que podemos darlo por bueno.
Aquí tienes el script de pruebas:
#!/usr/bin/env
python2
from commands import getoutput
NUMPRUEBAS = 10000
EXITO = 'Salió'
COMANDO = 'python2 reyes4.py'
exitos = 0
for x in range(NUMPRUEBAS):
salida = getoutput(COMANDO)
if salida == EXITO:
exitos = exitos + 1
print "Número de Pruebas : %d" % NUMPRUEBAS
print "Número de Éxitos : %d" % exitos
Y esta es la salida de una ejecución sobre
10000 pruebas:
[jav@localhost barajas]$ ./test_4reyes.py
Número de Pruebas : 10000
Número de Éxitos : 537
Los resultados suelen ser similares en otras pruebas.
GUIs Índice de palabras (Tkinter)
Este código muestra el uso de Tkinter, el conjunto de widgets
que acompañan a ¿todas? las distribuciones de Python para
la creación de interfaces gráficas de usuario (
GUIs).
Es mi primera aplicación con Tkinter así que igual no
está del todo bien, pero sirve para ilustrar primeros pasos. Los
screeshots que se adjuntan son de la ejecución de la
aplicación en Linux, aunque he probado el mismo código en
Windows y funciona perfectamente
GUIs Valoración ACB (wxPython)
Este código muestra el uso de otro toolkit gráfico para
Python:
wxPython. Si quieres
ejecutar este programa tendrás que bajarlo e instalarlo. En mi
opinión wxPython es un toolkit mucho más completo que
Tkinter.
La documentación no es todo lo buena que debiera, aunque con un
poco de buena voluntad se sale adelante. Por ejemplo, leyendo el
wxPyWiki
podemos hacernos una idea del funcionamiento de wxPython, pero se queda
corto en muchos aspectos. En estos casos no queda más remedio que
leer la documentación de wxWindows (para C++). Lo dicho, con
buena voluntad se sale adelante. Sin embargo existe una
aplicación de prueba fantástica que se puede descargar
aquí.
Se trata de una aplicación que muestra todos los widgets en
acción junto con el código para lograr esos efectos. De
verdad, ayuda mucho.
Y esta es la aplicación para presentarte wxPython:
Quizá no sea el mejor ejemplo para aprender wxPython (este tiene
más de 30 elementos) pero no es en absoluto complicado.
Vamos a comentar un poco el código que aquí nos ocupa. Si
alguna vez has programado GUIs "a pelo" te sorprenderá que los
widgets estén donde deben estar. Es decir que aparezcan
colocaditos del modo que queremos. Esto se consigue con los
sizers q no son mas unos de los
administradores de diseño de wxPython. Combinado sizers
verticales y horizontales podemos colocar los widgets como queramos. Por
ejemplo el esquema que sigue esta aplicación es:
Como vemos, hay muchos sizers. Uno
principal vertical en el que insertamos una etiqueta un sizer horizontal
y un botón. Dentro de ese sizer horizontal, encontramos dos
verticales, y dentro de cada uno de los verticales encontramos sizers
horizontales (6 y 4 respectivamente). Dentro de cada uno de esos sizers
habrá una etiqueta de texto y un control de texto para la
entrada del usuario. Tirando por lo bajo tenemos unos 30 widgets. No
dejes que esto te confunda, en realidad, es muy sencillo.
Consejo: Dibuja en un papel la apariencia de tus aplicaciones antes de
programarlas. Te evitará muchos quebraderos de cabeza
Busca en Google desde un script en Python
Un script que muestra cómo hacer casi cualquier cosa en Python
en muy sencillo. Este script puede ser adaptado por cualquiera que lo
considere útil para incluirlo en algún programa. Nunca
está de más tener un buscador como Google empotrado en la
aplicación.
Con este script ya tienes un ejemplo de programación en Internet
con Python.
http://users.servicios.retecal.es/tjavier
Última modificación 13/4/2003