Python - Cadenas

Funcionalidades básicas

  • Python trae una clase integrada para cadenas: str
  • Los literales de cadenas pueden estar entre comillas simples o dobles
  • La barra invertida sirve para hacer caracteres de escape, por ej: \n \' \"
  • Una cadena de comillas dobles puede contener comillas simples (y visceversa), por ej: "Él dijo 'vamos'."
  • Una cadena puede abarcar múltiples líneas, debe haber una barra invertida al final de cada una \
  • Cadenas en triples comillas (simples o dobles, """ o ''') pueden abarcar múltiples lineas
  • Los caracteres en una cadena se pueden acceder con corchetes [ ]

Funcionalidades básicas

  • Si un índice está fuera de la cadena, python envía mensaje de error. por ej para s = "hola", s[7] larga error.
  • Se pueden extraer subcadenas de una cadena.
  • len(cadena) devuelve el tamaño de ésta, también funciona con listas, secuencias, etc.
  • El operador + puede concatenar 2 cadenas.
  • Python no convierte automáticamente números a cadenas, hay que convertirlas con str(), por lo que:

  pi = 3.14
  ##text = 'El valor de Pi es ' + pi      ## NO, No funciona
  text = 'El valor de Pi es '  + str(pi)  ## Si
  • No hay operador ++, pero sí +=, -=, etc
  • El operador print muestra uno o más ítems seguidas por un salto de línea (dejando una coma al final desactiva el salto)

Ejemplos de funcionalidades Básicas

Prefijos

las cadenas pueden tener prefijos que especifican su funcionalidad:

r: pasa la cadena en modo crudo, tal como está

r'x\nx' va a devolver eso mismo, como cadena de 4 caracteres, no hará el salto de línea

u: Escribe las cadenas en Unicode.

Ideal si se tienen acentos. u'Clase en español' saldrá con la ñ, no dará error.

Métodos de cadenas

Algunos de los más comunes
  • s.lower(), s.upper() -- devuelve la cadena en minúsculas/mayúsculas
  • s.strip() -- devuelve una cadena sin los espacios en blanco del principio y fin
  • s.startswith('cadena'), s.endswith('cadena') -- se fija si la cadena empieza/termina con la cadena dada.
  • s.find('cadena') -- busca por la cadena indicada (no es una expresión regular) dentro de s, y retorna el primer índice donde comienza, o -1 si no se encuentra

Métodos de cadenas

  • s.replace('viejo', 'nuevo') -- devuelve una cadena donde todas las ocurrencias de 'viejo' son reemplazadas por 'nuevo'
  • s.split('delim') -- devielve una lista de subcadenas separadas por el delimitador dado. El delimitador no es una expresión regular, sólo texto. 'aaa,bbb,ccc'.split(',') -> ['aaa', 'bbb', 'ccc']. Como caso especial, s.split() (sin argumentos) divide con todos los espacios en blanco.
  • s.join(list) -- Lo opuesto de split(), une los elementos de la lista dada utilizando la cadena s como delimitador. ej. '---'.join(['aaa', 'bbb', 'ccc']) -> aaa---bbb---ccc

Lista completa de métodos: http://docs.python.org/library/stdtypes.html#string-methods

Ejercicio

El usuario envía un texto, que es guardado en la variable texto.
El programa debe convertirlo a mayúsculas, eliminar los espacios en blanco del principio y el final, y mostrar la nueva cadena por pantalla.
Separar la nueva cadena por espacios en una lista, y mostrar la lista por pantalla.
Además el usuario guarda en la variable autor su nombre, mostrar el texto nuevo con el final ", por autor". Por ejemplo "HOLA, por Juan"

Cadena de ejemplo:
texto = "  Esto es importante!!!        "
autor = "Alf" 

Ejercicio resuelto


SLICES (tajadas)

El slice s[comienzo:fin] es el elemento comenzando en comienzo y llegando, pero no incluyendo fin.
Por ejemplo con s = "Hello":

  •     s[1:4] es 'ell'
  •     s[1:] es 'ello'
  •     s[:] es 'Hello'
  •     s[1:100] es 'ello'

SLICES (tajadas)

 

  • s[-1] es 'o' -- último caracter (1ero desde el final)
  • s[-4] es 'e' -- 4º desde el final
  • s[:-3] es 'He' -- yendo hasta, pero no incluyendo, los últimos 3 caracteres.
  • s[-3:] es 'llo' -- empezando con el 3er caracter desde el final, y llegando hasta el final de la cadena. 

Cadena %

El operador % es una alternativa de concatenamiento con una lista, convierte los formatos si se especifican el tipo: %s es cadena, %d es entero y %f/%g son puntos flotantes, de la forma:

texto = "%d cerditos salgan o %s, %s, y %s" % (3, 'soplare', 'soplare', 'su casa tirare') 
o separada en líneas con paréntesis
texto = ("%d cerditos salgan o %s, %s, y %s" % 
    (3, 'soplare', 'soplare', 'su casa tirare')) 

Cadenas i18n (Unicode)

Las cadenas en python 2.x no son unicode, hay que darles el prefijo 'u'

por ejemplo:
texto = u'sopló'
print no se lleva bien con esto
django tiene una utilidad, llamada smart_unicode, para ahorrarnos dolores de cabeza

Sentencia IF

No usa llaves, sino los 2 puntos : y la indentación
puede tener elif y else
Todos los valores "cero" son considerados Falso: None, 0, cadena vacía, lista vacía, diccionario vacío, así como False
Operadores de comparación: ==, !=, <, <=, >, >=
Operadores Booleanos: and, or, not
if speed >= 80:
    print 'Licencia y tarjeta verde por favor'
    if humor == 'terrible' or velocidad >= 80:
      print 'Tiene el derecho de permanecer callado.'
    elif mood == 'malo' or speed >= 60:
      print "Voy a tener que escribirle una multa."
      write_ticket()
    else:
      print "Por favor intente ir a menos de 40" 
omitir los ":" es el error más común

Ejercicios

El repositorio con los ejercicios se encuentra en:



Material de lectura extra

Python - Cadenas

By Guillermo Nuñez

Python - Cadenas

  • 2,412