Sei sulla pagina 1di 34

Programar con Python (v. 1.

0)

Este texto es una adaptacin para 4 de la ESO del IES Pirmide de varios textos. En sus primeros nueve captulos se ha utilizado el texto Aprenda a Pensar Como un Programador con Python de Allen Downey, Jerey Elkner y Chris Meyers, publicado por Green Tea Press Wellesley, Massachusetts y traducido por Miguel Angel Vilella, Angel Arnal, Ivn Juanes, Litza Amurrio, Efrain Andia y Csar 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 adaptacin del texto Bienvenido al Mundo de la Tortuga del Logo por Daniel Rodrguez y Alas para la Mente por Horacio C. Reggini. Adems los ejercicios se han adaptado al nivel de los alumnos.

ndice
1. 2. 3. 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 4. 4.1. 4.2. 4.3. 4.4. 4.5. Una primera aproximacin. . . . . . . . . Qu es un programa? . . . . . . . . . . . Variables, expresiones y sentencias . . . . Valores y tipos . . . . . . . . . . . . . . . Variables . . . . . . . . . . . . . . . . . . . Nombres de variables y palabras reservadas Sentencias . . . . . . . . . . . . . . . . . . Operadores y expresiones . . . . . . . . . . Comentarios . . . . . . . . . . . . . . . . . Funciones . . . . . . . . . . . . . . . . . . Denicin y primeros ejemplos . . . . . . . La tortuga en Phyton . . . . . . . . . . . . Funciones de conversin de tipos . . . . . . Funciones matemticas . . . . . . . . . . . Aadir funciones nuevas . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 4 4 5 5 6 8 9 10 10 10 12 13 14

1 Una primera aproximacin.

4.6. 4.7. 5. 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 6. 7. 7.1. 7.2. 7.3. 8. 9. 10.

Flujo de ejecucin . . . . . . . . . Las variables y los parmetros son Condicionales y recursividad . . . El operador mdulo . . . . . . . . Expresiones booleanas . . . . . . Operadores lgicos . . . . . . . . Ejecucin condicional . . . . . . . Condiciones encadenadas . . . . La sentencia return . . . . . . . Recursividad . . . . . . . . . . . . Iteracin. La sentencia while . . Cadenas . . . . . . . . . . . . . . Operador corchete . . . . . . . . Longitud . . . . . . . . . . . . . Porciones de cadenas . . . . . . . Recorrido y el bucle for . . . . . Listas . . . . . . . . . . . . . . . Dibujar con la tortuga. . . . . . .

. . . . . locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

16 17 17 17 17 18 19 20 21 22 24 26 26 26 27 28 30 32

1.

Una primera aproximacin.

El lenguaje de programacin que aprenders es Python. Python es un ejemplar de un lenguaje de alto nivel. Tambin existen lenguajes de bajo nivel, a los que tambin se calica como lenguajes de mquina o lenguajes ensambladores. A propsito, los computadores slo ejecutan programas escritos en lenguajes de bajo nivel. Los programas de alto nivel tienen que traducirse antes de ejecutarse. Esta traduccin lleva tiempo, lo cual es una pequea desventaja de los lenguajes de alto nivel. Aun as las ventajas son enormes. En primer lugar, la programacin en lenguajes de alto nivel es mucho ms fcil; escribir programas en un lenguaje de alto nivel toma menos tiempo, los programas son ms cortos y ms fciles de leer. En segundo lugar, los lenguajes de alto nivel son portables, lo que signica que pueden ejecutarse en tipos diferentes de computadores sin modicacin alguna o con pocas modicaciones. Los programas escritos en lenguajes de bajo nivel slo pueden ejecutarse en un tipo de computador y deben reescribirse para ejecutarlos en otro.

2 Qu es un programa?

Hay dos tipos de programas que traducen lenguajes de alto nivel a lenguajes de bajo nivel: intrpretes y compiladores. Un intrprete lee un programa de alto nivel y lo ejecuta, lo que signica que lleva a cabo lo que indica el programa. Traduce el programa poco a poco, leyendo y ejecutando cada comando. 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 intrprete. 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 AplicacionesProgramacin IDLE. En la pantalla que aparece vers que adems de informacin sobre el intrprete. Adems aparecen los smbolos >>>. En este lugar es donde tienes que teclear las intrucciones para ser interpretadas por IDLE. Prueba a teclear la siguiente instruccin: >>> print 1 + 1 Qu obtienes?

2.

Qu es un programa?

Un programa es una secuencia de instrucciones que especican cmo ejecutar una determinada computacin. La computacin puede ser de muy distintos tipos: algo matemtico, como solucionar un sistema de ecuaciones o determinar las races de un polinomio, tambin buscar y reemplazar el texto de un documento, insertar un grco, ...

