Iniciación a python

34
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

description

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

Transcript of Iniciación a python

Page 1: Iniciación a python

Programar con Python (v. 1.0)

Este texto es una adaptación para 4º de la ESO del IES Pirámidede varios textos. En sus primeros nueve capítulos se ha utilizado el textoAprenda a Pensar Como un Programador con Python de AllenDowney, Jeffrey Elkner y Chris Meyers, publicado por Green Tea PressWellesley, Massachusetts y traducido por Miguel Angel Vilella, Angel Arnal,Iván Juanes, Litza Amurrio, Efrain Andia y César Ballardini. Las partes sobrela tortuga se utiliza el libro Snake Wrangling for Kids, Learning toProgram with Python por Jason R. Briggs y de la adaptación del textoBienvenido al Mundo de la Tortuga del Logo por Daniel Rodríguezy Alas para la Mente por Horacio C. Reggini. Además los ejercicios sehan adaptado al nivel de los alumnos.

Índice

1. Una primera aproximación. . . . . . . . . . . . . . . . . . . . 22. ¿Qué es un programa? . . . . . . . . . . . . . . . . . . . . . . 33. Variables, expresiones y sentencias . . . . . . . . . . . . . . . 43.1. Valores y tipos . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.3. Nombres de variables y palabras reservadas . . . . . . . . . . . 53.4. Sentencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.5. Operadores y expresiones . . . . . . . . . . . . . . . . . . . . . 83.6. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.1. Definición y primeros ejemplos . . . . . . . . . . . . . . . . . . 104.2. La tortuga en Phyton . . . . . . . . . . . . . . . . . . . . . . . 104.3. Funciones de conversión de tipos . . . . . . . . . . . . . . . . . 124.4. Funciones matemáticas . . . . . . . . . . . . . . . . . . . . . . 134.5. Añadir funciones nuevas . . . . . . . . . . . . . . . . . . . . . 14

1

Page 2: Iniciación a python

1 Una primera aproximación. 2

4.6. Flujo de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . 164.7. Las variables y los parámetros son locales . . . . . . . . . . . . 175. Condicionales y recursividad . . . . . . . . . . . . . . . . . . . 175.1. El operador módulo . . . . . . . . . . . . . . . . . . . . . . . . 175.2. Expresiones booleanas . . . . . . . . . . . . . . . . . . . . . . 175.3. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . 185.4. Ejecución condicional . . . . . . . . . . . . . . . . . . . . . . . 195.5. Condiciones encadenadas . . . . . . . . . . . . . . . . . . . . 205.6. La sentencia return . . . . . . . . . . . . . . . . . . . . . . . 215.7. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226. Iteración. La sentencia while . . . . . . . . . . . . . . . . . . 247. Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267.1. Operador corchete . . . . . . . . . . . . . . . . . . . . . . . . 267.2. Longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267.3. Porciones de cadenas . . . . . . . . . . . . . . . . . . . . . . . 278. Recorrido y el bucle for . . . . . . . . . . . . . . . . . . . . . 289. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3010. Dibujar con la tortuga. . . . . . . . . . . . . . . . . . . . . . . 32

1. Una primera aproximación.

El lenguaje de programación que aprenderás es Python. Python es unejemplar de un lenguaje de alto nivel.

También existen lenguajes de bajo nivel, a los que también se califica comolenguajes 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 altonivel.

Aun así las ventajas son enormes. En primer lugar, la programación enlenguajes de alto nivel es mucho más fácil; escribir programas en un lenguajede 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, loque significa que pueden ejecutarse en tipos diferentes de computadores sinmodificación alguna o con pocas modificaciones. Los programas escritos enlenguajes de bajo nivel sólo pueden ejecutarse en un tipo de computador ydeben reescribirse para ejecutarlos en otro.

Page 3: Iniciación a python

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 programade alto nivel y lo ejecuta, lo que significa que lleva a cabo lo que indica elprograma. 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 programasde Python se ejecutan por medio de un intérprete. Por tanto Pthon es unlenguaje 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 queaparece verás que además de información sobre el intérprete. Ademásaparecen los símbolos >‌>‌>. En este lugar es donde tienes que teclearlas intrucciones para ser interpretadas por IDLE. Prueba a teclear lasiguiente 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 odeterminar las raíces de un polinomio, también buscar y reemplazar el textode 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 elresultado. Felicidades este ha sido tu primer programa.

