Начните с игры «угадай число»: ей хватит input, if, цикла и модуля random, и она умещается в один вечер. Дальше берите проекты, в каждом из которых появляется одна новая идея: списки, словари, файлы, CSV и JSON. Завершите переименователем файлов на pathlib, сначала проверив его на копиях.
Как выбрать первый проект на Python, который удастся закончить за один вечер
Большинство подборок под запросом «проекты на python для начинающих» — это идеи в случайном порядке. Здесь проекты выстроены по понятию, которое каждый из них тренирует, поэтому в каждом появляется что-то одно новое: сначала input и if, затем циклы и списки, словари, файлы и, наконец, модули стандартной библиотеки, которые делают настоящую работу. У каждого указано, что он отрабатывает, чем его усложнить и в чём обычно ошибаются.
Правило выбора простое. Берите проект, в котором есть только знакомое и одна новая идея, и урезайте задачу, пока первая рабочая версия не уместится в один вечер. Список дел, который добавляет и удаляет пункты, — это проект; список с пользователями и напоминаниями — это месяц работы. Учебник Python признаёт, что не пытается охватить все возможности языка, даже самые употребительные, и отсылает к справочнику по стандартной библиотеке; по одной странице справочника на проект — часть упражнения.
Угадай число, калькулятор чаевых и камень-ножницы-бумага: ввод и if
Игра «угадай число» — классический первый проект на Python. Программа загадывает число через random.randint, который, согласно документации Python, возвращает целое число от a до b, причём оба края включены, затем просит варианты и отвечает «больше» или «меньше». Проект тренирует input, преобразование через int, сравнение и цикл while. Усложнение: счётчик попыток и лимит в семь ходов.
Типичная ошибка здесь учит главному навыку всего списка. Встроенная функция input всегда возвращает строку, поэтому сравнение её с числом не работает, а слово, переданное в int, вызывает ошибку. Официальный учебник показывает лекарство: цикл while True вокруг блока try, который преобразует ответ, и ветку except ValueError, которая спрашивает снова. Там же объяснено, как читать само сообщение: последняя строка говорит, что произошло, а трассировка стека над ней показывает, где.
Калькулятор чаевых спрашивает сумму счёта, процент и число человек, а затем печатает каждую долю через f-строку с двумя знаками после запятой. Есть и сюрприз: страница встроенных функций отмечает, что round(2.675, 2) даёт 2.67, а не 2.68, потому что большинство десятичных дробей нельзя хранить во float точно. «Камень, ножницы, бумага» добавляет random.choice и цепочку веток if и elif; усложнение — счёт серии до трёх побед из пяти.
Кубики с гистограммой, обратный отсчёт и викторина на словаре: циклы
Симулятор кубиков бросает два кубика десять тысяч раз циклом for и range, запоминает, как часто выпадает каждая сумма, и печатает текстовую гистограмму: по строке из решёток на сумму. Проект тренирует циклы, списки и подсчёт и показывает, что семёрка выпадает заметно чаще двойки или двенадцати. Усложнение: спросить число кубиков и бросков. Обычная ошибка — список на единицу короче нужного, в котором нет ячейки для наибольшей суммы.
Обратный отсчёт печатает оставшееся время раз в секунду через time.sleep. Документация модуля time предупреждает, что пауза может оказаться дольше запрошенной на произвольную величину, потому что система занята другими задачами, так что длинный отсчёт, который лишь спит, будет отставать. Усложнение это исправляет: запомните стартовое значение time.monotonic — часы, которые, по словам документации, не могут идти назад, — и на каждом проходе вычисляйте остаток от него.
Викторина хранит вопросы как ключи словаря, а ответы как значения, обходит пары циклом, сравнивает ответы после lower и strip и печатает результат. Это первый проект, где данные и логика живут отдельно. Усложнение: перемешайте порядок вопросов через random.shuffle по списку ключей и сохраняйте лучший результат.
Счётчик слов и конвертер единиц: строки, словари и функции
Счётчик слов читает текстовый файл и выдаёт число символов, слов и строк, среднюю длину слова и десять самых частых слов. Первую версию сделайте через split и обычный словарь, затем перепишите её на collections.Counter, который документация описывает как подкласс dict для подсчёта хешируемых объектов. В её собственном примере десять самых частых слов находят в «Гамлете»: текст переводят в нижний регистр, достают слова регулярным выражением и вызывают most_common. Обычная ошибка — считать The и the разными словами, чего избегают, переводя текст в нижний регистр заранее; усложнение — список коротких слов, которые нужно пропускать.
Конвертер единиц учит функциям. Храните коэффициенты в словаре, где ключ — пара единиц, напишите одну функцию, которая принимает значение и две единицы и возвращает результат, а весь вывод оставьте за её пределами. Температурам нужна отдельная функция, потому что переход из градусов Цельсия в Фаренгейты требует не только множителя, но и сдвига. Усложнение: цикл, который продолжает переводить, пока пользователь не введёт quit.
Генератор паролей на secrets, а не на random
Здесь выбор модуля решает дело. В документации random есть предупреждение: его генераторы нельзя использовать в целях безопасности, и читателя отсылают к secrets. Документация secrets объясняет причину: random рассчитан на моделирование и симуляцию, а не на безопасность или криптографию, тогда как secrets выдаёт криптографически стойкие значения для паролей, токенов и подобных данных. Модуль входит в Python с версии 3.6.
Сборка идёт по рецепту с той же страницы. Соедините string.ascii_letters и string.digits в алфавит, выбирайте символы через secrets.choice в цикле и склейте их в пароль. Ниже документация показывает строгий вариант, который генерирует десятизначный пароль, пока в нём не окажется хотя бы одна строчная буква, одна заглавная и три цифры. Усложнение: выбор длины, string.punctuation и несколько вариантов сразу.
Список дел, учёт расходов и записная книжка, которые сохраняют данные в файлы
Список дел в текстовом файле тренирует открытие, чтение и запись. Учебник рекомендует оператор with для файлов, потому что файл корректно закрывается, даже если случилось исключение, и перечисляет режимы: r читает, a дописывает в конец, а w стирает существующий файл с тем же именем. Типичная ошибка: открыть список в режиме w, чтобы добавить одно дело, и потерять остальные. Усложнение: пронумеровать дела и удалять одно по номеру.
Учёт расходов записывает дату, категорию и сумму в CSV-файл и печатает итог по категориям. Документация csv просит открывать файлы с newline, равным пустой строке; без этого переводы строк внутри полей в кавычках читаются неверно, а на платформах, где строки заканчиваются возвратом каретки и переводом строки, записывается лишний возврат каретки. Берите DictWriter, у которого аргумент fieldnames обязателен, и вызывайте writeheader один раз. Поскольку глава учебника о числах с плавающей точкой отправляет бухгалтерские задачи к модулю decimal, суммы в качестве усложнения переведите на Decimal.
Записная книжка хранит людей в словаре и сохраняет его через json.dump с indent для читаемости. Документация json предупреждает: при записи каждый ключ становится строкой, поэтому словарь с числовыми ключами не возвращается равным исходному. Ещё по умолчанию она экранирует не-ASCII-буквы, так что имена вроде José остаются читаемыми, только если задать ensure_ascii равным False. Усложнение — превратить каждый контакт в класс со своими методами.
Переименователь файлов на pathlib и привычки, которые скрепляют проект
Переименователь файлов даёт папке с фотографиями или сканами имена вроде holiday-001.jpg. Он построен на pathlib: Path.iterdir перечисляет папку, Path.suffix даёт расширение, а with_suffix или with_name строят новое имя. Документация pathlib предупреждает, что iterdir и glob возвращают файлы в произвольном порядке, поэтому перед нумерацией их нужно отсортировать. Там же сказано, что rename молча заменяет существующий файл в Unix, но вызывает FileExistsError в Windows. Запускайте каждую версию на копии папки и добавьте режим пробного прогона, который лишь печатает планируемые имена.
Несколько привычек из PEP 8, руководства по стилю Python, стоит усвоить с первого проекта: четыре пробела на уровень отступа, строки не длиннее 79 символов, функции и переменные в нижнем регистре с подчёркиваниями, классы в CapWords и импорты в начале файла. Довод простой: код читают гораздо чаще, чем пишут. Страница документации о __main__ добавляет ещё одну привычку: помещайте программу в функцию main и вызывайте её под проверкой if __name__, чтобы файл можно было импортировать, не запуская.
Этим проектам не нужны сторонние пакеты. Когда понадобятся, документация venv описывает, как создать окружение в папке проекта командой python -m venv .venv, активировать его и не помещать в систему контроля версий, записывая пакеты в requirements.txt. Выкладывать готовые проекты на GitHub полезно как практику коммитов и описаний; справка GitHub Docs объясняет, что файл .gitignore в корне репозитория сообщает Git, что пропускать, и что GitHub ведёт публичный список рекомендуемых шаблонов.
Что отрабатывать самому и что добавляет бесплатный курс Python
Самому на этой неделе возьмите по одному проекту из первых трёх групп и доведите их по порядку, по вечеру на каждый. Читайте каждую трассировку с нижней строки, прежде чем идти с ней в поиск, и записывайте каждое исправление в файл заметок. Руководство для начинающих на вики Python также ссылается на страницу с небольшими примерами программ, если нужны ещё идеи того же уровня.
Структурированный курс добавляет порядок и проверку. В бесплатном курсе Python VITON13 SCHOOL 16 уроков, которые работают прямо в браузере, ничего ставить не нужно: первая программа, переменные, числа, строки и f-строки, if и elif, списки, циклы for и while, функции, словари, кортежи и множества, генераторы списков, try и except, классы, модули и итоговый проект по статистике текста. В каждом уроке есть пример, задание написать код, мгновенный результат и проверка упражнения на странице. Эти уроки покрывают идеи первых трёх групп проектов на python для начинающих, а итоговый проект по статистике текста — та же идея, что и счётчик слов; работа с файлами приходит из самих проектов и документации.
Практический чеклист
- Запишите тремя предложениями самую маленькую рабочую версию проекта, прежде чем открывать редактор.
- Оберните каждый вызов int(input()) в блок try с веткой except ValueError, которая спрашивает снова.
- Для всего, что станет паролем или токеном, используйте secrets.choice, а не random.
- Открывайте CSV с newline, равным пустой строке, и не открывайте в режиме w список, в который дописываете.
- Скопируйте папку перед запуском переименователя и сначала сделайте пробный прогон, который только печатает новые имена.
Вопросы и ответы
С какого проекта на Python лучше начать?
С игры «угадай число». Ей нужны только input, int, if, цикл while и одна функция из модуля random; она умещается в вечер, а её главная ловушка — слово там, где ждали число, — учит try и except и чтению трассировки.
Насколько сложны эти проекты для полного новичка в Python?
Первой группе хватает основ из начальных глав официального учебника. Сложность растёт от группы к группе, потому что каждая добавляет по одной новой идее, и тот, кто проходит их по порядку, не встречает в одной программе двух незнакомых вещей сразу.
Какие из этих учебных программ окажутся полезнее всего потом?
Учёт расходов и переименователь файлов. Первый даёт CSV-файл, который открывается в таблице; второй наводит порядок в настоящих папках с фотографиями и сканами. Оба стоит сохранить, если переименователь опробован на копиях и умеет пробный прогон.
Нужно ли ставить пакеты или создавать виртуальное окружение для этих проектов?
Нет. Все тринадцать проектов обходятся стандартной библиотекой, которая входит в Python. Виртуальное окружение пригодится в тот день, когда проекту понадобится сторонний пакет; документация venv объясняет, как создать его в папке проекта и не отправлять в Git.
Почему генератору паролей на Python нужен модуль secrets?
Потому что, по документации Python, модуль random создан для моделирования и симуляции и не должен применяться для безопасности. Модуль secrets даёт криптографически стойкий выбор, а в его документации есть готовый рецепт буквенно-цифрового пароля.
