07 - Curso de Python - Entradas y Salidas Standard

From ChuWiki
Jump to navigation Jump to search

Cualquier duda suelo atender en este foro de python

Todo el código de este curso de Python gratuito está en github https://github.com/chuidiang/chuidiang-ejemplos/tree/master/PYTHON/curso-python. Puedes usar línea comandos python para ir siguiendo los ejemplos.

Anterior: 06 - Curso de Python - Funciones -- Índice: Curso de Python -- Siguiente: 08 - Curso de Python - Modulos.

¿Qué es la entrada y salida standard?[edit]

Si arrancamos nuestro programa desde une terminal o ventana de comandos con algo como phyton miprograma.py, se conoce como entrada estándar lo que escribamos en esa ventana de comandos mientras nuestro programa esté arrancado. Nuestro programa es capaz de leer esos textos. La salida estándar es también esa ventana, nuestro programa es capaz de sacar texto en ella.

Lo de salida ya lo hemos visto en los ejemplos de capítulos anteriores. La función print() saca el texto que le indiquemos por la ventana de comandos. En este capítulo veremos la entrada y veremos algún detalle más de la salida.

Entrada estándar[edit]

Imagina que queremos pedirle algún dato al usuario, por ejemplo, su nombre su nombre para saludarle. Podemos hacer esto

>>> nombre = input('¿Como te llamas? ')
¿Como te llamas? Juan
>>> print('Hola ',nombre)
Hola  Juan

La función input() admite como parámetro un texto, que muestra por pantalla. Recoge lo que escribamos, hasta el retorno de carro que tenemos que apretar y devuelve dicho texto. En este caso se almacenará en la variable nombre.

Luego, usando print() con dos parámetros, sacamos el saludo 'Hola' y el nombre que el usuario ha escrito.

La función input() siempre nos devuelve una cadena de texto. Da igual que escribamos un nombre o un número, siempre devolverá un texto. ¿Cómo hacemos si queremos pedir un número?. Hay que recoger la cadena de texto y convertirla a número. Aquí tienes el ejemplo

>>> edad = input('Yo tengo 25 años. ¿Cuantos tienes tu? ')
Yo tengo 25 años. ¿Cuantos tienes tu? 20
>>> diferencia_edad = 25 - int(edad)
>>> print ('Te saco ', diferencia_edad, ' años')
Te saco  5  años

Hemos preguntado la edad y la guardamos, como cadena de texto, en la variable edad. En la siguiente línea calculamos la diferencia de edades entre 15 y lo que ha escrito el usuario. Para ello, convertimos edad a un entero usando la función int(). Esto nos permite hacer la resta. Finalmente, con la función print() y tres parámetros, dos de texto y el resultado de la resta, sacamos el texto final.

Otra función que nos puede servir es eval(). Esta función evalúa la cadena e incluso puede tratar de ejecutarla, como se ve en los siguientes ejemplos

>>> eval('2')
2
>>> eval('2+3')
5
>>> eval("print(4)")
4
>>> variable=1
>>> eval('variable+2')
3

Sin embargo, no se aconseja usarla cuando es el usuario el que introduce la cadena con un input(). Fíjate que avalúa números e incluso los suma, pero también ejecuta sentencias python, como en el ejemplo que hemos puesto que avalúe print() o incluso ve variables, como variable. Un usuario malintencionado que sepa python te puede hacer un buen desastre en tu código, ver información o incluso ejecutar código de borrado de ficheros.

Formatear la salida estándar[edit]

Para la salida estándar ya usamos la función print() y hemos visto que admite n parámetros, los saca todos por pantalla. Sin embargo, si lo que queremos es sacar una frase larga en la que partes de ella sean valores de variables, hay otras opciones más adecuadas. Veamos algunas. No son exactamente opciones de print(), sino de cadenas en general, pero nos pueden ayudar a formatear mejor una salida de texto.

>>> nombre='Pedro'
>>> print (f'Hola {nombre}')
Hola Pedro