Page 4: Iniciación a python

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, poreso hay distintos tipos de valores. Por ejemplo:

El valor 2 es un entero cuyo tipo se denota por int (viene del inglésinteger, entero),

El valor “Hola, mundo” es una cadena de caracteres cuyo tipo se denotapor str (viene del inglés string, cadena)

El valor 3, 1216 es un número decimal cuyo tipo es float (viene deque el número se considera de coma flotante).

Si no estás seguro del tipo que tiene un determinado valor, puedes preguntarloal 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 entrecomillas como las cadenas. Pregunta a Python por su tipo. ¿Qué tipotienen?

3.1.2 Encuentra tres valores, distintos a los mostrados en este texto, quetengan los tipos int, str y float. Comprueba con Python que tusvalores son de los tipos pedidos.

Page 5: Iniciación a python

3 Variables, expresiones y sentencias 5

3.2. Variables

Una de las características más potentes de los lenguajes de programaciónes la capacidad de manipular variables. Una variable es un nombre que hacereferencia 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 valorstring (cadena) "Hola":

>‌>‌> mensaje = "Hola"Elegimos el nombre n para el valor int (entero) 17:>‌>‌> n = 17Elegimos el nombre pi para el valor float (coma flotante) 3, 14159:>‌>‌> pi = 3.14159La sentencia print también funciona con variables pero en este caso nos

imprimirá su valor:>‌>‌> print mensaje"Hola">‌>‌> print n17>‌>‌> print pi3.14159

Ejercicios

3.2.1 Las variables también tienen tipo. Pregunta a Python por el tipo delas variables definidas anteriormente.

3.2.2 ¿Ves alguna relación entre el tipo de la variable y el tipo del valor alque se refiere?

3.3. Nombres de variables y palabras reservadas

Como norma general, no es adecuado tomar cualquier nombre para lasvariables. 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. Puedenestar 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

Page 6: Iniciación a python

3 Variables, expresiones y sentencias 6

lo haces, recuerda que la distinción es importante: Bruno y bruno son dosvariables 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 desintaxis.

>‌>‌> 76trombones = "gran desfile"SyntaxError: invalid syntax>‌>‌> mas$ = 1000000SyntaxError: invalid syntax>‌>‌> class = "Curso de Programación 101"SyntaxError: invalid syntax76trombones 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 maloclass? Resulta que class es una de las palabras reservadas de Python. Ellenguaje usa las palabras reservadas para definir sus reglas y estructura, y nopueden usarse como nombres de variables. Estas palabras reservadas estánen inglés y son 28 por lo que si tus variables están escritas en castellano notendrá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 dePython. Hemos visto dos tipos de sentencias: print y la asignación medianteel símbolo =. Cuando escribes una sentencia en la línea de comandos (observaque el inérprete IDLE las muestra de color), Python la ejecuta y muestra elresultado, si lo hay. Por ejemplo: el resultado de una sentencia print es unvalor que muestra el texto o números que queremos pero las sentencias deasignación = no entregan ningún resultado.

Compruebalo con:>‌>‌> print pi3.14159

Page 7: Iniciación a python

3 Variables, expresiones y sentencias 7

>‌>‌> n = 17Como 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 aescribir todo otra vez. Esto se soluciona por medio de un guión (o tambiénscript en inglés). Un guión es una secuencia de sentencias una debajo de otralas el cual se puede dar a Python para que las ejecute todas de vez. En estecaso los resultados aparecen en el intérprete de uno en uno tal como se vanejecutando las sentencias.

Ejercicios.

3.4.1 En IDLE ves a “File −→New”. Aparecerá una nueva ventana que escomo un editor de textos pero con propiedades especiales como quecolorea las sentencias de Python y otrás más que descubrirás conformelo uses. Escribe este guión en Python:

print 1x = 2print x

¿Cuántas sentencias hay?Una vez escrito ves a “Run −→Run module”. Se te pedirá que lo guardesantes 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 producealguna salida?

nota importante: cada vez que modifiques un guión no essuficiente con guardarlo para que python sepa que lo hasmodificado, tienes que hacer de nuevo “Run −→Run module”.

3.4.2 Escribe este guión:173.2"Hola, mundo"1 + 1

Page 8: Iniciación a python

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 signode 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 unoperando, se sustituye con su valor antes de realizar la operación.

