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 PLo 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.
'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
El siguiente programa demuestra aspectos específicos de las hileras:
def a_mayuscula(hilera):con la salida:
## 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")
ESTE ES TEXTOEsto 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)La función
'1'
>>> repr(234.14)
'234.14'
>>> repr([4,42,10])
'[4, 42, 10]'
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')Si usa la función
>>> 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'>
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 stringObserve cómo
>>> 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']
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).
#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