Ejercicios
2.1 El primer programa. Tradicionalmente el primer programa en un lenguaje nuevo se llama Hola, mundo porque slo muestra esas palabras. Teclea en Python: >>> print "Hola, mundo" Las comillas sealan el comienzo y el nal del valor; no aparecen en el resultado. Felicidades este ha sido tu primer programa.

3 Variables, expresiones y sentencias

2.2 Haz un programa en el que aparezca el texto Adis, mundo.

3. 3.1.

Variables, expresiones y sentencias Valores y tipos

En programacin 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 ingls integer, entero), El valor Hola, mundo es una cadena de caracteres cuyo tipo se denota por str (viene del ingls string, cadena) El valor 3, 1216 es un nmero decimal cuyo tipo es float (viene de que el nmero se considera de coma otante). Si no ests seguro del tipo que tiene un determinado valor, puedes preguntarlo al intrprete 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 nmeros, pero estn 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.

3 Variables, expresiones y sentencias

3.2.

Variables

Una de las caractersticas ms potentes de los lenguajes de programacin es la capacidad de manipular variables. Una variable es un nombre que hace referencia a un valor. Una variable se dene asignando eligiendo un nombre, seguido del smbolo = 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 otante) 3, 14159: >>> pi = 3.14159 La sentencia print tambin 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 tambin tienen tipo. Pregunta a Python por el tipo de las variables denidas anteriormente. 3.2.2 Ves alguna relacin entre el tipo de la variable y el tipo del valor al que se reere?

3.3.

Nombres de variables y palabras reservadas

Como norma general, no es adecuado tomar cualquier nombre para las variables. Los programadores eligen nombres signicativos para sus variables, esto permite saber de forma rpida para qu se usa la variable. Los nombres de las variables pueden tener una longitud arbitraria. Pueden estar formados por letras y nmeros, pero deben comenzar con una letra. Aunque es aceptable usar maysculas, por convencin no se suele hacer. Si

3 Variables, expresiones y sentencias

lo haces, recuerda que la distincin es importante: Bruno y bruno son dos variables diferentes. El guin bajo _ tambin es legal y se utiliza a menudo para separar nombres con mltiples palabras, como mi_nombre o precio_del_cafe_colombiano. Si intentas darle a una variable un nombre ilegal, obtendrs un error de sintaxis. >>> 76trombones = "gran desfile" SyntaxError: invalid syntax >>> mas$ = 1000000 SyntaxError: invalid syntax >>> class = "Curso de Programacin 101" SyntaxError: invalid syntax 76trombones es ilegal porque no comienza por una letra. mas$ es ilegal porque contiene un carcter ilegal, el signo del dlar. Pero qu tiene de malo class? Resulta que class es una de las palabras reservadas de Python. El lenguaje usa las palabras reservadas para denir sus reglas y estructura, y no pueden usarse como nombres de variables. Estas palabras reservadas estn en ingls y son 28 por lo que si tus variables estn escritas en castellano no tendrs problemas.

Ejercicios
3.3.1 Cmo asignaras en Python a la variable mi_numero el nmero 123456789? 3.3.2 Crees que en Python puedes tomar como variable la palabra print?

3.4.

Sentencias

Una sentencia es una instruccin que puede ejecutar el intrprete de Python. Hemos visto dos tipos de sentencias: print y la asignacin mediante el smbolo =. Cuando escribes una sentencia en la lnea de comandos (observa que el inrprete 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 nmeros que queremos pero las sentencias de asignacin = no entregan ningn resultado. Compruebalo con: >>> print pi 3.14159

3 Variables, expresiones y sentencias

>>> n = 17 Como ves el primero si muestra un resultado pero el segundo no. Hasta ahora slo has podido dar una sentencia por lnea en el intrprete IDLE. Esto es muy poco til. Adems si te equivocas tienes que volver a escribir todo otra vez. Esto se soluciona por medio de un guin (o tambin script en ingls). Un guin 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 intrprete 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 otrs ms que descubrirs conforme lo uses. Escribe este guin en Python: print 1 x = 2 print x Cuntas 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 nmeros vienen de que ests en la seccin 3.4 y es el ejercicio 1) y dile dnde quieres guardarlo. Una vez hecho esto se ejecutar. Qu aparece en la pantalla de IDLE? La sentencia de asignacin produce alguna salida? nota importante: cada vez que modifiques un guin 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 guin: 17 3.2 "Hola, mundo" 1 + 1

3 Variables, expresiones y sentencias

Ejectalo guardndolo como ejercicio3_4_2 Muestra los valores Python? Modica el guin para que Python muestre los valores.

