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

Subsecciones

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 llamadaord (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óneval 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 up previous contents
Next: Lectura y escritura de archivos Up: Tutor de Python para No-programadores Previous: Más acerca de listas   Contenido
Josh Cogliati jjc@honors.montana.edu
Traducido por Victor M. Rosas-Garcia quimico69@yahoo.com