Мы обсудим задачки, на которых, разумеется, можно тренироваться, изучая абсолютно любой язык программирования. Я часто слышал претензии, что на моих курсах по питону и C# недостаточно задачек, поэтому давайте я сегодня накину вам идей для самостоятельной работы, которые нравятся лично мне.
- подписывайтесь на группу в телеграме
- подписывайтесь на канал в YouTube
- покупайте курсы по программированию
ТОП 10 проектов на Python для новичков
У новичков, начинающих изучать любой из языков программирования очень часто возникает вопрос о том какие бы такие задачки поинтереснее порешать, чтобы было весело, увлекательно и полезно. Кстати говоря, часть набора из тех задач, которые я предложу, можно использовать даже если вы профессионал и хотите, так сказать, пощупать какой-либо новый для вас язык программирования.
Начнём с простых программ.
1. Виселица
Игра «Виселица». Это простая игра, которая позволяет игроку угадывать слово по буквам. Если кто не знаком с правилами – найдите в интернете. Здесь я лишь добавлю, что рекомендовал бы обязательно сделать реализацию с хранением слов в файле. Разработка этой программы научит вас работе со строками, файлами, циклами и условными операторами, с обработкой пользовательского ввода и функциями, если, конечно, вы захотите реализовать программу по-человечески, а не сваливать всё в один кусок. Реализуйте удобный диалог с пользователем и дайте, например возможность задавать вначале кол-во доступных попыток.
2. Крестики-нолики
Из того же цикла, что и виселица, я бы рекомендовал реализовать игру в Крестики-Нолики. Закрепите всё те же навыки, но также, скорее всего, познакомитесь с массивами, хотя решить можно, конечно, любую задачу разными способами.
Если хотите помучиться, то можете попробовать себя в реализации более сложного варианта настольной игры, например «5 в ряд» или «Рэндзю». Ещё более сложный вариант с точки зрения программирования – игра Го. Чтобы реализовать эти игры вам придётся изрядно попотеть, но, поверьте, оно того стоит. Не заморачивайтесь с красотой отрисовки, вам это в целом не надо, можете делать вывод на консоль, хоть это и будет выглядеть адово, но, как я уже сказал, смысл не в красивом выводе, а в реализации всех правил игры.
3. Змейка
Если хотите ещё идей с играми, то посмотрите в сторону реализации Змейки причём с интерфейсом, используя, скажем питонячий PyGame. Тут вам хватит логики на реализацию и в целом будет довольно весело.
4. “Жизнь” Джона Конвея
Так же с простейшим интерфейсом рекомендовал бы попробовать реализовать игру «Жизнь» придуманную Джоном Конвеем в 1970 году. Кстати говоря, эта игра настолько интересна, что заслуживает, пожалуй, отдельного выпуска. Рекомендую хотя бы статью в википедии прочитать, чтобы проникнуться всей глубиной замысла. Если вкратце, то в этой игре необходимо создать симуляцию жизни в виде клеточного автомата, где каждая клетка может быть живой или мертвой, а их состояние изменяется в зависимости от соседних клеток и определенных правил.
5. Генератор паролей
Генератор паролей. Создайте программу, которая генерирует случайный пароль для пользователя. Это, казалось, бы простая программа, однако навесить на неё можно довольно много функционала. Ну, посудите сами:
- возможность выбора длины пароля
- возможность выбора наборов символов для генерации пароля
- возможность генерации N паролей сразу
- сохранение паролей в файл, их шифрация и дешифрация
- проверка пароля на сложность с расчётом энтропии
- реализация удобного пользовательского интерфейса – причём речь может идти как о консоли, так и о desktop и даже web варианте.
6. ToDo List
Прелесть этой программы в том, что её можно реализовать как в простом виде с очень небольшим набором функционала, так и расширить её до поистине гигантских масштабов, превратив в какой-нибудь kanban с веб-интерфейсом. Из возможных фич я бы выделил:
- добавление задач в список, их редактирование и удаление
- просмотр списка задач
- поиск задач по различным фильтрам: по тегам, тексту, времени выполнения, дедлайну и так далее, с задачей может быть ассоциирован целый набор информации, так что фильтров тоже получится целый вагон
- возможность отмечать задачу выполненной,
- архивирование задач
- экспортирование списка задач в различных форматах
- импортирование задач из различных форматов
- установка напоминаний для уведомлений
- группировка задач по различным признакам, по дням, сложности и так далее
И это я, конечно же, не касался всего того, что придётся реализовать на стороне пользовательского интерфейса, если решитесь на это. Ведь всё это придётся поддержать визуально.
7. Money Tracker
Одной из моих любимых практических задач является реализация Money Tracker’а. Money-трекер, если совсем вкратце, это программа, которая позволяет отслеживать тем или иным способом ваши финансовые потоки: доходы, расходы и всё, что с этим связано.
Точно так же как и в случае с ToDo List, можно реализовать простейший мани трекер, с самым минимальным набором функционала, а можно так разогнаться, что это станет проектом, который вы тупо никогда не завершите, потому что потенциальное количество фич попросту безгранично. Чтобы воодушевиться и получить массу идей, можете пройти в любой маркет плэйс мобильных приложений и посмотреть на любой известный пример типа dzen money. Вы убедитесь, что работы там целый вагон. Вот лишь небольшой список востребованного функционала:
- Добавление и удаление транзакций: пользователь может вводить информацию о доходах и расходах, указывая сумму, дату и описание операции. Также должна быть возможность отменить ввод неверных данных или удалить запись о транзакции.
- Категоризация транзакций: пользователь может создать категории для транзакций, например, “еда”, “транспорт”, “одежда” и т.д., чтобы удобнее отслеживать свои расходы.
- Статистика расходов: программа должна позволять пользователю просматривать статистику расходов за определённый период времени или по категориям. Также может быть реализована возможность графического отображения статистики.
- Уведомления о превышении бюджета: программа может отправлять уведомления, когда пользователь превышает заданный им бюджет или когда приближается к его исчерпанию.
- Защита данных: для сохранения конфиденциальности финансовых данных пользователей должны быть реализованы механизмы защиты информации (например, шифрование).
- Импорт и экспорт данных: программа может иметь функцию импорта и экспорта данных, чтобы пользователи могли переносить свои данные между разными устройствами или сохранять их в других форматах.
- Мультивалютность: в зависимости от потребностей пользователя программа может поддерживать работу с разными валютами и переводы между ними.
- Интеграция с онлайн-банком: для упрощения учёта транзакций можно реализовать возможность автоматического импорта данных из онлайн-банка или других платёжных систем.
- Планирование бюджета: пользователь может задать свои цели и планы на будущее, и программа будет помогать ему следить за выполнением этих планов.
- Деление расходов: для совместного использования финансовых ресурсов с другими людьми может быть реализована функция деления расходов и расчёт долей каждого участника.
И так далее. Как я уже сказал, количество фич, тут, по сути, безгранично. А количество технических препятствий, с которыми вы столкнётесь огромно. Я говорю в том числе о необходимости грамотного выстраивания архитектуры приложения, обработке ошибок, поддержки кода в чистоте с применением паттернов и так далее. Программу такого масштаба вы уже не сможете написать абы как, ну, вернее, сможете, но поддерживать долго не сможете, а когда захотите вернутся к ней через какое-то время, сделав паузу в разработке, весь код, вы скорее всего просто выкинете. Т.е., что в случае с ToDo List, что в случае с Money Tracker речь идёт уже об очень и очень взрослых задачах. Кстати говоря, в обоих случаях, вам уже возможно потребуется использовать СУБД. Хотя это дискуссионно.
8. Модуль requests и публичные API
Чтобы потрогать работу с разными апишками, используя, например модуль requests на питоне, можете попробовать разобраться с апишками на Open Weather Map или IMDB. В первом случае вы потренируетесь вытягивать данные по погоде, во втором по фильмам. Как вы можете догадаться, поверх этих апишек накрутить можно массу логики по собственному вкусу. Единственное, что имейте ввиду, что на этих сервисах меняются условия по использованию API, так что если у вас не получится конкретно с этими, погуглите немного и найдите что-то другое и интересное лично для вас по собственному вкусу.
Теперь, из того, что я бы посоветовал для изучения прикладных технологий.
9. Телеграм-бот
Телеграм бот. Если вы живёте в регионе, где популярен Телеграм, то сделайте бот для телеги, а если там, где, скажем, дискорд, то сделайте для дискорда.
Идей может быть, конечно, очень много, но я здесь предложу сделать бота для трекинга финансовых потоков, т.е. money-трекер, который может работать как сам по себе, так и в связке с основным приложением. Набор функционала тут в принципе примерно тот же:
управление доходами и расходами, теги, фильтры, хранение, оповещения, установка целей по сбережениям и так далее и тому подобное.
Разница в том, что вам таки придётся разобраться со всем что связано с ботостроением, а там есть полно нюансов. Заодно получите весьма востребованный практический навык этого самого ботостроения.
10. Парсинг, скрейпинг и Selenium
В последнем пункте я бы не хотел предлагать какую-то конкретику, а дал бы направление в целом: попробуйте автоматизировать какую-либо рутину с помощью Selenium или спарсите кучу ценных данных с помощью библиотеки для скрэйпинга. В питоне, например с помощью такой библиотеки как BeautifulSoup.
На моём канале для некоторых это всё прозвучало как клинопись, поэтому скажу чуть подробнее и с примерами. Если вкратце, то
Selenium это набор инструментов, позволяющих автоматизировать любые действия на веб-страницах. Воспользоваться этими инструментами вы сможете через соответствующие библиотеки для того или иного языка программирования. Полная поддержка есть для JS, Python , Ruby, Java, Kotlin и C#. По факту, как минимум частичная поддержка функционала Selenium есть и в библиотеках на ряде других языков.
Просто чтобы было понятно, я, например, в своё время, когда мне надоело руками загружать курсы на Udemy, написал скрипт, который всё делал за меня автоматически, что стало экономить массу времени.
То есть с помощью Selenium вы можете программно взаимодействовать с любыми элементами на веб-страницах, тыкая на кнопки, переходя по ссылкам, вписывая текст, считывая текст и так далее.
Библиотеки для скрэйпинга, такие как BeautifulSoup на питоне, используются для выдирания данных с веб-страниц и дальнейшего их разбора или как говорят парсинга. Это особенно актуально, когда вам нужна аналитика, а данные есть на сайте, который не предоставляет программного интерфейса, чтобы каждый желающий мог ими завладеть и воспользоваться. Тогда, будучи нехорошим человеком, вы можете, не без усилий, конечно, но всё же – добраться до данных, спарсить всё что хочется и разложить, скажем в базу данных для наведения дальнейшей различной аналитики.
Это крайне полезные прикладные навыки. Вариантов их применения на практике попросту не счесть.
А прямо сейчас подпишитесь на канал, и зачисляйтесь на большой курс Python-разработчик, который постоянно расширяется. Для этого просто перейдите по ссылке: https://offer.engineerspock.com/