PRINT()
En los próximos post voy a transcribir los apuntes que me he ido haciendo a
medida que estaba aprendiendo python. Espero que puedan seros de utilidad.
Son muy sencillos y están hechos a modo de chuleta para poder consultar
cuando se necesite.
Puedes consultar la documentación oficial para conocer todos los métodos String disponibles.
Empezamos.
La función Print de python y formatos de salida de cadenas de texto o
string.
La función print() nos sirve generalmente para mostrar un
mensaje generalmente en pantalla, aunque también se podría hacer en
cualquier otro dispositivo de salida estándar. El mensaje a mostrar
puede ser un string (texto) o cualquier otro objeto que previamente debe ser
convertido a string antes de ser visualizado en la pantalla.
Podemos pasar los valores asignados a una variable como parámetros de la función print(). Podemos poner tantos parámetros
como queramos separados por comas. Si lo hacemos de esta forma,
automáticamente python nos pone un espacio en blanco después de cada
coma.
>>> nombre = "Andrés"
>>> edad = 40
>>> print("Mi nombre es", nombre, "y tengo" , edad, "años")
Mi nombre es Andrés y tengo 40 años
Si tenemos solamente cadenas de texto podemos concatenarlas o unirlas usando el signo "+" pero ten en cuenta que se unirán
tal cual estén sin que automáticamente se pongan espacios en blanco. Por
ejemplo:
>>> nombre = "Andrés"
>>> edad = "40"
>>> print("Mi nombre es"+ nombre +"y tengo"+ edad + "años")
Mi nombre esAndrésy tengo40años
Podemos justificar el texto de cualquier string usando los
siguientes métodos aplicados al string en cuestión:
- .rjust(n) à justificar el texto a la derecha
- .center(n) à centrar el texto
- .ljust(n) à justificar el texto a la izquierda.-
En donde n es el tamaño de la cadena a mostrar que tendrá
que ser mayor que el texto. Esto se suele utilizar para mejorar la
presentación de los datos mostrados por pantalla.
Ejemplo de .rjust(n)
>>> cadena = "El perro de San Roque"
>>> cadena.rjust(50)
El
perro de San Roque
Ejemplo de .center(n)
>>> cadena = "El perro de San Roque"
>>> cadena.center(50)
El
perro de San Roque
Ejemplo de .ljust(n)
>>> cadena = "El perro de San Roque"
>>> cadena.ljust(50)
El perro de San Roque
Insertar el valor de una variable dentro de una cadena de texto.
Puedes encontrar toda esta información ampliada en el documento de
python PEP 3101.
En muchas ocasiones necesitaremos imprimir por pantalla un texto pero
dentro del mismo querremos introducir el valor de variables.
Esto, podemos hacerlo de 3 formas:
1) Utilizando el operador “%”. Pasamos los valores a imprimir
indicando de que tipo es la variable a mostrar y pasando los datos a
imprimir como una tupla ( ) o un diccionario { }
Carácter |
Tipo de significado |
s |
Cadena de Texto |
d |
Número Entero |
f |
Número Flotante |
e |
Número Real en formato exponencial |
o |
Número Octal |
x |
Número Hexadecimal |
Pasando los datos como una tupla () o un diccionario {}
>>> nombre = "Andrés"
>>> edad = 45
>>> print('Su nombre es %s y tiene %d años' %(nombre, edad))
Su nombre es Andrés y tiene 45 años
>>> nombre = "Andrés"
>>> edad = 45
>>> print('Su nombre es %(name)s y tiene %(age)d años' %{'name':nombre, 'age':edad})
Su nombre es Andrés y tiene 45 años
2) Utilizando el método str.format().
Se utiliza de una forma muy parecida al anterior.
>>> nombre = "Andrés"
>>> edad = 45
>>> print('Su nombre es {0} y tiene {1} años'.format(nombre,edad))
Su nombre es Andrés y tiene 45 años
En donde {0} hace referencia al primer argumento de la función
format, en nuestro caso la variable nombre y {1} hace referencia al
segundo argumento, edad. Si no los especificas, es decir ponemos solo los
{} sin número, los va cogiendo por orden, en nuestro caso en el
primero iría el nombre y en el segundo la edad. No obstante con
el número dentro del {} haces referencia a que variable se insertará, lo
puede especificar tu.
Otra forma de hacerlo sería la siguiente:
>>> nombre = "Andrés"
>>> edad = 45
>>> print('Su nombre es {name} y tiene {age} años'.format(name=nombre,age=edad))
Su nombre es Andrés y tiene 45 años
3) F-strings. Formatear el string. Para mí es la forma más sencilla, solo tenemos que poner una f delante del texto, que en python siempre va entre " " e insertar
dentro de {} las variables a mostrar.
>>> nombre = "Andrés"
>>> edad = 45
>>> print(f'Su nombre es {nombre} y tiene {edad} años')
Su nombre es Andrés y tiene 45 años
Dar formato a una cadena de texto.
Hay ocasiones en que es útil el dar un determinado formato a las cadenas de
caracteres a la hora de imprimirlas por pantalla para hacerlo más legible.
Esto se puede conseguir con cualquiera de los 3 métodos anteriores, aunque
por modernidad y rapidez yo voy a usar el tercero.
Para dar formato a un string simplemente ponemos
":" después de la variable y dentro de los {} y
añadimos los parámetros que nos interesen para darle
formato. Para que quede clara la idea vamos a ver un ejemplo sin formatear y
otro aplicando un formato.
Creamos una lista con 5 números enteros y queremos mostrarlos por pantalla
junto a su suma, como si los estuviéramos sumando en papel.
Sin formato:
>>> lista = [3000, 400, 17_000, 25, 7]
>>> for i in lista:
>>> print(i)
>>> print("__________")
>>> print(sum(lista))
3000
400
17000
25
7
__________
20432
Si queremos que quede como cuando realizamos una suma en papel tenemos que mostrar los números alineados a la derecha. Esto lo conseguimos formateando la salida de esta forma:
>>> lista = [3000, 400, 17_000, 25, 7]
>>> for i in lista:
>>> print(f"{i:10}")
>>> print("__________")
>>> print(f"{sum(lista):10}")
3000
400
17000
25
7
__________
20432
Cuando ponemos entre llaves la variable a sustituir podemos agregar luego
los dos puntos y la cantidad de espacios que ocupará la variable. Por
defecto dentro de ese espacio definido los caracteres se alinean a la
derecha ocupando los espacios. También podemos colocar entre {} la
llamada a una función (la función sum retorna la suma de todos los valores
de la lista.
Detrás de los ':' podemos definir todos estos argumentos. Todos ellos son
opcionales y su orden de aparición sería el siguiente:
[[relleno]alineación][signo][#][0][anchura_mínima][.precisión][tipo]
[[relleno]alineación]
Los argumentos del parámetro alineación pueden ser los
siguientes:
'<' - Obliga a los caracteres del campo a alinearse a la izquierda
dentro de los espacios. (Por defecto)
'>' - Obliga a los caracteres del campo a alinearse a la derecha dentro
del espacio disponible.
'=' - Obliga a que los caracteres de relleno ser coloquen después del signo
(si lo hay) pero antes de los dígitos. Esta opción se usa para imprimir
campos con el formato +000000120. Esta opción de alineación solo es válida
para tipos numéricos.
'^' - Obliga a los caracteres del campo a centrarse dentro de los
espacios.
Solamente si usamos el parámetro alineación podemos usar junto con él, el
parámetro relleno. El carácter opcional de relleno
índica el carácter que queremos que se use para rellenar el
campo al ancho mínimo que hayamos definido. Como ya dijimos antes, si
utilizamos este carácter de relleno, debe ir seguido de una bandera de
alineación.
[signo]
Solo es válido para valores numéricos y puede ser uno de los
siguientes:
'+' - Indica que se debe usar el signo tanto para números positivos
como negativos.
'-' - Indica que se debe usar el signo solamente para los números
negativos (por defecto).
' ' - (un espacio en blanco) Indica que se debe usar un espacio
inicial para los números positivos.
[#]
Si se utiliza este parámetro significa que los números enteros se
formatearán de una "forma alternativa". Esto quiere decir que la salida para
los números binarios, octales y hexadecimales tendrá el prefijo "Ob", "Oo" y
"Ox", respectivamente.
[anchura_mínima]
Es un número entero que va a definir la anchura mínima del campo. Si no se especifica, el ancho del campo estará determinado por el
contenido. Si el campo anchura_mínima está precedido por un
carácter cero ("ose el número 0") se habilita el relleno con ceros.
Esto es lo mismo que un tipo de alineación con el argumento "=" y un
carácter de relleno de 0 (ceros).
lista = [3000, 400, 17_000, -25, 7]
for i in lista:
print(f"{i:010}")
print("__________")
print(f"{sum(lista):10}")
Salida:
0000003000
0000000400
0000017000
-000000025
0000000007
__________
20382
[.precisión]
Es un número decimal que indica cuantos dígitos deben mostrarse después del
punto
decimal.
Para los tipos no numéricos, el campo indica el tamaño máximo del campo; en
otras
palabras, cuantos caracteres se usarán del contenido del campo.
La .precisión se ignora cuando se trata de números enteros.
[tipo]
Define como deben presentarse los datos.
Los tipos de presentación para números enteros son:
'b' - Binario. El número se muestra en base 2.
'c' - Carácter. Convierte el entero al correspondiente carácter Unicode
antes de imprimirlo.
'd' - Entero Decimal. El entero se muestra en base 10.
'o' - Formato Octal. El número se muestra en base 8.
'x' - Formato Hexadecimal. El número se muestra en base 16, usando letras
minúsculas para los dígitos superiores a 9.
'X' - Formato Hexadecimal. El número se muestra en base 16, usando letras
mayúsculas paras los dígitos superiores a 9.
'n' - Número. Es lo mismo que 'd', excepto que se usa la configuración
local actual para insertar el carácter se separación en los números.
'' (Ninguno espacio en blanco) - lo mismo que 'd'
Los tipos de presentación de punto flotante disponible son:
'e' - Notación Exponencial. Imprime el número en notación científica
usando la letra "e" para indicar el exponente.
'E' - Notación Exponencial. Igual que el caso anterior solamente que el
número se convierte en Mayúsculas.
'f' - Punto Fijo. Muestre el número como un numero de punto fijo.
'F' - Punto Fijo. Igual que el caso anterior pero excepto que el número
se muestra en mayúsculas.
'g' - Formato General. Imprime el número como un número de punto fijo a
nos ser que sea demasiado grande en cuyo caso se muestra en notación
exponencial "e".
'G' - Formato General. El mismo caso que en el punto anterior excepto que
se utiliza la presentación "E".
'n' - Número. Es lo mismo que 'g', excepto que usa la configuración
regional actual para insertar el carácter de separación de los
números.
'%' - Porcentaje. Multiplica el número por 100 y muestra el número en
formato fijo "f", seguido del signo de porcentaje (%).
'' (Ninguno) - similar a 'g', excepto que imprime al menos un dígito
después del punto decimal.
Aunque parece complicado en realidad es bastante sencillo, solo debes tener
claro cómo quieres formatear la salida. Pondré un ejemplo donde aparecen
gran parte de los argumentos:
lista = [3000, 400.132, 17_000, -25, 7]
for i in lista:
print(f"{i:@>+10.2f}")
print("__________")
print(f"{sum(lista):10}")
Salida:
@@+3000.00
@@@+400.13
@+17000.00
@@@@-25.00
@@@@@+7.00
__________
20382.132
Otras cosas que se pueden aplicar a la función Print().
Cuando utilizamos esta función automáticamente imprime al finalizar de
mostrar los datos
por pantalla, un salto de línea. Sin embargo, puede que hay ocasiones en
que nos interese
que esto no ocurra y que el siguiente print() vaya a continuación del
anterior.
Esto se puede conseguir utilizando el parámetro end="".
Dentro de las comillas podemos poner en lo que nos interese que termine la
impresión de print; que termine sin más end="", que ponga un espacio con el siguiente print end=" ", que ponga un punto,
end="." o lo que
se te ocurra.
Por ejemplo, la función print() de forma estándar mostraría:
print("hola")
print("¿Cómo estás?")
Salida:
hola
¿Cómo estás?
Sin embargo, me gustaría que no hiciese el salto de línea y que lo
escribiese todo seguido dejando un espacio en blanco entre ambos
print().
print("hola", end=" ")
print("¿Cómo estás?")
Salida:
hola ¿Cómo estás?
- En otras ocasiones puede ocurrir lo contrario, que dentro de una
instrucción print() quieras hacer un salto de línea. Pues esto es tan
sencillo como utilizar el carácter especial \n
dentro del texto en el que quieras realizarlo.
print("Esta es la primera linea\ny esta la segunda")
Salida:
Esta es la primera línea
y esta la
segunda
Después de ver esto, te habrás dado cuenta que el parámetro por defecto de print() es end="\n"
Otros caracteres especiales que se pueden utilizar en las cadenas son:
Caracteres de escape en python.
\n => Salto de línea.
\t => Tabulación.
\r => Retorno.
\f => Salto de Página.
\v => Tabulación vertical.
\ => Por si solo ignora el carácter que le sigue. Escapa ese carácter. Por ejemplo
para poner unas comillas en un texto y que no de error una de las formas de hacerlo es:
print('\"Este texto va entre comillas\"')
Otros métodos para la manipulación de cadenas.
Las cadenas son objetos inmutables parecidos a las tuplas. Se pueden recorrer, indexar y aplicar métodos que alteren su estructura. Veamos alguno de ellos.
Método len("cadena")
Nos indica la longitud de una cadena incluyendo los espacios en blanco.
>>> print(len("Dos y Dos"))
9
Método str.count(subcadena, [start = 0, end = len(str)])
Busca todas las subacenas que hay en el texto.
>>> print("El sueño de una noche de verano".count("a"))
2
>>> print("El sueño de una noche de verano".count("eño"))
1
>>> cadena = "El sueño de una noche de verano"
>>> print(cadena.count("o",8,len(cadena)))
2
Método str.find(valor, start = 0, end = len(str))
Devuelve la posición de la primera ocurrencia de la subcadena. Si no existe la subcadena devuelve -1.
>>> cadena = "Pienso luego existo"
>>> print(cadena.find("ego"))
9
>>> print(cadena.find("pe"))
-1
Una variante es str.rfind(valor, start, end) que devuelve el índice de la última ocurrencia de la cadena. Veamos un ejemplo de la diferencia de ambos métodos:
>>> cadena = "ab c ab"
>>> print(cadena.find("ab"))
0
>>> print(cadena.rfind("ab"))
5
Método str.index(valor, inicio, fin) y str.rindex(valor, inicio, fin). Es igual que el método anterior, solo se diferencia en que en caso de no encontrarse el valor a buscar da un error.
>>> cadena = "ab c ab"
>>> print(cadena.index("f"))
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(cadena.index("f"))
ValueError: substring not found
Método str.zfill(n).
Se utiliza para rellenar con ceros a la izquierda una cadena de caracteres que generalmente suele ser un número. (n) es el número del tamaño del campo. El espacio sobrante entre el tamaño del campo y el tamaño de los caracteres se rellenarán con ceros.
>>> print("4,56".zfill(6))
004,56
Método str.capitalize().
Se utiliza para que el primer carácter de la cadena aparezca en mayúsculas y el resto en minúsculas.
>>> print("vino de AlgeCiras".capitalize())
Vino de algeciras
Método str.upper() o str.lower(). Se utilizan para poner todos los caracteres que conforman una cadena de texto en Mayúsculas o Minúsculas.
>>> print("todo en mayusculas".upper())
TODO EN MAYUSCULAS
>>> print("TODO el texto en MINúSCULAS".lower())
todo el texto en minúsculas
Método str.swapcase().
Intercambia mayúsculas por minúsculas y viceversa.
>>> print("vino de AlgeCiras".swapcase())
VINO DE aLGEcIRAS
Método str.strip("<caracteres>").
Devuelve una copia de la cadena tras eliminar los caracteres al principio y al final de la misma especificados en <caracteres>. Si no se pone argumento elimina los espacios en blanco (\), los saltos de línea (\n) y las tabulaciones (\t) del principio y del final.
>>> print(" vino de AlgeCiras ".strip())
vino de AlgeCiras
# Sin los espacios en blanco al principio y al final.
>>> print("ab c ab".strip("a"))
b c ab
.lstrip() y rstrip() realizan la misma función solo que el primero lo hace solo en el principio de la cadena y el segundo solo al final de la misma.
Método str.replace(x, y, [nº veces])
En una cadena remplaza el carácter x por el y el número de veces indicado. Si no se especifica el número de veces se reemplaza el caracter x por el y en TODA la cadena.
>>> print("murcielago".replace("o","a"))
murcielaga
Método str.split([separador], [max nº de veces])
Separa los elementos de una cadena en una lista. Si no especificamos un separador se sobreentiende que se utiliza un espacio en blanco. Por ejemplo para dividir una frase en las palabras que la componen podemos utilizar:
>>> print("Eloisa está debajo de un almendro".split())
['Eloisa', 'está', 'debajo', 'de', 'un', 'almendro']
print("Eloisa está debajo de un almendro".split(" ",2))
['Eloisa', 'está', 'debajo de un almendro']
Un método similar es str.splitlines() que devuelve en una lista todas las líneas de una cadena o párrafo, para entendernos. En este caso el separador se basa en los saltos de línea encontrados (\n).
Lo contrario a estos métodos seria "separador".join(iterable) que une una lista de cadenas usando un separador.
>>> lista = "Eloisa está debajo de un almendro".split() >>> print(lista) ['Eloisa', 'está', 'debajo', 'de', 'un', 'almendro'] >>> print(" ".join(lista)) Eloisa está debajo de un almendro
Métodos str.startwith(valor) y str.endwith(valor)
Como su nombre indica devuelve True si la cadena empieza o termina con el valor introducido. False en caso contrario.
No hay comentarios:
Publicar un comentario