Iniciación a python

17,466 views

Published on

Material elaborado conjuntamente con Mario Escario. Más información en https://sites.google.com/site/laislalibre/informatica/python

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
17,466
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
286
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Iniciación a python

  1. 1. Programar con Python (v. 1.0) Este texto es una adaptación para 4º de la ESO del IES Pirámide de varios textos. En sus primeros nueve capítulos se ha utilizado el texto Aprenda a Pensar Como un Programador con Python de Allen Downey, Jeffrey Elkner y Chris Meyers, publicado por Green Tea Press Wellesley, Massachusetts y traducido por Miguel Angel Vilella, Angel Arnal, Iván Juanes, Litza Amurrio, Efrain Andia y César Ballardini. Las partes sobre la tortuga se utiliza el libro Snake Wrangling for Kids, Learning to Program with Python por Jason R. Briggs y de la adaptación del texto Bienvenido al Mundo de la Tortuga del Logo por Daniel Rodríguez y Alas para la Mente por Horacio C. Reggini. Además los ejercicios se han adaptado al nivel de los alumnos. Índice 1. Una primera aproximación. . . . . . . . . . . . . . . . . . . . 2 2. ¿Qué es un programa? . . . . . . . . . . . . . . . . . . . . . . 3 3. Variables, expresiones y sentencias . . . . . . . . . . . . . . . 4 3.1. Valores y tipos . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3. Nombres de variables y palabras reservadas . . . . . . . . . . . 5 3.4. Sentencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.5. Operadores y expresiones . . . . . . . . . . . . . . . . . . . . . 8 3.6. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1. Definición y primeros ejemplos . . . . . . . . . . . . . . . . . . 10 4.2. La tortuga en Phyton . . . . . . . . . . . . . . . . . . . . . . . 10 4.3. Funciones de conversión de tipos . . . . . . . . . . . . . . . . . 12 4.4. Funciones matemáticas . . . . . . . . . . . . . . . . . . . . . . 13 4.5. Añadir funciones nuevas . . . . . . . . . . . . . . . . . . . . . 14 1
  2. 2. 1 Una primera aproximación. 2 4.6. Flujo de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.7. Las variables y los parámetros son locales . . . . . . . . . . . . 17 5. Condicionales y recursividad . . . . . . . . . . . . . . . . . . . 17 5.1. El operador módulo . . . . . . . . . . . . . . . . . . . . . . . . 17 5.2. Expresiones booleanas . . . . . . . . . . . . . . . . . . . . . . 17 5.3. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . 18 5.4. Ejecución condicional . . . . . . . . . . . . . . . . . . . . . . . 19 5.5. Condiciones encadenadas . . . . . . . . . . . . . . . . . . . . 20 5.6. La sentencia return . . . . . . . . . . . . . . . . . . . . . . . 21 5.7. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 6. Iteración. La sentencia while . . . . . . . . . . . . . . . . . . 24 7. Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 7.1. Operador corchete . . . . . . . . . . . . . . . . . . . . . . . . 26 7.2. Longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 7.3. Porciones de cadenas . . . . . . . . . . . . . . . . . . . . . . . 27 8. Recorrido y el bucle for . . . . . . . . . . . . . . . . . . . . . 28 9. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 10. Dibujar con la tortuga. . . . . . . . . . . . . . . . . . . . . . . 32 1. Una primera aproximación. El lenguaje de programación que aprenderás es Python. Python es un ejemplar de un lenguaje de alto nivel. También existen lenguajes de bajo nivel, a los que también se califica como lenguajes de máquina o lenguajes ensambladores. A propósito, los compu- tadores sólo ejecutan programas escritos en lenguajes de bajo nivel. Los pro- gramas de alto nivel tienen que traducirse antes de ejecutarse. Esta traduc- ción lleva tiempo, lo cual es una pequeña desventaja de los lenguajes de alto nivel. Aun así las ventajas son enormes. En primer lugar, la programación en lenguajes de alto nivel es mucho más fácil; escribir programas en un lenguaje de alto nivel toma menos tiempo, los programas son más cortos y más fá- ciles de leer. En segundo lugar, los lenguajes de alto nivel son portables, lo que significa que pueden ejecutarse en tipos diferentes de computadores sin modificación alguna o con pocas modificaciones. Los programas escritos en lenguajes de bajo nivel sólo pueden ejecutarse en un tipo de computador y deben reescribirse para ejecutarlos en otro.
  3. 3. 2 ¿Qué es un programa? 3 Hay dos tipos de programas que traducen lenguajes de alto nivel a lengua- jes de bajo nivel: intérpretes y compiladores. Un intérprete lee un programa de alto nivel y lo ejecuta, lo que significa que lleva a cabo lo que indica el programa. Traduce el programa poco a poco, leyendo y ejecutando cada co- mando. Un compilador lee el programa y lo traduce todo al mismo tiempo, antes de ejecutar cualquiera de las instrucciones. Python se considera como lenguaje interpretado porque los programas de Python se ejecutan por medio de un intérprete. Por tanto Pthon es un lenguaje de alto nivel interpretado. Ejercicios 1.1 Busca tres ejemplos de lenguajes de alto nivel. 1.2 Ves a “Aplicaciones−→Programación −→IDLE”. En la pantalla que aparece verás que además de información sobre el intérprete. Además aparecen los símbolos >‌>‌>. En este lugar es donde tienes que teclear las intrucciones para ser interpretadas por IDLE. Prueba a teclear la siguiente instrucción: >‌>‌> print 1 + 1 ¿Qué obtienes? 2. ¿Qué es un programa? Un programa es una secuencia de instrucciones que especifican cómo eje- cutar una determinada computación. La computación puede ser de muy dis- tintos tipos: algo matemático, como solucionar un sistema de ecuaciones o determinar las raíces de un polinomio, también buscar y reemplazar el texto de un documento, insertar un gráfico, ... Ejercicios 2.1 El primer programa. Tradicionalmente el primer programa en un len- guaje nuevo se llama “Hola, mundo” porque sólo muestra esas palabras. Teclea en Python: >‌>‌> print "Hola, mundo" Las comillas señalan el comienzo y el final del valor; no aparecen en el resultado. Felicidades este ha sido tu primer programa.
  4. 4. 3 Variables, expresiones y sentencias 4 2.2 Haz un programa en el que aparezca el texto Adiós, mundo. 3. Variables, expresiones y sentencias 3.1. Valores y tipos En programación no todos los valores son tratados de igual forma, por eso hay distintos tipos de valores. Por ejemplo: El valor 2 es un entero cuyo tipo se denota por int (viene del inglés integer, entero), El valor “Hola, mundo” es una cadena de caracteres cuyo tipo se denota por str (viene del inglés string, cadena) El valor 3, 1216 es un número decimal cuyo tipo es float (viene de que el número se considera de coma flotante). Si no estás seguro del tipo que tiene un determinado valor, puedes preguntarlo al intérprete de Python. >‌>‌> type("Hola, mundo") <type ’str’> >‌>‌> type(17) <type ’int’> >‌>‌> type(3.1216) <type ’float’> Ejercicios 3.1.1 Observa estos valores: "17" y "3.2". Parecen números, pero están entre comillas como las cadenas. Pregunta a Python por su tipo. ¿Qué tipo tienen? 3.1.2 Encuentra tres valores, distintos a los mostrados en este texto, que tengan los tipos int, str y float. Comprueba con Python que tus valores son de los tipos pedidos.
  5. 5. 3 Variables, expresiones y sentencias 5 3.2. Variables Una de las características más potentes de los lenguajes de programación es la capacidad de manipular variables. Una variable es un nombre que hace referencia a un valor. Una variable se define asignando eligiendo un nombre, seguido del símbolo = y por último el valor. Por ejemplo, elegimos el nobre mensaje para el valor string (cadena) "Hola": >‌>‌> mensaje = "Hola" Elegimos el nombre n para el valor int (entero) 17: >‌>‌> n = 17 Elegimos el nombre pi para el valor float (coma flotante) 3, 14159: >‌>‌> pi = 3.14159 La sentencia print también funciona con variables pero en este caso nos imprimirá su valor: >‌>‌> print mensaje "Hola" >‌>‌> print n 17 >‌>‌> print pi 3.14159 Ejercicios 3.2.1 Las variables también tienen tipo. Pregunta a Python por el tipo de las variables definidas anteriormente. 3.2.2 ¿Ves alguna relación entre el tipo de la variable y el tipo del valor al que se refiere? 3.3. Nombres de variables y palabras reservadas Como norma general, no es adecuado tomar cualquier nombre para las variables. Los programadores eligen nombres significativos para sus variables, esto permite saber de forma rápida para qué se usa la variable. Los nombres de las variables pueden tener una longitud arbitraria. Pueden estar formados por letras y números, pero deben comenzar con una letra. Aunque es aceptable usar mayúsculas, por convención no se suele hacer. Si
  6. 6. 3 Variables, expresiones y sentencias 6 lo haces, recuerda que la distinción es importante: Bruno y bruno son dos variables diferentes. El guión bajo _ también es legal y se utiliza a menudo para separar nom- bres con múltiples palabras, como mi_nombre o precio_del_cafe_colombiano. Si intentas darle a una variable un nombre ilegal, obtendrás un error de sintaxis. >‌>‌> 76trombones = "gran desfile" SyntaxError: invalid syntax >‌>‌> mas$ = 1000000 SyntaxError: invalid syntax >‌>‌> class = "Curso de Programación 101" SyntaxError: invalid syntax 76trombones es ilegal porque no comienza por una letra. mas$ es ilegal porque contiene un carácter ilegal, el signo del dólar. Pero ¿qué tiene de malo class? Resulta que class es una de las palabras reservadas de Python. El lenguaje usa las palabras reservadas para definir sus reglas y estructura, y no pueden usarse como nombres de variables. Estas palabras reservadas están en inglés y son 28 por lo que si tus variables están escritas en castellano no tendrás problemas. Ejercicios 3.3.1 ¿Cómo asignarías en Python a la variable mi_numero el número 123456789? 3.3.2 ¿Crees que en Python puedes tomar como variable la palabra print? 3.4. Sentencias Una sentencia es una instrucción que puede ejecutar el intérprete de Python. Hemos visto dos tipos de sentencias: print y la asignación mediante el símbolo =. Cuando escribes una sentencia en la línea de comandos (observa que el inérprete IDLE las muestra de color), Python la ejecuta y muestra el resultado, si lo hay. Por ejemplo: el resultado de una sentencia print es un valor que muestra el texto o números que queremos pero las sentencias de asignación = no entregan ningún resultado. Compruebalo con: >‌>‌> print pi 3.14159
  7. 7. 3 Variables, expresiones y sentencias 7 >‌>‌> n = 17 Como ves el primero si muestra un resultado pero el segundo no. Hasta ahora sólo has podido dar una sentencia por línea en el intérprete IDLE. Esto es muy poco útil. Además si te equivocas tienes que volver a escribir todo otra vez. Esto se soluciona por medio de un guión (o también script en inglés). Un guión es una secuencia de sentencias una debajo de otra las el cual se puede dar a Python para que las ejecute todas de vez. En este caso los resultados aparecen en el intérprete de uno en uno tal como se van ejecutando las sentencias. Ejercicios. 3.4.1 En IDLE ves a “File −→New”. Aparecerá una nueva ventana que es como un editor de textos pero con propiedades especiales como que colorea las sentencias de Python y otrás más que descubrirás conforme lo uses. Escribe este guión en Python: print 1 x = 2 print x ¿Cuántas sentencias hay? Una vez escrito ves a “Run −→Run module”. Se te pedirá que lo guardes antes de ejecutarlo. Dale un nombre, por ejemplo “ejercicio_3_4_1” (los números vienen de que estás en la sección 3.4 y es el ejercicio 1) y dile dónde quieres guardarlo. Una vez hecho esto se ejecutará. ¿Qué aparece en la pantalla de IDLE? ¿La sentencia de asignación produce alguna salida? nota importante: cada vez que modifiques un guión no es suficiente con guardarlo para que python sepa que lo has modificado, tienes que hacer de nuevo “Run −→Run module”. 3.4.2 Escribe este guión: 17 3.2 "Hola, mundo" 1 + 1
  8. 8. 3 Variables, expresiones y sentencias 8 Ejecútalo guardándolo como “ejercicio3_4_2” ¿Muestra los valores Pyt- hon? Modifica el guión para que Python muestre los valores. 3.5. Operadores y expresiones Los símbolos +, −, /, y el uso de los paréntesis ( y ) para el agrupamiento, se usan de la misma forma que en matemáticas. El asterisco ∗ es el signo de la multiplicación y el doble asterisco ∗∗ el símbolo para exponenciación (potencia). Cuando aparece el nombre de una variable en el lugar de un operando, se sustituye con su valor antes de realizar la operación. Ejecuta estas órdenes: >‌>‌>5+2;5*3;2**3 7 15 8 >‌>‌>a = 5 ; b = 2 ; c=3 >‌>‌> a+b; a*c; b**c; 7 15 8 Como ves Python ha operado tal y como lo haría una calculadora pero puede hacer varias operaciones a la vez símplente separándolas por ; (punto y coma). La suma, resta, multiplicación y exponenciación hacen lo esperado, pero la división te puede sorprender. La operación que sigue tiene un resultado inesperado: >‌>‌> minuto = 59 >‌>‌> minuto/60 0 El valor de la variable minuto es 59, y 59 dividido entre 60 es 0.98333 y no 0. El motivo de la discrepancia reside en que Python está llevando a cabo una a división de enteros. Cuando ambos operandos son enteros, el resultado ha de ser también un entero y por convención, la división de enteros siempre se redondea a la baja, incluso en casos como estos en los que el siguiente entero está muy próximo. Cuando aparece más de un operador en una expresión, el orden de eva- luación depende de las reglas de precedencia. Python sigue las mismas reglas
  9. 9. 3 Variables, expresiones y sentencias 9 de precedencia que las que has aprendido desde 1º de la ESO para tus ope- raciones matemáticas. Ejercicios 3.5.1 Evalúa las siguientes expresiones matemáticas con la ayuda de Python: 3·(9−3)+8−3·4 2 23 − 6 · ( 504 14 − 23)2 3.5.2 Da a la variable a el valor 2345 y a la variable b el valor 125 y calcula con Python la suma, la resta, la multiplicación y la división pero utilizando las variables. 3.5.3 También es posible hacer operaciones con variables de tipo str. Teclea: >‌>‌>fruta = " plátano " >‌>‌>color = " amarillo " >‌>‌>print fruta + color ¿Qué obtienes? ¿Qué es lo que hace la operación + con las cadenas? 3.5.4 Teclea ahora: >‌>‌> print fruta*3 ¿Qué obtienes? ¿Qué es lo que hace la operación * con las cadenas? 3.5.5 Teclea ahora: >‌>‌>print fruta + color , color + fruta ¿Obtienes el mismo resultado? ¿Es conmutativa la suma de cadenas? 3.6. Comentarios Conforme los programas van creciendo de tamaño y complejidad, se vuel- ven más difíciles de leer. Los lenguajes formales son densos y con frecuencia es complicado observar un trozo de código y averiguar lo que hace, o por qué lo hace. Por ello es una buena idea añadir notas a tu programa que expli- quen, en un lenguaje natural, qué hace el programa. Estas notas se llaman comentarios y se marcan con el símbolo #.
  10. 10. 4 Funciones 10 Ejercicios 3.6.1 Teclea: >‌>‌> print “En un lugar de la mancha” # de cuyo nombre no quiero acordarme... ¿A partir de dónde no se muestra el texto? ¿Qué es lo que hace que no se muestre parte del texto? 4. Funciones 4.1. Definición y primeros ejemplos Una función en Python es una palabra reservada seguida de un argumento entre paréntesis. Ya hemos visto una función: type, la cual muestra el tipo de una valor o variable que se sitúa entre paréntesis. Por ejemplo: >‌>‌> type(“32”) <type ’str’> Otro ejemplo más: la función id toma como argumento un valor o una variable y devuelve un entero que actúa como identificador único de ese valor. Por ejemplo: >‌>‌> id(3) 134882108 >‌>‌> n = 3 >‌>‌> id(n) 134882108 Cada valor tiene un id, que es un valor único relacionado con dónde se almacena en la memoria del computador. El id de una variable es el id del valor al que hace referencia. 4.2. La tortuga en Phyton Un módulo es un archivo que contiene una colección de funciones agru- padas juntas. Antes de poder usar las funciones de un módulo, tenemos que importarlo con la orden import. En Python una tortuga es algo similar a lo que tienes en mente de lo que es una tortuga en la realidad, solo que es una pequeña flecha negra que se mueve lentamente sobre la pantalla y que dibuja su movimiento si tu quieres que lo haga.
  11. 11. 4 Funciones 11 Primero debemos decir a Python que queremos usar la tortuga importán- dola: >‌>‌> import turtle Para llamar a una de las funciones del módulo turtle, tenemos que es- pecificar el nombre del módulo y el nombre de la función que deseamos, separados por un punto. A esto se le llama notación de punto. Ahora vamos a hacer que nos muestrela tortuga. Para usar la tortuga más fácilmente y que sea más fácil de manejar la llamamos t: >‌>‌> t = turtle.Pen() Verás aparecer nuestra tortuga que es más parecida a una flecha negra. Fíjate que hemos utilizado una función turtle.Pen(). Esta función provie- ne del paquete importado turtle y se llama Pen(). Fíjate que tiene sus paréntesis aunque no hay nada dentro de ellos además observa que para lla- marla hemos tenido que decirle a Python que es una función del módulo de turtle. Ahora podemos decirle que se mueva hacia adelante con forward(n) que es una función donde n es el número de pasos: >‌>‌> t.forward(50) También le podemos decir que gire la cabeza a la izquierda con la función left(g) donde g es el número de grados a girar: >‌>‌> t.left(90) Ahora teclea las siguientes funciones que ya has aprendido tal y como se te dan en un guión: t.forward(50) t.left(90) t.forward(50) t.left(90) t.forward(50) t.left(90) Si todo ha ido bien, al ejecutarlo, tu tortuga habrá dibujado un cuadrado de lado 50 pasos (en realidad de 50 píxeles de tu pantalla). Para borrar la pantalla y comenzar de nuevo utilizamos la función reset(): >‌>‌> t.reset() Otras órdenes son: ir hacia atrás backward(n) un número de pasos n, girar a la derecha right(g) un número de grados g, que levante el lápiz la tortuga para que no pinte con la función up() y que lo baje con la función down(). Por ejemplo, haz el siguiente guión: t.backward(100)
  12. 12. 4 Funciones 12 t.right(90) t.up() t.backward(100) t.right(90) t.down() t.backward(100) Si todo ha ido bien, al ejecutarlo, verás dos segmentos paralelos de longi- tud 100 píxeles. Ejercicios 4.2.1 Haz un guión que dibuje un triángulo equilátero de lado 50 con tu tortuga. Guárdalo con el nombre “ejercicio_4_2_1”. 4.2.2 Haz un guión que dibuje dos rectas perpendiculares de longitud 75 que se corten en el centro. Guárdalo con el nombre “ejercicio_4_2_2”. 4.3. Funciones de conversión de tipos La función int toma un valor y lo convierte a un entero, si es posible, o da un error si no es posible. >‌>‌> cadena_numerica="32" >‌> int(cadena_numerica) 32 >‌>‌>int("Hola") ValueError: invalid literal for int(): Hola int también convierte valores de coma flotante a enteros, pero recuerda que siempre redondea hacia abajo: >‌>‌> int(3.99999) 3 La función float convierte enteros y cadenas en números en coma flo- tante: >‌>‌> float(32) 32.0 >‌>‌> cadena_numerica="3.14159" >‌>‌> float(cadena_numerica) 3.14159 Finalmente, está la función str, que convierte a tipo cadena str:
  13. 13. 4 Funciones 13 >‌>‌> str(32) ’32’ >‌>‌> str(3.14149) ’3.14149’ Ejercicios 4.3.1 Convierte en coma flotante el número entero 1. ¿Qué obtienes? ¿Es el mismo número en matemáticas? ¿Y en Python? 4.3.2 Supón que queremos calcular qué fracción de una hora ha transcurrido al pasar un cierto número de minutos. La expresión que calcularemos es: minutos/60. 1. Realiza este cálculo con Python suponiendo que han pasado 50 minutos, es decir, teclea >‌>‌> minutos = 50 >‌>‌> minutos/60 ¿Obtienes un resultado correcto? ¿Por qué obtiene este resultado Python? 2. Para obtener un resultado correcto podemos hacer dos cosas: a) En vez de hacer el cálculo dividiendo para 60, divide para 60.0 b) Convierte la variable minutos a tipo float (coma flotante) y repite el cálculo dividiendo para 60. c) ¿Por qué crees que Python realiza correctamente en el apatado anterior los cálculos? 4.4. Funciones matemáticas Python dispone de un módulo matemático que proporciona la mayoría de las funciones matemáticas habituales. Recuerda que un módulo es un archivo que contiene una colección de funciones agrupadas juntas. Antes de poder usar las funciones de un módulo, tenemos que importarlo: >‌>‌>import math Para llamar a una de las funciones, tenemos que especificar el nombre del módulo y el nombre de la función, separados por un punto. Recordar que a esto se le llama notación de punto:
  14. 14. 4 Funciones 14 >‌>‌> decibelio = math.log10(17.0) >‌>‌> altura = math.sin(1.5) La primera sentencia da a decibelio el valor del logaritmo de 17, en base 10. La segunda halla el seno de 1,5. Notar que las funciones trigonométricas (sin, cos, tan, etc.) en Python toman sus argumentos en radianes. Ejercicios 4.4.1 Calcula la hipotenusa de un triángulo rectángulo de catetos 14 cm y 18 cm. Tendrás que utilizar la raíz cuadrada cuya función en Python es math.sqrt(). 4.4.2 Calcula el valor del seno, del coseno y de la tangente de 45º. Para ello calcula el ángulo en radianes sabiendo que 360º son 2π radianes (el valor matemático π en Python se escribe math.pi) y con ese valor en radianes calcula los valores trigonométricos pedidos. 4.5. Añadir funciones nuevas Hasta ahora sólo hemos usado las funciones que vienen incluidas con Python, pero también es posible añadir nuevas funciones. La creación de nuevas funciones para resolver tus problemas particulares es una de las cosas más utiles de los lenguajes de programación de propósito general. En programación, función es una secuencia de instrucciones con nombre, que lleva a cabo la operación deseada. Las funciones que hemos usado hasta ahora las ha definido Python por nosotros. Para definirlas nosotros tenemos siempre que escribirlas de esta forma: def NOMBRE( LISTA DE PARAMETROS ): SENTENCIAS Donde NOMBRE es un nombre inventado que desees para tu función, con la excepción de que no puedes usar las palabras reservadas de Python. La LISTA DE PARAMETROS especifica qué información, en caso de haberla, se ha de proporcionar para usar la función nueva. Después vendrán las SEN- TENCIAS. Puede haber cualquier número de sentencias dentro de la función, pero tienen que estar indentadas (separadas) desde el margen izquierdo (esto
  15. 15. 4 Funciones 15 lo hace IDLE por ti). En los ejemplos de este texto se usará una indentación de cuatro espacios (el estándar de Python). Ejercicios En estos ejercicios vas a hacer guiones con idle. recuerda que cada vez que hagas o modifiques un guión deves hacer “Run −→Run module” para que python sepa que ha sido modificado. 4.5.1 Escribe esta función: def nueva_linea(): print ¿Cómo se llama? ¿Tiene parámetros? ¿Qué instrucciones tiene? Ejecuta la función. ¿Qué hace? 4.5.2 Es posible llamar a otra función dentro de una defición de función (¡pero siempre acordándote de indentar las sentencias dentro de la definición de función!). Por ejemplo escribe esta otra función que no tiene pará- metros: def tresLineas(): nueva_linea() nueva_linea() nueva_linea() Ejecuta la función. ¿Qué hace? 4.5.3 Escribe una función llamada nueveLineas que use la función tresLineas para imprimir nueve líneas en blanco. 4.5.4 Utilizando las funciones anteriores, escribe una función llamada onceLineas para imprimir once líneas en blanco. La función debe usar el menor có- digo posible. 4.5.4 Teclea esta función que tiene un parámetro llamado paso (el nombre del parámetro es indiferente, puedes tomar el que quieras siempre que respetes las reglas de la sección 3.3): def imprimeDoble(paso): print paso, paso Ejecuta la función con tres tipos de variables distintas: la variable cadena ’Jamón’, la variable entera 5 y la variable de coma flotante
  16. 16. 4 Funciones 16 3.14159 ¿Qué obtienes? ¿Puedes ejecutar la función independiente- mente del tipo de variable que uses? 4.5.5 Es posible componer funciones. Por ejemplo: 1. Multiplica por 4 cada una de las variables del ejercicio anterior y repite el ejercicio. Por ejemplo: >‌> imprimeDoble(’Jamón’*4) ¿Qué obtienes? 2. Antepone la función interna type a cada variable del ejercicio an- terio y repite el ejercico. Por ejempo: >‌> imprimeDoble(type(’Jamón’)) ¿Qué obtienes? 3. Podemos usar una variable como argumento. Por ejemplo teclea : >‌>‌> saludo = ’Hola, mundo’ >‌>‌> imprimeDoble(saludo) ¿Qué obtienes? 4.5.6 A partir del guión del ejercicio 4.2.1 crea una función llamada ejercicio_4_5_6(lado) que haga un triángulo equilátero de lado cualquiera. 4.5.7 A partir del guión del ejercicio 4.2.2 crea una función llamada ejercicio_4_5_7(longitud) que dibuje una cruz de longitud cualquira (observa que una cruz son dos rectas perpendiculares de longitud cualquiera que se corten en el centro). 4.5.9 Crea una función llamada ejercicio_4_5_8(longitud,distancia) que dibuje dos rectas parlalelas de longitud cualquiera y distanciadas por una distancia cualquiera. 4.6. Flujo de ejecución Como has observado en los ejercicios anteriores es posible que dentro de una función se llame a otra función la cual puede a su vez llamar a otra función. Para que nuestros programas funcionen correctamente tenemos que asegurarnos de definir cada función antes de que otra función la pueda llamar.
  17. 17. 5 Condicionales y recursividad 17 4.7. Las variables y los parámetros son locales Al definir funciones hemos usado variables cuyos nombres han sido to- mados por nosotros de forma arbitraria. Al llamar a la función, Python crea esas variables y son destruidas por lo que no se puede acceder de nuevo a ellas e incluso podrían ser utilizadas en otra función. 5. Condicionales y recursividad Antes de ver las funciones condicionales y recursivas necesitamos conocer algunos operadores. 5.1. El operador módulo En Python, el operador de módulo es el signo de tanto por ciento % y nos da el resto de una división. Observa cómo calcular el cociente y el resto de una división de enteros: >‌>‌> cociente = 7 / 3 >‌>‌> print cociente 2 >‌>‌> resto = 7 % 3 >‌>‌> print resto 1 Así 7 dividido entre 3 tiene por cociente 2 con resto 1. Ejercicios 5.1.1 Encuentra el cociente y el resto de la división de 1234 entre 209. 5.1.2 Utiliza Phyton para saber si 11 divide al número 3036. 5.1.3 Utilizando la división por potencias de 10 y el operador % haz que Phy- ton guarde en una variable las dos últimas cifras del número 123456789. 5.2. Expresiones booleanas Una expresión booleana es una expresión que es cierta o falsa. En Python (como en la mayoría de lenguajes de programación), una expresión que es cierta tiene el valor True (verdadero), y una expresión que es falsa tiene
  18. 18. 5 Condicionales y recursividad 18 el valor False (falso). El operador == compara dos valores y entrega una expresión booleana en función de si es verdadero o falso: >‌>‌> 5 == 5 True >‌>‌> 5 == 6 False En la primera sentencia, los dos operandos son iguales, así que la expresión se evalúa como True; en la segunda sentencia, 5 no es igual a 6, así que obtenemos False. El operador == es uno de los operadores de comparación; los otros son: x != y que significa x no es igual a y x > y que significa x es mayor que y x < y que significa x es menor que y x >= y que significa x es mayor o igual que y x <= y que significa x es menor o igual que y Ejercicios 5.2.1 Teclea en Phyton las siguientes comparaciones y di si responde True (verdadero) o False (falso). Piensa si tiene sentido la respuesta. 1. 5 != 8 2. 5 > 8 3. 5 < 8 4. 5 >= 8 5. 5 <= 8 5.3. Operadores lógicos Hay tres operadores lógicos: and, or y not. La semántica (significado) de estos operadores es similar a sus significados en inglés: “y” para and “o” para or y “no” para not. Por ejemplo: 1. x >0 and x <10 es verdadero sólo si x es mayor que 0 y menor que 10. 2. n %2 == 0 or n %3 == 0 es verdadero si cualquiera de las condiciones es verdadera, o sea, si el número n es divisible por 2 o por 3.
  19. 19. 5 Condicionales y recursividad 19 3. El operador not niega una expresión booleana, de forma que not(x > y) es cierto si (x > y) es falso, o sea, si x es menor o igual que y. Ejercicios 5.3.1 Asigna a la variable a el valor de 5, a la variable b el valor de 7 y a la variable c el valor de 9 y calcula el valor de vardad de las siguientes expresiones. Piensa si tiene sentido la respuesta. 1. a<b and b<c 2. a<b or b>c 3. not (a<b or b>c) 4. not (a<b) or b>c 5.4. Ejecución condicional Para escribir programas útiles, casi siempre necesitamos la capacidad de comprobar ciertas condiciones y cambiar el comportamiento del programa en consonancia. Las sentencias condicionales nos dan esta capacidad. La forma más sencilla es la sentencia if: if x > 0: print x, "es positivo" La expresión booleana tras el if (si condicional) se llama condición. Si es verdadera, entonces la sentencia print indentada se ejecuta. Si la condición no es verdadera, la sentencia print indentada no se ejecuta. Una segunda forma de la sentencia if es la ejecución alternativa, en la que hay dos posibilidades, y la condición determina cuál de ellas se ejecuta. Para ello se utiliza la sentencia else (traducido por “si no” o “en caso contrario”). La sintaxis tiene este aspecto: if x %2 == 0: # Entra en el condional si x es par. print x, "es par" else: # Entra si x es impar. print x, "es impar" Si el resto cuando se divide x entre 2 es cero, entonces sabemos que x es par, y este programa muestra un mensaje a tal efecto. Si la condición es falsa, se ejecuta el segundo lote de sentencias. Puesto que la condición debe ser verdadera o falsa, se ejecutará exactamente una de las dos alternativas.
  20. 20. 5 Condicionales y recursividad 20 Ejercicios 5.4.1 Escribe esta función en Phyton: def valorPositivo(x): if x > 0: # Entra en el condicional si x>0 print x, "es positivo" Ejecuta la función para varios valores de x tanto positivos como nega- tivos. 5.4.2 Modifica la función anterior utilizando else para construir una función llamado positivo_negativo que diga si un valor x es positivo o es negativo. Utiliza el comodín # para añadir comentarios a las partes del programa que te ayuden a comprender mejor como funciona. Ejecuta la función para varios valores de x tanto positivos como negativos para comprobar que funciona bien la función. 5.4.3 Construye una función llamada imprimeParidad que diga si un nú- mero x es par o impar. Ayuda: utiliza la condición x %2 == 0. Utiliza el comodín # para añadir comentarios a las partes del programa que te ayuden a comprender mejor como funciona. Ejecuta la función pa- ra varios valores de x tanto pares como impares para comprobar que funciona bien la función. 5.5. Condiciones encadenadas A veces nos encontraremos con que hay más de dos posibilidades y ne- cesitamos más de dos ramas. Una forma de expresar tal computación es un condicional encadenado: if x < y: print x, "es menor que", y elif x > y: print x, "es mayor que", y else: print x, "y", y, "son iguales" elif es una abreviatura de ”else if” (traducido por “si no si”). De nuevo, sólo se ejecutará una rama. No hay límite al número de sentencias elif, pero sólo se permite una sentencia else (que puede omitirse) y debe ser la ultima rama de la sentencia.
  21. 21. 5 Condicionales y recursividad 21 Hay que notar que es importante darse cuenta de que incluso si es cierta más de una condición, sólo se ejecutará la primera rama verdadera. Ejercicios 5.5.1 Escribe la siguiente función que utiliza las funciones que has escrito antes: def eleccion(x,y): if x==1: positivo_negativo(y) elif x==2: imprimeParidad(y) else: print “La eleción no es adecuada.” Explica que es lo que hace la función y coméntala con el comodín # para añadir comentarios a las partes del programa. 5.5.2 Escribe una función llamada divisible_2_3_5 que dado un valor x nos diga si es divisible para 2 o para 3 o para 5 y en caso de que no lo sea, que imprima por pantalla el mensaje “El número no es divisible para 2, para 3 ni para 5”. 5.6. La sentencia return La sentencia return permite terminar la ejecución de una función antes de alcanzar su final. Una razón para usarla es detectar una condición de error: import math def imprimeRaizCuadrada(x): if x < 0: print "Solo números positivos, por favor." return result = math.sqrt(x) print "La raíz de x es", result La función imprimeRaizCuadrada toma un parámetro llamado x. Lo pri- mero que hace es comprobar si x es menor que cero, en cuyo caso muestra un mensaje de error ya que no se puede calcular la raíz cuadrada de un número negativo y luego usa return para salir de la función. El flujo de la ejecución vuelve inmediatamente al llamante y no se ejecutan las líneas restantes de
  22. 22. 5 Condicionales y recursividad 22 la función. Recuerda que para usar una función del módulo math tienes que importarla. La sentencia return también puede usarse para devolver valores desde la función: def suma(x,y): return x + y print “La suma de 3 y 5 es”, suma(3, 5) Como puedes ver si ejecutas el guión, el efecto del return es sustituir la llamada de la función por el valor que la sentencia indica. Así, en el ejemplo anterior, suma(3, 5) es sustituido por 3 + 5, es decir, por 8. Ejercicios 5.6.1 Escribe una función llámada divisible_2_3_5_modif que haga lo mis- mo que la función del ejercicio 5.5.2 pero que salga de él utilizando return en el caso de que el número x dado no sea un entero. Ayu- da: utiliza el condicional (type(x)==float or type(x)==str) o bien (type(x)!=int). ¿Qué hacen estos dos condicionales? 5.6.2 Crea una función divide(n,m) que retorne el valor True si m divide a n y el valor False si m no divide a n. 5.7. Recursividad Ya hemos realizado funciones dentro de otras funciones, pero es posible también que una función se llame a si misma, esto se llama recursividad. Puede no resultar evidente por qué es bueno esto, pero viene a resultar una de las cosas más interesantes y curiosas que puede hacer un programa, además de aumentar mucho su potencialidad. Teclea por ejemplo la siguiente función: def cuenta_atras(n): if n == 0: print "Despegando!" else: print n cuenta_atras(n-1)
  23. 23. 5 Condicionales y recursividad 23 El programa espera que su parámetro, n, sea un entero positivo. Si el parámetro n es cero, muestra la palabra “Despegando!”. En otro caso, muestra n y luego se llama a si misma pasándole como argumento n-1. Ejercicios 5.7.1 Haz una descripción de lo que hace Python si tecleamos >‌>‌> cuenta_atras(3) 5.7.2 Razona qué es lo que ocurrirá al ejecutar esta función: def recurre(): recurre() 5.7.3 En los ejercicios de la sección 4.5 definimos funciones que nos inserta- ban líneas en blanco, pero cada vez que queríamos más líneas en blanco teníamos que crear una nueva función. Vamos a hacer una función que nos insertará el número de líneas que queramos utilizando la recurren- cia. Teclea esta función: def nLineas(n): if n > 0: print nLineas(n-1) 1. Haz una descripción de lo que hace Python cuando tecleas >‌>‌> nLineas(3) 2. ¿Qué ocurriría en el programa anterior si en la última línea susti- tuimos nLineas(n-1) por nLineas(n+1)? 5.7.4 Haz una función llamada paralelas_100(n) que sea recursiva y que dibuje n lineas parlalelas de logitud 100 con la tortuga. Para ello usa el diseño del programa nLineas(n) y modifica para que la parte que inserta un salto de línea ahora dibuje con la tortuga una línea. 5.7.5 Modifica el progama anterior por uno llamado paralelas(n,m) que dibuje n lineas parlalelas de logitud m donde la longitud es dada al programa por un número cualquiera. 5.7.6 Observa el guión siguiente:
  24. 24. 6 Iteración. La sentencia while 24 import turtle t = turtle.Pen() def dibuja(lado,angulo): t.forward(lado) t.right(angulo) dibuja(lado,angulo) dibuja(70,30) Ejecútalo y observa el resultado. Sustituye ahora dibuja(70,30)por dibuja(100,160)y ejecútalo de nuevo. ¿Sabrías explicar el porqué de la diferencia? ¿Para qué valores se dibuja un polígono? ¿Y una estrella? ¿Puedes adivinar cuántas puntas tendrá antes de dibujarla? 5.7.7 Escribe un guión que, usando una función circunferencia(r)dibuje una circunferencia de radio 70. Escribe un segundo guión que use esta función para que, recursivamente, dibuje circunferencias desplazadas una cierta cantidad. Observa el resultado, modifica tus funciones y realiza tus propios diseños. 5.7.8 Escribe un guión que dibuje recursivamente cuadrados cada vez más grandes y unos dentro de otros. Ayuda: usa los métodos up() y down() para que la tortuga deje de dibujar o continúe dibujando, según te con- venga. 6. Iteración. La sentencia while Una de las tareas para las que los computadores se usan con frecuencia es la automatización de tareas repetitivas. Repetir tareas similares o idénticas es algo que los computadores hacen bien y las personas no hacen tan bien. Hemos visto dos programas en la sección 5.7, nLineas y cuenta_atras, que usan la recursividad para llevar a cabo la repetición, que también se llama iteración. Por ser la iteración tan habitual, Python proporciona como len- guaje varias características que la hacen más fácil. La primera característica que vamos a considerar es la sentencia while (se traduce por “mientras” en castellano). Teclea cuenta_atras_iter con una sentencia while: def cuenta_atras_iter(n): while n > 0: print n
  25. 25. 6 Iteración. La sentencia while 25 n = n-1 print "Despegando!" Si comparas con la función de la sección 5.7 hemos eliminado la llamada recursiva por lo que no es recursiva. Lo que está a la derecha de la sentencia while se repetirá mientras n sea mayor que cero. Mientras esto ocurra, se continuará mostrando el valor de n y después se restará 1 al valor de n. Cuando n sea cero se dejará de repetir la parte situada a la derecha de while y se seguirá con la siguiente instrucción que muestra la palabra “Despegando!”. Lo que nos produce la sentencia while se llama bucle porque llegado a una instrucción que tenga el mismo sangrado que while se repite otra vez las instrucciones situadas a la derecha de la sentencia while. El cuerpo del bucle debe cambiar el valor de una o más variables de manera que, llegado el momento, la condición planteada en while sea falsa y el bucle termine. En caso contrario, el bucle se repetirá para siempre, que es lo que se llama bucle infinito. Ejercicios. 6.1 Reescribe la función nLineas de la sección 5.7 utilizando iteración en lugar de recursividad. Llámala nLines_iter. 6.2 Reescribe la función paralelas de la sección 5.7 utilizando iteración en lugar de recursividad. Llámala paralelas_iter. 6.3 Vamos a crear una función test_primo(n) que nos diga si un número n es primo o no (Nota: Esta función no vale para valores de n muy grandes pues es ineficaz para estos valores). Para ello sigue los pasos que se te dan: 1. Inicicializa una variable m con el valor 2. 2. Haz un bucle while que se ejecute siempre que se cumpla la si- guiente condición: divide(n,m)==0 (recuerda que la función divide la creaste en el ejercicio 5.6.2 de la sección 5.6). Dentro del bucle tendrás que aumentar el valor de m en 1 cada vez que se ejecute (!Para que no tengamos un bucle infinito!). 3. Al salir del bucle while crea un condicional que nos diga si el número n es primo y en caso de no serlo que nos diga el divisor más pequeño que tiene.
  26. 26. 7 Cadenas 26 4. Dado que es muy ineficaz el algoritmo, ¿se te ocurre cómo mejo- rarlo? 7. Cadenas 7.1. Operador corchete Teclea el siguiente código: >‌>‌> fruta = "banana" >‌>‌> letra = fruta[0] >‌>‌> print letra Observarás que Python devuelve como valor de letra el valor b, es decir, para Python la letra b ocupa el lugar 0 de la palabra banana. Teclea ahora >‌>‌> letra = fruta[1] >‌>‌> print letra Observarás que Python devuelve como valor de letra el valor a, es decir, para Python la primera letra a ocupa el lugar 1 de la palabra banana. Si repites esto con fruta[2], fruta[3], fruta[4],... obtendrás cada una de las letras que contiene la palabra banana. Ejercicios 7.1.1 Si tecleas >‌>‌> saludo = "Hola y adiós" >‌>‌> letra = saludo[4] ¿qué valor tiene letra? 7.2. Longitud La funci´ len devuelve el número de caracteres de una cadena: ón >‌>‌> fruta = "banana" >‌>‌> len(fruta) 6 Luego banana tiene efectivamente 6 carácteres pero si tecleamos >‌>‌> fruta[6]
  27. 27. 7 Cadenas 27 obtendrás un error pues según la sección anterior Python comienza a numerar las letras desde 0 y por tanto la última a de banana ocupa el lugar 5. Ejercicios 7.2.1 Teclea >‌>‌> longitud = len(fruta) >‌>‌> print fruta[longitud] ¿Qué obtienes como respuesta de Python? 7.2.2 Teclea >‌>‌> longitud = len(fruta) >‌>‌> print fruta[longitud-1] ¿Qué obtienes como respuesta de Python? ¿Por qué ahora no hay error? 7.2.3 Teclea el siguiente código: def deletreo1(palabra): indice = 0 while indice < len(palabra): letra = palabra[indice] print letra indice = indice + 1 ¿Qué es lo que hace la función? 7.2.4 Escribe una función llamada deletreo2(palabra)que tome una ca- dena como argumento y entregue las letras en orden inverso, una por línea. 7.3. Porciones de cadenas Llamamos porción a un segmento de una cadena. La selección de una porción es similar a la selección de un carácter. Teclea: >‌>‌> nombres = "Pedro, Pablo, y María" >‌>‌> print nombres[0:5] Pedro >‌>‌> print nombres[7:12] Pablo >‌>‌> print nombres[15:20]
  28. 28. 8 Recorrido y el bucle for 28 María En este caso se imprime el fragmento que va desde el primer índice hasta el último. Si omites el primer índice (antes de los dos puntos), la porción comienza al principio de la cadena. Si omites el segundo índice, la porción llega al final de la cadena. Así: >‌>‌> nombres[:3] ’Ped’ >‌>‌> nombres[3:] ’ro, Pablo, y María’ Ejercicios 7.3.1 ¿Qué obtienes con nombres[:]? 7.3.2 ¿Qué hace la siguiente función? def encuentra(cad, carac): indice = 0 while indice < len(cad): if cad[indice] == carac: return indice indice = indice + 1 return -1 7.3.3 Modifica la función anterior por una nueva llamada encuentra(cad, carac, ind) para que acepte un tercer parámetro ind, que será el índice de la cadena donde deberá empezar a a buscar. 8. Recorrido y el bucle for En los ejercicios 7.2 y 7.2 de la sección 7.2 y en los ejercicios 7.3 y 7.3 de la sección 7.3 hemos visto como usar un índice para recorrer un conjunto de valores dados por una cadena. Es tan habitual usar un índice para recorrer un conjunto de valores que Python facilita una sintaxis alternativa más simple: el bucle for. Teclea el siguiente código: def deletreo3(palabra): for car in palabra:
  29. 29. 8 Recorrido y el bucle for 29 print car Cada vez que recorremos el bucle, se asigna a la variable car el siguien- te carácter de la cadena palabra. El bucle continúa hasta que no quedan caracteres en palabra. Otro ejemplo de uso es que puedes utilizar todo el potencial de Python para hacer tus dibujos, por ejemplo si tecleas: >‌>‌> t.reset() >‌>‌> for x in range(4): t.forward(50) t.left(90) Crearás un cuadrado pero sin la necesidad de indicarle a la tortuga que adelante y gire cuatro veces sino utilizando un bucle for que hace más corta la programación del cuadrado. Ejercicios 8.1 ¿Qué valor tiene cuenta al finalizar el siguiente fragmento de código? fruta = "banana" cuenta = 0 for car in fruta: if car == “a”: cuenta = cuenta + 1 print cuenta 8.2 Realiza una función llamada cuentaLetras que generalice el fragmento de código anterior y que acepte cualquier cadena y cualquier letra como parámetros. 8.3 Dibuja un triángulo equilátero de lado 50 con tu tortuga. Utiliza un bucle for para ello. 8.4 Haz dos funciones triangulo(n) y cuadrado(n) que dibujen triángu- los y cuadrados cuyos lados sean de longitud n y que utilicen bucles for. 8.5 Dibuja un rectángulo de lados 300 y 100. Utiliza un bucle for. 8.6 Realiza una función llamada rectangulo(n,m) que dibuje un rectán- gulo de longitud de alto n y de longitud ancho m utilizando un bucle for.
  30. 30. 9 Listas 30 8.7 Generaliza las funciones del ejercicio 8 para hacer funciones hexagono(n), octogono(n), nonagono(n), decagono(n) que creen los polígonos regula- res de 6, 8, 9 y 10 lados de lado con longitud n. 8.8 Observando los programas anteriores crea una función poligonoRegular(m,n) que dibuje un polígono regular de m lados de longitud n siempre que m sea divisor de 360. En caso de que no se cumpla esta condición haz que el programa retorne con un mensaje de error. 8.9 ¿Puedes dibujar un círculo con el programa anterior? ¿Con que orden? 9. Listas Una lista es un conjunto ordenado de valores, en el cual cada valor va identificado por un índice. Las listas son similares a las cadenas de texto (strings), que son conjuntos ordenados de caracteres, excepto en que los ele- mentos de una lista pueden ser de cualquier tipo. Hay varias maneras de crear una nueva lista; la más sencilla es encerrar sus elementos entre corchetes: >‌>‌> [10, 20, 30, 40] >‌>‌> ["spam", "el´stico", "golondrina"] El primer ejemplo es una lista de cuatro enteros. El segundo es una lista de tres cadenas de texto. Los elementos de una lista no tienen por qué ser del mismo e tipo. La siguiente lista contiene una cadena, un número con decimales y un entero, y, maravilla de las maravillas, otra lista: ["hola", 2.0, 5, [10, 20]] Un tipo de listas muy comunes son las listas que contienen números en- teros consecutivos. Python proporciona una manera sencilla de crearlas: >‌>‌> range(1,5) [1, 2, 3, 4] La función range toma dos argumentos y devuelve una lista que contiene todos los enteros entre el primero y el segundo, ¡incluyendo el primero pero no el segundo! Hay dos formas alternativas para range. Con un solo argumento, crea una lista que empieza desde 0: >‌>‌> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  31. 31. 9 Listas 31 Si hay un tercer argumento, especificará el espacio entre dos valores su- cesivos; a esto se le llama paso (step). Este ejemplo cuenta de 1 a 10 de dos en dos (con pasos de 2). >‌>‌> range(1, 10, 2) [1, 3, 5, 7, 9] Para terminar, hay una lista especial que no contiene elementos. Se la llama lista vacía y se representa []. La sintaxis para acceder a los elementos de una lista es la misma que para acceder a los caracteres de una cadena: el operador corchetes []. La expresión dentro de los corchetes especifica el índice. Recuerda que los índices siempre comienzan en cero. Teclea el siguiente código y observa lo que hace: >‌>‌> numeros=[17, 123] >‌>‌> print numeros[0] 17 >‌>‌> numeros[1] = 5 >‌>‌> numeros [17,5] Como ves el segundo elemento de numeros, que era 123, ahora es 5. Además se puede usar como índice cualquier expresión entera. Como por ejemplo: >‌>‌> numeros[3-2] 5 >‌>‌> numeros[-1] 5 >‌>‌> numeros[-2] 17 Como ves un entero negativo hace que le índice cuente desde el final al principio. Por último recordemos una serie de funciones que ya hemos visto con cadenas y que también funcionan con listas: 1. La función len, que ya hemos visto en la sección 7.2 con cadenas, toma una lista y devuelve su tamaño. 2. El bucle for, que ya hemos visto en la sección 8 con cadenas, funciona igual utilizando listas: for VARIABLE in LISTA:
  32. 32. 10 Dibujar con la tortuga. 32 CUERPO DEL BUCLE Esta sentencia es equivalente a: i=0 while i < len(LISTA): VARIABLE = LISTA[i] CUERPO DEL BUCLE i=i+1 El bucle for es más conciso y elegante porque podemos eliminar la variable de bucle, i. Ejercicios 9.1 Completa los puntos suspensivos del siguiente código para que imprima los elementos de la lista jinetes. jinetes = ["guerra", "hambre", "peste", "muerte"] i = ... while i < ...: print jinetes[...] i = ... 9.2 Haz una función llamada imprimeLista(lista) que generalice la an- terior función, es decir, que imprima en pantalla los elementos de lista. 9.3 ¿Qué es lo que hace la siguiente función? def imprimeNumero(n): for numero in range(n): if numero % 2 == 0: print numero 9.4 Modifica la función anterior para que imprima los múltiplos de un nú- mero m menores que n, llámala multiplos(m,n). 9.5 Modifica la función imprimeLista(lista) cambiando el bucle while por un bucle for y que haga lo mismo. Llámala imprimeListaFor(lista). 10. Dibujar con la tortuga. Con todo lo aprendido hasta ahora puedes hacer los ejercicios que se te proponen.
  33. 33. 10 Dibujar con la tortuga. 33 Fig. 1: Una casa con tu tortuga Fig. 2: Un pueblo de 3 casas con tu tortuga Ejercicios. 10.1 Haz una función llamada casa(n) que dibuje una casa como la de la figura 1 a partir de un cuadrado y un triángulo equilátero de lados con longitud n (¡utiliza tus programas anteriores!). 10.2 Haz una función llamada pueblo(m,n,d) que dibuje un pueblo de m casas como la del ejercicio anterior todas de lado n y distancia entre las casas d. Para ello tendrás primero que crear una función llamada hueco(d) que cree un hueco de distancia d (¡recuerda de las funciones up() y down()!). El aspecto que tendría, por ejemplo, pueblo(3,50,50) sería el mostrado en la figura 2. 10.3 Utilizando llamadas a funciones creadas por ti antes, haz una función llamada torre(n,m) que realice el dibujo de una torre como la de la figura 3 donde n es el alto del rectángulo y m es el ancho del rectángulo y el lado del triángulo equilátero.
  34. 34. 10 Dibujar con la tortuga. 34 Fig. 3: Una torre con tu tortuga Fig. 4: Un castillo con tu tortuga 10.4 Utilizando llamadas a funciones creadas por ti antes, haz una función llamada castillo(n,m) que dibuje un castillo como el de la figura 4. Donde las bases de las dos torres y de la casa son de anchura m y la altura de las torres n.

×