3.5.

Operadores y expresiones

Los smbolos +, , /, y el uso de los parntesis ( y ) para el agrupamiento, se usan de la misma forma que en matemticas. El asterisco es el signo de la multiplicacin y el doble asterisco el smbolo para exponenciacin (potencia). Cuando aparece el nombre de una variable en el lugar de un operando, se sustituye con su valor antes de realizar la operacin. 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 hara una calculadora pero puede hacer varias operaciones a la vez smplente separndolas por ; (punto y coma). La suma, resta, multiplicacin y exponenciacin hacen lo esperado, pero la divisin te puede sorprender. La operacin 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 divisin de enteros. Cuando ambos operandos son enteros, el resultado ha de ser tambin un entero y por convencin, la divisin de enteros siempre se redondea a la baja, incluso en casos como estos en los que el siguiente entero est muy prximo. Cuando aparece ms de un operador en una expresin, el orden de evaluacin depende de las reglas de precedencia. Python sigue las mismas reglas

3 Variables, expresiones y sentencias

de precedencia que las que has aprendido desde 1 de la ESO para tus operaciones matemticas.

Ejercicios
3.5.1 Evala las siguientes expresiones matemticas con la ayuda de Python:
3(93)+834 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 multiplicacin y la divisin pero utilizando las variables. 3.5.3 Tambin es posible hacer operaciones con variables de tipo str. Teclea: >>>fruta = " pltano " >>>color = " amarillo " >>>print fruta + color Qu obtienes? Qu es lo que hace la operacin + con las cadenas? 3.5.4 Teclea ahora: >>> print fruta*3 Qu obtienes? Qu es lo que hace la operacin * 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 tamao y complejidad, se vuelven ms difciles de leer. Los lenguajes formales son densos y con frecuencia es complicado observar un trozo de cdigo y averiguar lo que hace, o por qu lo hace. Por ello es una buena idea aadir notas a tu programa que expliquen, en un lenguaje natural, qu hace el programa. Estas notas se llaman comentarios y se marcan con el smbolo #.

4 Funciones

10

Ejercicios
3.6.1 Teclea: >>> print En un lugar de la mancha # de cuyo nombre no quiero acordarme... A partir de dnde no se muestra el texto? Qu es lo que hace que no se muestre parte del texto?

4. 4.1.

Funciones Denicin y primeros ejemplos

Una funcin en Python es una palabra reservada seguida de un argumento entre parntesis. Ya hemos visto una funcin: type, la cual muestra el tipo de una valor o variable que se sita entre parntesis. Por ejemplo: >>> type(32) <type str> Otro ejemplo ms: la funcin id toma como argumento un valor o una variable y devuelve un entero que acta como identicador 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 dnde 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 mdulo es un archivo que contiene una coleccin de funciones agrupadas juntas. Antes de poder usar las funciones de un mdulo, 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 pequea echa negra que se mueve lentamente sobre la pantalla y que dibuja su movimiento si tu quieres que lo haga.

4 Funciones

11

Primero debemos decir a Python que queremos usar la tortuga importndola: >>> import turtle Para llamar a una de las funciones del mdulo turtle, tenemos que especicar el nombre del mdulo y el nombre de la funcin que deseamos, separados por un punto. A esto se le llama notacin de punto. Ahora vamos a hacer que nos muestrela tortuga. Para usar la tortuga ms fcilmente y que sea ms fcil de manejar la llamamos t: >>> t = turtle.Pen() Vers aparecer nuestra tortuga que es ms parecida a una echa negra. Fjate que hemos utilizado una funcin turtle.Pen(). Esta funcin proviene del paquete importado turtle y se llama Pen(). Fjate que tiene sus parntesis aunque no hay nada dentro de ellos adems observa que para llamarla hemos tenido que decirle a Python que es una funcin del mdulo de turtle. Ahora podemos decirle que se mueva hacia adelante con forward(n) que es una funcin donde n es el nmero de pasos: >>> t.forward(50) Tambin le podemos decir que gire la cabeza a la izquierda con la funcin left(g) donde g es el nmero de grados a girar: >>> t.left(90) Ahora teclea las siguientes funciones que ya has aprendido tal y como se te dan en un guin: 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 pxeles de tu pantalla). Para borrar la pantalla y comenzar de nuevo utilizamos la funcin reset(): >>> t.reset() Otras rdenes son: ir hacia atrs backward(n) un nmero de pasos n, girar a la derecha right(g) un nmero de grados g, que levante el lpiz la tortuga para que no pinte con la funcin up() y que lo baje con la funcin down(). Por ejemplo, haz el siguiente guin: t.backward(100)

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, vers dos segmentos paralelos de longitud 100 pxeles.

