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 7 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]”)