Ввод-вывод¶
Рано или поздно возникают ситуации, когда программа должна взаимодействовать с пользователем. Например, принять какие-нибудь данные от пользователя, а затем вывести результаты. Для этого применяются функции input()
и print()
соответственно.
Для вывода можно также использовать различные методы класса str
(строка). К примеру, при помощи метода rjust
можно получить строку, выравненную по правому краю к указанной ширине. См. help(str)
для более подробного описания.
Ещё одним распространённым типом ввода/вывода является работа с файлами. Возможность создавать, читать и записывать в файлы является ключевой для многих программ, поэтому в настоящей главе и мы рассмотрим этот аспект.
Ввод от пользователя¶
Сохраните эту программу как user_input.py
:
1 2 3 4 5 6 7 8 9 10 11 |
|
Вывод:
1 2 3 4 5 6 7 8 9 10 11 |
|
Как это работает:
Мы применяем операцию вырезки для переворачивания текста. Мы уже видели, как создаются вырезки из последовательностей при помощи кода "seq[a:b]
", начиная с позиции a
до позиции b
. Но ведь мы также можем указать и третий аргумент, определяющий шаг, с которым производится вырезка. По умолчанию шаг равен 1
, поэтому и возвращается непрерывный фрагмент текста. Указание отрицательного шага, т.е. -1
приведёт к выводу текста в обратном порядке.
Функция input()
принимает строку в качестве аргумента и показывает её пользователю. Затем она ждёт, чтобы пользователь набрал что-нибудь и нажал клавишу ввода. Как только пользователь это сделал, функция input()
возвращает введённый пользователем текст.
Мы считываем этот текст и выстраиваем его в обратном порядке. Если перевёрнутый и исходный текст одинаковы, значит введённый текст является палиндромом.
Домашнее задание
Проверка, является ли текст палиндромом должна также игнорировать знаки пунктуации, пробелы и регистр букв. Например, "А роза упала на лапу Азора" также является палиндромом, но наша текущая программа так не считает. Попробуйте улучшить её так, чтобы она распознала этот палиндром.
Подсказка
Воспользуйтесь кортежем (список всех знаков пунктуации можно найти здесь, содержащим все запрещённые символы, и примените тест на принадлежность, чтобы обнаружить символы, подлежащие удалению, т. е. forbidden = ('!', '?', '.', ...).
Файлы¶
Открывать и использовать файлы для чтения или записи можно путём создания объекта класса file
, а читать/записывать в файл — при помощи его методов read
, readline
или write
соответственно. Возможность читать или записывать в файл зависит от режима, указанного при открытии файла. По окончании работы с файлом, нужно вызвать метод close
1, чтобы указать Python, что файл больше не используется.
Пример: (сохраните как using_file.py
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Вывод:
1 2 3 4 5 |
|
Как это работает:
Сперва мы открываем файл при помощи встроенной функции open
с указанием имени файла и режима, в котором мы хотим его открыть. Режим может быть для чтения ('r'
), записи ('w'
) или добавления ('a'
)2. Можно также указать, в каком виде мы будем считывать, записывать или добавлять данные: в текстовом ('t'
) или бинарном ('b'
). На самом деле существует много других режимов, и help(open)
даст вам их детальное описание. По умолчанию open()
открывает файл как текст в режиме для чтения.
В нашем примере мы сначала открываем файл в режиме записи текста и используем метод write
файлового объекта для записи в файл, после чего закрываем файл при помощи close
.
Далее мы открываем тот же самый файл для чтения. В этом случае нет нужды указывать режим, так как режим "чтения текстового файла" применяется по умолчанию. Мы считываем файл построчно методом readline
в цикле. Этот метод возвращает полную строку, включая символ перевода строки в конце. Когда же он возвращает пустую строку, это означает, что мы достигли конца файла, и мы прерываем цикл при помощи break
.
По умолчанию функция print()
выводит текст, автоматически добавляя символ перевода строки в конце. Мы подавляем этот символ, указывая end=''
, поскольку строки, считанные из файла, и без того оканчиваются символом перевода строки. И, наконец, мы закрываем файл с помощью close
.
Теперь проверяем содержимое файла poem.txt
, чтобы убедиться, что программа действительно записала текст в него и считала из него.
Pickle¶
Python предоставляет стандартный модуль с именем pickle
3, при помощи которого можно сохранять любой объект Python в файле, а затем извлекать его обратно. Это называется длительным хранением объекта.
Пример: (сохраните как pickling.py
):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Вывод:
1 2 |
|
Как это работает:
Чтобы сохранить объект в файле, нам нужно сперва открыть файл с помощью open
в режиме бинарной записи ('wb'
), после чего вызвать функцию dump
из модуля pickle
. Этот процесс называется "консервацией" ("pickling").
После этого мы извлекаем объект при помощи функции load
из модуля pickle
, которая возвращает объект. Этот процесс называется "расконсервацией" ("unpickling").
Резюме¶
Мы обсудили разные типы ввода/вывода, а также работу с файлами и использование модуля pickle
.
Далее мы познакомимся с концепцией исключений.