11 de mayo de 2016

07. Cadenas de caracteres en Python

Ejemplo 1. Elementos especiales en las cadenas
Ya hemos definido variables que son cadenas de caracteres. y ya hemos visto que se encerraban entre comillas simples (apóstrofes ' ' ) o comillas dobles (" ").
¿Qué ocurriría, sin embargo, si defino la siguiente cadena (en inglés)?
miCadena = 'Hi, I'm the new teacher'
print miCadena
Si probáis el ejemplo en el IDE, el programa arroja el siguiente error: SyntaxError: invalid syntax. Probad ahora con el siguiente ejemplo: 
miCadena = 'Hi, I\'m the new teacher'
print miCadena
Escribiendo el carácter de escape \ , el programa obvia la condición de cierre del apóstrofe y lo interpreta como carácter.
===
Ejemplo 2. Una forma más fácil de evitarlo
miCadena = "Hi, I'm the new teacher"
print miCadena
Simplemente, combino las dobles comillas como delimitadores de cadena y el apóstrofe ya es un carácter.
===
Ejemplo 3. Pero hay más caracteres con \
# *-* coding:utf-8 *-*
miCadena = "Primera línea\nSegunda línea"
print miCadena

En este ejemplo, \n es un retorno de carro. Se salta una línea.
===
Intenta también estos ejemplos especiales
A. cadenas "en bruto", empezando con r
# *-* coding:utf-8 *-*
miCadena1 = "Primera línea\nSegunda línea"
miCadena2 = r"Primera línea\nSegunda línea"
print miCadena1
print miCadena2
B. cadenas literales, con tres """... """ o '''... '''
print """
Hola, este es un                        gran ejemplo
............                  de como se imprimen cadenas literales"""
C. Y añadiendo slashes (al final de la palabra ejemplo)
print """
Hola, este es un                        gran ejemplo\
............                  de como se imprimen cadenas literales"""
 
 

Caracteres dentro de una cadena

Una cadena o string puede considerarse una lista de caracteres. De hecho, puede accederse a cada letra o carácter a través de la posición que ocupa en ella.
Por ejemplo, la palabra CASA tiene 4 caracteres. El primer carácter, se cuenta como carácter 0 es la "C". Asimismo, el carácter 1 es la "A", el 2, la "S" y el 3, "A".
Intenta este ejemplo
Ejemplo 1. Palabra "CASA" letra a letra.
miCadena = "CASA"
for caracter in miCadena:
     print caracter+"\n"
Y de otra forma, con un bucle numérico y la función range
miCadena = "CASA"
longitud = len(miCadena)
print "Longitud: "+str(longitud)+"\n"
for i in range (0,longitud):
     print "i: "+str(i)+" --> "+miCadena[i]+"\n"

Ejemplo 2. Y ahora, al revés
miCadena = "CASA"
longitud = len(miCadena)
print "Longitud: "+str(longitud)+"\n"
for i in range (longitud,0,-1):
    print "i: "+str(i-1) +"  -->  "+miCadena[i-1]+"\n"

O bien
miCadena = "CASA"
longitud = len(miCadena)
print "Longitud: "+str(longitud)+"\n"
for i in range (longitud-1,-1,-1):
    print "i: "+str(i) +"  -->  "+miCadena[i]+"\n"

O bien
miCadena = "CASA"
miCadena2= ""
for caracter in miCadena:
    miCadena2 = caracter + miCadena2
for caracter in miCadena2:
    print caracter +"\n"
 

Cadenas formadas con varios elementos: formateo de cadenas

Ejemplo 1. Formateando una cadena con tres números tipo float En este ejemplo, presentamos con print una cadena de texto formada por una cadena de texto previa y tres números float. El formateo se logra mediante el operador %, con una s indicando que es una cadena y una f indicando que es un número tipo float.
# *-* coding: utf-8 *-*
a = 2.3212
b = 3.45456
c = "La suma de dos números"

print "%s, %f + %f es %f" % (c,a,b,a+b)
===
Podemos controlar el número de decimales de los float con la notación %.2f (2 decimales).
...
print "%s, %.2f + %.2f es %.2f" % (c,a,b,a+b)
===
Ejemplo 2. Formateo una cadena con números enteros
Cuando tengo un integer, o número entero, necesito la notación %d
# *-* coding: utf-8 *-*
a = 2
b = 3.45456
c = "La suma de dos números"

print "%s, %d + %.2f es %.2f" % (c,a,b,a+b)
Pero.. ¿Qué ha ocurrido? El programa presenta el resultado pero hemos sumado un número entero a un número tipo float. El resultado hay que expresarlo en ese tipo. Observa la diferencia si sustituyes el print por esta línea
print "%s, %d + %.2f es %d" % (c,a,b,a+b)
===
Ejemplo 3. Puedo forzar la conversión de números usando estas funciones
  • int(a): convierto un número a entero o integer.
  • float(a): convierto un número a tipo float o real
  • str(a): convierto un número a cadena de texto...
Observa y comenta los resultados de este programa:
# *-* coding: utf-8 *-*
from math import atan, sin
a = 4*atan(1) #una forma de escribir el número pi
b = sin(a/3) #seno de 60º

print a,b
print str(a),str(b)

print a+b
print str(a)+str(b)

print int(a+b)
print int(a)+int(b)

print b/a
print int(b)/int(a)
print int(b/a)

print float(int(a*100))/100
 

Métodos de funciones de texto

Los métodos de string son funciones aplicables a cadenas de caracteres que devuelven datos concretos. Veremos los siguientes:
  1. len(cadena) --> Longitud de la cadena.
  2. lower() --> Convierte una cadena en minúsculas.
  3. upper() --> Convierte la cadena en mayúsculas.
Mientras la primera lleva la variable entre paréntesis las dos últimas se ejecutan con .[método]() (o notación de puntos). La notación de puntos puede ser literal, y se ejecuta sólo con strings, mientras len() admite como argumento otra serie de objetos.
Ejemplo
# *-* coding: utf-8 *-*
miCadena="Esta es UNA cadena de texto"

print len(miCadena)
print miCadena.upper()
print miCadena.lower()

print "Otra Cadena De Texto".upper()
print "Otra Cadena De Texto".lower()
===

¡Hey, tú! ¡Dame lo que te pido!

Hasta ahora el programador ha sido quien escribe en el programa los datos que se han expuesto o con los que se ha calculado. ¿Pero siempre tenemos al programador para obtener esos datos? Evidentemente no. Necesitamos interactuar con el usuario, preguntarle qué datos necesita. Por eso, ahora veremos la función raw_input (entrada "en bruto")
Imagina un programa que le pide a una persona su peso, su altura y su nombre, para poder calcular su índice de masa corporal... ¿Cómo empezaría el programa?
Ejemplo
# *-* coding: utf-8 *-*
miNombre = raw_input("Por favor, dime tu nombre: ")
miPeso = float(raw_input("Dime tu peso en kilogramos: "))
miAltura = float(raw_input("Dime tu altura en centímetros: "))

print "Tu nombre es %s, tu peso %.2f Kg y tu altura %.2f cm" % (miNombre,miPeso,miAltura)

 

No hay comentarios:

Publicar un comentario