В задаче (кроме самого алгоритма решения) необходимо реализовать прием данных через stdin, а вывод через stdout. До этого обычно реализовывал прием через input, а вывод через print или просто возвращал значение без печати через retu. Как принять данные с помощью stdin/stdout не улавливаю. Огромная просьба, дать ссылку или пример кода, чтобы разобраться.
question@mail.ru
·
01.01.1970 03:00
Реализация stdin и stdout
question@mail.ru
·
01.01.1970 03:00
По умолчанию читает данные из , печатает данные в . Так что можете считать вашу задачу решённой.
В Питоне stdin, stdout представлены объектами (, как правило), которые в общем случае могут быть любого типа (если их интерфейс достаточно file-like) и могут быть переопределены кем-угодно (IDLE, bpython, ipython, IDE, win-unicode-console, etc). Иногда достаточно предоставить объект, который поддерживает единственный метод .write(), если нужно только print() функцию поддерживать. В других случаях, даже экземпляр (тип sys.stdin/sys.stdout по умолчанию) может быть недостаточным, если не возвращает настоящий file descriptor (см. детали в ).
При запуске Питона, sys.stdin/sys.stdout обычно указывают на стандартные потоки ввода/вывода, унаследованные от родительского процесса или полученные от консоли. Интерактивный ввод/вывод как правило связан с терминалом. Из оболочки легко перенаправить ввод/вывод из файла, канала (pipe)
$ python ваша-программа.py <входной-файл# `sys.__stdin__` это входной-файл$ echo abc | python ваша-программа.py# `sys.__stdin__` это pipe (`echo` пишет с одного конца, мы читаем с другого)Работа напрямую с sys.stdin, sys.stdout такая же как с другими текстовыми файлами. Например, чтобы прочитать текстовые строчки из стандартного ввода и записать введённые символы (Unicode codepoint) в каждой строке в обратном порядке в стандартный вывод:
#!/usr/bin/env python3import sysfor line in sys.stdin: print(line.rstrip('\n')[::-1])Кодировка, используемая sys.stdin/sys.stdout, чтобы текст в байты превратить и обратно, может зависеть от окружения. Чтобы избежать или UnicodeEncodeError исключения из-за и на следуйте по приведённым здесь ссылкам, которые показывают win-unicode-console (), LC_* (locale), PYTHONIOENCODING решения. заставляют Питон использовать utf-8 в большем числе случаев, делая проблемы с кодировками ввода/вывода гораздо менее вероятными по умолчанию.
print() это удобный wrapper вокруг sys.stdout.write(). input() часто можно рассматривать как wrapper вокруг sys.stdin.readline(), рассчитанный на интерактивный ввод (поддержка истории ввода, редактирования с помощью модуля, если доступен). Для продвинутой поддержки интерактивного ввода в терминале, посмотрите на :
#!/usr/bin/env pythonfrom prompt_toolkit import prompt # $ pip install prompt_toolkitif __name__ == '__main__': answer = prompt('Give me some input: ') print('You said: %s' % answer)