Ejercicios
4.2.1 Haz un guin que dibuje un tringulo equiltero de lado 50 con tu tortuga. Gurdalo con el nombre ejercicio_4_2_1. 4.2.2 Haz un guin que dibuje dos rectas perpendiculares de longitud 75 que se corten en el centro. Gurdalo con el nombre ejercicio_4_2_2.

4.3.

Funciones de conversin de tipos

La funcin 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 tambin convierte valores de coma otante a enteros, pero recuerda que siempre redondea hacia abajo: >>> int(3.99999) 3 La funcin float convierte enteros y cadenas en nmeros en coma otante: >>> float(32) 32.0 >>> cadena_numerica="3.14159" >>> float(cadena_numerica) 3.14159 Finalmente, est la funcin str, que convierte a tipo cadena str:

4 Funciones

13

>>> str(32) 32 >>> str(3.14149) 3.14149

Ejercicios
4.3.1 Convierte en coma otante el nmero entero 1. Qu obtienes? Es el mismo nmero en matemticas? Y en Python? 4.3.2 Supn que queremos calcular qu fraccin de una hora ha transcurrido al pasar un cierto nmero de minutos. La expresin que calcularemos es: minutos/60. 1. Realiza este clculo 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 clculo dividiendo para 60, divide para 60.0 b) Convierte la variable minutos a tipo float (coma otante) y repite el clculo dividiendo para 60. c) Por qu crees que Python realiza correctamente en el apatado anterior los clculos?

4.4.

Funciones matemticas

Python dispone de un mdulo matemtico que proporciona la mayora de las funciones matemticas habituales. Recuerda que un mdulo es un archivo que contiene una coleccin de funciones agrupadas juntas. Antes de poder usar las funciones de un mdulo, tenemos que importarlo: >>>import math Para llamar a una de las funciones, tenemos que especicar el nombre del mdulo y el nombre de la funcin, separados por un punto. Recordar que a esto se le llama notacin de punto:

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 trigonomtricas (sin, cos, tan, etc.) en Python toman sus argumentos en radianes.

Ejercicios
4.4.1 Calcula la hipotenusa de un tringulo rectngulo de catetos 14 cm y 18 cm. Tendrs que utilizar la raz cuadrada cuya funcin 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 matemtico en Python se escribe math.pi) y con ese valor en radianes calcula los valores trigonomtricos pedidos.

4.5.

Aadir funciones nuevas

Hasta ahora slo hemos usado las funciones que vienen incluidas con Python, pero tambin es posible aadir nuevas funciones. La creacin de nuevas funciones para resolver tus problemas particulares es una de las cosas ms utiles de los lenguajes de programacin de propsito general. En programacin, funcin es una secuencia de instrucciones con nombre, que lleva a cabo la operacin deseada. Las funciones que hemos usado hasta ahora las ha denido Python por nosotros. Para denirlas nosotros tenemos siempre que escribirlas de esta forma: def NOMBRE( LISTA DE PARAMETROS ): SENTENCIAS Donde NOMBRE es un nombre inventado que desees para tu funcin, con la excepcin de que no puedes usar las palabras reservadas de Python. La LISTA DE PARAMETROS especica qu informacin, en caso de haberla, se ha de proporcionar para usar la funcin nueva. Despus vendrn las SENTENCIAS. Puede haber cualquier nmero de sentencias dentro de la funcin, pero tienen que estar indentadas (separadas) desde el margen izquierdo (esto

4 Funciones

15

lo hace IDLE por ti). En los ejemplos de este texto se usar una indentacin de cuatro espacios (el estndar de Python).

Ejercicios
En estos ejercicios vas a hacer guiones con idle. recuerda que cada vez que hagas o modifiques un guin deves hacer Run Run module para que python sepa que ha sido modificado. 4.5.1 Escribe esta funcin: def nueva_linea(): print Cmo se llama? Tiene parmetros? Qu instrucciones tiene? Ejecuta la funcin. Qu hace? 4.5.2 Es posible llamar a otra funcin dentro de una decin de funcin (pero siempre acordndote de indentar las sentencias dentro de la denicin de funcin!). Por ejemplo escribe esta otra funcin que no tiene parmetros: def tresLineas(): nueva_linea() nueva_linea() nueva_linea() Ejecuta la funcin. Qu hace? 4.5.3 Escribe una funcin llamada nueveLineas que use la funcin tresLineas para imprimir nueve lneas en blanco. 4.5.4 Utilizando las funciones anteriores, escribe una funcin llamada onceLineas para imprimir once lneas en blanco. La funcin debe usar el menor cdigo posible. 4.5.4 Teclea esta funcin que tiene un parmetro llamado paso (el nombre del parmetro es indiferente, puedes tomar el que quieras siempre que respetes las reglas de la seccin 3.3): def imprimeDoble(paso): print paso, paso Ejecuta la funcin con tres tipos de variables distintas: la variable cadena Jamn, la variable entera 5 y la variable de coma otante

