Introducci´n a la programaci´n          o                 o          con Python                  Andr´s Marzal            ...
´Indice general1. Introducci´no                                                                                           ...
´INDICE GENERAL                                                                     2006/09/25-15:314. Estructuras de cont...
c 2003 Andr´s Marzal e Isabel Gracia           e                                                                          ...
´INDICE GENERAL                                                                        2006/09/25-15:31         7.3.5. Alg...
PrefacioEstos libros de texto desarrollan el temario de la asignatura ((Metodolog´ y tecnolog´ de la                      ...
´INDICE GENERAL                                                                2006/09/25-15:31oportunidad para ir asentan...
c 2003 Andr´s Marzal e Isabel Gracia           e                                                              0´          ...
´INDICE GENERAL                         2006/09/25-15:314                Introducci´n a la Programaci´n con Python        ...
Cap´   ıtulo 1Introducci´n          o       —¿Qu´ sabes de este asunto?— pregunt´ el Rey a Alicia.            e           ...
1.2 Codificaci´n de la informaci´n             o                 o                                                         ...
c 2003 Andr´s Marzal e Isabel Gracia           e                                                                          ...
1.2 Codificaci´n de la informaci´n             o                 o                                                         ...
c 2003 Andr´s Marzal e Isabel Gracia           e                                                                          ...
1.3 Programas y lenguajes de programaci´n                                       o                                         ...
c 2003 Andr´s Marzal e Isabel Gracia           e                                                                          ...
1.3 Programas y lenguajes de programaci´n                                       o                                         ...
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Introducción a la programación con python - Andres Marzal
Próxima SlideShare
Cargando en…5
×

Introducción a la programación con python - Andres Marzal

3.698 visualizaciones

Publicado el

...

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
3.698
En SlideShare
0
De insertados
0
Número de insertados
1
Acciones
Compartido
0
Descargas
121
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Introducción a la programación con python - Andres Marzal

  1. 1. Introducci´n a la programaci´n o o con Python Andr´s Marzal e Isabel Gracia Departamento de Lenguajes y Sistemas Inform´ticos a Universitat Jaume I c 2003 de Andr´s Marzal Var´ e Isabel Gracia Luengo. Reservados todos los derechos. e oEsta ((Edici´n Internet)) se puede reproducir con fines autodidactas o para su uso en ocentros p´blicos de ense˜anza, exclusivamente. En el segundo caso, unicamente se car- u n ´gar´n al estudiante los costes de reproducci´n. La reproducci´n total o parcial con ´nimo a o o ade lucro o con cualquier finalidad comercial est´ estrictamente prohibida sin el permiso aescrito de los autores.
  2. 2. ´Indice general1. Introducci´no 5 1.1. Computadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2. Codificaci´n de la informaci´n . . . . . . . . . . . . . . o o . . . . . . . . . . . . . . . 6 1.3. Programas y lenguajes de programaci´n . . . . . . . . o . . . . . . . . . . . . . . . 9 1.3.1. C´digo de m´quina . . . . . . . . . . . . . . . . o a . . . . . . . . . . . . . . . 10 1.3.2. Lenguaje ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.3. ¿Un programa diferente para cada ordenador? . . . . . . . . . . . . . . . . 12 1.3.4. Lenguajes de programaci´n de alto nivel . . . . o . . . . . . . . . . . . . . . 14 1.3.5. Compiladores e int´rpretes . . . . . . . . . . . e . . . . . . . . . . . . . . . 14 1.3.6. Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.3.7. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4. M´s all´ de los programas: algoritmos . . . . . . . . . a a . . . . . . . . . . . . . . . 172. Una calculadora avanzada 23 2.1. Sesiones interactivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.1.1. Los operadores aritm´ticos . . e . . . . . . . . . . . . . . . . . . . . . . . . 24 2.1.2. Errores de tecleo y excepciones . . . . . . . . . . . . . . . . . . . . . . . . 30 2.2. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.1. Enteros y flotantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.2. Valores l´gicos . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3. Operadores l´gicos y de comparaci´n . o o . . . . . . . . . . . . . . . . . . . . . . . . 34 2.4. Variables y asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.1. Asignaciones con operador . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.4.2. Variables no inicializadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.5. El tipo de datos cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.6. Funciones predefinidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.7. Funciones definidas en m´dulos . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 48 2.7.1. El m´dulo math . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 49 2.7.2. Otros m´dulos de inter´s . . . o e . . . . . . . . . . . . . . . . . . . . . . . . 50 2.8. M´todos . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . 513. Programas 53 3.1. El entorno PythonG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.2. Ejecuci´n de programas desde la l´ o ınea de ´rdenes Unix o . . . . . . . . . . . . . . . 57 3.3. Entrada/salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.3.1. Lectura de datos de teclado . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.3.2. M´s sobre la sentencia print . . . . . . . . . . a . . . . . . . . . . . . . . . 60 3.3.3. Salida con formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.4. Legibilidad de los programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.4.1. Algunas claves para aumentar la legibilidad . . . . . . . . . . . . . . . . . 65 3.4.2. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.5. Gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . 67Introducci´n a la Programaci´n con Python o o i
  3. 3. ´INDICE GENERAL 2006/09/25-15:314. Estructuras de control 75 4.1. Sentencias condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.1.1. Un programa de ejemplo: resoluci´n de ecuaciones de primer grado . o . . . 75 4.1.2. La sentencia condicional if . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.1.3. Trazas con PythonG: el depurador . . . . . . . . . . . . . . . . . . . . . . 79 4.1.4. Sentencias condicionales anidadas . . . . . . . . . . . . . . . . . . . . . . . 81 4.1.5. Otro ejemplo: resoluci´n de ecuaciones de segundo grado . . . . . . . o . . . 83 4.1.6. En caso contrario (else) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.1.7. Una estrategia de dise˜o: refinamientos sucesivos . . . . . . . . . . . n . . . 87 4.1.8. Un nuevo refinamiento del programa de ejemplo . . . . . . . . . . . . . . 88 4.1.9. Otro ejemplo: m´ximo de una serie de n´meros . . . . . . . . . . . . a u . . . 90 4.1.10. Evaluaci´n con cortocircuitos . . . . . . . . . . . . . . . . . . . . . . o . . . 94 4.1.11. Un ultimo problema: men´s de usuario . . . . . . . . . . . . . . . . . ´ u . . . 96 4.1.12. Una forma compacta para estructuras condicionales m´ltiples (elif ) u . . . 98 4.2. Sentencias iterativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.2.1. La sentencia while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.2.2. Un problema de ejemplo: c´lculo de sumatorios . . . . . . . . . . . . a . . . 103 4.2.3. Otro programa de ejemplo: requisitos en la entrada . . . . . . . . . . . . . 104 4.2.4. Mejorando el programa de los men´s . . . . . . . . . . . . . . . . . . u . . . 106 4.2.5. El bucle for-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.2.6. for-in como forma compacta de ciertos while . . . . . . . . . . . . . . . 112 4.2.7. N´meros primos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u . . . 113 4.2.8. Rotura de bucles: break . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.2.9. Anidamiento de estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.3. Captura y tratamiento de excepciones . . . . . . . . . . . . . . . . . . . . . . . . 121 4.4. Algunos ejemplos gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . . . 124 4.4.1. Un graficador de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . 124 4.4.2. Una animaci´n: simulaci´n gravitacional . . . . . . . . . . . . . . . . o o . . . 128 4.4.3. Un programa interactivo: un videojuego . . . . . . . . . . . . . . . . . . . 134 4.5. Una reflexi´n final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . 1435. Tipos estructurados: secuencias 145 5.1. Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 5.1.1. Lo que ya sabemos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 5.1.2. Escapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 5.1.3. Longitud de una cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 5.1.4. Indexaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . 149 5.1.5. Recorrido de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.1.6. Un ejemplo: un contador de palabras . . . . . . . . . . . . . . . . . . . . . 152 5.1.7. Otro ejemplo: un programa de conversi´n de binario a decimal . o . . . . . 157 5.1.8. A vueltas con las cadenas: inversi´n de una cadena . . . . . . . . o . . . . . 158 5.1.9. Subcadenas: el operador de corte . . . . . . . . . . . . . . . . . . . . . . . 160 5.1.10. Una aplicaci´n: correo electr´nico personalizado . . . . . . . . . o o . . . . . 162 5.1.11. Referencias a cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 5.2. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 5.2.1. Cosas que, sin darnos cuenta, ya sabemos sobre las listas . . . . . . . . . 170 5.2.2. Comparaci´n de listas . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . 173 5.2.3. El operador is . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 5.2.4. Modificaci´n de elementos de listas . . . . . . . . . . . . . . . . . o . . . . . 175 5.2.5. Mutabilidad, inmutabilidad y representaci´n de la informaci´n en o o memoria176 5.2.6. Adici´n de elementos a una lista . . . . . . . . . . . . . . . . . . o . . . . . 178 5.2.7. Lectura de listas por teclado . . . . . . . . . . . . . . . . . . . . . . . . . 180 5.2.8. Borrado de elementos de una lista . . . . . . . . . . . . . . . . . . . . . . 182 5.2.9. Pertenencia de un elemento a una lista . . . . . . . . . . . . . . . . . . . . 185 5.2.10. Ordenaci´n de una lista . . . . . . . . . . . . . . . . . . . . . . . o . . . . . 186 5.3. De cadenas a listas y viceversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 5.4. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 5.4.1. Sobre la creaci´n de matrices . . . . . . . . . . . . . . . . . . . . o . . . . . 194 5.4.2. Lectura de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196ii Introducci´n a la Programaci´n con Python o o
  4. 4. c 2003 Andr´s Marzal e Isabel Gracia e 0´ INDICE GENERAL 5.4.3. ¿Qu´ dimensi´n tiene una matriz? e o . . . . . . . . . . . . . . . . . . . . . . 197 5.4.4. Operaciones con matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 5.4.5. El juego de la vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 5.5. Una reflexi´n final . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . 2096. Funciones 211 6.1. Uso de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 6.2. Definici´n de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 o 6.2.1. Definici´n y uso de funciones con un solo par´metro . . . . . . . . . . . . 212 o a 6.2.2. Definici´n y uso de funciones con varios par´metros . . . . . . . . . . . . 221 o a 6.2.3. Definici´n y uso de funciones sin par´metros . . . . . . . . . . . . . . . . 223 o a 6.2.4. Procedimientos: funciones sin devoluci´n de valor . . . . . . . . . . . . . . 226 o 6.2.5. Funciones que devuelven varios valores mediante una lista . . . . . . . . . 231 6.3. Un ejemplo: Memori´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 o 6.4. Variables locales y variables globales . . . . . . . . . . . . . . . . . . . . . . . . . 241 6.5. El mecanismo de las llamadas a funci´n . . . . . . . . . . . . . . . . . . . . . . . 250 o 6.5.1. La pila de llamadas a funci´n y el paso de par´metros . . . . . . . . . . . 250 o a 6.5.2. Paso del resultado de expresiones como argumentos . . . . . . . . . . . . 254 6.5.3. M´s sobre el paso de par´metros . . . . . . . . . . . . . . . . . . . . . . . 255 a a 6.5.4. Acceso a variables globales desde funciones . . . . . . . . . . . . . . . . . 262 6.6. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 6.6.1. Integraci´n num´rica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 o e 6.6.2. Aproximaci´n de la exponencial de un n´mero real . . . . . . . . . . . . . 270 o u 6.6.3. C´lculo de n´meros combinatorios . . . . . . . . . . . . . . . . . . . . . . 274 a u 6.6.4. El m´todo de la bisecci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 e o 6.7. Dise˜o de programas con funciones . . . . . . . . . . . . . . . . . . . . . . . . . . 276 n 6.7.1. Ahorro de tecleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 6.7.2. Mejora de la legibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 6.7.3. Algunos consejos para decidir qu´ deber´ definirse como funci´n: an´lisis e ıa o a descendente y ascendente . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 6.8. Recursi´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 o 6.8.1. C´lculo recursivo del factorial . . . . . . . . . . . . . . . . . . . . . . . . . 280 a 6.8.2. C´lculo recursivo del n´mero de bits necesarios para representar un n´mero284 a u u 6.8.3. Los n´meros de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 u 6.8.4. El algoritmo de Euclides . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 6.8.5. Las torres de Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 6.8.6. Recursi´n indirecta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 o 6.8.7. Gr´ficos fractales: copos de nieve de von Koch . . . . . . . . . . . . . . . 292 a 6.9. M´dulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 o 6.9.1. Un m´dulo muy sencillo: m´ o ınimo y m´ximo . . . . . . . . . . . . . . . . . 298 a 6.9.2. Un m´dulo m´s interesante: gravedad . . . . . . . . . . . . . . . . . . . . 299 o a 6.9.3. Otro m´dulo: c´lculo vectorial . . . . . . . . . . . . . . . . . . . . . . . . 303 o a 6.9.4. Un m´dulo para trabajar con polinomios . . . . . . . . . . . . . . . . . . 306 o 6.9.5. Un m´dulo con utilidades estad´ o ısticas . . . . . . . . . . . . . . . . . . . . 308 6.9.6. Un m´dulo para c´lculo matricial . . . . . . . . . . . . . . . . . . . . . . . 310 o a7. Tipos estructurados: registros 313 7.1. Asociando datos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 7.1.1. Lo que sabemos hacer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 7.1.2. . . . pero sabemos hacerlo mejor . . . . . . . . . . . . . . . . . . . . . . . . 314 7.2. Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 7.2.1. Definici´n de nuevos tipos de dato . . . o . . . . . . . . . . . . . . . . . . . 316 7.2.2. Referencias a registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 7.2.3. Copia de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 7.3. Algunos ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 7.3.1. Gesti´n de calificaciones de estudiantes o . . . . . . . . . . . . . . . . . . . 322 7.3.2. Fechas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 7.3.3. Anidamiento de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 7.3.4. Gesti´n de un videoclub . . . . . . . . . o . . . . . . . . . . . . . . . . . . . 337Introducci´n a la Programaci´n con Python o o iii
  5. 5. ´INDICE GENERAL 2006/09/25-15:31 7.3.5. Algunas reflexiones sobre c´mo desarrollamos la aplicaci´n de gesti´n del o o o videoclub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3468. Ficheros 349 8.1. Generalidades sobre ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 8.1.1. Sistemas de ficheros: directorios y ficheros . . . . . . . . . . . . . . . . . . 349 8.1.2. Rutas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 8.1.3. Montaje de unidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 8.2. Ficheros de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 8.2.1. El protocolo de trabajo con ficheros: abrir, leer/escribir, cerrar . . . . . . 352 8.2.2. Lectura de ficheros de texto l´ ınea a l´ınea . . . . . . . . . . . . . . . . . . . 352 8.2.3. Lectura car´cter a car´cter . . . . . . . . . . . . . . . . . . . . a a . . . . . . 357 8.2.4. Otra forma de leer l´ınea a l´ ınea . . . . . . . . . . . . . . . . . . . . . . . . 359 8.2.5. Escritura de ficheros de texto . . . . . . . . . . . . . . . . . . . . . . . . . 360 8.2.6. A˜adir texto a un fichero . . . . . . . . . . . . . . . . . . . . . n . . . . . . 363 8.2.7. Cosas que no se pueden hacer con ficheros de texto . . . . . . . . . . . . . 364 8.2.8. Un par de ficheros especiales: el teclado y la pantalla . . . . . . . . . . . . 364 8.3. Una aplicaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . 365 8.4. Texto con formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369A. Tablas ASCII e IsoLatin1 (ISO-8859-1) 375B. Funciones predefinidas en PythonG y accesibles con modulepythong 377 B.1. Control de la ventana gr´fica . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 377 B.2. Creaci´n de objetos gr´ficos . . . . . . . . . . . . o a . . . . . . . . . . . . . . . . . . 377 B.3. Borrado de elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 B.4. Desplazamiento de elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 B.5. Interacci´n con teclado y rat´n . . . . . . . . . . o o . . . . . . . . . . . . . . . . . . 379 B.6. Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380C. El m´dulo record o 381iv Introducci´n a la Programaci´n con Python o o
  6. 6. PrefacioEstos libros de texto desarrollan el temario de la asignatura ((Metodolog´ y tecnolog´ de la ıa ıaprogramaci´n)) de las titulaciones de Ingenier´ Inform´tica e Ingenier´ T´cnica en Inform´tica o ıa a ıa e ade Gesti´n de la Universitat Jaume I. En ella se pretende ense˜ar a programar y, a diferencia o nde lo que es usual en cursos introductorios a la programaci´n, se propone el aprendizaje con odos lenguajes de programaci´n: Python y C. o ¿Por qu´ dos lenguajes de programaci´n? Python y C son bien diferentes. El primero es un e olenguaje de muy alto nivel que permite expresar algoritmos de forma casi directa (ha llegadoa considerarse ((pseudoc´digo ejecutable))) y hemos comprobado que se trata de un lenguaje oparticularmente adecuado para la ense˜anza de la programaci´n. El lenguaje C exige una gran n oatenci´n a multitud de detalles que dificultan la implementaci´n de algoritmos a un estudiante o oque se enfrenta por primera vez al desarrollo de programas. No obstante, C sigue siendo unlenguaje de programaci´n de referencia y debe formar parte del curr´ o ıculum de todo inform´tico; ay no s´lo por su extendido uso en el mundo profesional: su proximidad al computador nos opermite controlar con gran precisi´n el consumo de recursos computacionales. Aprender Python oantes que C permite estudiar las estructuras de control y de datos b´sicas con un alto nivel ade abstracci´n y, as´ entender mejor qu´ supone, exactamente, la mayor complejidad de la o ı, eprogramaci´n en C y hasta qu´ punto es mayor el grado de control que nos otorga. Por ejemplo, o euna vez se han estudiado listas en Python, su implementaci´n en C permite al estudiante no operder de vista el objetivo ultimo: construir una entidad con cierto nivel de abstracci´n usando ´ ounas herramientas concretas (los punteros). De ese modo se evita una desafortunada confusi´n oentre estructuras din´micas y punteros que es frecuente cuando ´stas se estudian unicamente a e ´a la luz de un lenguaje como C. En cierto modo, pues, Python y C se complementan en elaprendizaje y ofrecen una visi´n m´s rica y completa de la programaci´n. Las similitudes y o a odiferencias entre ambos permiten al estudiante inferir m´s f´cilmente qu´ es fundamental y qu´ a a e eaccesorio o accidental al dise˜ar programas en un lenguaje de programaci´n cualquiera. n o ¿Y por qu´ otro libro de texto introductorio a la programaci´n? Ciertamente hay muchos e olibros que ense˜an a programar desde cero. Este texto se diferencia de ellos tanto en el hecho nde estudiar dos lenguajes como en la forma en que se exponen y desarrollan los conocimientos.Hemos procurado adoptar siempre el punto de vista del estudiante y presentar los conceptosy estrategias para dise˜ar programas b´sicos paso a paso, incrementalmente. La experiencia n adocente nos ha ido mostrando toda una serie l´ ıneas de razonamiento inapropiadas, erroresy vicios en los que caen muchos estudiantes. El texto trata de exponer, con mayor o menorfortuna, esos razonamientos, errores y vicios para que el estudiante los tenga presentes y procureevitarlos. As´ en el desarrollo de algunos programas llegamos a ofrecer versiones err´neas para, ı, oacto seguido, estudiar sus defectos y mostrar una versi´n corregida. Los apuntes est´n repletos o ade cuadros que pretenden profundizar en aspectos marginales, llamar la atenci´n sobre alg´n o uextremo, ofrecer algunas pinceladas de historia o, sencillamente, desviarse de lo central al temacon alguna digresi´n que podr´ resultar motivadora para el estudiante. o ıa Hemos de recalcar que este libro pretende ense˜ar a programar y no es un manual exhaustivo nsobre el lenguaje de programaci´n Python. Son particularmente rese˜ables dos omisiones: los o ndiccionarios y las clases. No forman parte de esta edici´n (aunque pensamos incluirlos en la osiguiente como material de estudio opcional) porque hemos preferido centrarnos en aquellosaspectos que tanto Python como C presentan en com´n. u Queremos aprovechar para dar un consejo a los estudiantes que no nos cansamos de repetir:es imposible aprender a programar limit´ndose a leer unos apuntes o a seguir pasivamente una aexplicaci´n en clase, especialmente si el per´ o ıodo de estudio se concentra en una o dos semanas.Programar al nivel propio de un curso introductorio no es particularmente dif´ ıcil, pero consti-tuye una actividad intelectual radicalmente nueva para los estudiantes. Es necesario darse unaIntroducci´n a la Programaci´n con Python o o 1
  7. 7. ´INDICE GENERAL 2006/09/25-15:31oportunidad para ir asentando los conocimientos y las estrategias de dise˜o de programas (y as´ n ı,superar el curso). Esa oportunidad requiere tiempo para madurar. . . y trabajo, mucho trabajo;por eso el texto ofrece m´s de cuatrocientos ochenta ejercicios. S´lo tras haberse enfrentado a a obuena parte de ellos se estar´ preparado para demostrar que se ha aprendido lo necesario. a Hay centenares de diferencias entre la primera edici´n y esta segunda. No s´lo hemos corre- o ogido erratas (y errores), hemos a˜adido tambi´n nuevos ejemplos, modificado otros, preparado n enuevos ejercicios, reubicado ejercicios a lugares donde parec´ m´s oportunos, etc. Los progra- ıan amas se presentan con una tipograf´ que, creemos, facilita notablemente la lectura. El documento ıaPDF ofrece, adem´s, la posibilidad de descargar c´modamente el texto de los programas (que a ose pueden descargar de http://marmota.act.uji.es/MTP). Esperamos que esta posibilidad setraduzca en un mayor ´nimo del estudiante para experimentar con los programas. aConvenios tipogr´ficos aHemos tratado de seguir una serie de convenios tipogr´ficos a lo largo del texto. Los programas, apor ejemplo, se muestran con fondo gris, as´ ı: ! 1 print ’ Hola, mundo!’Por regla general, las l´ ıneas del programa aparecen numeradas a mano izquierda. Esta nu-meraci´n tiene por objeto facilitar la referencia a puntos concretos del programa y no debe oreproducirse en el fichero de texto si se copia el texto del programa. Cuando se quiere destacar el nombre del fichero en el que reside un programa, se disponeeste en una barra encima del c´digo: o hola mundo.py ! 1 print ’ Hola, mundo!’ Si se trabaja con la versi´n electr´nica del libro en formato PDF (disponible en la p´gina o o aweb http://marmota.act.uji.es/MTP) es posible acceder c´modamente al texto de los pro- ogramas. Para ello, basta con desempaquetar el fichero programas.tgz (o programas.zip) enel mismo directorio en el que est´ ubicado el documento PDF. Los programas accesibles tienen eun icono que representa un documento escrito en la esquina superior izquierda. Junto al iconoaparece el nombre real del fichero: como ofrecemos varias versiones de un mismo programa,nos hemos visto obligados a seguir un esquema de numeraci´n que modifica el propio nombre odel fichero. La primera versi´n de un fichero llamado hola mundo.py es hola mundo 1.py, la osegunda hola mundo 2.py, y as´ sucesivamente. ı hola mundo 1.py hola mundo.py ! 1 print ’ Hola,’, ’mundo!’Si, aunque haya varias versiones, no aparece un n´mero al final del nombre del fichero descar- ugable, se entiende que esa es la versi´n definitiva. o hola mundo.py hola mundo.py ! 1 print ’ Hola, mundo!’Al pinchar en el icono, se abre un fichero de texto con el navegador web o editor de textos quese indique en las preferencias del visualizador de documentos PDF. Cuando el programa contiene alg´n error grave, aparecen un par de rayos flanqueando al unombre del programa: E hola mundo.py E ! 1 rint ’ Hola, mundo!’Algunos programas no est´n completos y, por ello, presentan alguna deficiencia. No obstante, ahemos optado por no marcarlos como err´neos cuando ´stos evolucionaban en el curso de la o eexposici´n. o La informaci´n que se muestra por pantalla aparece siempre recuadrada. El resultado de oejecutar hola mundo.py se mostrar´ as´ a ı:! Hola, mundo! En ocasiones mostraremos las ´rdenes que deben ejecutarse en un int´rprete de ´rdenes o e oUnix. El prompt del int´rprete se representar´ con un s´ e a ımbolo de d´lar: o2 Introducci´n a la Programaci´n con Python o o
  8. 8. c 2003 Andr´s Marzal e Isabel Gracia e 0´ INDICE GENERAL$ python hola_mundo.py! Hola, mundo!La parte que debe teclear el usuario o el programador se muestra siempre con un fondo gris. Elretorno de carro se representa expl´ıcitamente con el s´ımbolo . Las sesiones interactivas del int´rprete de Python tambi´n se muestran recuadradas. El e eprompt primario del int´rprete Python se muestra con los caracteres ((>>>)) y el secundario con e((...)). Las expresiones y sentencias que teclea el programador se destacan con fondo gris.>>> ’Hola,’ + ’ ’ + ’mundo!’ !’ Hola, mundo!’>>> if ’Hola’ == ’mundo’:... print ’si’... else:... print ’no’...noAgradecimientosEste texto es fruto de la experiencia docente de todo el profesorado de las asignaturas de((Metodolog´ y tecnolog´ de la programaci´n)) y se ha enriquecido con las aportaciones, ıa ıa ocomentarios y correcciones de muchos profesores del departamento de Lenguajes y SistemasInform´ticos de la Universitat Jaume I de Castell´: Juan Pablo Aibar Ausina, Rafael Berlanga a oLlavor´ Antonio Castellanos L´pez, Pedro Garc´ Sevilla, Mar´ Dolores Llid´ Escriv´, David ı, o ıa ıa o aLlorens Pi˜ana, Jos´ Luis Llopis Borr´s, Juan Miguel Vilar Torres y V´ n e a ıctor Manuel Jim´nez ePelayo. Para todos ellos, nuestro agradecimiento. El agradecimiento a David Llorens Pi˜ana es ndoble por desarrollar, adem´s, el entorno de programaci´n PythonG. a o Nos gustar´ adelantarnos y agradecer de antemano al colaboraci´n de cuantos nos hagan ıa ollegar sugerencias o detecten erratas que nos permitan mejorar el texto en futuras ediciones. Castell´ de la Plana, a 18 de septiembre de 2003. o Andr´s Marzal Var´ e Isabel Gracia Luengo. e oIntroducci´n a la Programaci´n con Python o o 3
  9. 9. ´INDICE GENERAL 2006/09/25-15:314 Introducci´n a la Programaci´n con Python o o
  10. 10. Cap´ ıtulo 1Introducci´n o —¿Qu´ sabes de este asunto?— pregunt´ el Rey a Alicia. e o —Nada— dijo Alicia. —¿Absolutamente nada?— insisti´ el Rey. o —Absolutamente nada— dijo Alicia. —Esto es importante— dijo el Rey, volvi´ndose hacia los jurados. e Lewis Carroll, Alicia en el pa´ de la maravillas. ısEl objetivo de este curso es ense˜arte a programar, esto es, a dise˜ar algoritmos y expresarlos n ncomo programas escritos en un lenguaje de programaci´n para poder ejecutarlos en un compu- otador. Seis t´rminos t´cnicos en el primer p´rrafo. No est´ mal. Vayamos paso a paso: empezaremos e e a apor presentar en qu´ consiste, b´sicamente, un computador. e a1.1. ComputadoresEl diccionario de la Real Academia define computador electr´nico como ((M´quina electr´nica, o a oanal´gica o digital, dotada de una memoria de gran capacidad y de m´todos de tratamiento o ede la informaci´n, capaz de resolver problemas matem´ticos y l´gicos mediante la utilizaci´n o a o oautom´tica de programas inform´ticos.)) a a La propia definici´n nos da indicaciones acerca de algunos elementos b´sicos del computador: o a la memoria, y alg´n dispositivo capaz de efectuar c´lculos matem´ticos y l´gicos. u a a o La memoria es un gran almac´n de informaci´n. En la memoria almacenamos todo tipo de e odatos: valores num´ricos, textos, im´genes, etc. El dispositivo encargado de efectuar operaciones e amatem´ticas y l´gicas, que recibe el nombre de Unidad Aritm´tico-L´gica (UAL), es como una a o e ocalculadora capaz de trabajar con esos datos y producir, a partir de ellos, nuevos datos (elresultado de las operaciones). Otro dispositivo se encarga de transportar la informaci´n deola memoria a la UAL, de controlar a la UAL para que efect´e las operaciones pertinentes y ude depositar los resultados en la memoria: la Unidad de Control. El conjunto que forman laUnidad de Control y la UAL se conoce por Unidad Central de Proceso (o CPU, del ingl´s e((Central Processing Unit))). Podemos imaginar la memoria como un armario enorme con cajones numerados y la CPUcomo una persona que, equipada con una calculadora (la UAL), es capaz de buscar operandosen la memoria, efectuar c´lculos con ellos y dejar los resultados en la memoria. aIntroducci´n a la Programaci´n con Python o o 5
  11. 11. 1.2 Codificaci´n de la informaci´n o o 2006/09/25-15:31 Memoria 1 2 3 Unidad Central de Proceso 4 Unidad de Control Unidad Aritm´tico-L´gica e o . . . Utilizaremos un lenguaje m´s t´cnico: cada uno de los ((cajones)) que conforman la memoria a erecibe el nombre de celda (de memoria) y el n´mero que lo identifica es su posici´n o direcci´n, u o oaunque a veces usaremos estos dos t´rminos para referirnos tambi´n a la correspondiente celda. e e Cada posici´n de memoria permite almacenar una secuencia de unos y ceros de tama˜o o nfijo. ¿Por qu´ unos y ceros? Porque la tecnolog´ actual de los computadores se basa en la e ıasencillez con que es posible construir dispositivos binarios, es decir, que pueden adoptar dosposibles estados: encendido/apagado, hay corriente/no hay corriente, cierto/falso, uno/cero. . .¿Es posible representar datos tan variados como n´meros, textos, im´genes, etc. con s´lo unos u a oy ceros? La respuesta es s´ (aunque con ciertas limitaciones). Para entenderla mejor, es preciso ıque nos detengamos brevemente a considerar c´mo se representa la informaci´n con valores o obinarios.1.2. Codificaci´n de la informaci´n o oUna codificaci´n asocia signos con los elementos de un conjunto a los que denominamos signi- oficados. En occidente, por ejemplo, codificamos los n´meros de 0 a 9 con el conjunto de signos u{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Al hacerlo, ponemos en correspondencia estos s´ ımbolos con cantida-des, es decir, con su significado: el s´ ımbolo ((6)) representa a la cantidad seis. El conjunto designos no tiene por qu´ ser finito. Podemos combinar los d´ e ıgitos en secuencias que ponemosen correspondencia con, por ejemplo, los n´meros naturales. La sucesi´n de d´ u o ıgitos ((99)) formaun nuevo signo que asociamos a la cantidad noventa y nueve. Los ordenadores s´lo tienen dos osignos b´sicos, {0, 1}, pero se pueden combinar en secuencias, as´ que no estamos limitados a a ıs´lo dos posibles significados. o Una variable que s´lo puede tomar uno de los dos valores binarios recibe el nombre de bit o(acr´nimo del ingl´s ((binary digit))). Es habitual trabajar con secuencias de bits de tama˜o o e nfijo. Una secuencia de 8 bits recibe el nombre de byte (aunque en espa˜ol el t´rmino correcto es n eocteto, ´ste no acaba de imponerse y se usa la voz inglesa). Con una secuencia de 8 bits podemos erepresentar 256 (28 ) significados diferentes. El rango [0, 255] de valores naturales comprende 256valores, as´ que podemos representar cualquiera de ellos con un patr´n de 8 bits. Podr´ ı o ıamosdecidir, en principio, que la correspondencia entre bytes y valores naturales es completamentearbitraria. As´ podr´ ı, ıamos decidir que la secuencia 00010011 representa, por ejemplo, el n´mero unatural 0 y que la secuencia 01010111 representa el valor 3. Aunque sea posible esta asociaci´n oarbitraria, no es deseable, pues complica enormemente efectuar operaciones con los valores.Sumar, por ejemplo, obligar´ a tener memorizada una tabla que dijera cu´l es el resultado de ıa aefectuar la operaci´n con cada par de valores, ¡y hay 65536 pares diferentes! o Los sistemas de representaci´n posicional de los n´meros permiten establecer esa asocia- o uci´n entre secuencias de bits y valores num´ricos naturales de forma sistem´tica. Centramos o e ael discurso en secuencias de 8 bits, aunque todo lo que exponemos a continuaci´n es v´lido o apara secuencias de otros tama˜os1 . El valor de una cadena de bits b7 b6 b5 b4 b3 b2 b1 b0 es, en un n 7sistema posicional convencional, i=0 bi · 2i . As´ la secuencia de bits 00001011 codifica el valor ı,0 · 2 + 0 · 2 + 0 · 2 + 0 · 2 + 1 · 2 + 0 · 22 + 1 · 21 + 1 · 20 = 8 + 2 + 1 = 11. El bit de m´s a la 7 6 5 4 3 aizquierda recibe el nombre de ((bit m´s significativo)) y el bit de m´s a la derecha se denomina a a((bit menos significativo)).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .· 1 ¿Cu´l es el m´ximo valor que puede representarse con 16 bits y un sistema de represen- a ataci´n posicional como el descrito? ¿Qu´ secuencia de bits le corresponde? o e 1 Ocho bits ofrecen un rango de valores muy limitado. Es habitual en los ordenadores modernos trabajar congrupos de 4 bytes (32 bits) u 8 bytes (64 bits).6 Introducci´n a la Programaci´n con Python o o
  12. 12. c 2003 Andr´s Marzal e Isabel Gracia e 1 Introducci´n o· 2 ¿Cu´ntos bits se necesitan para representar los n´meros del 0 al 18, ambos inclusive? a u............................................................................................. El sistema posicional es especialmente adecuado para efectuar ciertas operaciones aritm´ticas. eTomemos por caso la suma. Hay una ((tabla de sumar)) en binario que te mostramos a conti-nuaci´n: o sumandos suma acarreo 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1El acarreo no nulo indica que un d´ ıgito no es suficiente para expresar la suma de dos bits yque debe a˜adirse el valor uno al bit que ocupa una posici´n m´s a la izquierda. Para ilustrar n o ala sencillez de la adici´n en el sistema posicional, hagamos una suma de dos n´meros de 8 bits o uusando esta tabla. En este ejemplo sumamos los valores 11 y 3 en su representaci´n binaria: o 00001011 + 00000011Empezamos por los bits menos significativos. Seg´n la tabla, la suma 1 y 1 da 0 con acarreo 1: u Acarreo 1 00001011 + 00000011 0El segundo d´ ıgito empezando por derecha toma el valor que resulta de sumar a 1 y 1 el acarreoque arrastramos. O sea, 1 y 1 es 0 con acarreo 1, pero al sumar el acarreo que arrastramos dela anterior suma de bits, el resultado final es 1 con acarreo 1: Acarreo 1 1 00001011 + 00000011 10Ya te habr´s hecho una idea de la sencillez del m´todo. De hecho, ya lo conoces bien, pues el a esistema de numeraci´n que aprendiste en la escuela es tambi´n posicional, s´lo que usando diez o e od´ıgitos diferentes en lugar de dos, as´ que el procedimiento de suma es esencialmente id´ntico. ı eHe aqu´ el resultado final, que es la secuencia de bits 00001110, o sea, el valor 14: ı Acarreo 1 1 00001011 + 00000011 00001110 La circuiter´ electr´nica necesaria para implementar un sumador que act´e como el descrito ıa o ues extremadamente sencilla.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .· 3 Calcula las siguientes sumas de n´meros codificados con 8 bits en el sistema posicional: ua) 01111111 + 00000001 b) 01010101 + 10101010 c) 00000011 + 00000001............................................................................................. Debes tener en cuenta que la suma de dos n´meros de 8 bits puede proporcionar una cantidad uque requiere 9 bits. Suma, por ejemplo, las cantidades 255 (en binario de 8 bits es 11111111)y 1 (que en binario es 00000001): Acarreo 1 1 1 1 1 1 1 11111111 + 00000001 (1)00000000Introducci´n a la Programaci´n con Python o o 7
  13. 13. 1.2 Codificaci´n de la informaci´n o o 2006/09/25-15:31El resultado es la cantidad 256, que en binario se expresa con 9 bits, no con 8. Decimos en estecaso que la suma ha producido un desbordamiento. Esta anomal´ debe ser tenida en cuenta ıacuando se usa o programa un ordenador. Hasta el momento hemos visto c´mo codificar valores positivos. ¿Podemos representar tam- obi´n cantidades negativas? La respuesta es s´ Consideremos brevemente tres formas de hacerlo. e ı.La primera es muy intuitiva: consiste en utilizar el bit m´s significativo para codificar el signo; asi vale 0, por ejemplo, el n´mero expresado con los restantes bits es positivo (con la representa- uci´n posicional que ya conoces), y si vale 1, es negativo. Por ejemplo, el valor de 00000010 es 2 oy el de 10000010 es −2. Efectuar sumas con valores positivos y negativos resulta relativamen-te complicado si codificamos as´ el signo de un n´mero. Esta mayor complicaci´n se traslada ı u otambi´n a la circuiter´ necesaria. Mala cosa. e ıa Una forma alternativa de codificar cantidades positivas y negativas es el denominado ((comple-mento a uno)). Consiste en lo siguiente: se toma la representaci´n posicional de un n´mero (que o udebe poder expresarse con 7 bits) y se invierten todos sus bits si es negativo. La suma den´meros codificados as´ es relativamente sencilla: se efect´a la suma convencional y, si no se u ı uha producido un desbordamiento, el resultado es el valor que se deseaba calcular; pero si seproduce un desbordamiento, la soluci´n se obtiene sumando el valor 1 al resultado de la suma o(sin tener en cuenta ya el bit desbordado). Ve´moslo con un ejemplo. Sumemos el valor 3 al avalor −2 en complemento a uno: Acarreo 1 1 1 1 1 1 1 00000011 + 11111101 (1)00000000 ↓ 00000000 + 00000001 00000001La primera suma ha producido un desbordamiento. El resultado correcto resulta de sumar unaunidad a los 8 primeros bits. La codificaci´n en complemento a uno tiene algunas desventajas. Una de ellas es que hay odos formas de codificar el valor 0 (con 8 bits, por ejemplo, tanto 00000000 como 11111111representan el valor 0) y, por tanto, s´lo podemos representar 255 valores ([−127, 127]), en olugar de 256. Pero el principal inconveniente es la lentitud con que se realizan operaciones comola suma: cuando se produce un desbordamiento se han de efectuar dos adiciones, es decir, se hade invertir el doble de tiempo. Una codificaci´n alternativa (y que es la utilizada en los ordenadores) es la denominada o((complemento a dos)). Para cambiar el signo a un n´mero hemos de invertir todos sus bits y usumar 1 al resultado. Esta codificaci´n, que parece poco natural, tiene las ventajas de que s´lo o ohay una forma de representar el valor nulo (el rango de valores representados es [−128, 127]) y,principalmente, de que una sola operaci´n de suma basta para obtener el resultado correcto de ouna adici´n. Repitamos el ejemplo anterior. Sumemos 3 y −2, pero en complemento a dos: o Acarreo 1 1 1 1 1 1 00000011 + 11111110 (1)00000001Si ignoramos el bit desbordado, el resultado es correcto.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .· 4 Codifica en complemento a dos de 8 bits los siguientes valores:a) 4 b) −4 c) 0 d) 127 e) 1 f) −1·5 Efect´a las siguientes sumas y restas en complemento a dos de 8 bits: ua) 4 + 4 b) −4 + 3 c) 127 − 128 d) 128 − 127 e) 1 − 1 f) 1 − 2 .............................................................................................8 Introducci´n a la Programaci´n con Python o o
  14. 14. c 2003 Andr´s Marzal e Isabel Gracia e 1 Introducci´n o Bueno, ya hemos hablado bastante acerca de c´mo codificar n´meros (aunque m´s ade- o u alante ofreceremos alguna reflexi´n acerca de c´mo representar valores con parte fraccional). o oPreocup´monos por un instante acerca de c´mo representar texto. Hay una tabla que pone en e ocorrespondencia 127 s´ ımbolos con secuencias de bits y que se ha asumido como est´ndar. Es ala denominada tabla ASCII, cuyo nombre son las siglas de ((American Standard Code for In-formation Interchange)). La correspondencia entre secuencias de bits y caracteres determinadapor la tabla es arbitraria, pero aceptada como est´ndar. La letra ((a)), por ejemplo, se codifica acon la secuencia de bits 01100001 y la letra ((A)) se codifica con 01000001. En el ap´ndice A se emuestra esta tabla. El texto se puede codificar, pues, como una secuencia de bits. Aqu´ tienes ıel texto ((Hola)) codificado con la tabla ASCII: 01001000 01101111 01101100 01100001 Pero, cuando vemos ese texto en pantalla, no vemos una secuencia de bits, sino la letra((H)), seguida de la letra ((o)),. . . Lo que realmente vemos es un gr´fico, un patr´n de p´ a o ıxelesalmacenado en la memoria del ordenador y que se muestra en la pantalla. Un bit de valor 0puede mostrarse como color blanco y un bit de valor 1 como color negro. La letra ((H)) que vesen pantalla, por ejemplo, es la visualizaci´n de este patr´n de bits: o o 01000010 01000010 01000010 01111110 01000010 01000010 01000010 En la memoria del ordenador se dispone de un patr´n de bits para cada car´cter2 . Cuando o ase detecta el c´digo ASCII 01001000, se muestra en pantalla el patr´n de bits correspondiente o oa la representaci´n gr´fica de la ((H)). Truculento, pero eficaz. o a No s´lo podemos representar caracteres con patrones de p´ o ıxeles: todos los gr´ficos de orde- anador son simples patrones de p´ ıxeles dispuestos como una matriz. Como puedes ver, basta con ceros y unos para codificar la informaci´n que manejamos en oun ordenador: n´meros, texto, im´genes, etc. u a1.3. Programas y lenguajes de programaci´n oAntes de detenernos a hablar de la codificaci´n de la informaci´n est´bamos comentando que o o ala memoria es un gran almac´n con cajones numerados, es decir, identificables con valores enum´ricos: sus respectivas direcciones. En cada caj´n se almacena una secuencia de bits de e otama˜o fijo. La CPU, el ((cerebro)) del ordenador, es capaz de ejecutar acciones especificadas nmediante secuencias de instrucciones. Una instrucci´n describe una acci´n muy simple, del o oestilo de ((suma esto con aquello)), ((multiplica las cantidades que hay en tal y cual posici´n de omemoria)), ((deja el resultado en tal direcci´n de memoria)), ((haz una copia del dato de esta odirecci´n en esta otra direcci´n)), ((averigua si la cantidad almacenada en determinada direcci´n o o oes negativa)), etc. Las instrucciones se representan mediante combinaciones particulares de unosy ceros (valores binarios) y, por tanto, se pueden almacenar en la memoria. Combinando inteligentemente las instrucciones en una secuencia podemos hacer que la CPUejecute c´lculos m´s complejos. Una secuencia de instrucciones es un programa. Si hay una a ainstrucci´n para multiplicar pero ninguna para elevar un n´mero al cubo, podemos construir o uun programa que efect´e este ultimo c´lculo a partir de las instrucciones disponibles. He aqu´ u ´ a ı,grosso modo, una secuencia de instrucciones que calcula el cubo a partir de productos: 1. Toma el n´mero y multipl´ u ıcalo por s´ mismo. ı 2. Multiplica el resultado de la ultima operaci´n por el n´mero original. ´ o u Las secuencias de instrucciones que el ordenador puede ejecutar reciben el nombre de pro-gramas en c´digo de m´quina, porque el lenguaje de programaci´n en el que est´n expresadas o a o arecibe el nombre de c´digo de m´quina. Un lenguaje de programaci´n es cualquier sistema de o a onotaci´n que permite expresar programas. o 2 La realidad es cada vez m´s compleja. Los sistemas m´s modernos almacenan los caracteres en memoria de a aotra forma, pero hablar de ello supone desviarnos mucho de lo que queremos contar.Introducci´n a la Programaci´n con Python o o 9
  15. 15. 1.3 Programas y lenguajes de programaci´n o 2006/09/25-15:311.3.1. C´digo de m´quina o aEl c´digo de m´quina codifica las secuencias de instrucciones como sucesiones de unos y ce- o aros que siguen ciertas reglas. Cada familia de ordenadores dispone de su propio repertorio deinstrucciones, es decir, de su propio c´digo de m´quina. o a Un programa que, por ejemplo, calcula la media de tres n´meros almacenados en las posi- uciones de memoria 10, 11 y 12, respectivamente, y deja el resultado en la posici´n de memoria o13, podr´ tener el siguiente aspecto expresado de forma comprensible para nosotros: ıa Memoria1 Sumar contenido de direcciones 10 y 11 y dejar resultado en direcci´n 13 o2 Sumar contenido de direcciones 13 y 12 y dejar resultado en direcci´n 13 o3 Dividir contenido de direcci´n 13 por 3 y dejar resultado en direcci´n 13 o o4 Detener En realidad, el contenido de cada direcci´n estar´ codificado como una serie de unos y ceros, o ıaas´ que el aspecto real de un programa como el descrito arriba podr´ ser ´ste: ı ıa e Memoria 1 10101011 00001010 00001011 00001101 2 10101011 00001101 00001100 00001101 Unidad Central de Proceso (CPU) 3 00001110 00001101 00000011 00001101 4 00000000 00000000 00000000 00000000 Unidad de Control Unidad Aritm´tico-L´gica e o . . . La CPU es un ingenioso sistema de circuitos electr´nicos capaz de interpretar el significado ode cada una de esas secuencias de bits y llevar a cabo las acciones que codifican. Cuando la CPUejecuta el programa empieza por la instrucci´n contenida en la primera de sus posiciones de omemoria. Una vez ha ejecutado una instrucci´n, pasa a la siguiente, y sigue as´ hasta encontrar o ıuna instrucci´n que detenga la ejecuci´n del programa. o o Supongamos que en las direcciones de memoria 10, 11 y 12 se han almacenado los valores5, 10 y 6, respectivamente. Representamos as´ la memoria: ı Memoria 1 Sumar contenido de direcciones 10 y 11 y dejar resultado en direcci´n 13 o 2 Sumar contenido de direcciones 13 y 12 y dejar resultado en direcci´n 13 o 3 Dividir contenido de direcci´n 13 por 3 y dejar resultado en direcci´n 13 o o 4 Detener . . . . . .10 511 1012 6 . . . . . . Naturalmente, los valores de las posiciones 10, 11 y 12 estar´n codificados en binario, aunque ahemos optado por representarlos en base 10 en aras de una mayor claridad. La ejecuci´n del programa procede del siguiente modo. En primer lugar, se ejecuta la ins- otrucci´n de la direcci´n 1, que dice que tomemos el contenido de la direcci´n 10 (el valor 5), lo o o osumemos al de la direcci´n 11 (el valor 10) y dejemos el resultado (el valor 15) en la direcci´n o ode memoria 13. Tras ejecutar esta primera instrucci´n, la memoria queda as´ o ı: Memoria 1 Sumar contenido de direcciones 10 y 11 y dejar resultado en direcci´n 13 o 2 Sumar contenido de direcciones 13 y 12 y dejar resultado en direcci´n 13 o 3 Dividir contenido de direcci´n 13 por 3 y dejar resultado en direcci´n 13 o o 4 Detener . . . . . .10 511 1012 613 15 . . . . . .10 Introducci´n a la Programaci´n con Python o o
  16. 16. c 2003 Andr´s Marzal e Isabel Gracia e 1 Introducci´n oA continuaci´n, se ejecuta la instrucci´n de la direcci´n 2, que ordena que se tome el contenido o o ode la direcci´n 13 (el valor 15), se sume al contenido de la direcci´n 12 (el valor 6) y se deposite o oel resultado (el valor 21) en la direcci´n 13. La memoria pasa a quedar en este estado. o Memoria 1 Sumar contenido de direcciones 10 y 11 y dejar resultado en direcci´n 13 o 2 Sumar contenido de direcciones 13 y 12 y dejar resultado en direcci´n 13 o 3 Dividir contenido de direcci´n 13 por 3 y dejar resultado en direcci´n 13 o o 4 Detener . . . . . .10 511 1012 613 21 . . . . . .Ahora, la tercera instrucci´n dice que hemos de tomar el valor de la direcci´n 13 (el valor 21), o odividirlo por 3 y depositar el resultado (el valor 7) en la direcci´n 13. Este es el estado en que oqueda la memoria tras ejecutar la tercera instrucci´n: o Memoria 1 Sumar contenido de direcciones 10 y 11 y dejar resultado en direcci´n 13 o 2 Sumar contenido de direcciones 13 y 12 y dejar resultado en direcci´n 13 o 3 Dividir contenido de direcci´n 13 por 3 y dejar resultado en direcci´n 13 o o 4 Detener . . . . . .10 511 1012 613 7 . . . . . .Y finalmente, la CPU detiene la ejecuci´n del programa, pues se encuentra con la instrucci´n o oDetener en la direcci´n 4. o. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .· 6 Ejecuta paso a paso el mismo programa con los valores 2, −2 y 0 en las posiciones dememoria 10, 11 y 12, respectivamente.· 7 Dise˜a un programa que calcule la media de cinco n´meros depositados en las posiciones n ude memoria que van de la 10 a la 14 y que deje el resultado en la direcci´n de memoria 15. oRecuerda que la media x de cinco n´meros x1 , x2 , x3 , x4 y x5 es ¯ u 5 i=1 xi x1 + x2 + x3 + x4 + x5 x= ¯ = . 5 5· 8 Dise˜a un programa que calcule la varianza de cinco n´meros depositados en las posiciones n ude memoria que van de la 10 a la 14 y que deje el resultado en la direcci´n de memoria 15. La ovarianza, que se denota con σ 2 , es 5 i=1 (xi − x)2 ¯ σ2 = , 5donde x es la media de los cinco valores. Sup´n que existe una instrucci´n ((Multiplicar el ¯ o ocontenido de direcci´n a por el contenido de direcci´n b y dejar el resultado en direcci´n c)). o o o ............................................................................................. ¿Qu´ instrucciones podemos usar para confeccionar programas? Ya hemos dicho que el orde- enador s´lo sabe ejecutar instrucciones muy sencillas. En nuestro ejemplo, s´lo hemos utilizado o otres instrucciones distintas: una instrucci´n de suma de la forma ((Sumar contenido de direcciones p y q y dejar o resultado en direcci´n r)); o una instrucci´n de divisi´n de la forma ((Dividir contenido de direcci´n p por q y o o o dejar resultado en direcci´n r)); oIntroducci´n a la Programaci´n con Python o o 11
  17. 17. 1.3 Programas y lenguajes de programaci´n o 2006/09/25-15:31 y una instrucci´n que indica que se ha llegado al final del programa: Detener. o¡Pocos programas interesantes podemos hacer con tan s´lo estas tres instrucciones! Naturalmen- ote, en un c´digo de m´quina hay instrucciones que permiten efectuar sumas, restas, divisiones o ay otras muchas operaciones. Y hay, adem´s, instrucciones que permiten escoger qu´ instrucci´n a e ose ejecutar´ a continuaci´n, bien directamente, bien en funci´n de si se cumple o no determina- a o oda condici´n (por ejemplo, ((Si el ´ltimo resultado es negativo, pasar a ejecutar la o uinstrucci´n de la posici´n p))). o o1.3.2. Lenguaje ensambladorEn los primeros tiempos de la inform´tica los programas se introduc´ en el ordenador direc- a ıantamente en c´digo de m´quina, indicando uno por uno el valor de los bits de cada una de las o aposiciones de memoria. Para ello se insertaban manualmente cables en un panel de conectores:cada cable insertado en un conector representaba un uno y cada conector sin cable representabaun cero. Como puedes imaginar, programar as´ un computador resultaba una tarea ardua, ex- ıtremadamente tediosa y propensa a la comisi´n de errores. El m´s m´ o a ınimo fallo conduc´ a un ıaprograma incorrecto. Pronto se dise˜aron notaciones que simplificaban la programaci´n: cada n oinstrucci´n de c´digo de m´quina se representaba mediante un c´digo mnemot´cnico, es decir, o o a o euna abreviatura f´cilmente identificable con el prop´sito de la instrucci´n. a o o Por ejemplo, el programa desarrollado antes se podr´ representar como el siguiente texto: ıa SUM #10, #11, #13 SUM #13, #12, #13 DIV #13, 3, #13 FINEn este lenguaje la palabra SUM representa la instrucci´n de sumar, DIV la de dividir y FIN orepresenta la instrucci´n que indica que debe finalizar la ejecuci´n del programa. La almohadilla o o(#) delante de un n´mero indica que deseamos acceder al contenido de la posici´n de memoria u ocuya direcci´n es dicho n´mero. Los caracteres que representan el programa se introducen en o ula memoria del ordenador con la ayuda de un teclado y cada letra se almacena en una posici´n ode memoria como una combinaci´n particular de unos y ceros (su c´digo ASCII, por ejemplo). o o Pero, ¿c´mo se puede ejecutar ese tipo de programa si la secuencia de unos y ceros que la odescribe como texto no constituye un programa v´lido en c´digo de m´quina? Con la ayuda de a o aotro programa: el ensamblador. El ensamblador es un programa traductor que lee el contenidode las direcciones de memoria en las que hemos almacenado c´digos mnemot´cnicos y escribe o een otras posiciones de memoria sus instrucciones asociadas en c´digo de m´quina. o a El repertorio de c´digos mnemot´cnicos traducible a c´digo de m´quina y las reglas que o e o apermiten combinarlos, expresar direcciones, codificar valores num´ricos, etc., recibe el nombre ede lenguaje ensamblador , y es otro lenguaje de programaci´n.o1.3.3. ¿Un programa diferente para cada ordenador?Cada CPU tiene su propio juego de instrucciones y, en consecuencia, un c´digo de maquina y uno oo m´s lenguajes ensambladores propios. Un programa escrito para una CPU de la marca Intel ano funcionar´ en una CPU dise˜ada por otro fabricante, como Motorola3 . ¡Incluso diferentes a nversiones de una misma CPU tienen juegos de instrucciones que no son totalmente compatiblesentre s´ los modelos m´s evolucionados de una familia de CPU pueden incorporar instrucciones ı!: aque no se encuentran en los m´s antiguos4 . a Si queremos que un programa se ejecute en m´s de un tipo de ordenador, ¿habr´ que escri- a abirlo de nuevo para cada CPU particular? Durante mucho tiempo se intent´ definir alg´n tipo o ude ((lenguaje ensamblador universal)), es decir, un lenguaje cuyos c´digos mnemot´cnicos, sin o ecorresponderse con los del c´digo de m´quina de ning´n ordenador concreto, fuesen f´cilmente o a u a 3A menos que la CPU se haya dise˜ ado expresamente para reproducir el funcionamiento de la primera, ncomo ocurre con los procesadores de AMD, dise˜ ados con el objetivo de ejecutar el c´digo de m´quina de los n o aprocesadores de Intel. 4 Por ejemplo, a˜ adiendo instrucciones que faciliten la programaci´n de aplicaciones multimedia (como ocurre n ocon los Intel Pentium MMX y modelos posteriores) impensables cuando se dise˜ ´ la primera CPU de la familia no(el Intel 8086).12 Introducci´n a la Programaci´n con Python o o

×