Cesar Systems

Herramientas Informaticas

C.9. Adivina el animal Python

   1: def animal():
   2:  
   3: # empezar con un nodo suelto
   4: raiz = Arbol("pajaro")
   5: # bucle hasta que el usuario salga
   6: while 1:
   7: print
   8:  
   9:     if not si("Estas pensando en un animal? "): break
  10:         # recorrer el arbol
  11:         arbol = raiz
  12:         while arbol.tomaIzquierda() != None:
  13:         indicador = arbol.tomaCarga() + "? "
  14:     
  15:     if si(indicador):
  16:         arbol = arbol.tomaDerecha()
  17:     else:
  18:         arbol = arbol.tomaIzquierda()
  19:     
  20: # intentar adivinar
  21: adivina = arbol.tomaCarga()
  22: indicador = "Es un " + adivina + "? "
  23:  
  24:     if si(indicador):
  25:         print "^A<Soy el mas grande!"
  26:         continue
  27:  
  28: # obtener informacion nueva
  29: indicador = "Como se llama el animal? "
  30: animal = raw_input(indicador)
  31: indicador = "Que pregunta distinguir³a a un %s de un %s? "
  32: pregunta = raw_input(indicador % (animal,adivina))
  33:  
  34: # a~nadir informacion nueva al arbol
  35: arbol.ponCarga(pregunta)
  36: indicador = "Si el animal fuera un %s, cual ser³a la respuesta? "
  37:     if si(indicador % animal):
  38:         arbol.ponIzquierda(Arbol(adivina))
  39:     arbol.ponDerecha(Arbol(animal))
  40:     
  41:     else:
  42:         arbol.ponIzquierda(Arbol(animal))
  43:         arbol.ponDerecha(Arbol(adivina))
  44:     
  45:     def si(preg):
  46:         from string import lower
  47:         resp = lower(raw_input(preg))
  48:         return (resp[0:1] == 's')

C.10. Fraction class python

   1: class Fraccion:
   2:     def __init__(self, numerador, denominador=1):
   3:     m = mcd (numerador, denominador)
   4:     self.numerador = numerador / m
   5:     self.denominador = denominador / m
   6:     def __mul__(self, otro):
   7:     
   8:         if type(otro) == type(5):
   9:         otro = Fraccion(otro)
  10:         return Fraccion(self.numerador * otro.numerador,
  11:    
  12:  
  13:      self.denominador * otro.denominador)
  14:     __rmul__ = __mul__
  15:     def __add__(self, otro):
  16:     
  17:     if type(otro) == type(5):
  18:         otro = Fraccion(otro)
  19:         return Fraccion(self.numerador * otro.denominador +
  20:     
  21:     self.denominador * otro.numerador,
  22:     self.denominador * otro.denominador)
  23:     __radd__ = __add__
  24:     def __cmp__(self, otro):
  25:     if type(otro) == type(5):
  26:         otro = Fraccion(otro)
  27:         dif = (self.numerador * otro.denominador -
  28:         otro.numerador * self.denominador)
  29:         return dif
  30:  
  31:     def __repr__(self):
  32:     return self.__str__()
  33:     def __str__(self):
  34:     return "%d/%d" % (self.numerador, self.denominador)
  35:  
  36:     def mcd(m,n):
  37:         "devuelve el maximo comun denominador de dos enteros"
  38:     if m % n == 0:
  39:         return n
  40:     else:
  41:     return mcd(n,m%n)

Lecturas recomendadas

