Keywords: easytut

Siguiente: Lectura y escritura de archivos Arriba: Tutor de Python para No-programadores Anterior: Más acerca de listas Contenido
Subsecciones

- Ejemplos

# La Venganza de las Hileras

Y ahora, un truco bonito que podemos hacer con hileras:

    def gritar(hilera):
        for letra in hilera:
            print "Denme un "+letra
            print "'"+letra+"'"

    gritar("Pierde")

    def enmedio(hilera):
        print "La letra de en medio es:",hilera[len(hilera)/2]

    enmedio("abcdefg")
    enmedio("El Lenguaje de Programacion Python")
    enmedio("Atlanta")

Y la salida es:

    Denme una P
    'P'
    Denme una i
    'i'
    Denme una e
    'e'
    Denme una r
    'r'
    Denme una d
    'd'
    Denme una e
    'e'

    La letra de enmedio es: d
    La letra de enmedio es: o
    La letra de enmedio es: a

Lo que estos programas demuestran es que las hileras son similares a las listas de varios modos. El procedimiento `gritar` muestra que es posible usar rizos `for` con hileras tal como con listas. El procedimiento `enmedio` muestra que con hileras también podemos usar la función `len` así como índices y rebanadas. La mayoría de las propiedades de las listas también funcionan con hileras.

El siguiente programa demuestra aspectos específicos de las hileras:

    def a_mayuscula(hilera):
        ## Convierte la hilera a letras mayusculas
        mayuscula = ""
        for letra in hilera:
            if 'a' <= letra <= 'z':
                ubicacion = ord(letra) - ord('a')
                nuevo_ascii = ubicacion + ord('A')
                letra = chr(nuevo_ascii)
            mayuscula = mayuscula + letra
        return mayuscula

    print a_mayuscula("Este es texto")

con la salida:

    ESTE ES TEXTO

Esto funciona porque la computadora representa las letras de una hilera como números de 0 a 255. Python tiene una función llamada`ord` (apócope de ordinal) que devuelve el número que representa una letra. También hay una función correspondiente llamada `chr` que devuelve la letra que corresponde a un número. Con esto en mente, el funcionamiento del programa debería empezar a aclararse. El primer detalle es el renglón : `if 'a' <= letra <= 'z':` el cual revisa si la letra es minúscula. Si lo es entonces usa los siguientes renglones. Primero la letra es convertida a una ubicación, de modo que a=0,b=1,c=2 y así sucesivamente, con el renglón: `ubicacion = ord(letra) - ord('a')`. Luego encuentra el nuevo valor (el número que representa la letra mayúscula) con `nuevo_ascii = ubicacion + ord('A')`. Este valor luego es convertido a una letra, que ahora ya es mayúscula.

Ahora hagamos un ejercicio interactivo escrito:

    >>> #Entero a Hilera
    ...
    >>> 2
    2
    >>> repr(2)
    '2'
    >>> -123
    -123
    >>> repr(-123)
    '-123'
    >>> #Hilera a Intero
    ...
    >>> "23"
    '23'
    >>> int("23")
    23
    >>> "23"*2
    '2323'
    >>> int("23")*2
    46
    >>> #Punto flotante a Hilera
    ...
    >>> 1.23
    1.23
    >>> repr(1.23)
    '1.23'
    >>> #Punto flotante a Entero
    ...
    >>> 1.23
    1.23
    >>> int(1.23)
    1
    >>> int(-1.23)
    -1
    >>> #Hilera a Punto flotante
    ...
    >>> float("1.23")
    1.23
    >>> "1.23"
    '1.23'
    >>> float("123")
    123.0

Por si no lo ha adivinado, la función `repr` puede convertir un entero a una hilera y la función `int` puede convertir una hilera a un entero. La función `float` puede convertir una hilera a un número de punto flotante. La función `repr` devuelve una representación, que podemos imprimir, de algo. Veamos algunos ejemplos:

    >>> repr(1)
    '1'
    >>> repr(234.14)
    '234.14'
    >>> repr([4,42,10])
    '[4, 42, 10]'

La función `int` trata de convertir una hilera (o un punto flotante) a un entero. Hay una función similar llamada `float` que convertirá un entero o una hilera a un punto flotante. Otra función en Python es `eval`. La función`eval` toma una hilera y devuelve datos del tipo de Python cree que encontró. Por ejemplo:

    >>> v=eval('123')
    >>> print v,type(v)
    123 <type 'int'>
    >>> v=eval('645.123')
    >>> print v,type(v)
    645.123 <type 'float'>
    >>> v=eval('[1,2,3]')
    >>> print v,type(v)
    [1, 2, 3] <type 'list'>

Si usa la función `eval` debiera revisar que devuelve el tipo que usted espera.

Una función de hileras muy útil es la función `split`. Un ejemplo:

    >>> import string
    >>> string.split("Este es un monton de palabras")
    ['Este', 'es', 'un', 'monton', 'de', 'palabras']
    >>> string.split("Primer lote, segundo lote, tercero, cuarto",",")
    ['Primer lote', ' segundo lote', ' tercero', ' cuarto']

Observe cómo `split` convierte una hilera en una lista de hileras. La hilera es dividida por espacios por definición o por segundo argumento, el cual es opcional (una coma, en este caso).

# Ejemplos

    #Este programa requiere una excelente comprension de los numeros decimales
    def a_hilera(entero_entrada):
        "Convierte un entero a una hilera"
        hilera_salida = ""
        prefijo = ""
        if entero_entrada < 0:
            prefijo = "-"
            entero_entrada = -entero_entrada
        while entero_entrada / 10 != 0:
            hilera_salida = chr(ord('0')+entero_entrada % 10) + hilera_salida
            entero_entrada = entero_entrada / 10
        out_str = chr(ord('0')+entero_entrada % 10) + hilera_salida
        return prefix + hilera_salida

    def a_entero(hilera_entrada):
        "Convierte una hilera a un entero"
        numero_salida = 0
        if hilera_entrada[0] == "-":
            factor = -1
            hilera_entrada = hilera_entrada[1:]
        else:
            factor = 1
        for x in range(0,len(hilera_entrada)):
            numero_salida = numero_salida * 10 + ord(in_str[x]) - ord('0')
        return numero_salida * factor

    print a_hilera(2)
    print a_hilera(23445)
    print a_hilera(-23445)
    print a_entero("14234")
    print a_entero("12345")
    print a_entero("-3512")

La salida es:

    2
    23445
    -23445
    14234
    12345
    -3512

Next: Lectura y escritura de archivos Up: Tutor de Python para No-programadores Previous: Más acerca de listas Contenido
Traducido por Victor M. Rosas-Garcia quimico69@yahoo.com