Si a una cadena de texto la precedemos de f', podemos entonces usar en la cadena de texto variables puestas entre llaves {}. Phyton reemplazará el {variable} por el valor de la variable.

Detrás del nombre de la variable, separado por dos puntos :, podemos poner más detalle de cómo queremos que se formatee la cadena o el número. El "formato" general es variable:numero_total_caracteres.numero_decimalesX donde la X del final es una letra que indica el tipo de datos: s, d, f, %, etc. Veamos ejemplos

>>> a='a'
>>> b='b'
>>> # Al poner :4s, estamos diciendo que queremos que las cadenas ocupen 4 caracteres. Como solo tienen uno, mete detrás tres espacios.
>>> # Este formato es útil si queremos hacer tablas con columnas alineadas verticamente.
>>> f'{a:4s}{b:4s}'
'a   b   '
>>> a=4
>>> # Queremos que el entero ocupe cuatro caracteres. Mete espacios delante.
>>> f'{a:4d}'
'   4'
>>> # Si ponemos un 0 delante de 4d, entonces rellena con ceros en vez de con espacios.
>>> f'{a:04d}'
'0004'
>>> a=1.2
>>> # Con números flotantes (decimales) podemos decir cuántos decimales queremos. En este ejemplo
>>> # 5.2f quiere decir 5 caracteres en total incluyendo el punto decimal y 2 decimales.
>>> f'{a:5.2f}'
' 1.20'
>>> # Como con los enteros, si ponemos un 0 delante de 5.2f, rellena por delante con ceros.
>>> f'{a:05.2f}'
'01.20'
>>> a=0.05
>>> # Si en vez de f ponemos %, entiende que es un porcentaje. Multiplica el valor por 100 y 
>>> # saca el símbolo & detrás.
>>> f'{a:6.2%}'
' 5.00%'
>>> # También podemos poner ceros delante.
>>> f'{a:06.2%}'
'05.00%'

Usando el mismo formato, pero sin poner variables, tenemos la función format() que aplica a cadenas de texto. En este caso, en vez de variables, debemos indicar los valores a la función. Vamos algunos ejemplos

>>> '{} de {}'.format(1,2)
'1 de 2'

Ponemos la cadena con {} donde irían los valores, llamamos a su método format y pasamos tantos parametros como {} hayamos puesto. Podemos aquí aplicar las mismas reglas de formato que hemos comentado con f', solo que al no haber variable, pondríamos directamente :numero_caracteres.numero_decimalesX, sin nada delante. Solo un ejemplo

>> '{:5d} de {:05d}'.format(1,2)
'    1 de 00002'

En vez de nombre de variable, podemos poner el número del parámetro, por ejemplo

>>> '{1} de {0}'.format(1,2)
'2 de 1'

Aquí le hemos dado la vuelta a los parámetros. El {0} es el primer parámetro, es decir, el 1. El {1} sería el segundo parámetro, es decir, el 2. Obtenemos lo contrario que en el primer ejemplo. También podemos usar nombres, como en el siguiente ejemplo

>>> 'Hola {nombre} {apellido}, bienvenido'.format(apellido='Lopez', nombre='Juan')
'Hola Juan Lopez, bienvenido'

Esto nos vale también si tenemos un diccionario. Pasaríamos todos los parámetros como un único diccionario con todo ellos. Como sólo hay un parámetro, debemos usar dentro de la cadena {0} para acceder al diccionario. Y para una clave concreta, {0[clave]}. Veamos un ejemplo

>>> diccionario={'nombre':'Juan','apellido':'Lopez'}
>>> 'Hola {0[nombre]} {0[apellido]}, bienvenido'.format(diccionario)
'Hola Juan Lopez, bienvenido'

Por supuesto, detrás se puede poner dos puntos y el formato que queramos para ese dato.

Anterior: 06 - Curso de Python - Funciones -- Índice: Curso de Python -- Siguiente: 08 - Curso de Python - Modulos.