Y ahora, hacia donde ir desde aquí? Hay muchas direcciones en las que seguir, ampliando sus conocimientos de Python especialmente y de informática en general.
Los ejemplos en este libro han sido deliberadamente simples, por lo que pueden no haber mostrado las capacidades mas excitantes de Python. A continuación exponemos una muestra de las extensiones de Python y sugerencias sobre sus usos.
La programación de GUIs (interfaces graficas de usuario, graphic user interface en ingles) permite que su programa utilice un entorno de ventanas para interactuar con el usuario y mostrar gráficos.
El primer paquete que ha tenido Python para esto es Tkinter, basado en los lenguajes interpretados Tcl y Tk de Jon Ousterhout. Tkinter esta incluido en la distribución de Python.
Otra plataforma popular es wxPython, que es esencialmente un enchapado sobre wxWindows, un paquete de C++ que implementa ventanas utilizando la interfaces nativas las plataformas Windows y Unix (incluido Linux). Las ventanas y los controles con wxPython tienen una apariencia mas nativa que Tkinter y son un poco mas sencillos de programar.
Cualquier tipo de programación de GUIs le llevara a programación basada en eventos, donde es el usuario y no el programador quien determina el flujo de la ejecución. Este estilo de programación requiere de algo de tiempo para acostumbrarse, y a veces le forzara a replantearse toda la estructura del programa.
La programación web integra Python en la Internet. Por ejemplo, puede construir programas de cliente web que abran y lean una pagina remota (casi) tan fácilmente como si fuera un ¯chero en disco. También hay módulos de Python que le permiten acceder a ¯cheros remotamente v³a ftp, y módulos que le permiten enviar y recibir correos electrónicos. Python también es ampliamente utilizado en el lado del servidor de la programación web para manejar los datos de entrada de los formularios. Las bases de datos son un poco como superficheros en donde los datos están almacenados en esquemas predefinidos, y las relaciones entre los datos le permiten acceder a ellos de varias maneras. Python tiene varios módulos para permitir a los usuarios conectarse a varios motores de bases de datos, tanto Open Source como comerciales.
La programación multi-procesos (multi-hilos) le permite ejecutar varios procesos (hilos) de ejecución dentro de un único programa. Si ha tenido la experiencia de usar un navegador web para desplazarse por una pagina web mientras el navegador continua cargando el resto de la misma, entonces tiene una idea de lo que los hilos pueden hacer.
Cuando la velocidad es mas importante se pueden escribir extensiones para Python en un lenguaje compilado como C o C++. Tales extensiones forman la base de la mayor³a de módulos en la librer³a de Python.
El mecanismo de enlazar funciones y datos es un poco complejo. SWIG(Simpli¯ed Wrapper and Interface Generator) es una herramienta para hacer este proceso mucho mas sencillo.

D.1. Libros y sitios web sobre Python

Aquí tiene las recomendaciones de los autores sobre recursos para Python en la
web:
  • La pagina de inicio de Python en www.python.org es el lugar para empezar su búsqueda de material sobre Python. Encontrara ayuda, documentación, enlaces a otros libros y listas de correo de SIGs (Special Interest Group)
    a las que se puede unir.
  • El proyecto Open Book Project www.ibiblio.com/obp contiene no solo este libro en línea sino también otros libros similares para Java y C++ de Allen Downey. Además esta Lessons in Electric Circuits de Tony R. Kuphaldt, Getting down with …, un conjunto de tutoriales de varios temas sobre informática, escritos y editados por estudiantes de instituto, Python for Fun, un conjunto de estudios de casos en Python de Chris Meyers, y The  Linux Cookbook de Michael Stultz, con 300 paginas de trucos y tecnicas.
  • Finalmente si acude a Google y busca con la cadena pitón -snake – monty” obtendrá cerca de 750.000 resultados. Y aquí algunos libros que contienen mas material sobre el lenguaje Python:
    • Core Python Programming de Wesley Chun es un libro largo, mas de 750 paginas. La primera parte del libro cubre las características básicas del lenguaje Python. La segunda parte proporciona una introducción paso a paso a temas mas avanzados incluyendo muchos de los mencionados anteriormente.
    • Python Essential Reference de David M. Beazley es un libro peque~no, pero contiene información sobre el lenguaje en si mismo y los módulos de la librería estándar. También esta muy bien indexado.
    • Python Pocket Reference de Mark Lutz realmente cabe en el bolsillo. Aunque no es tan extensivo como Python Essential Reference es una referencia útil para los módulos y funciones mas comúnmente usadas.
    • Mark Lutz también es autor de Programming Python, uno de los primeros (y mas largos) libros de Python y no esta dirigido al programador principiante.
    • Su siguiente libro Learning Python es mas pequeño y mas accesible.
    • Python Programming on Win32 de Mark Hammond y Andy Robinson es un libro que debe tener” cualquiera que que utilice seriamente Python para desarrollar aplicaciones para Windows. Entre otras cosas cubre la integración de Python y COM, construye una pequeña aplicación con wxPython, e incluso utiliza Python para escribir scripts para aplicaciones tales como Word y Excel.

