SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
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
1 Una primera aproximación.                                                                                 2


     4.6.   Flujo de ejecución . . . . . . . . .   . . . . .   .   .   .   .   .   .   .   .   .   .   .   16
     4.7.   Las variables y los parámetros son     locales .   .   .   .   .   .   .   .   .   .   .   .   17
     5.     Condicionales y recursividad . . .     . . . . .   .   .   .   .   .   .   .   .   .   .   .   17
     5.1.   El operador módulo . . . . . . . .     . . . . .   .   .   .   .   .   .   .   .   .   .   .   17
     5.2.   Expresiones booleanas . . . . . .      . . . . .   .   .   .   .   .   .   .   .   .   .   .   17
     5.3.   Operadores lógicos . . . . . . . .     . . . . .   .   .   .   .   .   .   .   .   .   .   .   18
     5.4.   Ejecución condicional . . . . . . .    . . . . .   .   .   .   .   .   .   .   .   .   .   .   19
     5.5.   Condiciones encadenadas . . . .        . . . . .   .   .   .   .   .   .   .   .   .   .   .   20
     5.6.   La sentencia return . . . . . . .      . . . . .   .   .   .   .   .   .   .   .   .   .   .   21
     5.7.   Recursividad . . . . . . . . . . . .   . . . . .   .   .   .   .   .   .   .   .   .   .   .   22
     6.     Iteración. La sentencia while . .      . . . . .   .   .   .   .   .   .   .   .   .   .   .   24
     7.     Cadenas . . . . . . . . . . . . . .    . . . . .   .   .   .   .   .   .   .   .   .   .   .   26
     7.1.   Operador corchete . . . . . . . .      . . . . .   .   .   .   .   .   .   .   .   .   .   .   26
     7.2.   Longitud . . . . . . . . . . . . .     . . . . .   .   .   .   .   .   .   .   .   .   .   .   26
     7.3.   Porciones de cadenas . . . . . . .     . . . . .   .   .   .   .   .   .   .   .   .   .   .   27
     8.     Recorrido y el bucle for . . . . .     . . . . .   .   .   .   .   .   .   .   .   .   .   .   28
     9.     Listas . . . . . . . . . . . . . . .   . . . . .   .   .   .   .   .   .   .   .   .   .   .   30
     10.    Dibujar con la tortuga. . . . . . .    . . . . .   .   .   .   .   .   .   .   .   .   .   .   32


1.     Una primera aproximación.
    El lenguaje de programación que aprenderás es Python. Python es un
ejemplar de un lenguaje de alto nivel.
    También existen lenguajes de bajo nivel, a los que también se califica como
lenguajes de máquina o lenguajes ensambladores. A propósito, los compu-
tadores sólo ejecutan programas escritos en lenguajes de bajo nivel. Los pro-
gramas de alto nivel tienen que traducirse antes de ejecutarse. Esta traduc-
ción lleva tiempo, lo cual es una pequeña desventaja de los lenguajes de alto
nivel.
    Aun así las ventajas son enormes. En primer lugar, la programación en
lenguajes de alto nivel es mucho más fácil; escribir programas en un lenguaje
de alto nivel toma menos tiempo, los programas son más cortos y más fá-
ciles de leer. En segundo lugar, los lenguajes de alto nivel son portables, lo
que significa que pueden ejecutarse en tipos diferentes de computadores sin
modificación alguna o con pocas modificaciones. Los programas escritos en
lenguajes de bajo nivel sólo pueden ejecutarse en un tipo de computador y
deben reescribirse para ejecutarlos en otro.
2 ¿Qué es un programa?                                                     3


    Hay dos tipos de programas que traducen lenguajes de alto nivel a lengua-
jes de bajo nivel: intérpretes y compiladores. Un intérprete lee un programa
de alto nivel y lo ejecuta, lo que significa que lleva a cabo lo que indica el
programa. Traduce el programa poco a poco, leyendo y ejecutando cada co-
mando. Un compilador lee el programa y lo traduce todo al mismo tiempo,
antes de ejecutar cualquiera de las instrucciones.
    Python se considera como lenguaje interpretado porque los programas
de Python se ejecutan por medio de un intérprete. Por tanto Pthon es un
lenguaje de alto nivel interpretado.

Ejercicios
 1.1 Busca tres ejemplos de lenguajes de alto nivel.

 1.2 Ves a “Aplicaciones−→Programación −→IDLE”. En la pantalla que
     aparece verás que además de información sobre el intérprete. Además
     aparecen los símbolos >‌>‌>. En este lugar es donde tienes que teclear
     las intrucciones para ser interpretadas por IDLE. Prueba a teclear la
     siguiente instrucción:
     >‌>‌> print 1 + 1
     ¿Qué obtienes?


2.   ¿Qué es un programa?
    Un programa es una secuencia de instrucciones que especifican cómo eje-
cutar una determinada computación. La computación puede ser de muy dis-
tintos tipos: algo matemático, como solucionar un sistema de ecuaciones o
determinar las raíces de un polinomio, también buscar y reemplazar el texto
de un documento, insertar un gráfico, ...

Ejercicios
 2.1 El primer programa. Tradicionalmente el primer programa en un len-
     guaje nuevo se llama “Hola, mundo” porque sólo muestra esas palabras.
     Teclea en Python:
     >‌>‌> print "Hola, mundo"
     Las comillas señalan el comienzo y el final del valor; no aparecen en el
     resultado. Felicidades este ha sido tu primer programa.
3 Variables, expresiones y sentencias                                       4


 2.2 Haz un programa en el que aparezca el texto Adiós, mundo.


3.     Variables, expresiones y sentencias

3.1.     Valores y tipos
   En programación no todos los valores son tratados de igual forma, por
eso hay distintos tipos de valores. Por ejemplo:

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

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

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

Si no estás seguro del tipo que tiene un determinado valor, puedes preguntarlo
al intérprete de Python.
    >‌>‌> type("Hola, mundo")
    <type ’str’>
    >‌>‌> type(17)
    <type ’int’>
    >‌>‌> type(3.1216)
    <type ’float’>

Ejercicios
3.1.1 Observa estos valores: "17" y "3.2". Parecen números, pero están entre
      comillas como las cadenas. Pregunta a Python por su tipo. ¿Qué tipo
      tienen?

3.1.2 Encuentra tres valores, distintos a los mostrados en este texto, que
      tengan los tipos int, str y float. Comprueba con Python que tus
      valores son de los tipos pedidos.
3 Variables, expresiones y sentencias                                       5


3.2.     Variables
    Una de las características más potentes de los lenguajes de programación
es la capacidad de manipular variables. Una variable es un nombre que hace
referencia a un valor.
    Una variable se define asignando eligiendo un nombre, seguido del símbolo
= y por último el valor. Por ejemplo, elegimos el nobre mensaje para el valor
string (cadena) "Hola":
    >‌>‌> mensaje = "Hola"
    Elegimos el nombre n para el valor int (entero) 17:
    >‌>‌> n = 17
    Elegimos el nombre pi para el valor float (coma flotante) 3, 14159:
    >‌>‌> pi = 3.14159
    La sentencia print también funciona con variables pero en este caso nos
imprimirá su valor:
    >‌>‌> print mensaje
    "Hola"
    >‌>‌> print n
    17
    >‌>‌> print pi
    3.14159

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

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

3.3.     Nombres de variables y palabras reservadas
    Como norma general, no es adecuado tomar cualquier nombre para las
variables. Los programadores eligen nombres significativos para sus variables,
esto permite saber de forma rápida para qué se usa la variable.
    Los nombres de las variables pueden tener una longitud arbitraria. Pueden
estar formados por letras y números, pero deben comenzar con una letra.
Aunque es aceptable usar mayúsculas, por convención no se suele hacer. Si
3 Variables, expresiones y sentencias                                      6


lo haces, recuerda que la distinción es importante: Bruno y bruno son dos
variables diferentes.
    El guión bajo _ también es legal y se utiliza a menudo para separar nom-
bres con múltiples palabras, como mi_nombre o precio_del_cafe_colombiano.
    Si intentas darle a una variable un nombre ilegal, obtendrás un error de
sintaxis.
    >‌>‌> 76trombones = "gran desfile"
    SyntaxError: invalid syntax
    >‌>‌> mas$ = 1000000
    SyntaxError: invalid syntax
    >‌>‌> class = "Curso de Programación 101"
    SyntaxError: invalid syntax
    76trombones es ilegal porque no comienza por una letra. mas$ es ilegal
porque contiene un carácter ilegal, el signo del dólar. Pero ¿qué tiene de malo
class? Resulta que class es una de las palabras reservadas de Python. El
lenguaje usa las palabras reservadas para definir sus reglas y estructura, y no
pueden usarse como nombres de variables. Estas palabras reservadas están
en inglés y son 28 por lo que si tus variables están escritas en castellano no
tendrás problemas.

Ejercicios
3.3.1 ¿Cómo asignarías en Python a la variable mi_numero el número 123456789?

3.3.2 ¿Crees que en Python puedes tomar como variable la palabra print?

3.4.     Sentencias
    Una sentencia es una instrucción que puede ejecutar el intérprete de
Python. Hemos visto dos tipos de sentencias: print y la asignación mediante
el símbolo =. Cuando escribes una sentencia en la línea de comandos (observa
que el inérprete IDLE las muestra de color), Python la ejecuta y muestra el
resultado, si lo hay. Por ejemplo: el resultado de una sentencia print es un
valor que muestra el texto o números que queremos pero las sentencias de
asignación = no entregan ningún resultado.
    Compruebalo con:
    >‌>‌> print pi
    3.14159
3 Variables, expresiones y sentencias                                      7


    >‌>‌> n = 17
    Como ves el primero si muestra un resultado pero el segundo no.
    Hasta ahora sólo has podido dar una sentencia por línea en el intérprete
IDLE. Esto es muy poco útil. Además si te equivocas tienes que volver a
escribir todo otra vez. Esto se soluciona por medio de un guión (o también
script en inglés). Un guión es una secuencia de sentencias una debajo de otra
las el cual se puede dar a Python para que las ejecute todas de vez. En este
caso los resultados aparecen en el intérprete de uno en uno tal como se van
ejecutando las sentencias.

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

      print 1
      x = 2
      print x

      ¿Cuántas sentencias hay?
      Una vez escrito ves a “Run −→Run module”. Se te pedirá que lo guardes
      antes de ejecutarlo. Dale un nombre, por ejemplo “ejercicio_3_4_1”
      (los números vienen de que estás en la sección 3.4 y es el ejercicio 1)
      y dile dónde quieres guardarlo. Una vez hecho esto se ejecutará. ¿Qué
      aparece en la pantalla de IDLE? ¿La sentencia de asignación produce
      alguna salida?
      nota importante: cada vez que modifiques un guión no es
      suficiente con guardarlo para que python sepa que lo has
      modificado, tienes que hacer de nuevo “Run −→Run module”.

3.4.2 Escribe este guión:
      17
      3.2
      "Hola, mundo"
      1 + 1
3 Variables, expresiones y sentencias                                         8


       Ejecútalo guardándolo como “ejercicio3_4_2” ¿Muestra los valores Pyt-
       hon? Modifica el guión para que Python muestre los valores.

3.5.     Operadores y expresiones
    Los símbolos +, −, /, y el uso de los paréntesis ( y ) para el agrupamiento,
se usan de la misma forma que en matemáticas. El asterisco ∗ es el signo
de la multiplicación y el doble asterisco ∗∗ el símbolo para exponenciación
(potencia). Cuando aparece el nombre de una variable en el lugar de un
operando, se sustituye con su valor antes de realizar la operación.
    Ejecuta estas órdenes:
    >‌>‌>5+2;5*3;2**3
    7
    15
    8
    >‌>‌>a = 5 ; b = 2 ; c=3
    >‌>‌> a+b; a*c; b**c;
    7
    15
    8
    Como ves Python ha operado tal y como lo haría una calculadora pero
puede hacer varias operaciones a la vez símplente separándolas por ; (punto
y coma).
    La suma, resta, multiplicación y exponenciación hacen lo esperado, pero
la división te puede sorprender. La operación que sigue tiene un resultado
inesperado:
    >‌>‌> minuto = 59
    >‌>‌> minuto/60
    0
    El valor de la variable minuto es 59, y 59 dividido entre 60 es 0.98333 y
no 0. El motivo de la discrepancia reside en que Python está llevando a cabo
una a división de enteros. Cuando ambos operandos son enteros, el resultado
ha de ser también un entero y por convención, la división de enteros siempre
se redondea a la baja, incluso en casos como estos en los que el siguiente
entero está muy próximo.
    Cuando aparece más de un operador en una expresión, el orden de eva-
luación depende de las reglas de precedencia. Python sigue las mismas reglas
3 Variables, expresiones y sentencias                                            9


de precedencia que las que has aprendido desde 1º de la ESO para tus ope-
raciones matemáticas.

Ejercicios
3.5.1 Evalúa las siguientes expresiones matemáticas con la ayuda de Python:
       3·(9−3)+8−3·4
             2
       23 − 6 · ( 504
                  14
                        − 23)2

3.5.2 Da a la variable a el valor 2345 y a la variable b el valor 125 y calcula con
      Python la suma, la resta, la multiplicación y la división pero utilizando
      las variables.

3.5.3 También es posible hacer operaciones con variables de tipo str. Teclea:
      >‌>‌>fruta = " plátano "
      >‌>‌>color = " amarillo "
      >‌>‌>print fruta + color
      ¿Qué obtienes? ¿Qué es lo que hace la operación + con las cadenas?

3.5.4 Teclea ahora:
      >‌>‌> print fruta*3
      ¿Qué obtienes? ¿Qué es lo que hace la operación * con las cadenas?

3.5.5 Teclea ahora:
      >‌>‌>print fruta + color , color + fruta
      ¿Obtienes el mismo resultado? ¿Es conmutativa la suma de cadenas?

3.6.      Comentarios
    Conforme los programas van creciendo de tamaño y complejidad, se vuel-
ven más difíciles de leer. Los lenguajes formales son densos y con frecuencia
es complicado observar un trozo de código y averiguar lo que hace, o por qué
lo hace. Por ello es una buena idea añadir notas a tu programa que expli-
quen, en un lenguaje natural, qué hace el programa. Estas notas se llaman
comentarios y se marcan con el símbolo #.
4 Funciones                                                               10


Ejercicios
3.6.1 Teclea:
      >‌>‌> print “En un lugar de la mancha” # de cuyo nombre no quiero
      acordarme...
      ¿A partir de dónde no se muestra el texto? ¿Qué es lo que hace que no
      se muestre parte del texto?


4.     Funciones

4.1.    Definición y primeros ejemplos
   Una función en Python es una palabra reservada seguida de un argumento