4 Funciones

16

3.14159 Qu obtienes? Puedes ejecutar la funcin independientemente 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(Jamn*4) Qu obtienes? 2. Antepone la funcin interna type a cada variable del ejercicio anterio y repite el ejercico. Por ejempo: >> imprimeDoble(type(Jamn)) 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 guin del ejercicio 4.2.1 crea una funcin llamada ejercicio_4_5_6(lado) que haga un tringulo equiltero de lado cualquiera. 4.5.7 A partir del guin del ejercicio 4.2.2 crea una funcin 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 funcin 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 ejecucin

Como has observado en los ejercicios anteriores es posible que dentro de una funcin se llame a otra funcin la cual puede a su vez llamar a otra funcin. Para que nuestros programas funcionen correctamente tenemos que asegurarnos de denir cada funcin antes de que otra funcin la pueda llamar.

5 Condicionales y recursividad

17

4.7.

Las variables y los parmetros son locales

Al denir funciones hemos usado variables cuyos nombres han sido tomados por nosotros de forma arbitraria. Al llamar a la funcin, Python crea esas variables y son destruidas por lo que no se puede acceder de nuevo a ellas e incluso podran ser utilizadas en otra funcin.

5.

Condicionales y recursividad

Antes de ver las funciones condicionales y recursivas necesitamos conocer algunos operadores.

5.1.

El operador mdulo

En Python, el operador de mdulo es el signo de tanto por ciento % y nos da el resto de una divisin. Observa cmo calcular el cociente y el resto de una divisin 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 divisin de 1234 entre 209. 5.1.2 Utiliza Phyton para saber si 11 divide al nmero 3036. 5.1.3 Utilizando la divisin por potencias de 10 y el operador % haz que Phyton guarde en una variable las dos ltimas cifras del nmero 123456789.

5.2.

Expresiones booleanas

Una expresin booleana es una expresin que es cierta o falsa. En Python (como en la mayora de lenguajes de programacin), una expresin que es cierta tiene el valor True (verdadero), y una expresin que es falsa tiene

5 Condicionales y recursividad

18

el valor False (falso). El operador == compara dos valores y entrega una expresin booleana en funcin de si es verdadero o falso: >>> 5 == 5 True >>> 5 == 6 False En la primera sentencia, los dos operandos son iguales, as que la expresin se evala como True; en la segunda sentencia, 5 no es igual a 6, as que obtenemos False. El operador == es uno de los operadores de comparacin; 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 lgicos

Hay tres operadores lgicos: and, or y not. La semntica (signicado) de estos operadores es similar a sus signicados en ingls: y para and o para or y no para not. Por ejemplo: 1. x >0 and x <10 es verdadero slo 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 nmero n es divisible por 2 o por 3.

5 Condicionales y recursividad

19

3. El operador not niega una expresin 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.

Ejecucin 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 ms sencilla es la sentencia if: if x > 0: print x, "es positivo" La expresin booleana tras el if (si condicional) se llama condicin. Si es verdadera, entonces la sentencia print indentada se ejecuta. Si la condicin no es verdadera, la sentencia print indentada no se ejecuta. Una segunda forma de la sentencia if es la ejecucin alternativa, en la que hay dos posibilidades, y la condicin determina cul 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 condicin es falsa, se ejecuta el segundo lote de sentencias. Puesto que la condicin debe ser verdadera o falsa, se ejecutar exactamente una de las dos alternativas.

5 Condicionales y recursividad

20

Ejercicios
5.4.1 Escribe esta funcin en Phyton: def valorPositivo(x): if x > 0: # Entra en el condicional si x>0 print x, "es positivo" Ejecuta la funcin para varios valores de x tanto positivos como negativos. 5.4.2 Modica la funcin anterior utilizando else para construir una funcin llamado positivo_negativo que diga si un valor x es positivo o es negativo. Utiliza el comodn # para aadir comentarios a las partes del programa que te ayuden a comprender mejor como funciona. Ejecuta la funcin para varios valores de x tanto positivos como negativos para comprobar que funciona bien la funcin. 5.4.3 Construye una funcin llamada imprimeParidad que diga si un nmero x es par o impar. Ayuda: utiliza la condicin x %2 == 0. Utiliza el comodn # para aadir comentarios a las partes del programa que te ayuden a comprender mejor como funciona. Ejecuta la funcin para varios valores de x tanto pares como impares para comprobar que funciona bien la funcin.