Ejecuta estas órdenes:>‌>‌>5+2;5*3;2**37158>‌>‌>a = 5 ; b = 2 ; c=3>‌>‌> a+b; a*c; b**c;7158Como 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 ; (puntoy coma).

La suma, resta, multiplicación y exponenciación hacen lo esperado, perola división te puede sorprender. La operación que sigue tiene un resultadoinesperado:

>‌>‌> minuto = 59>‌>‌> minuto/600El 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 cabouna a división de enteros. Cuando ambos operandos son enteros, el resultadoha de ser también un entero y por convención, la división de enteros siemprese redondea a la baja, incluso en casos como estos en los que el siguienteentero 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

Page 9: Iniciación a python

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 · (50414− 23)2

3.5.2 Da a la variable a el valor 2345 y a la variable b el valor 125 y calcula conPython la suma, la resta, la multiplicación y la división pero utilizandolas 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 frecuenciaes 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 llamancomentarios y se marcan con el símbolo #.

Page 10: Iniciación a python

4 Funciones 10

Ejercicios

3.6.1 Teclea:>‌>‌> print “En un lugar de la mancha” # de cuyo nombre no quieroacordarme...¿A partir de dónde no se muestra el texto? ¿Qué es lo que hace que nose 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 argumentoentre paréntesis. Ya hemos visto una función: type, la cual muestra el tipode 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)134882108Cada 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 delvalor 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 queimportarlo con la orden import.

En Python una tortuga es algo similar a lo que tienes en mente de lo quees una tortuga en la realidad, solo que es una pequeña flecha negra que semueve lentamente sobre la pantalla y que dibuja su movimiento si tu quieresque lo haga.

Page 11: Iniciación a python

4 Funciones 11

Primero debemos decir a Python que queremos usar la tortuga importán-dola:

>‌>‌> import turtlePara 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ásfá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 susparé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 deturtle.

Ahora podemos decirle que se mueva hacia adelante con forward(n) quees 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 latortuga para que no pinte con la función up() y que lo baje con la funcióndown(). Por ejemplo, haz el siguiente guión:

t.backward(100)

Page 12: Iniciación a python

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 tutortuga. Guárdalo con el nombre “ejercicio_4_2_1”.

4.2.2 Haz un guión que dibuje dos rectas perpendiculares de longitud 75 quese 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, oda un error si no es posible.

>‌>‌> cadena_numerica="32">‌> int(cadena_numerica)32>‌>‌>int("Hola")ValueError: invalid literal for int(): Holaint también convierte valores de coma flotante a enteros, pero recuerda

que siempre redondea hacia abajo:>‌>‌> int(3.99999)3La 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.14159Finalmente, está la función str, que convierte a tipo cadena str:

Page 13: Iniciación a python

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 elmismo número en matemáticas? ¿Y en Python?

4.3.2 Supón que queremos calcular qué fracción de una hora ha transcurridoal pasar un cierto número de minutos. La expresión que calcularemoses: minutos/60.

1. Realiza este cálculo con Python suponiendo que han pasado 50minutos, es decir, teclea>‌>‌> minutos = 50>‌>‌> minutos/60¿Obtienes un resultado correcto? ¿Por qué obtiene este resultadoPython?

2. Para obtener un resultado correcto podemos hacer dos cosas:

a) En vez de hacer el cálculo dividiendo para 60, divide para60.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 apatadoanterior los cálculos?

4.4. Funciones matemáticas

Python dispone de un módulo matemático que proporciona la mayoría delas funciones matemáticas habituales. Recuerda que un módulo es un archivoque contiene una colección de funciones agrupadas juntas. Antes de poderusar las funciones de un módulo, tenemos que importarlo:

>‌>‌>import mathPara 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 aesto se le llama notación de punto:

Page 14: Iniciación a python

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 y18 cm. Tendrás que utilizar la raíz cuadrada cuya función en Pythones math.sqrt().

4.4.2 Calcula el valor del seno, del coseno y de la tangente de 45º. Para ellocalcula el ángulo en radianes sabiendo que 360º son 2π radianes (elvalor matemático π en Python se escribe math.pi) y con ese valor enradianes calcula los valores trigonométricos pedidos.

4.5. Añadir funciones nuevas

Hasta ahora sólo hemos usado las funciones que vienen incluidas conPython, pero también es posible añadir nuevas funciones. La creación denuevas funciones para resolver tus problemas particulares es una de las cosasmá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 hastaahora las ha definido Python por nosotros. Para definirlas nosotros tenemossiempre que escribirlas de esta forma:

def NOMBRE( LISTA DE PARAMETROS ):SENTENCIAS

Donde NOMBRE es un nombre inventado que desees para tu función, conla excepción de que no puedes usar las palabras reservadas de Python. LaLISTA 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

Page 15: Iniciación a python

4 Funciones 15

lo hace IDLE por ti). En los ejemplos de este texto se usará una indentaciónde cuatro espacios (el estándar de Python).

Ejercicios

En estos ejercicios vas a hacer guiones con idle. recuerdaque 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? Ejecutala función. ¿Qué hace?

4.5.2 Es posible llamar a otra función dentro de una defición de función (¡perosiempre acordándote de indentar las sentencias dentro de la definiciónde 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 tresLineaspara imprimir nueve líneas en blanco.

4.5.4 Utilizando las funciones anteriores, escribe una función llamada onceLineaspara 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 nombredel parámetro es indiferente, puedes tomar el que quieras siempre querespetes las reglas de la sección 3.3):def imprimeDoble(paso):

print paso, pasoEjecuta la función con tres tipos de variables distintas: la variablecadena ’Jamón’, la variable entera 5 y la variable de coma flotante

Page 16: Iniciación a python

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 yrepite 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 sondos rectas perpendiculares de longitud cualquiera que se corten en elcentro).

4.5.9 Crea una función llamada ejercicio_4_5_8(longitud,distancia)que dibuje dos rectas parlalelas de longitud cualquiera y distanciadaspor una distancia cualquiera.

4.6. Flujo de ejecución

Como has observado en los ejercicios anteriores es posible que dentro deuna función se llame a otra función la cual puede a su vez llamar a otrafunción. Para que nuestros programas funcionen correctamente tenemos queasegurarnos de definir cada función antes de que otra función la pueda llamar.

Page 17: Iniciación a python

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 creaesas variables y son destruidas por lo que no se puede acceder de nuevo aellas e incluso podrían ser utilizadas en otra función.

5. Condicionales y recursividad

Antes de ver las funciones condicionales y recursivas necesitamos conoceralgunos operadores.

5.1. El operador módulo

En Python, el operador de módulo es el signo de tanto por ciento% y nosda el resto de una división. Observa cómo calcular el cociente y el resto deuna división de enteros:

>‌>‌> cociente = 7 / 3>‌>‌> print cociente2>‌>‌> resto = 7 % 3>‌>‌> print resto1Así 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 escierta tiene el valor True (verdadero), y una expresión que es falsa tiene

Page 18: Iniciación a python

5 Condicionales y recursividad 18

el valor False (falso). El operador == compara dos valores y entrega unaexpresión booleana en función de si es verdadero o falso:

>‌>‌> 5 == 5True>‌>‌> 5 == 6FalseEn 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í queobtenemos False.

El operador == es uno de los operadores de comparación; los otros son:x != y que significa x no es igual a yx > y que significa x es mayor que yx < y que significa x es menor que yx >= y que significa x es mayor o igual que yx <= 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 condicioneses verdadera, o sea, si el número n es divisible por 2 o por 3.

Page 19: Iniciación a python

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 ala variable c el valor de 9 y calcula el valor de vardad de las siguientesexpresiones. 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 decomprobar ciertas condiciones y cambiar el comportamiento del programa enconsonancia. Las sentencias condicionales nos dan esta capacidad. La formamá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 esverdadera, entonces la sentencia print indentada se ejecuta. Si la condiciónno es verdadera, la sentencia print indentada no se ejecuta.

Una segunda forma de la sentencia if es la ejecución alternativa, en la quehay dos posibilidades, y la condición determina cuál de ellas se ejecuta. Paraello 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 xes par, y este programa muestra un mensaje a tal efecto. Si la condición esfalsa, se ejecuta el segundo lote de sentencias. Puesto que la condición debeser verdadera o falsa, se ejecutará exactamente una de las dos alternativas.

Page 20: Iniciación a python

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>0print 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ónllamado positivo_negativo que diga si un valor x es positivo o esnegativo. Utiliza el comodín # para añadir comentarios a las partes delprograma que te ayuden a comprender mejor como funciona. Ejecutala función para varios valores de x tanto positivos como negativos paracomprobar 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. Utilizael comodín # para añadir comentarios a las partes del programa quete ayuden a comprender mejor como funciona. Ejecuta la función pa-ra varios valores de x tanto pares como impares para comprobar quefunciona 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 uncondicional 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, perosólo se permite una sentencia else (que puede omitirse) y debe ser la ultimarama de la sentencia.