D.2. Libros recomendados sobre informática en general

Las siguientes sugerencias sobre lecturas adicionales incluyen muchos de los libros favoritos de los autores. Estos tratan sobre buenas practicas de programación e informática en general.

  • The Practice of Programming de Kernighan y Pike cubre no solo el diseño y dedicación de algoritmos y estructuras de datos, sino también depuración, testeo y mejora de rendimiento de los programas. Los ejemplos están
    principalmente en C++ y Java, sin nada de Python.

  • The Elements of Java Style editado por Al Vermeulen es otro libro peque~no que discute algunos de los puntos mas sutiles de la buena programación, tales como el buen uso de las convenciones de nombres, comentarios e indotación (un poco irrelevante en Python). El libro también cubre la programación por contrato, usando aserciones para encontrar los errores
    probando precondiciones y pos condiciones, y programación correcta con hilos y su sincronización.

  • Programming Pearls de Jon Bentley es un libro clásico. Consiste en estudios de caso que aparecieron originalmente en la columna del autor en Comunicativos of the ACM. Los estudios tratan sobre toma y daca en programación y por que suele ser mala idea desarrollar con la primera idea de un programa. El libro es un poco mas antiguo que los anteriores (1986), por lo que los ejemplos están en lenguajes mas antiguos. Hay muchos problemas para resolver, algunos con soluciones y otros con pistas. Este libro fue muy popular y le siguió un segundo volumen.

  • The New Turing Omnibus de A.K Dewdney proporciona una introducción amigable a 66 temas de informática desde computación en paralelo hasta virus informáticos, desde Tac (tomograf³as computarizadas) hasta algoritmos genéticos. Todos los temas son cortos y entretenidos. Un libro anterior de Dewdney Aventuras Informáticas es una colección de su columna Juegos de ordenador en Investigación y Ciencia. Ambos libros son ricas fuentes de ideas para proyectos. Tortugas, Termitas y Atascos de Trafico de Mitchel Resnick trata sobre el poder de la descentralización y de como pueden obtenerse comportamientos complejos a partir de las actividades simples de una multitud de agentes coordinados. Introduce el lenguaje Starlogo, que permite al usuario escribir programas para agentes. La ejecución del programa demuestra comportamientos complejos agregados, que suelen ser intuitivos. La mayoría de los programas en el libro fueron desarrollados por estudiantes de colegio e instituto. Programas similares pueden escribirse en Python usando gráficos e hilos.

  • GÄodel, Escher, Bach de Douglas Hofstadter. Simplemente, si encuentra magia en la recursión también la encontrara en este libro superventas. Uno de los temas de Hofstadter concierne a los lazos extra~nos” donde los patrones se desenvuelven y ascienden hasta que se encuentran a s³ mismos de nuevo. Es una disputa de Hofstadter que tales lazos extraños son una parte esencial de lo que separa lo animado de lo no animado. El demuestra tales patrones en la música de Bach, las ilustraciones de Eschery el teorema de incompletita de GÄodel.

GNU Free Documentation License

Version 1.1, March 2000

Copyright °c 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.

Preamble

The purpose of this License is to make a manual, textbook, or other written do-
cument free” in the sense of freedom: to assure everyone the e®ective freedom
to copy and redistribute it, with or without modifying it, either commercially
or noncommercially. Secondarily, this License preserves for the author and pu-
blisher a way to get credit for their work, while not being considered responsible
for modi¯cations made by others.

