Entrada y salida [Python]

Imports

Los imports en Python gastan tiempo y memoria, así que es mejor importar solo lo que se va a usar.

Entrada

En Python se leen las líneas enteras con input() en formato str.

# LEER UNA LINEA
cadena = input() # leer una cadena

En muchos casos el input lo querremos en formato número o lista. Estas funciones pueden ser muy útiles:

  1. split() te divide la línea por espacios (o por el string que se pase por argumento)

  2. int() y float() son funciones que convierten cadenas a enteros o números reales.

  3. map(f, lista) aplica una función a cada elemento de la lista. Esta función puede ser, por ejemplo, un casting. El return de map es un iterador y no una lista, suele ser útil (aunque no siempre necesario) convertirlo a lista list.

Split

# LEER UNA LINEA Y DIVIDIRLA
x, y = input().split() # Si conocemos de antemano el numero de elementos que hay
l = input().split() # Si no conocemos el numero de elementos que hay creamos una lista

Leer números

# LEER NUMEROS
entero = int(input()) # leer un entero
decimal = float(input()) # leer un decimal

Leer una lista de números

# LEER UNA LISTA DE NUMEROS
l = list(map(int, input().split())) # leer una lista de enteros

El input se acaba sin avisar

Algunos problemas acaban cuando no quedan líneas que leer.

# EL INPUT SE ACABA SIN AVISAR
while True:
    try:
        x = input()
        # CODE HERE
    except EOFError:
        break

Salida

La salida se hace con print. Esta función añade por defecto un salto de línea al final.

Formatear strings

Un string se formatea de forma muy sencilla con f''. Esto permite meter variables directamente en el string.

x = 3
y = 5
print(f'{x} + {y} = {x+y}') # == "3 + 5 = 8"

Argumentos de print

Print permite varios argumentos, los cuales se convertirán a string y se imprimirán separados por un espacio. Si se quiere separar por otro string, se puede usar el argumento sep, que por defecto es un espacio. Para determinar el final de la línea, se puede usar el argumento end, que por defecto es un salto de línea.

print(3, 5, 8) # == "3 5 8"
print(3, 5, 8, sep=' + ') # == "3 + 5 + 8"
print(3, 5, sep=' + ' , end=' = 8\n') # == "3 + 5 = 8"

Ejemplo

Pongamos un problema cuyo input serán unas listas de números donde el primero de cada línea indica el número de elementos de esa línea. El input acabará sin avisar. La salida devolverá la suma de los elementos de cada línea.

Input:
3 1 2 3
4 4 5 6 7
Output:
6
22
while True:
    try:
        l = list(map(int, input().split()))
        n = l[0]
        print(sum(l[1:]))
    except EOFError:
        break