Ответ 1
width, height = map(int, input().split())
def rectanglePerimeter(width, height):
return ((width + height)*2)
print(rectanglePerimeter(width, height))
Запуск таким образом:
% echo "1 2" | test.py
6
Я подозреваю, что IDLE просто передает одну строку в ваш script. Первая input()
- это сплошная строка. Обратите внимание, что произойдет, если вы поместите некоторые заявления печати после вызовов input()
:
width = input()
print(width)
height = input()
print(height)
Запуск echo "1 2" | test.py
создает
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
Обратите внимание, что первый оператор печати печатает всю строку '1 2'
. Второй вызов input()
вызывает ошибку EOFError
(ошибка конца файла).
Таким образом, простой канал, такой как тот, который я использовал, позволяет передавать только одну строку. Таким образом, вы можете только один раз вызвать input()
. Затем вы должны обработать эту строку, разбить ее на пробелы и преобразовать фрагменты строки в ints самостоятельно. Это то, что
width, height = map(int, input().split())
делает.
Обратите внимание, что есть другие способы передачи ввода в вашу программу. Если вы запустили test.py
в терминале, вы могли бы написать 1
и 2
отдельно без проблем. Или вы могли бы написать программу с pexpect для имитации терминала, передавая программные файлы 1
и 2
. Или вы можете использовать argparse для передачи аргументов в командной строке, что позволяет вам вызвать вашу программу с помощью
test.py 1 2