Entradas y salidas en Python 3

Conceptos:

  • Entradas: Formas de capturar datos o información desde el exterior
  • Salidas: Formas de presentar los datos o información al exterior

 

1. Inputs

Con la función input tomamos una cadena de texto desde el teclado, si queremos que estos datos funcionen como números tendremos que transformarlos.

decimal = float( input(“Introduce un número decimal con punto: “) )

O:

valores = []

print(“Introduce 3 valores”)

for x in range(3):

valores.append( input(“Introduce un valor >”))

Esta manera de recoger datos no se suele utilizar, a no ser que estemos trabajando con scripts, lo más normal es tomar dichos datos de  ficheros o bases de datos o utilizar interfaces gráficas como formularios.

2. Script

Es un guión que sigue una serie de instrucciones, que se irán ejecutando de arriba a abajo, guardado en un solo fichero y ejecutado desde un intérprete.

Puede tomar argumentos en el momento de la ejecución.

Ejemplo código:

# Primero Script

print(“Hola, bienvenido a tu primer script”)

Para ejecutar un script desde la consola de comandos:

  • Desde Windows: python primer_script.py
  • Desde Linux: python3 primer_script.py

Para enviar argumentos, tenemos que añadirlos al final de la línea, todo lo que escribamos se pasará como texto. Pero si queremos enviar varios valores, la cadena de texto deberá ir entre comillas:

python primer_script.py “Una cadena de texto” 5

Modificación en el código para poder manejar los datos que pasamos por argumentos y tendremos que importar la librería sys para trabajar con el sistema.

import sys

print(“Hola,bienvenido a tu primer script”)

print(sys.argv)

Hola, bienvenido a tu primer script

[‘primer_script.py’,’Una cadena de texto’,’5′]

Código script : donde mostrará el primer argumento tantas veces como se haya indicado en el segundo argumento.

import sys

texto = sys.argv[1] #Se indica 1 ya que el primer elemento era el nombre del script

repeticiones = int(sys.argv[2])

for r in range(repeticiones):

print (texto)

Ejecución: python3 escribir_lineas.py “Hola” 3

Hola

Hola

Hola

Nota: en este script si no indicamos los argumentos daría error ya que el programa esta teniendo en cuenta que estos argumentos se van a indicar.Para que esto no sea así siempre le podemos realizar al script una pequeña modificación.

import sys

if len(sys.argv) == 3:

texto = sys.argv[1]

repeticiones = int(sys.argv[2])

for r in range(repeticiones):

print(texto)

else:

print(“Error, introduce los argumentos correctamente”)