This License is a kind of copyleft,” which means that derivative works of the
document must themselves be free in the same sense. It complements the GNU
General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software,
because free software needs free documentation: a free program should come
with manuals providing the same freedoms that the software does. But this

License is not limited to software manuals; it can be used for any textual work,
regardless of subject matter or whether it is published as a printed book. We
recommend this License principally for works whose purpose is instruction or
reference.

E.1. Applicability and Definitions

This License applies to any manual or other work that contains a notice placed
by the copyright holder saying it can be distributed under the terms of this Li-
cense. The Document,” below, refers to any such manual or work. Any member
of the public is a licensee, and is addressed as you.”
A Modi¯ed Version” of the Document means any work containing the Docu-
ment or a portion of it, either copied verbatim, or with modi¯cations and/or
translated into another language.
A Secondary Section” is a named appendix or a front-matter section of the
Document that deals exclusively with the relationship of the publishers or aut-
hors of the Document to the Document’s overall subject (or to related matters)
and contains nothing that could fall directly within that overall subject. (For
example, if the Document is in part a textbook of mathematics, a Secondary
Section may not explain any mathematics.) The relationship could be a matter
of historical connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical, or political position regarding them.
The Invariant Sections” are certain Secondary Sections whose titles are de-
signated, as being those of Invariant Sections, in the notice that says that the
Document is released under this License.
The Cover Texts” are certain short passages of text that are listed, as Front-
Cover Texts or Back-Cover Texts, in the notice that says that the Document is
released under this License.
A Transparent” copy of the Document means a machine-readable copy, repre-
sented in a format whose speci¯cation is available to the general public, whose
contents can be viewed and edited directly and straightforwardly with generic
text editors or (for images composed of pixels) generic paint programs or (for
drawings) some widely available drawing editor, and that is suitable for input to
text formatters or for automatic translation to a variety of formats suitable for
input to text formatters. A copy made in an otherwise Transparent ¯le format
whose markup has been designed to thwart or discourage subsequent modi¯ca-
tion by readers is not Transparent. A copy that is not Transparent” is called
Opaque.”

 

Examples of suitable formats for Transparent copies include plain ASCII wit-
hout markup, Texinfo input format, LATEX input format, SGML or XML using
a publicly available DTD, and standard-conforming simple HTML designed for
human modi¯cation. Opaque formats include PostScript, PDF, proprietary for-
mats that can be read and edited only by proprietary word processors, SGML
or XML for which the DTD and/or processing tools are not generally availa-
ble, and the machine-generated HTML produced by some word processors for
output purposes only.
The Title Page” means, for a printed book, the title page itself, plus such
following pages as are needed to hold, legibly, the material this License requires
to appear in the title page. For works in formats which do not have any title
page as such, Title Page” means the text near the most prominent appearance
of the work’s title, preceding the beginning of the body of the text.

E.2. Verbatim Copying

You may copy and distribute the Document in any medium, either commercially
or noncommercially, provided that this License, the copyright notices, and the
license notice saying this License applies to the Document are reproduced in
all copies, and that you add no other conditions whatsoever to those of this
License. You may not use technical measures to obstruct or control the reading
or further copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough number
of copies you must also follow the conditions in Section 3.
You may also lend copies, under the same conditions stated above, and you may
publicly display copies.

E.3. Copying in Quantity

If you publish printed copies of the Document numbering more than 100, and
the Document’s license notice requires Cover Texts, you must enclose the copies
in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts
on the front cover, and Back-Cover Texts on the back cover. Both covers must
also clearly and legibly identify you as the publisher of these copies. The front
cover must present the full title with all words of the title equally prominent
and visible. You may add other material on the covers in addition. Copying
with changes limited to the covers, as long as they preserve the title of the
Document and satisfy these conditions, can be treated as verbatim copying in
other respects.

Página 131 de 143

Creado con WordPress & Tema de Anders Norén