5.5.

Condiciones encadenadas

A veces nos encontraremos con que hay ms de dos posibilidades y necesitamos ms de dos ramas. Una forma de expresar tal computacin 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, slo se ejecutar una rama. No hay lmite al nmero de sentencias elif, pero slo se permite una sentencia else (que puede omitirse) y debe ser la ultima rama de la sentencia.

5 Condicionales y recursividad

21

Hay que notar que es importante darse cuenta de que incluso si es cierta ms de una condicin, slo se ejecutar la primera rama verdadera.

Ejercicios
5.5.1 Escribe la siguiente funcin 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 elecin no es adecuada. Explica que es lo que hace la funcin y comntala con el comodn # para aadir comentarios a las partes del programa. 5.5.2 Escribe una funcin 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 nmero no es divisible para 2, para 3 ni para 5.

5.6.

La sentencia return

La sentencia return permite terminar la ejecucin de una funcin antes de alcanzar su nal. Una razn para usarla es detectar una condicin de error: import math def imprimeRaizCuadrada(x): if x < 0: print "Solo nmeros positivos, por favor." return result = math.sqrt(x) print "La raz de x es", result La funcin imprimeRaizCuadrada toma un parmetro llamado x. Lo primero 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 raz cuadrada de un nmero negativo y luego usa return para salir de la funcin. El ujo de la ejecucin vuelve inmediatamente al llamante y no se ejecutan las lneas restantes de

5 Condicionales y recursividad

22

la funcin. Recuerda que para usar una funcin del mdulo math tienes que importarla. La sentencia return tambin puede usarse para devolver valores desde la funcin: def suma(x,y): return x + y print La suma de 3 y 5 es, suma(3, 5) Como puedes ver si ejecutas el guin, el efecto del return es sustituir la llamada de la funcin 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 funcin llmada divisible_2_3_5_modif que haga lo mismo que la funcin del ejercicio 5.5.2 pero que salga de l utilizando return en el caso de que el nmero x dado no sea un entero. Ayuda: 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 funcin 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 tambin que una funcin 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 ms interesantes y curiosas que puede hacer un programa, adems de aumentar mucho su potencialidad. Teclea por ejemplo la siguiente funcin: def cuenta_atras(n): if n == 0: print "Despegando!" else: print n cuenta_atras(n-1)

5 Condicionales y recursividad

23

El programa espera que su parmetro, n, sea un entero positivo. Si el parmetro n es cero, muestra la palabra Despegando!. En otro caso, muestra n y luego se llama a si misma pasndole como argumento n-1.

Ejercicios
5.7.1 Haz una descripcin de lo que hace Python si tecleamos >>> cuenta_atras(3) 5.7.2 Razona qu es lo que ocurrir al ejecutar esta funcin: def recurre(): recurre() 5.7.3 En los ejercicios de la seccin 4.5 denimos funciones que nos insertaban lneas en blanco, pero cada vez que queramos ms lneas en blanco tenamos que crear una nueva funcin. Vamos a hacer una funcin que nos insertar el nmero de lneas que queramos utilizando la recurrencia. Teclea esta funcin: def nLineas(n): if n > 0: print nLineas(n-1) 1. Haz una descripcin de lo que hace Python cuando tecleas >>> nLineas(3) 2. Qu ocurrira en el programa anterior si en la ltima lnea sustituimos nLineas(n-1) por nLineas(n+1)? 5.7.4 Haz una funcin llamada paralelas_100(n) que sea recursiva y que dibuje n lineas parlalelas de logitud 100 con la tortuga. Para ello usa el diseo del programa nLineas(n) y modica para que la parte que inserta un salto de lnea ahora dibuje con la tortuga una lnea. 5.7.5 Modica 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 nmero cualquiera. 5.7.6 Observa el guin siguiente:

6 Iteracin. 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) Ejectalo y observa el resultado. Sustituye ahora dibuja(70,30)por dibuja(100,160)y ejectalo de nuevo. Sabras explicar el porqu de la diferencia? Para qu valores se dibuja un polgono? Y una estrella? Puedes adivinar cuntas puntas tendr antes de dibujarla? 5.7.7 Escribe un guin que, usando una funcin circunferencia(r)dibuje una circunferencia de radio 70. Escribe un segundo guin que use esta funcin para que, recursivamente, dibuje circunferencias desplazadas una cierta cantidad. Observa el resultado, modica tus funciones y realiza tus propios diseos. 5.7.8 Escribe un guin que dibuje recursivamente cuadrados cada vez ms grandes y unos dentro de otros. Ayuda: usa los mtodos up() y down() para que la tortuga deje de dibujar o contine dibujando, segn te convenga.