entre paréntesis. Ya hemos visto una función: type, la cual muestra el tipo
de una valor o variable que se sitúa entre paréntesis. Por ejemplo:
   >‌>‌> type(“32”)
   <type ’str’>
   Otro ejemplo más: la función id toma como argumento un valor o una
variable y devuelve un entero que actúa como identificador único de ese valor.
Por ejemplo:
   >‌>‌> id(3)
   134882108
   >‌>‌> n = 3
   >‌>‌> id(n)
   134882108
   Cada valor tiene un id, que es un valor único relacionado con dónde se
almacena en la memoria del computador. El id de una variable es el id del
valor al que hace referencia.

4.2.    La tortuga en Phyton
   Un módulo es un archivo que contiene una colección de funciones agru-
padas juntas. Antes de poder usar las funciones de un módulo, tenemos que
importarlo con la orden import.
   En Python una tortuga es algo similar a lo que tienes en mente de lo que
es una tortuga en la realidad, solo que es una pequeña flecha negra que se
mueve lentamente sobre la pantalla y que dibuja su movimiento si tu quieres
que lo haga.
4 Funciones                                                                11


    Primero debemos decir a Python que queremos usar la tortuga importán-
dola:
    >‌>‌> import turtle
    Para llamar a una de las funciones del módulo turtle, tenemos que es-
pecificar el nombre del módulo y el nombre de la función que deseamos,
separados por un punto. A esto se le llama notación de punto.
    Ahora vamos a hacer que nos muestrela tortuga. Para usar la tortuga más
fácilmente y que sea más fácil de manejar la llamamos t:
    >‌>‌> t = turtle.Pen()
    Verás aparecer nuestra tortuga que es más parecida a una flecha negra.
Fíjate que hemos utilizado una función turtle.Pen(). Esta función provie-
ne del paquete importado turtle y se llama Pen(). Fíjate que tiene sus
paréntesis aunque no hay nada dentro de ellos además observa que para lla-
marla hemos tenido que decirle a Python que es una función del módulo de
turtle.
    Ahora podemos decirle que se mueva hacia adelante con forward(n) que
es una función donde n es el número de pasos:
    >‌>‌> t.forward(50)
    También le podemos decir que gire la cabeza a la izquierda con la función
left(g) donde g es el número de grados a girar:
    >‌>‌> t.left(90)
    Ahora teclea las siguientes funciones que ya has aprendido tal y como se
te dan en un guión:
    t.forward(50)
    t.left(90)
    t.forward(50)
    t.left(90)
    t.forward(50)
    t.left(90)
    Si todo ha ido bien, al ejecutarlo, tu tortuga habrá dibujado un cuadrado
de lado 50 pasos (en realidad de 50 píxeles de tu pantalla).
    Para borrar la pantalla y comenzar de nuevo utilizamos la función reset():
    >‌>‌> t.reset()
    Otras órdenes son: ir hacia atrás backward(n) un número de pasos n,
girar a la derecha right(g) un número de grados g, que levante el lápiz la
tortuga para que no pinte con la función up() y que lo baje con la función
down(). Por ejemplo, haz el siguiente guión:
    t.backward(100)
4 Funciones                                                                12


   t.right(90)
   t.up()
   t.backward(100)
   t.right(90)
   t.down()
   t.backward(100)
   Si todo ha ido bien, al ejecutarlo, verás dos segmentos paralelos de longi-
tud 100 píxeles.

Ejercicios
4.2.1 Haz un guión que dibuje un triángulo equilátero de lado 50 con tu
      tortuga. Guárdalo con el nombre “ejercicio_4_2_1”.

4.2.2 Haz un guión que dibuje dos rectas perpendiculares de longitud 75 que
      se corten en el centro. Guárdalo con el nombre “ejercicio_4_2_2”.

4.3.    Funciones de conversión de tipos
   La función int toma un valor y lo convierte a un entero, si es posible, o
da un error si no es posible.
   >‌>‌> cadena_numerica="32"
   >‌> int(cadena_numerica)
   32
   >‌>‌>int("Hola")
   ValueError: invalid literal for int(): Hola
   int también convierte valores de coma flotante a enteros, pero recuerda
que siempre redondea hacia abajo:
   >‌>‌> int(3.99999)
   3
   La función float convierte enteros y cadenas en números en coma flo-
tante:
   >‌>‌> float(32)
   32.0
   >‌>‌> cadena_numerica="3.14159"
   >‌>‌> float(cadena_numerica)
   3.14159
   Finalmente, está la función str, que convierte a tipo cadena str:
4 Funciones                                                                13


   >‌>‌> str(32)
   ’32’
   >‌>‌> str(3.14149)
   ’3.14149’

Ejercicios
4.3.1 Convierte en coma flotante el número entero 1. ¿Qué obtienes? ¿Es el
      mismo número en matemáticas? ¿Y en Python?
4.3.2 Supón que queremos calcular qué fracción de una hora ha transcurrido
      al pasar un cierto número de minutos. La expresión que calcularemos
      es: minutos/60.
        1. Realiza este cálculo con Python suponiendo que han pasado 50
           minutos, es decir, teclea
           >‌>‌> minutos = 50
           >‌>‌> minutos/60
           ¿Obtienes un resultado correcto? ¿Por qué obtiene este resultado
           Python?
        2. Para obtener un resultado correcto podemos hacer dos cosas:
              a) En vez de hacer el cálculo dividiendo para 60, divide para
                 60.0
              b) Convierte la variable minutos a tipo float (coma flotante)
                 y repite el cálculo dividiendo para 60.
              c) ¿Por qué crees que Python realiza correctamente en el apatado
                 anterior los cálculos?

4.4.    Funciones matemáticas
    Python dispone de un módulo matemático que proporciona la mayoría de
las funciones matemáticas habituales. Recuerda que un módulo es un archivo
que contiene una colección de funciones agrupadas juntas. Antes de poder
usar las funciones de un módulo, tenemos que importarlo:
    >‌>‌>import math
    Para llamar a una de las funciones, tenemos que especificar el nombre del
módulo y el nombre de la función, separados por un punto. Recordar que a
esto se le llama notación de punto:
4 Funciones                                                                14


    >‌>‌> decibelio = math.log10(17.0)
    >‌>‌> altura = math.sin(1.5)
    La primera sentencia da a decibelio el valor del logaritmo de 17, en base
10. La segunda halla el seno de 1,5. Notar que las funciones trigonométricas
(sin, cos, tan, etc.) en Python toman sus argumentos en radianes.

Ejercicios
4.4.1 Calcula la hipotenusa de un triángulo rectángulo de catetos 14 cm y
      18 cm. Tendrás que utilizar la raíz cuadrada cuya función en Python
      es math.sqrt().

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

4.5.    Añadir funciones nuevas
   Hasta ahora sólo hemos usado las funciones que vienen incluidas con
Python, pero también es posible añadir nuevas funciones. La creación de
nuevas funciones para resolver tus problemas particulares es una de las cosas
más utiles de los lenguajes de programación de propósito general.
   En programación, función es una secuencia de instrucciones con nombre,
que lleva a cabo la operación deseada. Las funciones que hemos usado hasta
ahora las ha definido Python por nosotros. Para definirlas nosotros tenemos
siempre que escribirlas de esta forma:

   def NOMBRE( LISTA DE PARAMETROS ):
        SENTENCIAS