Page 21: Iniciación a python

5 Condicionales y recursividad 21

Hay que notar que es importante darse cuenta de que incluso si es ciertamá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 escritoantes: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 nosdiga 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 divisiblepara 2, para 3 ni para 5”.

5.6. La sentencia return

La sentencia return permite terminar la ejecución de una función antesde alcanzar su final. Una razón para usarla es detectar una condición de error:

import mathdef 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 unmensaje de error ya que no se puede calcular la raíz cuadrada de un númeronegativo y luego usa return para salir de la función. El flujo de la ejecuciónvuelve inmediatamente al llamante y no se ejecutan las líneas restantes de

Page 22: Iniciación a python

5 Condicionales y recursividad 22

la función. Recuerda que para usar una función del módulo math tienes queimportarla.

La sentencia return también puede usarse para devolver valores desdela 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 ejemploanterior, 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 utilizandoreturn 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 an y el valor False si m no divide a n.

5.7. Recursividad

Ya hemos realizado funciones dentro de otras funciones, pero es posibletambié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 unade las cosas más interesantes y curiosas que puede hacer un programa, ademásde aumentar mucho su potencialidad.

Teclea por ejemplo la siguiente función:def cuenta_atras(n):

if n == 0:print "Despegando!"

else:print ncuenta_atras(n-1)

Page 23: Iniciación a python

5 Condicionales y recursividad 23

El programa espera que su parámetro, n, sea un entero positivo. Si elparámetro n es cero, muestra la palabra “Despegando!”. En otro caso, muestran 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 blancoteníamos que crear una nueva función. Vamos a hacer una función quenos insertará el número de líneas que queramos utilizando la recurren-cia. Teclea esta función:def nLineas(n):

if n > 0:printnLineas(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 quedibuje n lineas parlalelas de logitud 100 con la tortuga. Para ello usael diseño del programa nLineas(n) y modifica para que la parte queinserta 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) quedibuje n lineas parlalelas de logitud m donde la longitud es dada alprograma por un número cualquiera.

5.7.6 Observa el guión siguiente:

Page 24: Iniciación a python

6 Iteración. La sentencia while 24

import turtlet = 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)pordibuja(100,160)y ejecútalo de nuevo. ¿Sabrías explicar el porqué dela 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)dibujeuna circunferencia de radio 70. Escribe un segundo guión que use estafunción para que, recursivamente, dibuje circunferencias desplazadasuna cierta cantidad. Observa el resultado, modifica tus funciones yrealiza tus propios diseños.

5.7.8 Escribe un guión que dibuje recursivamente cuadrados cada vez másgrandes 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 esla automatización de tareas repetitivas. Repetir tareas similares o idénticases 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, queusan la recursividad para llevar a cabo la repetición, que también se llamaiteració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ísticaque vamos a considerar es la sentencia while (se traduce por “mientras” encastellano).

Teclea cuenta_atras_iter con una sentencia while:def cuenta_atras_iter(n):

while n > 0:print n

Page 25: Iniciación a python

6 Iteración. La sentencia while 25

n = n-1print "Despegando!"

Si comparas con la función de la sección 5.7 hemos eliminado la llamadarecursiva por lo que no es recursiva. Lo que está a la derecha de la sentenciawhile se repetirá mientras n sea mayor que cero. Mientras esto ocurra, secontinuará 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 yse seguirá con la siguiente instrucción que muestra la palabra “Despegando!”.

Lo que nos produce la sentencia while se llama bucle porque llegado auna instrucción que tenga el mismo sangrado que while se repite otra vezlas instrucciones situadas a la derecha de la sentencia while. El cuerpo delbucle debe cambiar el valor de una o más variables de manera que, llegado elmomento, la condición planteada en while sea falsa y el bucle termine. Encaso contrario, el bucle se repetirá para siempre, que es lo que se llama bucleinfinito.

Ejercicios.

6.1 Reescribe la función nLineas de la sección 5.7 utilizando iteración enlugar de recursividad. Llámala nLines_iter.

6.2 Reescribe la función paralelas de la sección 5.7 utilizando iteraciónen lugar de recursividad. Llámala paralelas_iter.

