Saltar al contenido

EOFError: EOF al leer una línea

Solución:

width, height = map(int, input().split())
def rectanglePerimeter(width, height):
   return ((width + height)*2)
print(rectanglePerimeter(width, height))

Ejecutarlo así produce:

% echo "1 2" | test.py
6

Sospecho que IDLE simplemente está pasando una sola cadena a su script. El primero input() está sorbiendo toda la cuerda. Observe lo que sucede si coloca algunas declaraciones impresas después de las llamadas a input():

width = input()
print(width)
height = input()
print(height)

Corriendo echo "1 2" | test.py produce

1 2
Traceback (most recent call last):
  File "/home/unutbu/pybin/test.py", line 5, in <module>
    height = input()
EOFError: EOF when reading a line

Observe que la primera declaración de impresión imprime toda la cadena. '1 2'. La segunda llamada a input() levanta el EOFError (error de fin de archivo).

Entonces, una tubería simple como la que usé solo te permite pasar una cuerda. Por lo tanto, solo puedes llamar input() una vez. Luego debe procesar esta cadena, dividirla en espacios en blanco y convertir los fragmentos de cadena a ints usted mismo. Eso es lo que

width, height = map(int, input().split())

lo hace.

Tenga en cuenta que hay otras formas de pasar la entrada a su programa. Si hubieras corrido test.py en una terminal, entonces podrías haber escrito 1 y 2 por separado sin problema. O, podría haber escrito un programa con pexpect para simular una terminal, pasando 1 y 2 programáticamente. O bien, puede usar argparse para pasar argumentos en la línea de comando, lo que le permite llamar a su programa con

test.py 1 2

** Lo mejor es usar try except block para deshacerse de EOF **

try:
    width = input()
    height = input()
    def rectanglePerimeter(width, height):
       return ((width + height)*2)
    print(rectanglePerimeter(width, height))
except EOFError as e:
    print(end="")

convierta sus entradas a ints:

width = int(input())
height = int(input())
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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