Entrada/salida con formato
Ya sabes usar input() y print() en su forma más básica. En este apartado profundizamos en cómo dar un formato más cuidado a lo que se muestra por pantalla con print().
Salida de datos por pantalla con print()
Como definición base, podemos identificar la función print() de Python como una utilidad orientada a mostrar por pantalla aquella información deseada, ya sea desde una simple presentación del programa que ejecutarán nuestras líneas de código o mostrando al usuario lo realizado por las mismas.
Argumentos de la función print
La estructura base de print es:
print(value, sep, end, file, flush)
Los tres primeros argumentos son los más interesantes. Esta es su utilidad:
value: Se entiende como los valores que vamos a mostrar en pantalla. Este puede ser un texto definido entre comillas, variables, etc.sep: Con esto, definimos cómo se van a separar los valores definidos anteriormente, pudiendo definir desde un simple espacio en blanco hasta casi cualquier cosa. Por defecto es un espacio.end: Sirve para definir qué deseamos que aparezca al final de la cadena de texto que aparece por pantalla. Por defecto es el carácter\n(salto de línea).
Uso simple
Para el uso más simple existente ya tenemos ejemplos en apartados anteriores. Sin embargo, la estructura para concatenar múltiples textos es la siguiente:
print("Texto 1 " + "Texto 2 " + "Texto 3")
Mostraría por pantalla lo siguiente:
Texto 1 Texto 2 Texto 3
Esta podría alargarse tanto como quisiéramos. Sin embargo, presenta varios problemas que pueden afectarnos. Primero, las separaciones debemos definirlas dentro de las cadenas de texto y además debemos asegurarnos de que las variables sean de tipo string. Si una variable es numérica o de cualquier otro valor, esta sintaxis no funcionará y producirá un error.
Podemos concatenar texto para que se muestre por pantalla indicando cada cadena como un argumento distinto. De este modo, las variables no necesitan ser de tipo numérico. Este es el modo recomendado.
var_string = 'Texto 2'
var_numerica = 6
print("Texto 1", var_string, var_numerica)
Mostraría por pantalla lo siguiente:
Texto 1 Texto 2 6
Como podemos observar, se utiliza como separador de cada cadena el espacio y al finalizar la cadena se introduce un salto de línea.
Podemos modificar el argumento sep produciendo los siguientes resultados.
variable = 2
print("Texto1", "Texto2", variable, sep=(","))
# Salida: Texto1,Texto2,2
print("Hola", "mundo", sep = "-")
# Salida: Hola-mundo
Para separarlos mediante tabulación se emplea el carácter \t:
print("Hola", "mundo", sep="\t")
# Salida: Hola mundo
También podemos modificar el argumento end. Si lo modificamos recordad que no se añade salto de línea.
variable = 2
print("Texto 1", "Texto 2", variable, sep=(","), end=(". Y listo.\n"))
# Salida: Texto 1,Texto 2,2. Y listo.
Cadenas f
El método format() permite sustituir el interior de unos corchetes por variables o cadenas. Este método puede ejecutarse añadiendo una f antes de la definición de la cadena.
age = 20
print(f"tienes {age} años")
# Salida: tienes 20 años
Dentro de las llaves de una f-string no tiene por qué haber solo el nombre de una variable: puede haber cualquier expresión (una operación aritmética, una llamada a función...), y Python la evalúa y sustituye el resultado directamente, sin que tengas que calcularla antes y guardarla en una variable aparte:
nota1 = 7
nota2 = 8
print(f"La media es {(nota1 + nota2) / 2}")
# Salida: La media es 7.5
También se puede utilizar del siguiente modo:
print('El helado de {sabor} es mi {adjetivo}.'.format(sabor='pistacho', adjetivo='favorito'))
# Salida: El helado de pistacho es mi favorito.
Este método es quizás algo más complejo, por lo que profundizamos en su explicación:
La base a entender sería:
str.format()
-
Donde
strsería una cadena de texto. En este caso tenemos:"El helado de {sabor} es mi {adjetivo}."En esta cadena estamos indicando que
saboryadjetivoserán reemplazados por un valor que nosotros proporcionemos dentro deformat(). -
La función
format()recibe lo siguiente:format(sabor='pistacho', adjetivo='favorito')Estos parámetros formatearán la cadena de texto proporcionada sustituyendo los identificadores
saboryadjetivopor los valores asignados como argumentos. Este tipo de argumentos se denominan parámetros clave (keyword arguments).
De forma alternativa, se podría hacer con índices de la siguiente manera (se denomina positional arguments):
'El helado de {0} es mi {1}.'.format('pistacho','favorito')
Alinear texto
Se puede alinear texto usando el parámetro {:>Numero}.format.
Por ejemplo:
print( "{:>30}".format("palabra") )
Esto significa que alinea "palabra" 30 caracteres a la derecha.
palabra
Añadir líneas en blanco
La función print también puede ser utilizada para añadir líneas en blanco de forma sencilla y hacer el programa más legible.
print("Texto")
print()
print("más texto")
Texto
más texto
Decimales con la función print
También se puede especificar los decimales con los que queremos que se muestre una operación. Para esto se utiliza la siguiente simbología :0.3f, los : indican la edición de formato, . para formato decimal y 3 el número de decimales que debe mostrarnos por pantalla, el f al final indica el tipo, en este caso de punto fijo.
Ejemplo:
pi = 3.141595
print(f"{pi:0.4f}") # 3.1415
a = 6.5555
print(f"{a:0.2f}") # Salida: 6.56
b = 6.4444
print(f"{a:0.1f}") # Salida: 6.4
Con este método se aplica redondeo al número. Sería similar a utilizar función round().
Ejemplo:
pi = 3.141595
print(round(pi * 1000) / 1000 ) # 3.1415
a = 6.5555
print(round(a * 100) / 100) # Salida: 6.56
b = 6.4444
print(round(b * 10) / 10) # Salida: 6.4
Colores en la terminal
La terminal puede mostrar el texto en colores si se le envían unos códigos de escape ANSI: secuencias de caracteres especiales que no se muestran, sino que cambian el aspecto del texto que se imprime a continuación. En Python se escriben con \033[, seguido de un número que indica el color y de la letra m.
Cada color tiene una versión normal y otra más brillante:
| Color | Código normal | Código brillante |
|---|---|---|
| Negro (normal) / gris (brillante) | "\033[30m" | "\033[90m" |
| Rojo | "\033[31m" | "\033[91m" |
| Verde | "\033[32m" | "\033[92m" |
| Amarillo | "\033[33m" | "\033[93m" |
| Azul | "\033[34m" | "\033[94m" |
| Magenta | "\033[35m" | "\033[95m" |
| Cian | "\033[36m" | "\033[96m" |
| Blanco | "\033[37m" | "\033[97m" |
Además, existe un código para volver al aspecto por defecto:
| Código | Efecto |
|---|---|
"\033[0m" | Restablece el color por defecto |
El color se mantiene hasta que se restablece, por lo que siempre hay que terminar con el código "\033[0m":
ROJO = "\033[91m"
RESET = "\033[0m"
print(f"{ROJO}Error:{RESET} algo ha ido mal")
En la terminal, la palabra Error: se muestra en rojo y el resto del texto con el color habitual.
Si se combina un color con un especificador de anchura, este debe ir dentro de las llaves del propio valor, con el color fuera: f"{ROJO}{texto:>8}{RESET}". Si se coloreara primero el texto y después se le diera la anchura, los códigos de escape contarían como caracteres y el texto quedaría mal alineado.
Los códigos ANSI funcionan en el terminal integrado de VSCode. En algunos terminales antiguos de Windows los colores pueden no mostrarse.