6.3 Vamos a crear una función test_primo(n) que nos diga si un númeron es primo o no (Nota: Esta función no vale para valores de n muygrandes pues es ineficaz para estos valores). Para ello sigue los pasosque 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 dividela creaste en el ejercicio 5.6.2 de la sección 5.6). Dentro delbucle tendrás que aumentar el valor de m en 1 cada vez que seejecute (!Para que no tengamos un bucle infinito!).

3. Al salir del bucle while crea un condicional que nos diga si elnúmero n es primo y en caso de no serlo que nos diga el divisormás pequeño que tiene.

Page 26: Iniciación a python

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 letraObservará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 letraObservará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ó́n len devuelve el número de caracteres de una cadena:>‌>‌> fruta = "banana">‌>‌> len(fruta)6Luego banana tiene efectivamente 6 carácteres pero si tecleamos>‌>‌> fruta[6]

Page 27: Iniciación a python

7 Cadenas 27

obtendrás un error pues según la sección anterior Python comienza anumerar las letras desde 0 y por tanto la última a de banana ocupa el lugar5.

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 = 0while indice < len(palabra):

letra = palabra[indice]print letraindice = 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 porlínea.

7.3. Porciones de cadenas

Llamamos porción a un segmento de una cadena. La selección de unaporció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]

Page 28: Iniciación a python

8 Recorrido y el bucle for 28

MaríaEn 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 finalde 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 = 0while indice < len(cad):

if cad[indice] == carac:return indiceindice = 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 dela sección 7.3 hemos visto como usar un índice para recorrer un conjunto devalores dados por una cadena. Es tan habitual usar un índice para recorrer unconjunto 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:

Page 29: Iniciación a python

8 Recorrido y el bucle for 29

print carCada 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 quedancaracteres en palabra.

Otro ejemplo de uso es que puedes utilizar todo el potencial de Pythonpara 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 queadelante y gire cuatro veces sino utilizando un bucle for que hace más cortala programación del cuadrado.

Ejercicios

8.1 ¿Qué valor tiene cuenta al finalizar el siguiente fragmento de código?fruta = "banana"cuenta = 0for car in fruta:

if car == “a”:cuenta = cuenta + 1

print cuenta

8.2 Realiza una función llamada cuentaLetras que generalice el fragmentode código anterior y que acepte cualquier cadena y cualquier letra comoparámetros.

8.3 Dibuja un triángulo equilátero de lado 50 con tu tortuga. Utiliza unbucle 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 buclesfor.

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 buclefor.

Page 30: Iniciación a python

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 quem sea divisor de 360. En caso de que no se cumpla esta condición hazque 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 vaidentificado 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 encerrarsus 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é serdel mismo e tipo. La siguiente lista contiene una cadena, un número condecimales 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 perono el segundo!

Hay dos formas alternativas para range. Con un solo argumento, crea unalista que empieza desde 0:

>‌>‌> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Page 31: Iniciación a python

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 dosen 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óndentro de los corchetes especifica el índice. Recuerda que los índices siemprecomienzan 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]17Como 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, tomauna lista y devuelve su tamaño.

2. El bucle for, que ya hemos visto en la sección 8 con cadenas, funcionaigual utilizando listas:for VARIABLE in LISTA:

Page 32: Iniciación a python

10 Dibujar con la tortuga. 32

CUERPO DEL BUCLEEsta sentencia es equivalente a:i = 0while i < len(LISTA):

VARIABLE = LISTA[i]CUERPO DEL BUCLEi = i + 1

El bucle for es más conciso y elegante porque podemos eliminar lavariable de bucle, i.

Ejercicios

9.1 Completa los puntos suspensivos del siguiente código para que imprimalos 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 whilepor 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 teproponen.

Page 33: Iniciación a python

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 lafigura 1 a partir de un cuadrado y un triángulo equilátero de lados conlongitud n (¡utiliza tus programas anteriores!).

10.2 Haz una función llamada pueblo(m,n,d) que dibuje un pueblo dem casas como la del ejercicio anterior todas de lado n y distanciaentre las casas d. Para ello tendrás primero que crear una funciónllamada hueco(d) que cree un hueco de distancia d (¡recuerda delas 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ónllamada torre(n,m) que realice el dibujo de una torre como la de lafigura 3 donde n es el alto del rectángulo y m es el ancho del rectánguloy el lado del triángulo equilátero.

Page 34: Iniciación a python

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ónllamada 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 laaltura de las torres n.