Donde NOMBRE es un nombre inventado que desees para tu función, con
la excepción de que no puedes usar las palabras reservadas de Python. La
LISTA DE PARAMETROS especifica qué información, en caso de haberla,
se ha de proporcionar para usar la función nueva. Después vendrán las SEN-
TENCIAS. Puede haber cualquier número de sentencias dentro de la función,
pero tienen que estar indentadas (separadas) desde el margen izquierdo (esto
4 Funciones                                                                15


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

Ejercicios
  En estos ejercicios vas a hacer guiones con idle. recuerda
que cada vez que hagas o modifiques un guión deves hacer “Run
−→Run module” para que python sepa que ha sido modificado.

4.5.1 Escribe esta función:
      def nueva_linea():
           print
      ¿Cómo se llama? ¿Tiene parámetros? ¿Qué instrucciones tiene? Ejecuta
      la función. ¿Qué hace?

4.5.2 Es posible llamar a otra función dentro de una defición de función (¡pero
      siempre acordándote de indentar las sentencias dentro de la definición
      de función!). Por ejemplo escribe esta otra función que no tiene pará-
      metros:
      def tresLineas():
         nueva_linea()
         nueva_linea()
         nueva_linea()
      Ejecuta la función. ¿Qué hace?

4.5.3 Escribe una función llamada nueveLineas que use la función tresLineas
      para imprimir nueve líneas en blanco.

4.5.4 Utilizando las funciones anteriores, escribe una función llamada onceLineas
      para imprimir once líneas en blanco. La función debe usar el menor có-
      digo posible.

4.5.4 Teclea esta función que tiene un parámetro llamado paso (el nombre
      del parámetro es indiferente, puedes tomar el que quieras siempre que
      respetes las reglas de la sección 3.3):
      def imprimeDoble(paso):
           print paso, paso
      Ejecuta la función con tres tipos de variables distintas: la variable
      cadena ’Jamón’, la variable entera 5 y la variable de coma flotante
4 Funciones                                                                16


       3.14159 ¿Qué obtienes? ¿Puedes ejecutar la función independiente-
       mente del tipo de variable que uses?

4.5.5 Es posible componer funciones. Por ejemplo:

        1. Multiplica por 4 cada una de las variables del ejercicio anterior y
           repite el ejercicio. Por ejemplo:
           >‌> imprimeDoble(’Jamón’*4)
           ¿Qué obtienes?
        2. Antepone la función interna type a cada variable del ejercicio an-
           terio y repite el ejercico. Por ejempo:
           >‌> imprimeDoble(type(’Jamón’))
           ¿Qué obtienes?
        3. Podemos usar una variable como argumento. Por ejemplo teclea :
           >‌>‌> saludo = ’Hola, mundo’
           >‌>‌> imprimeDoble(saludo)
           ¿Qué obtienes?

4.5.6 A partir del guión del ejercicio 4.2.1 crea una función llamada ejercicio_4_5_6(lado)
      que haga un triángulo equilátero de lado cualquiera.

4.5.7 A partir del guión del ejercicio 4.2.2 crea una función llamada ejercicio_4_5_7(longitud)
      que dibuje una cruz de longitud cualquira (observa que una cruz son
      dos rectas perpendiculares de longitud cualquiera que se corten en el
      centro).

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

4.6.     Flujo de ejecución
   Como has observado en los ejercicios anteriores es posible que dentro de
una función se llame a otra función la cual puede a su vez llamar a otra
función. Para que nuestros programas funcionen correctamente tenemos que
asegurarnos de definir cada función antes de que otra función la pueda llamar.
5 Condicionales y recursividad                                             17


4.7.     Las variables y los parámetros son locales
    Al definir funciones hemos usado variables cuyos nombres han sido to-
mados por nosotros de forma arbitraria. Al llamar a la función, Python crea
esas variables y son destruidas por lo que no se puede acceder de nuevo a
ellas e incluso podrían ser utilizadas en otra función.


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

5.1.     El operador módulo
   En Python, el operador de módulo es el signo de tanto por ciento % y nos
da el resto de una división. Observa cómo calcular el cociente y el resto de
una división de enteros:
   >‌>‌> cociente = 7 / 3
   >‌>‌> print cociente
   2
   >‌>‌> resto = 7 % 3
   >‌>‌> print resto
   1
   Así 7 dividido entre 3 tiene por cociente 2 con resto 1.

Ejercicios
5.1.1 Encuentra el cociente y el resto de la división de 1234 entre 209.

5.1.2 Utiliza Phyton para saber si 11 divide al número 3036.

5.1.3 Utilizando la división por potencias de 10 y el operador % haz que Phy-
      ton guarde en una variable las dos últimas cifras del número 123456789.

5.2.     Expresiones booleanas
    Una expresión booleana es una expresión que es cierta o falsa. En Python
(como en la mayoría de lenguajes de programación), una expresión que es
cierta tiene el valor True (verdadero), y una expresión que es falsa tiene
5 Condicionales y recursividad                                               18


el valor False (falso). El operador == compara dos valores y entrega una
expresión booleana en función de si es verdadero o falso:
    >‌>‌> 5 == 5
    True
    >‌>‌> 5 == 6
    False
    En la primera sentencia, los dos operandos son iguales, así que la expresión
se evalúa como True; en la segunda sentencia, 5 no es igual a 6, así que
obtenemos False.
    El operador == es uno de los operadores de comparación; los otros son:
    x != y que significa x no es igual a y
    x > y que significa x es mayor que y
    x < y que significa x es menor que y
    x >= y que significa x es mayor o igual que y
    x <= y que significa x es menor o igual que y

Ejercicios
5.2.1 Teclea en Phyton las siguientes comparaciones y di si responde True
      (verdadero) o False (falso). Piensa si tiene sentido la respuesta.

        1. 5 != 8
        2. 5 > 8
        3. 5 < 8
        4. 5 >= 8
        5. 5 <= 8

5.3.     Operadores lógicos
   Hay tres operadores lógicos: and, or y not. La semántica (significado)
de estos operadores es similar a sus significados en inglés: “y” para and “o”
para or y “no” para not. Por ejemplo:

   1. x >0 and x <10 es verdadero sólo si x es mayor que 0 y menor que 10.

   2. n %2 == 0 or n %3 == 0 es verdadero si cualquiera de las condiciones
      es verdadera, o sea, si el número n es divisible por 2 o por 3.
5 Condicionales y recursividad                                               19


   3. El operador not niega una expresión booleana, de forma que not(x >
      y) es cierto si (x > y) es falso, o sea, si x es menor o igual que y.

Ejercicios
5.3.1 Asigna a la variable a el valor de 5, a la variable b el valor de 7 y a
      la variable c el valor de 9 y calcula el valor de vardad de las siguientes
      expresiones. Piensa si tiene sentido la respuesta.

        1. a<b and b<c
        2. a<b or b>c
        3. not (a<b or b>c)
        4. not (a<b) or b>c

5.4.     Ejecución condicional
    Para escribir programas útiles, casi siempre necesitamos la capacidad de
comprobar ciertas condiciones y cambiar el comportamiento del programa en
consonancia. Las sentencias condicionales nos dan esta capacidad. La forma
más sencilla es la sentencia if:
    if x > 0:
         print x, "es positivo"
    La expresión booleana tras el if (si condicional) se llama condición. Si es
verdadera, entonces la sentencia print indentada se ejecuta. Si la condición
no es verdadera, la sentencia print indentada no se ejecuta.
    Una segunda forma de la sentencia if es la ejecución alternativa, en la que
hay dos posibilidades, y la condición determina cuál de ellas se ejecuta. Para
ello se utiliza la sentencia else (traducido por “si no” o “en caso contrario”).
La sintaxis tiene este aspecto:
    if x %2 == 0: # Entra en el condional si x es par.
         print x, "es par"
    else: # Entra si x es impar.
         print x, "es impar"
    Si el resto cuando se divide x entre 2 es cero, entonces sabemos que x
es par, y este programa muestra un mensaje a tal efecto. Si la condición es
falsa, se ejecuta el segundo lote de sentencias. Puesto que la condición debe
ser verdadera o falsa, se ejecutará exactamente una de las dos alternativas.
5 Condicionales y recursividad                                             20


Ejercicios
5.4.1 Escribe esta función en Phyton:
      def valorPositivo(x):
           if x > 0: # Entra en el condicional si x>0
                print x, "es positivo"
      Ejecuta la función para varios valores de x tanto positivos como nega-
      tivos.

5.4.2 Modifica la función anterior utilizando else para construir una función
      llamado positivo_negativo que diga si un valor x es positivo o es
      negativo. Utiliza el comodín # para añadir comentarios a las partes del
      programa que te ayuden a comprender mejor como funciona. Ejecuta
      la función para varios valores de x tanto positivos como negativos para
      comprobar que funciona bien la función.

5.4.3 Construye una función llamada imprimeParidad que diga si un nú-
      mero x es par o impar. Ayuda: utiliza la condición x %2 == 0. Utiliza
      el comodín # para añadir comentarios a las partes del programa que
      te ayuden a comprender mejor como funciona. Ejecuta la función pa-
      ra varios valores de x tanto pares como impares para comprobar que
      funciona bien la función.

5.5.     Condiciones encadenadas
    A veces nos encontraremos con que hay más de dos posibilidades y ne-
cesitamos más de dos ramas. Una forma de expresar tal computación es un
condicional encadenado:
    if x < y:
         print x, "es menor que", y
    elif x > y:
         print x, "es mayor que", y
    else:
         print x, "y", y, "son iguales"
    elif es una abreviatura de ”else if” (traducido por “si no si”). De nuevo,
sólo se ejecutará una rama. No hay límite al número de sentencias elif, pero
sólo se permite una sentencia else (que puede omitirse) y debe ser la ultima
rama de la sentencia.
5 Condicionales y recursividad                                              21


  Hay que notar que es importante darse cuenta de que incluso si es cierta
más de una condición, sólo se ejecutará la primera rama verdadera.

Ejercicios
5.5.1 Escribe la siguiente función que utiliza las funciones que has escrito
      antes:
      def eleccion(x,y):
           if x==1:
                positivo_negativo(y)
           elif x==2:
                imprimeParidad(y)
           else:
                print “La eleción no es adecuada.”
      Explica que es lo que hace la función y coméntala con el comodín #
      para añadir comentarios a las partes del programa.

5.5.2 Escribe una función llamada divisible_2_3_5 que dado un valor x nos
      diga si es divisible para 2 o para 3 o para 5 y en caso de que no lo sea,
      que imprima por pantalla el mensaje “El número no es divisible
      para 2, para 3 ni para 5”.

5.6.     La sentencia return
    La sentencia return permite terminar la ejecución de una función antes
de alcanzar su final. Una razón para usarla es detectar una condición de error:
    import math
    def imprimeRaizCuadrada(x):
         if x < 0:
             print "Solo números positivos, por favor."
             return
         result = math.sqrt(x)
         print "La raíz de x es", result
    La función imprimeRaizCuadrada toma un parámetro llamado x. Lo pri-
mero que hace es comprobar si x es menor que cero, en cuyo caso muestra un
mensaje de error ya que no se puede calcular la raíz cuadrada de un número
negativo y luego usa return para salir de la función. El flujo de la ejecución
vuelve inmediatamente al llamante y no se ejecutan las líneas restantes de
5 Condicionales y recursividad                                             22


la función. Recuerda que para usar una función del módulo math tienes que
importarla.
    La sentencia return también puede usarse para devolver valores desde
la función:
    def suma(x,y):
         return x + y
    print “La suma de 3 y 5 es”, suma(3, 5)
    Como puedes ver si ejecutas el guión, el efecto del return es sustituir la
llamada de la función por el valor que la sentencia indica. Así, en el ejemplo
anterior, suma(3, 5) es sustituido por 3 + 5, es decir, por 8.

Ejercicios
5.6.1 Escribe una función llámada divisible_2_3_5_modif que haga lo mis-
      mo que la función del ejercicio 5.5.2 pero que salga de él utilizando
      return en el caso de que el número x dado no sea un entero. Ayu-
      da: utiliza el condicional (type(x)==float or type(x)==str) o bien
      (type(x)!=int). ¿Qué hacen estos dos condicionales?

5.6.2 Crea una función divide(n,m) que retorne el valor True si m divide a
      n y el valor False si m no divide a n.

5.7.     Recursividad
    Ya hemos realizado funciones dentro de otras funciones, pero es posible
también que una función se llame a si misma, esto se llama recursividad.
Puede no resultar evidente por qué es bueno esto, pero viene a resultar una
de las cosas más interesantes y curiosas que puede hacer un programa, además
de aumentar mucho su potencialidad.
    Teclea por ejemplo la siguiente función:
    def cuenta_atras(n):
         if n == 0:
              print "Despegando!"
         else:
              print n
              cuenta_atras(n-1)
5 Condicionales y recursividad                                             23


   El programa espera que su parámetro, n, sea un entero positivo. Si el
parámetro n es cero, muestra la palabra “Despegando!”. En otro caso, muestra
n y luego se llama a si misma pasándole como argumento n-1.

Ejercicios
5.7.1 Haz una descripción de lo que hace Python si tecleamos
      >‌>‌> cuenta_atras(3)

5.7.2 Razona qué es lo que ocurrirá al ejecutar esta función:
      def recurre():
          recurre()

5.7.3 En los ejercicios de la sección 4.5 definimos funciones que nos inserta-
      ban líneas en blanco, pero cada vez que queríamos más líneas en blanco
      teníamos que crear una nueva función. Vamos a hacer una función que
      nos insertará el número de líneas que queramos utilizando la recurren-
      cia. Teclea esta función:
      def nLineas(n):
           if n > 0:
                print
                nLineas(n-1)

        1. Haz una descripción de lo que hace Python cuando tecleas
           >‌>‌> nLineas(3)
        2. ¿Qué ocurriría en el programa anterior si en la última línea susti-
           tuimos nLineas(n-1) por nLineas(n+1)?

5.7.4 Haz una función llamada paralelas_100(n) que sea recursiva y que
      dibuje n lineas parlalelas de logitud 100 con la tortuga. Para ello usa
      el diseño del programa nLineas(n) y modifica para que la parte que
      inserta un salto de línea ahora dibuje con la tortuga una línea.

5.7.5 Modifica el progama anterior por uno llamado paralelas(n,m) que
      dibuje n lineas parlalelas de logitud m donde la longitud es dada al
      programa por un número cualquiera.

5.7.6 Observa el guión siguiente:
6 Iteración. La sentencia while                                            24


      import turtle
      t = turtle.Pen()
      def dibuja(lado,angulo):
          t.forward(lado)
          t.right(angulo)
          dibuja(lado,angulo)
      dibuja(70,30)
      Ejecútalo y observa el resultado. Sustituye ahora dibuja(70,30)por
      dibuja(100,160)y ejecútalo de nuevo. ¿Sabrías explicar el porqué de
      la diferencia? ¿Para qué valores se dibuja un polígono? ¿Y una estrella?
      ¿Puedes adivinar cuántas puntas tendrá antes de dibujarla?

5.7.7 Escribe un guión que, usando una función circunferencia(r)dibuje
      una circunferencia de radio 70. Escribe un segundo guión que use esta
      función para que, recursivamente, dibuje circunferencias desplazadas
      una cierta cantidad. Observa el resultado, modifica tus funciones y
      realiza tus propios diseños.

5.7.8 Escribe un guión que dibuje recursivamente cuadrados cada vez más
      grandes y unos dentro de otros. Ayuda: usa los métodos up() y down()
      para que la tortuga deje de dibujar o continúe dibujando, según te con-
      venga.


6.    Iteración. La sentencia while
    Una de las tareas para las que los computadores se usan con frecuencia es
la automatización de tareas repetitivas. Repetir tareas similares o idénticas
es algo que los computadores hacen bien y las personas no hacen tan bien.
Hemos visto dos programas en la sección 5.7, nLineas y cuenta_atras, que
usan la recursividad para llevar a cabo la repetición, que también se llama
iteración. Por ser la iteración tan habitual, Python proporciona como len-
guaje varias características que la hacen más fácil. La primera característica
que vamos a considerar es la sentencia while (se traduce por “mientras” en
castellano).
    Teclea cuenta_atras_iter con una sentencia while:
    def cuenta_atras_iter(n):
         while n > 0:
             print n
6 Iteración. La sentencia while                                             25


             n = n-1
         print "Despegando!"

    Si comparas con la función de la sección 5.7 hemos eliminado la llamada
recursiva por lo que no es recursiva. Lo que está a la derecha de la sentencia
while se repetirá mientras n sea mayor que cero. Mientras esto ocurra, se
continuará mostrando el valor de n y después se restará 1 al valor de n.
Cuando n sea cero se dejará de repetir la parte situada a la derecha de while y
se seguirá con la siguiente instrucción que muestra la palabra “Despegando!”.
    Lo que nos produce la sentencia while se llama bucle porque llegado a
una instrucción que tenga el mismo sangrado que while se repite otra vez
las instrucciones situadas a la derecha de la sentencia while. El cuerpo del
bucle debe cambiar el valor de una o más variables de manera que, llegado el
momento, la condición planteada en while sea falsa y el bucle termine. En
caso contrario, el bucle se repetirá para siempre, que es lo que se llama bucle
infinito.

Ejercicios.
 6.1 Reescribe la función nLineas de la sección 5.7 utilizando iteración en
     lugar de recursividad. Llámala nLines_iter.
 6.2 Reescribe la función paralelas de la sección 5.7 utilizando iteración
     en lugar de recursividad. Llámala paralelas_iter.
 6.3 Vamos a crear una función test_primo(n) que nos diga si un número
     n es primo o no (Nota: Esta función no vale para valores de n muy
     grandes pues es ineficaz para estos valores). Para ello sigue los pasos
     que se te dan:
        1. Inicicializa una variable m con el valor 2.
        2. Haz un bucle while que se ejecute siempre que se cumpla la si-
           guiente condición: divide(n,m)==0 (recuerda que la función divide
           la creaste en el ejercicio 5.6.2 de la sección 5.6). Dentro del
           bucle tendrás que aumentar el valor de m en 1 cada vez que se
           ejecute (!Para que no tengamos un bucle infinito!).
        3. Al salir del bucle while crea un condicional que nos diga si el
           número n es primo y en caso de no serlo que nos diga el divisor
           más pequeño que tiene.
7 Cadenas                                                               26


         4. Dado que es muy ineficaz el algoritmo, ¿se te ocurre cómo mejo-
            rarlo?


7.     Cadenas

7.1.     Operador corchete
   Teclea el siguiente código:
   >‌>‌> fruta = "banana"
   >‌>‌> letra = fruta[0]
   >‌>‌> print letra
   Observarás que Python devuelve como valor de letra el valor b, es decir,
para Python la letra b ocupa el lugar 0 de la palabra banana.
   Teclea ahora
   >‌>‌> letra = fruta[1]
   >‌>‌> print letra
   Observarás que Python devuelve como valor de letra el valor a, es decir,
para Python la primera letra a ocupa el lugar 1 de la palabra banana.
   Si repites esto con fruta[2], fruta[3], fruta[4],... obtendrás cada
una de las letras que contiene la palabra banana.

Ejercicios
7.1.1 Si tecleas
      >‌>‌> saludo = "Hola y adiós"
      >‌>‌> letra = saludo[4]
      ¿qué valor tiene letra?

7.2.     Longitud
     La funci´ len devuelve el número de caracteres de una cadena:
              ón
     >‌>‌> fruta = "banana"
     >‌>‌> len(fruta)
     6
     Luego banana tiene efectivamente 6 carácteres pero si tecleamos
     >‌>‌> fruta[6]
7 Cadenas                                                               27


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

Ejercicios
7.2.1 Teclea
      >‌>‌> longitud = len(fruta)
      >‌>‌> print fruta[longitud]
      ¿Qué obtienes como respuesta de Python?

7.2.2 Teclea
      >‌>‌> longitud = len(fruta)
      >‌>‌> print fruta[longitud-1]
      ¿Qué obtienes como respuesta de Python? ¿Por qué ahora no hay error?

7.2.3 Teclea el siguiente código:
      def deletreo1(palabra):
           indice = 0
           while indice < len(palabra):
                letra = palabra[indice]
                print letra
                indice = indice + 1
      ¿Qué es lo que hace la función?

7.2.4 Escribe una función llamada deletreo2(palabra)que tome una ca-
      dena como argumento y entregue las letras en orden inverso, una por
      línea.

7.3.    Porciones de cadenas
   Llamamos porción a un segmento de una cadena. La selección de una
porción es similar a la selección de un carácter. Teclea:
   >‌>‌> nombres = "Pedro, Pablo, y María"
   >‌>‌> print nombres[0:5]
   Pedro
   >‌>‌> print nombres[7:12]
   Pablo
   >‌>‌> print nombres[15:20]
8 Recorrido y el bucle for                                                     28


    María
    En este caso se imprime el fragmento que va desde el primer índice hasta
el último.
    Si omites el primer índice (antes de los dos puntos), la porción comienza
al principio de la cadena. Si omites el segundo índice, la porción llega al final
de la cadena. Así:
    >‌>‌> nombres[:3]
    ’Ped’
    >‌>‌> nombres[3:]
    ’ro, Pablo, y María’

Ejercicios
7.3.1 ¿Qué obtienes con nombres[:]?

7.3.2 ¿Qué hace la siguiente función?
      def encuentra(cad, carac):
          indice = 0
          while indice < len(cad):
              if cad[indice] == carac:
                    return indice
                    indice = indice + 1
          return -1

7.3.3 Modifica la función anterior por una nueva llamada encuentra(cad,
      carac, ind) para que acepte un tercer parámetro ind, que será el
      índice de la cadena donde deberá empezar a a buscar.


8.    Recorrido y el bucle for
    En los ejercicios 7.2 y 7.2 de la sección 7.2 y en los ejercicios 7.3 y 7.3 de
la sección 7.3 hemos visto como usar un índice para recorrer un conjunto de
valores dados por una cadena. Es tan habitual usar un índice para recorrer un
conjunto de valores que Python facilita una sintaxis alternativa más simple:
el bucle for.
    Teclea el siguiente código:
    def deletreo3(palabra):
         for car in palabra:
8 Recorrido y el bucle for                                                29


              print car
    Cada vez que recorremos el bucle, se asigna a la variable car el siguien-
te carácter de la cadena palabra. El bucle continúa hasta que no quedan
caracteres en palabra.
    Otro ejemplo de uso es que puedes utilizar todo el potencial de Python
para hacer tus dibujos, por ejemplo si tecleas:
    >‌>‌> t.reset()
    >‌>‌> for x in range(4):
          t.forward(50)
          t.left(90)
    Crearás un cuadrado pero sin la necesidad de indicarle a la tortuga que
adelante y gire cuatro veces sino utilizando un bucle for que hace más corta
la programación del cuadrado.

Ejercicios
 8.1 ¿Qué valor tiene cuenta al finalizar el siguiente fragmento de código?
     fruta = "banana"
     cuenta = 0
     for car in fruta:
         if car == “a”:
              cuenta = cuenta + 1
     print cuenta
 8.2 Realiza una función llamada cuentaLetras que generalice el fragmento
     de código anterior y que acepte cualquier cadena y cualquier letra como
     parámetros.
 8.3 Dibuja un triángulo equilátero de lado 50 con tu tortuga. Utiliza un
     bucle for para ello.
 8.4 Haz dos funciones triangulo(n) y cuadrado(n) que dibujen triángu-
     los y cuadrados cuyos lados sean de longitud n y que utilicen bucles
     for.
 8.5 Dibuja un rectángulo de lados 300 y 100. Utiliza un bucle for.
 8.6 Realiza una función llamada rectangulo(n,m) que dibuje un rectán-
     gulo de longitud de alto n y de longitud ancho m utilizando un bucle
     for.
9 Listas                                                                  30


 8.7 Generaliza las funciones del ejercicio 8 para hacer funciones hexagono(n),
     octogono(n), nonagono(n), decagono(n) que creen los polígonos regula-
     res de 6, 8, 9 y 10 lados de lado con longitud n.

 8.8 Observando los programas anteriores crea una función poligonoRegular(m,n)
     que dibuje un polígono regular de m lados de longitud n siempre que
     m sea divisor de 360. En caso de que no se cumpla esta condición haz
     que el programa retorne con un mensaje de error.

 8.9 ¿Puedes dibujar un círculo con el programa anterior? ¿Con que orden?


9.    Listas
    Una lista es un conjunto ordenado de valores, en el cual cada valor va
identificado por un índice. Las listas son similares a las cadenas de texto
(strings), que son conjuntos ordenados de caracteres, excepto en que los ele-
mentos de una lista pueden ser de cualquier tipo.
    Hay varias maneras de crear una nueva lista; la más sencilla es encerrar
sus elementos entre corchetes:
    >‌>‌> [10, 20, 30, 40]
    >‌>‌> ["spam", "el´stico", "golondrina"]
    El primer ejemplo es una lista de cuatro enteros. El segundo es una lista
de tres cadenas de texto. Los elementos de una lista no tienen por qué ser
del mismo e tipo. La siguiente lista contiene una cadena, un número con
decimales y un entero, y, maravilla de las maravillas, otra lista:
    ["hola", 2.0, 5, [10, 20]]
    Un tipo de listas muy comunes son las listas que contienen números en-
teros consecutivos. Python proporciona una manera sencilla de crearlas:
    >‌>‌> range(1,5)
    [1, 2, 3, 4]
    La función range toma dos argumentos y devuelve una lista que contiene
todos los enteros entre el primero y el segundo, ¡incluyendo el primero pero
no el segundo!
    Hay dos formas alternativas para range. Con un solo argumento, crea una
lista que empieza desde 0:
    >‌>‌> range(10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9 Listas                                                                   31


    Si hay un tercer argumento, especificará el espacio entre dos valores su-
cesivos; a esto se le llama paso (step). Este ejemplo cuenta de 1 a 10 de dos
en dos (con pasos de 2).
    >‌>‌> range(1, 10, 2)
    [1, 3, 5, 7, 9]
    Para terminar, hay una lista especial que no contiene elementos. Se la
llama lista vacía y se representa [].
    La sintaxis para acceder a los elementos de una lista es la misma que para
acceder a los caracteres de una cadena: el operador corchetes []. La expresión
dentro de los corchetes especifica el índice. Recuerda que los índices siempre
comienzan en cero.
    Teclea el siguiente código y observa lo que hace:
    >‌>‌> numeros=[17, 123]
    >‌>‌> print numeros[0]
    17
    >‌>‌> numeros[1] = 5
    >‌>‌> numeros
    [17,5]
    Como ves el segundo elemento de numeros, que era 123, ahora es 5.
    Además se puede usar como índice cualquier expresión entera. Como por
ejemplo:
    >‌>‌> numeros[3-2]
    5
    >‌>‌> numeros[-1]
    5
    >‌>‌> numeros[-2]
    17
    Como ves un entero negativo hace que le índice cuente desde el final al
principio.
    Por último recordemos una serie de funciones que ya hemos visto con
cadenas y que también funcionan con listas:

   1. La función len, que ya hemos visto en la sección 7.2 con cadenas, toma
      una lista y devuelve su tamaño.

   2. El bucle for, que ya hemos visto en la sección 8 con cadenas, funciona
      igual utilizando listas:
      for VARIABLE in LISTA:
10 Dibujar con la tortuga.                                                32


           CUERPO DEL BUCLE
      Esta sentencia es equivalente a:
      i=0
      while i < len(LISTA):
           VARIABLE = LISTA[i]
           CUERPO DEL BUCLE
           i=i+1
      El bucle for es más conciso y elegante porque podemos eliminar la
      variable de bucle, i.

Ejercicios
 9.1 Completa los puntos suspensivos del siguiente código para que imprima
     los elementos de la lista jinetes.
     jinetes = ["guerra", "hambre", "peste", "muerte"]
     i = ...
     while i < ...:
           print jinetes[...]
           i = ...

 9.2 Haz una función llamada imprimeLista(lista) que generalice la an-
     terior función, es decir, que imprima en pantalla los elementos de lista.

 9.3 ¿Qué es lo que hace la siguiente función?
     def imprimeNumero(n):
         for numero in range(n):
              if numero % 2 == 0:
                   print numero

 9.4 Modifica la función anterior para que imprima los múltiplos de un nú-
     mero m menores que n, llámala multiplos(m,n).

 9.5 Modifica la función imprimeLista(lista) cambiando el bucle while
     por un bucle for y que haga lo mismo. Llámala imprimeListaFor(lista).


10.     Dibujar con la tortuga.
   Con todo lo aprendido hasta ahora puedes hacer los ejercicios que se te
proponen.
10 Dibujar con la tortuga.                                                33




                         Fig. 1: Una casa con tu tortuga




                  Fig. 2: Un pueblo de 3 casas con tu tortuga

Ejercicios.
10.1 Haz una función llamada casa(n) que dibuje una casa como la de la
     figura 1 a partir de un cuadrado y un triángulo equilátero de lados con
     longitud n (¡utiliza tus programas anteriores!).


10.2 Haz una función llamada pueblo(m,n,d) que dibuje un pueblo de
     m casas como la del ejercicio anterior todas de lado n y distancia
     entre las casas d. Para ello tendrás primero que crear una función
     llamada hueco(d) que cree un hueco de distancia d (¡recuerda de
     las funciones up() y down()!). El aspecto que tendría, por ejemplo,
     pueblo(3,50,50) sería el mostrado en la figura 2.


10.3 Utilizando llamadas a funciones creadas por ti antes, haz una función
     llamada torre(n,m) que realice el dibujo de una torre como la de la
     figura 3 donde n es el alto del rectángulo y m es el ancho del rectángulo
     y el lado del triángulo equilátero.
10 Dibujar con la tortuga.                                             34




                        Fig. 3: Una torre con tu tortuga




                        Fig. 4: Un castillo con tu tortuga



10.4 Utilizando llamadas a funciones creadas por ti antes, haz una función
     llamada castillo(n,m) que dibuje un castillo como el de la figura 4.
     Donde las bases de las dos torres y de la casa son de anchura m y la
     altura de las torres n.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (15)

Practica5 bash prog-intro-como
Practica5 bash prog-intro-comoPractica5 bash prog-intro-como
Practica5 bash prog-intro-como
 
Aprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primero
 
C++
C++C++
C++
 
Practicadeword 111017205627-phpapp01-111019095249-phpapp01
Practicadeword 111017205627-phpapp01-111019095249-phpapp01Practicadeword 111017205627-phpapp01-111019095249-phpapp01
Practicadeword 111017205627-phpapp01-111019095249-phpapp01
 
Practicadeword 111017205627-phpapp01
Practicadeword 111017205627-phpapp01Practicadeword 111017205627-phpapp01
Practicadeword 111017205627-phpapp01
 
Exp algoritmos
Exp algoritmosExp algoritmos
Exp algoritmos
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje c
 
Manual básico de programación en c++
Manual básico de programación en c++Manual básico de programación en c++
Manual básico de programación en c++
 
Manual de latex
Manual de latexManual de latex
Manual de latex
 
Algebra de lie
Algebra de lieAlgebra de lie
Algebra de lie
 
Manual de usuario - christian García
Manual de usuario - christian GarcíaManual de usuario - christian García
Manual de usuario - christian García
 
Autómatas
AutómatasAutómatas
Autómatas
 
Programación en c y c++
Programación en c y c++Programación en c y c++
Programación en c y c++
 
Python desde 0
Python desde 0Python desde 0
Python desde 0
 
Guía práctica de ANTLR 2.7.2
Guía práctica de ANTLR 2.7.2Guía práctica de ANTLR 2.7.2
Guía práctica de ANTLR 2.7.2
 

Similar a Iniciación a python

MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE Cclaudiocj7
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numericoLUIS COAQUIRA
 
Practicas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosPracticas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosChucho E. Peña
 
ApuntesC++.pdf
ApuntesC++.pdfApuntesC++.pdf
ApuntesC++.pdfbilgrado01
 
Manual completo python
Manual completo pythonManual completo python
Manual completo pythonalan moreno
 
Programacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................roProgramacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................roMa Florencia Ferrari
 
Desarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaDesarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaVictor Basurto Alonso
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaAngel De las Heras
 
Compiladores java a_tope
Compiladores java a_topeCompiladores java a_tope
Compiladores java a_topeEmmanuel Lara
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapaRobert Wolf
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapaTabu Carlos
 
Matematicas en ingenieria_con_matlab_y_o
Matematicas en ingenieria_con_matlab_y_oMatematicas en ingenieria_con_matlab_y_o
Matematicas en ingenieria_con_matlab_y_oriberthancco
 
Introducción a la programación en c
Introducción a la programación en cIntroducción a la programación en c
Introducción a la programación en cvictdiazm
 
Desarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaDesarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaFreddy Quina
 

Similar a Iniciación a python (20)

MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE C
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numerico
 
Practicas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosPracticas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmos
 
ApuntesC++.pdf
ApuntesC++.pdfApuntesC++.pdf
ApuntesC++.pdf
 
Manual completo python
Manual completo pythonManual completo python
Manual completo python
 
Aprende phyton
Aprende phytonAprende phyton
Aprende phyton
 
Programacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................roProgramacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................ro
 
aprendepython.pdf
aprendepython.pdfaprendepython.pdf
aprendepython.pdf
 
Desarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaDesarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-java
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
PLC
PLC PLC
PLC
 
Compiladores java a_tope
Compiladores java a_topeCompiladores java a_tope
Compiladores java a_tope
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapa
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapa
 
Matematicas en ingenieria_con_matlab_y_o
Matematicas en ingenieria_con_matlab_y_oMatematicas en ingenieria_con_matlab_y_o
Matematicas en ingenieria_con_matlab_y_o
 
Manual de programacion lenguaje en C
Manual de programacion lenguaje en CManual de programacion lenguaje en C
Manual de programacion lenguaje en C
 
Introducción a la programación en C
Introducción a la programación en CIntroducción a la programación en C
Introducción a la programación en C
 
Introducción a la programación en c
Introducción a la programación en cIntroducción a la programación en c
Introducción a la programación en c
 
Desarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaDesarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-java
 

Más de Fernando Salamero

(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
(Anotaciones) Ciencia (Cuestiones) que la tiza no propone(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
(Anotaciones) Ciencia (Cuestiones) que la tiza no proponeFernando Salamero
 
Ciencia (Cuestiones) que la tiza no propone
Ciencia (Cuestiones) que la tiza no proponeCiencia (Cuestiones) que la tiza no propone
Ciencia (Cuestiones) que la tiza no proponeFernando Salamero
 
(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la FísicaFernando Salamero
 
(Con anotaciones) En busca de la Física
(Con anotaciones) En busca de la Física(Con anotaciones) En busca de la Física
(Con anotaciones) En busca de la FísicaFernando Salamero
 
Timeline - En busca de la Física
Timeline - En busca de la FísicaTimeline - En busca de la Física
Timeline - En busca de la FísicaFernando Salamero
 
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (X)
Programación de Videojuegos con Python y Pilas (X)Programación de Videojuegos con Python y Pilas (X)
Programación de Videojuegos con Python y Pilas (X)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (IX)
Programación de Videojuegos con Python y Pilas (IX)Programación de Videojuegos con Python y Pilas (IX)
Programación de Videojuegos con Python y Pilas (IX)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Fernando Salamero
 

Más de Fernando Salamero (20)

(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
(Anotaciones) Ciencia (Cuestiones) que la tiza no propone(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
 
Ciencia (Cuestiones) que la tiza no propone
Ciencia (Cuestiones) que la tiza no proponeCiencia (Cuestiones) que la tiza no propone
Ciencia (Cuestiones) que la tiza no propone
 
(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física
 
(Con anotaciones) En busca de la Física
(Con anotaciones) En busca de la Física(Con anotaciones) En busca de la Física
(Con anotaciones) En busca de la Física
 
Timeline - En busca de la Física
Timeline - En busca de la FísicaTimeline - En busca de la Física
Timeline - En busca de la Física
 
Jovenes físicos
Jovenes físicosJovenes físicos
Jovenes físicos
 
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
 
Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)
 
Programación de Videojuegos con Python y Pilas (X)
Programación de Videojuegos con Python y Pilas (X)Programación de Videojuegos con Python y Pilas (X)
Programación de Videojuegos con Python y Pilas (X)
 
Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)
 
Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)
 
Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)
 
Programación de Videojuegos con Python y Pilas (IX)
Programación de Videojuegos con Python y Pilas (IX)Programación de Videojuegos con Python y Pilas (IX)
Programación de Videojuegos con Python y Pilas (IX)
 
Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)
 
Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)
 
Python básico II
Python básico IIPython básico II
Python básico II
 
Python básico I
Python básico IPython básico I
Python básico I
 
Python (ejercicios)
Python (ejercicios)Python (ejercicios)
Python (ejercicios)
 
Python (práctica 4)
Python (práctica 4)Python (práctica 4)
Python (práctica 4)
 

Último

EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docxAleParedes11
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 

Último (20)

EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 

Iniciación a python

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