6.

Iteracin. La sentencia while

Una de las tareas para las que los computadores se usan con frecuencia es la automatizacin de tareas repetitivas. Repetir tareas similares o idnticas es algo que los computadores hacen bien y las personas no hacen tan bien. Hemos visto dos programas en la seccin 5.7, nLineas y cuenta_atras, que usan la recursividad para llevar a cabo la repeticin, que tambin se llama iteracin. Por ser la iteracin tan habitual, Python proporciona como lenguaje varias caractersticas que la hacen ms fcil. La primera caracterstica 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

6 Iteracin. La sentencia while

25

n = n-1 print "Despegando!" Si comparas con la funcin de la seccin 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 despus 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 instruccin que muestra la palabra Despegando!. Lo que nos produce la sentencia while se llama bucle porque llegado a una instruccin 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 ms variables de manera que, llegado el momento, la condicin 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 innito.

Ejercicios.
6.1 Reescribe la funcin nLineas de la seccin 5.7 utilizando iteracin en lugar de recursividad. Llmala nLines_iter. 6.2 Reescribe la funcin paralelas de la seccin 5.7 utilizando iteracin en lugar de recursividad. Llmala paralelas_iter. 6.3 Vamos a crear una funcin test_primo(n) que nos diga si un nmero n es primo o no (Nota: Esta funcin no vale para valores de n muy grandes pues es inecaz 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 siguiente condicin: divide(n,m)==0 (recuerda que la funcin divide la creaste en el ejercicio 5.6.2 de la seccin 5.6). Dentro del bucle tendrs que aumentar el valor de m en 1 cada vez que se ejecute (!Para que no tengamos un bucle innito!). 3. Al salir del bucle while crea un condicional que nos diga si el nmero n es primo y en caso de no serlo que nos diga el divisor ms pequeo que tiene.

7 Cadenas

26

4. Dado que es muy inecaz el algoritmo, se te ocurre cmo mejorarlo?

7. 7.1.

Cadenas Operador corchete

Teclea el siguiente cdigo: >>> fruta = "banana" >>> letra = fruta[0] >>> print letra Observars 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 Observars 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],... obtendrs cada una de las letras que contiene la palabra banana.

Ejercicios
7.1.1 Si tecleas >>> saludo = "Hola y adis" >>> letra = saludo[4] qu valor tiene letra?

7.2.

Longitud

La funci len devuelve el nmero de caracteres de una cadena: n >>> fruta = "banana" >>> len(fruta) 6 Luego banana tiene efectivamente 6 carcteres pero si tecleamos >>> fruta[6]

7 Cadenas

27

obtendrs un error pues segn la seccin 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 cdigo: def deletreo1(palabra): indice = 0 while indice < len(palabra): letra = palabra[indice] print letra indice = indice + 1 Qu es lo que hace la funcin? 7.2.4 Escribe una funcin llamada deletreo2(palabra)que tome una cadena como argumento y entregue las letras en orden inverso, una por lnea.

7.3.

Porciones de cadenas

Llamamos porcin a un segmento de una cadena. La seleccin de una porcin es similar a la seleccin de un carcter. Teclea: >>> nombres = "Pedro, Pablo, y Mara" >>> print nombres[0:5] Pedro >>> print nombres[7:12] Pablo >>> print nombres[15:20]

8 Recorrido y el bucle for

28

Mara 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 porcin comienza al principio de la cadena. Si omites el segundo ndice, la porcin llega al nal de la cadena. As: >>> nombres[:3] Ped >>> nombres[3:] ro, Pablo, y Mara

Ejercicios
7.3.1 Qu obtienes con nombres[:]? 7.3.2 Qu hace la siguiente funcin? def encuentra(cad, carac): indice = 0 while indice < len(cad): if cad[indice] == carac: return indice indice = indice + 1 return -1 7.3.3 Modica la funcin anterior por una nueva llamada encuentra(cad, carac, ind) para que acepte un tercer parmetro 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 seccin 7.2 y en los ejercicios 7.3 y 7.3 de la seccin 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 ms simple: el bucle for. Teclea el siguiente cdigo: def deletreo3(palabra): for car in palabra:

8 Recorrido y el bucle for

29

print car Cada vez que recorremos el bucle, se asigna a la variable car el siguiente carcter de la cadena palabra. El bucle contina 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) Crears un cuadrado pero sin la necesidad de indicarle a la tortuga que adelante y gire cuatro veces sino utilizando un bucle for que hace ms corta la programacin del cuadrado.

