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())