Ver índice de contenidos del libro

1.5. Una instrucción un poco más compleja: el ciclo definido

Problema 1.5.1. Ahora que sabemos construir una función que calcula el cuadrado de un número, nos piden que imprimamos los cuadrados de los números del 2 al 8.

Solución. Por supuesto que podemos hacer:

>>> def cuad3():
    print cuadrado(2)
    print cuadrado(3)
    print cuadrado(4)
    print cuadrado(5)
    print cuadrado(6)
    print cuadrado(7)
    print cuadrado(8)
>>> cuad3()
4
9
16
25
36
49
64
>>>

¿Se puede hacer algo mejor que esto? Con lo que sabemos de Python hasta el momento, no.

Para resolver este tipo de problema (repetir un cálculo para los valores contenidos en un intervalo dado) de manera eficiente, introducimos el concepto de ciclo definido, que tiene la siguiente forma:

for x in range(n1, n2):
    <hacer algo con x>

Esta instrucción se lee como:

  • Generar la secuencia de valores enteros del intervalo [n1, n2)
  • Para cada uno de los valores enteros que toma x en el intervalo generado, se debe hacer lo indicado por <hacer algo con x>.

Vemos cómo, usando esta construcción, el problema anterior se puede resolver de manera más compacta:

Solución. En nuestro caso lo que hay que hacer es invocar a la instrucción print cuadrado(x) que usa la función definida en 1.6 para calcular el cuadrado de x, y luego imprime el resultado, cuando x toma los valores 2, 3, ..., 8.

La instrucción que describe qué tipo de repeticiones se deben realizar es el encabezado del ciclo, y las instrucciones que describen la acción que se repite se llaman cuerpo del ciclo.

No nos olvidemos que en nuestro ejemplo el ciclo debe recorrer todos los valores enteros entre 2 y 8, por lo tanto:

  • for x in range(2, 9): será el encabezado del ciclo y
  • print cuadrado(x)será el cuerpo del ciclo.

Vemos entonces cómo resulta el ciclo completo (con su ejecución):

Advertencia Todas las instrucciones que describen el cuerpo del ciclo deben tener una sangría mayor que el encabezado del ciclo.

Esta sangría puede ingresarse mediante espacios o tabuladores, pero es importante que sea la misma para todas las instrucciones del ciclo.

>>> for x in range(2, 9):
        print cuadrado(x)
4
9
16
25
36
49
64
>>>

1.5.1. Ayuda desde el intérprete

El intérprete de Python nos provee una ayuda en línea, es decir, nos puede dar la documentación de una función, instrucción, etc, para obtenerla llamamos a help(). Por ejemplo podemos pedir help(input) y nos dará la documentación de esa función.

Para obtener la documentación de las instrucciones las debemos poner entre comillas, es decir help('return'), de la misma forma se puede pedir ayuda sobre variables o valores.

Otra forma de obtener ayuda es mediante dir(variable), que nos va a listar todas las funciones que tiene asociadas esa variable. Por ejemplo, mostramos las funciones asociadas a una cadena.

>>> dir("hola")
['__add__', '__class__', '__contains__',
'__delattr__', '__doc__', '__eq__',
'__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__',
'__hash__', '__init__', '__le__', '__len__',
'__lt__', '__mod__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmod__', '__rmul__', '__setattr__',
'__str__', 'capitalize', 'center', 'count',
'decode', 'encode', 'endswith', 'expandtabs',
'find', 'index', 'isalnum', 'isalpha',
'isdigit', 'islower', 'isspace', 'istitle',
'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex',
'rjust', 'rpartition', 'rsplit', 'rstrip',
'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper', 'zfill']

Como se puede ver son muchas las funciones asociadas a las cadenas, pero no necesitamos conocerlas todas, a medida que avancemos veremos algunas.

Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano, Nicolás Paez. La copia y redistribución de esta página se permite bajo los términos de la licencia Creative Commons Atribución - Compartir Obras Derivadas Igual 3.0 siempre que se conserve esta nota de copyright.