Ejercicios
8.1 Qu valor tiene cuenta al nalizar el siguiente fragmento de cdigo? fruta = "banana" cuenta = 0 for car in fruta: if car == a: cuenta = cuenta + 1 print cuenta 8.2 Realiza una funcin llamada cuentaLetras que generalice el fragmento de cdigo anterior y que acepte cualquier cadena y cualquier letra como parmetros. 8.3 Dibuja un tringulo equiltero de lado 50 con tu tortuga. Utiliza un bucle for para ello. 8.4 Haz dos funciones triangulo(n) y cuadrado(n) que dibujen tringulos y cuadrados cuyos lados sean de longitud n y que utilicen bucles for. 8.5 Dibuja un rectngulo de lados 300 y 100. Utiliza un bucle for. 8.6 Realiza una funcin llamada rectangulo(n,m) que dibuje un rectngulo de longitud de alto n y de longitud ancho m utilizando un bucle for.

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 polgonos regulares de 6, 8, 9 y 10 lados de lado con longitud n. 8.8 Observando los programas anteriores crea una funcin poligonoRegular(m,n) que dibuje un polgono regular de m lados de longitud n siempre que m sea divisor de 360. En caso de que no se cumpla esta condicin haz que el programa retorne con un mensaje de error. 8.9 Puedes dibujar un crculo con el programa anterior? Con que orden?

9.

Listas

Una lista es un conjunto ordenado de valores, en el cual cada valor va identicado por un ndice. Las listas son similares a las cadenas de texto (strings), que son conjuntos ordenados de caracteres, excepto en que los elementos de una lista pueden ser de cualquier tipo. Hay varias maneras de crear una nueva lista; la ms sencilla es encerrar sus elementos entre corchetes: >>> [10, 20, 30, 40] >>> ["spam", "elstico", "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 nmero 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 nmeros enteros consecutivos. Python proporciona una manera sencilla de crearlas: >>> range(1,5) [1, 2, 3, 4] La funcin 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]

9 Listas

31

Si hay un tercer argumento, especicar el espacio entre dos valores sucesivos; 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 vaca 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 expresin dentro de los corchetes especica el ndice. Recuerda que los ndices siempre comienzan en cero. Teclea el siguiente cdigo 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. Adems se puede usar como ndice cualquier expresin 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 nal al principio. Por ltimo recordemos una serie de funciones que ya hemos visto con cadenas y que tambin funcionan con listas: 1. La funcin len, que ya hemos visto en la seccin 7.2 con cadenas, toma una lista y devuelve su tamao. 2. El bucle for, que ya hemos visto en la seccin 8 con cadenas, funciona igual utilizando listas: for VARIABLE in LISTA:

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 ms conciso y elegante porque podemos eliminar la variable de bucle, i.

Ejercicios
9.1 Completa los puntos suspensivos del siguiente cdigo para que imprima los elementos de la lista jinetes. jinetes = ["guerra", "hambre", "peste", "muerte"] i = ... while i < ...: print jinetes[...] i = ... 9.2 Haz una funcin llamada imprimeLista(lista) que generalice la anterior funcin, es decir, que imprima en pantalla los elementos de lista. 9.3 Qu es lo que hace la siguiente funcin? def imprimeNumero(n): for numero in range(n): if numero % 2 == 0: print numero 9.4 Modica la funcin anterior para que imprima los mltiplos de un nmero m menores que n, llmala multiplos(m,n). 9.5 Modica la funcin imprimeLista(lista) cambiando el bucle while por un bucle for y que haga lo mismo. Llmala imprimeListaFor(lista).

10.

Dibujar con la tortuga.

Con todo lo aprendido hasta ahora puedes hacer los ejercicios que se te proponen.

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 funcin llamada casa(n) que dibuje una casa como la de la gura 1 a partir de un cuadrado y un tringulo equiltero de lados con longitud n (utiliza tus programas anteriores!). 10.2 Haz una funcin 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 tendrs primero que crear una funcin llamada hueco(d) que cree un hueco de distancia d (recuerda de las funciones up() y down()!). El aspecto que tendra, por ejemplo, pueblo(3,50,50) sera el mostrado en la gura 2. 10.3 Utilizando llamadas a funciones creadas por ti antes, haz una funcin llamada torre(n,m) que realice el dibujo de una torre como la de la gura 3 donde n es el alto del rectngulo y m es el ancho del rectngulo y el lado del tringulo equiltero.

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 funcin llamada castillo(n,m) que dibuje un castillo como el de la gura 4. Donde las bases de las dos torres y de la casa son de anchura m y la altura de las torres n.

Potrebbero piacerti anche