print(“Ejemplo: escribir lineas.py ‘Texto’ 5”

Ejecución: python3 escribir_lineas.py

Error, introduce los argumentos correctamente

Ejemplo: escribir_lineas.py ‘Texto’ 5

El editor sublime text por defecto ya guarda el fichero con la codificación UTF-8, si lo guardamos sin dicha codificación y ejecutamos el script teniendo caracteres como tildes y ñ, este nos dará un error de codificación.

3.Salidas

Ejemplo clásico con comas:

v = “otro texto”

n = 10

print(“Un texto”,v,“y un número”,n)

Un texto otro texto y un número 10

El ejemplo anterior es “cómodo” siempre y cuando tengamos pocas variables que mostrar ya que no nos liaremos demasiado entre las cadenas de texto y las variables.

Otra forma de mostrar la información es usando el método .format

c = “Un texto ‘{}’ y un número ‘{}”” .format(v,n)

# Entre los paréntesis de .format se indican por orden de visualización las variables

print(c)

Un texto ‘otro texto’ y un número ’10’

Incluso podríamos cambiar el orden indicando el índice dentro de las llaves:

print( “Un texto ‘{1}’ y un número ‘{0}'”.format(v,n) )

Un texto ’10’ y un número ‘otro texto’

Una tercera forma:

print( “Un texto ‘{texto}’ y un número ‘{numero}'”.format(numero=n,texto=v) )

Un texto ‘otro texto’ y un número ’10’

El método format nos permite alinear también la cadena de texto:

print( “{:>30}”.format(“palabra”) ) #Alineación a la derecha en 30 caracteres

palabra

print( “{:<30}”.format(“palabra”) ) #Alineación a la izquierda en 30 caracteres

palabra

print( “{:^30}”.format(“palabra”) ) # Alineación al centro

palabra

print( “{:.5}”.format(“palabra”) ) # Truncamiento a 5 caracteres

palab

print( “{:>30.3}”.format(“palabra”) ) # Alineamiento a la derecha con truncamiento

pal

Otra opción que nos ofrece format es el formateo de número:

# Formateo de número enteros, rellenados con espacios

print(“{:4d}”.format(10))

Se mostraría el 10 dejando 2 espacios en blancos a la izquierda.

# Formateo de números enteros, rellenados con ceros

print(“{:04d}”.format(10))

Después de los se indicaría el carácter que queremos que se muestra, en este caso el número 0.

# Formateo de número flotantes

print(“{:.2f}”.format(3.1415926)) # :.2f Para mostrar el número de decimales

3.14

# Formateo de números flotantes, rellenados con ceros

print(“{:07.3f}”.format(3.1415926))

print(“{:07.3f}”.format(153.21))

003.142

153.210

Nota: Si sustituimos el 07 por un solamente, se rellenarían de espacios y no de ceros, indicaría que se mostrarán 7 dígitos de los cuales: 3 son decimales, el punto cuenta como un carácter y en la parte entera solo tenemos el 3, quedando finalmente 2 espacios en blanco a la izquierda.

 

Ejercicios resueltos

1) Formatea los siguientes valores para mostrar el resultado indicado:

  • “Hola Mundo” -> Alineado a la derecha en 20 caracteres
  • “Hola Mundo” -> Truncamiento en el cuarto carácter (indice 3)
  • “Hola Mundo” -> Alineamiento al centro en 20 caracteres con truncamiento en el segundo carácter (indice 1)
  • 150 -> Formateo a 5 números enteros rellenados con ceros
  • 7887 -> Formateo a 7 número enteros rellenados con espacios
  • 20.02 -> Formateo a 3 número enteros y 3 números decimales

print( “{:>20}”.format(“Hola Mundo”) )

print( “{:.3}”.format(“Hola Mundo”) )

print( “{:^20.1}”.format(“Hola Mundo”) )

print( “{:05d}“.format(150) )

print( “{:7d}“.format(7887) )

print( “{:07.3f}”.format(20.02) )

 

2) Crea un script llamado tabla.py que realice las siguientes tareas:

  • Debe tomar 2 argumentos, ambos números enteros positivos del 1 al 9, sino mostrará un error.
  • El primer argumento hará referencia a las filas de una tabla, el segundo a las columnas.
  • En caso de no recibir uno o ambos argumentos, debe mostrar información acerca de cómo utilizar el script.
  • El script contendrá un bucle for que itere el número de veces del segundo argumento.
  • Dentro del for, añade un segundo for que itere el número de veces del segundo argumento.
  • Dentro del segundo for ejecuta una instrucción print(“*”,end=) para evitar el salto de línea.

Recordatorio: para capturar los argumentos debes utilizar el módulo sys y su lista argv.

import sys

if len(sys.argv) == 3:

filas = int(sys.argv[1])

columnas = int(sys.argv[2])

if filas < 1 or filas > 9 or columnas < 1 or columnas > 9:

print(“Error – Filas o columnas incorrectas”)

print(“Ejemplo: tabla.py [1-9] [1-10]”)

else:

for f in range(filas):

print(” “)

for c in range(columnas):

print(“*”, end=“”)

else:

print(“Error – Argumentos incorrectos”)

print(“Ejemplo: tabla.py [1-9] [1-10]”)

3) Crea un script llamado descomposicion.py que realice las siguientes tareas:

  • Debe tomar 1 argumento que será un número entero positivo
  • En caso de no recibir un argumento, debe mostrar información acerca de cómo utilizar el script.

El objetivo del script es descomponer el número en unidades, decenas, centenas, miles… tal que por ejemplo si se introduce el número:

> 3647

El programa deberá devolver una descomposición línea a línea como la siguiente utilizando las técnicas de formateo:

> 0007

    0040

    0600

    3000

import sys

if len(sys.argv) ==2:

numero = int(sys.argv[1])

if numero < 0 or numero > 9999:

print(“Error – Número es incorrecto”)

print(“Ejemplo: descomposicion.py [0-9999]”)

else:

cadena = str(numero)

longitud = len(cadena)

for i in range(longitud):

print( “{:04d}”.format( int(cadena[longitud –1 -i]) * 10 ** i ))

else:

print(“Error – Argumentos incorrectos”)

print(“Ejemplo: descomposicion.py [0-9999]”)

 

Autor entrada: CharlieJ

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *