Как сделать проект python

Добавил пользователь Валентин П.
Обновлено: 05.10.2024

Прежде чем мы начнём программировать что-то полезное на Python, давайте закодим что-нибудь интересное. Например, свою игру, где нужно не дать шарику упасть, типа Арканоида. Вы, скорее всего, играли в детстве во что-то подобное, поэтому освоиться будет просто.

Логика игры

Есть игровое поле — простой прямоугольник с твёрдыми границами. Когда шарик касается стенки или потолка, он отскакивает в другую сторону. Если он упадёт на пол — вы проиграли. Чтобы этого не случилось, внизу вдоль пола летает платформа, а вы ей управляете с помощью стрелок. Ваша задача — подставлять платформу под шарик как можно дольше. За каждое удачное спасение шарика вы получаете одно очко.

Алгоритм

Чтобы реализовать такую логику игры, нужно предусмотреть такие сценарии поведения:

Хитрость в том, что всё это происходит параллельно и независимо друг от друга. То есть пока шарик летает, мы вполне можем двигать платформу, а можем и оставить её на месте. И когда шарик отскакивает от стен, это тоже не мешает другим объектам двигаться и взаимодействовать между собой.

Получается, что нам нужно определить три класса — платформу, сам шарик и счёт, и определить, как они реагируют на действия друг друга. Поле нам самим определять не нужно — для этого есть уже готовая библиотека. А потом в этих классах мы пропишем методы — они как раз и будут отвечать за поведение наших объектов.

Весь кайф в том, что мы всё это задаём один раз, а потом объекты сами разбираются, как им реагировать друг на друга и что делать в разных ситуациях. Мы не прописываем жёстко весь алгоритм, а задаём правила игры — а для этого классы подходят просто идеально.

По коням, пишем на Python

Для этого проекта вам потребуется установить и запустить среду Python. Как это сделать — читайте в нашей статье.

Начало программы

Чтобы у нас появилась графика в игре, используем библиотеку Tkinter. Она входит в набор стандартных библиотек Python и позволяет рисовать простейшие объекты — линии, прямоугольники, круги и красить их в разные цвета. Такой простой Paint, только для Python.

Чтобы создать окно, где будет видна графика, используют класс Tk(). Он просто делает окно, но без содержимого. Чтобы появилось содержимое, создают холст — видимую часть окна. Именно на нём мы будем рисовать нашу игру. За холст отвечает класс Canvas(), поэтому нам нужно будет создать свой объект из этого класса и дальше уже работать с этим объектом.

Если мы принудительно не ограничим скорость платформы, то она будет перемещаться мгновенно, ведь компьютер считает очень быстро и моментально передвинет её к другому краю. Поэтому мы будем искусственно ограничивать время движения, а для этого нам понадобится модуль Time — он тоже стандартный.

Последнее, что нам глобально нужно, — задавать случайным образом начальное положение шарика и платформы, чтобы было интереснее играть. За это отвечает модуль Random — он помогает генерировать случайные числа и перемешивать данные.

Запишем всё это в виде кода на Python:

Мы подключили все нужные библиотеки, сделали и настроили игровое поле. Теперь займёмся классами.

Шарик

Сначала проговорим словами, что нам нужно от шарика. Он должен уметь:

  • задавать своё начальное положение и направление движение;
  • понимать, когда он коснулся платформы;
  • рисовать сам себя и понимать, когда нужно отрисовать себя в новом положении (например, после отскока от стены).


Этого достаточно, чтобы шарик жил своей жизнью и умел взаимодействовать с окружающей средой. При этом нужно не забыть о том, что каждый класс должен содержать конструктор — код, который отвечает за создание нового объекта. Без этого сделать шарик не получится. Запишем это на Python:

Платформа

Сделаем то же самое для платформы — сначала опишем её поведение словами, а потом переведём в код. Итак, вот что должна уметь платформа:

  • двигаться влево или вправо в зависимости от нажатой стрелки;
  • понимать, когда игра началась и можно двигаться.

А вот как это будет в виде кода:

Можно было не выделять счёт в отдельный класс и каждый раз обрабатывать вручную. Но здесь реально проще сделать класс, задать нужные методы, чтобы они сами потом разобрались, что и когда делать.

От счёта нам нужно только одно (кроме конструктора) — чтобы он правильно реагировал на касание платформы, увеличивал число очков и выводил их на экран:

У нас всё готово для того, чтобы написать саму игру. Мы уже провели необходимую подготовку всех элементов, и нам остаётся только создать конкретные объекты шарика, платформы и счёта и сказать им, в каком порядке мы будем что делать.

Посмотрите, как лаконично выглядит код непосредственно самой игры:

Что дальше

На основе этого кода вы можете сделать свою модификацию игры:

  • добавить второй шарик;
  • раскрасить элементы в другой цвет;
  • поменять размеры шарика; поменять скорость платформы;
  • сделать всё это сразу;
  • поменять логику программы на свою.

Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!


Управление зависимостями играет важную роль для разработчиков пакетов и ПО. Но как насчет специалистов по науке о данных, которые не занимаются развертыванием PyPI или conda-forge?

Если вы уже работали с Python, то знаете, как тяжело разобраться в этой загроможденной среде разработки с большим количеством установленных пакетов. Поиск действительно необходимых для проекта пакетов — непростая задача для выполнения вручную .

Пакеты не всегда обновляются одновременно , а многие из них несовместимы друг с другом или даже с используемой версией Python или Anaconda. Нет никаких гарантий, что пакеты из разных каналов в conda не будут конфликтовать. При загрузке всех элементов в одну большую среду возникновение противоречивых зависимостей неизбежно. Не говоря уже о различных инструментах, таких как pip, pipx, conda, poetry, hatch, pipenv, pyenv, virtualenv, pyvenv, pyenv-virtualenv, virtualenvwrapper, pyenv-virtualenvwrapper и venv… которые, несмотря на похожие названия, зачастую даже не совместимы друг с другом.

Еще одна причина не использовать anaconda вне контейнера — вы не знаете, что именно запускаете. В некоторых случаях сценарий активации anaconda настолько сильно искажает очистку среды системы pre-pyenv, что единственный способ быстро решить эту проблему — добавить HOST=$(hostname) к .zshrc.


Здесь можно найти краткое руководство по настройке системы с помощью pyenv и pyenv-virtualenv. Преимущества такого способа управления:

  • чистый, гибкий и реверсивный;
  • устойчивый к ошибкам пользователей;
  • хорошая защита от ошибок, возникающих в среде при работе с anaconda.

Для защиты важных файлов перед установкой новой системы с помощью этого метода также рекомендую использовать Arq Cloud Backup, который работает аналогично git и почти полностью автоматизирован.

После завершения установки pyenv можно приступать к созданию рабочих процессов в виртуальных средах. Рассмотрим создание проекта с дистрибутивом Anaconda, чтобы узнать, как можно использовать Visual Studio Code для разработки Jupyter notebooks и их конвертирования в сценарии .py.

У каждого проекта должна быть своя директория, а у каждой директории — своя виртуальная среда. Эта структура выполняет две важные функции:

  1. Обеспечивает правильную организацию всех элементов, что упрощает разделение проектов, управление зависимостями и исключает лишние элементы.
  2. Позволяет создать отдельный .python-version file для каждой директории (и, следовательно, для каждого проекта). Это означает, что pyenv-virtualenv может автоматически переключаться на соответствующую среду при смене директории.

TL;DR-версия для установки проекта:

  1. Создайте папку проекта и перейдите ( cd ) в нее.
  2. Установите проект Python с помощью pyenv local $PYTHON_VERSION .
  3. Запустите эту команду для создания виртуальной среды: pyenv virtualenv anaconda3–2019.10 venv-cool_project . Если версия Python не указана, то среда будет использовать ту, которая работает локально на данный момент.
  4. Установите новую среду в качестве локального Python-проекта с помощью команды pyenv local с именем venv и активируйте ее с помощью conda activate venv-cool_project .

При запуске приведенного ниже однострочника при каждом создании нового проекта вы получаете возможность входить и выходить ( cd ) из директорий, а виртуальные среды будут автоматически активироваться и деактивироваться (вам также нужно изменить имя среды и интерпретатор Python).


Ниже представлен GitHub gist со сценарием, который сделает всю работу за вас. Загрузите его (потребуется запустить chmod +x newproj.sh , чтобы убедиться, что он выполняемый). Затем просто используйте его для создания новых проектов, передав ему нужную версию Python и имя проекта:


Visual Studio Code сочетает в себе множество классных функций. Например, он может автоматически выбирать подходящий виртуальный интерпретатор для директории проекта, если вы установите его в соответствии с инструкциями выше.

Для начала воспользуемся brew cask install visual-studio-code .

Затем переходим к настройкам VS Code:


  • Откройте палитру команд с помощью ⌘+⇧+P и выберите Shell Command: Install 'code' command in PATH . Таким образом вы запустите VS Code из внешнего терминала: code -- запускает приложение, code. открывает текущую рабочую директорию, а code path/to/file/or/dir открывает определённый файл или директорию.


  • Установите расширение Python для VS Code. Таким образом, при сохранении файла с расширением Python редактор будет знать, что нужно интерпретироваться в контексте Python.

При входе и выходе из директорий проектов в интегрированном терминале интерпретатор python автоматически определяет venvs при наличии файла .python-version (файл должен существовать при правильном использовании pyenv-virtualenv).


Чтобы указать приложению, какой интерпретатор Python нужно использовать, нажмите на имя интерпретатора Python на нижней панели инструментов или откройте палитру команд и введите Python: Select Interpreter .


Находясь в терминале, также можно создавать и активировать новые venvs привычным образом.

Чтобы воспользоваться ноутбуками, просто откройте файл .ipynb или выберите Python: Create New Blank Jupyter Notebook из палитры команд, находясь в среде conda. Теперь можно запускать ячейки и создавать ноутбуки в обычном режиме, но с дополнительным преимуществом, которое не зависит от веб-браузера.


Ноутбук также можно конвертировать в сценарий Python одним щелчком мыши или с помощью Python: Convert to python script :


Это удобный способ превращения разведочного анализа в готовые к выполнению, воспроизводимые программы.

В этой статье мы рассмотрим, какие действия нужно предпринять, чтобы написать свою первую программу на языке Python. Материал предназначен для начинающих, которые делают первые шаги в мире программирования.

Итак, прежде чем мы приступим к написанию программы, давайте установим Python, если вы этого ещё не сделали. Для этого мы предварительно скачаем Python с официального сайта. Если у вас Windows, инсталлятор берём отсюда, выбирая нужную версию. В принципе, установка проблем не вызывает, поэтому мы не будем задерживаться на этом шаге. К тому же, в сети полно статей, где подробно и пошагово описывается инсталляция Python (кстати, его можно установить и на Unix-подобные системы: Linux, Ubuntu и прочие).

Пишем первую программу

Что нужно сделать в первую очередь? Во-первых, открыть IDLE — она представляет собой среду разработки на Python и поставляется вместе с дистрибутивом:

start_idle_1-20219-04fbfc.jpg

После запуска IDLE в интерактивном режиме мы можем переходить к созданию первой программы. Как уже стало доброй традицией, это будет классический "Hello world". Чтобы написать такую простейшую программу мы используем всего одну строку кода:

1-20219-e3cc84.jpg

Элементарно, Ватсон! Теперь вы написали первую программу на Python! Впрочем, это не сделает вас программистом, ведь всё гораздо сложнее… С другой стороны, надо же с чего-то начинать.

Для закрепления можете написать другие простые программы. Например, нижеследующий код выведет в консоли 8:

Впрочем, при разработке программ на Python интерактивный режим не является основным. Чаще всего мы сохраняем код программы в файл, а потом запускаем файл. Давайте создадим в IDLE новое окно, выбрав File → New File (также можно нажать Ctrl + N):

2-20219-37c5df.jpg

У нас появится окно, где вводим следующий код:

Для запуска нашей новой программы на Python достаточно нажать F5 либо выбрать в меню IDLE Run → Run Module. Кстати, перед запуском среда разработки предложит сохранить файл (папку можете выбрать сами).


Ес­ли ты дума­ешь, что хакеру прог­рамми­рова­ние не нуж­но, то глу­боко оши­баешь­ся! Да, мож­но кач­нуть Kali Linux и юзать готовые прог­рам­мки, копипас­тить код с форумов и всле­пую качать скрип­ты с GitHub. Но потолок тво­их уме­ний, пока ты не научишь­ся писать и понимать код, будет низ­ким. В этой статье я попыта­юсь в дос­тупной фор­ме научить тебя осно­вам прог­рамми­рова­ния. Начина­ем с абсо­лют­ного нуля!

От редакции

И, пос­коль­ку это экспе­римент, статья дос­тупна без плат­ной под­писки.

Ес­ли у тебя на ком­пе есть сов­ремен­ный дис­три­бутив Linux, то в него уже вхо­дит Python 3, а писать пер­вые прог­раммы будет удоб­но в IDLE — прос­том редак­торе кода, который при­лага­ется к Python. В Ubuntu, что­бы уста­новить его, набери в кон­соли

В Windows при уста­нов­ке Python обя­затель­но отметь на пер­вом экра­не уста­нов­щика галоч­ку Add to Path, что­бы мож­но было запус­кать python3 из коман­дной стро­ки в любом удоб­ном мес­те.

За­пус­тив IDLE, зай­ди в Options → Configure IDLE, перей­ди на вклад­ку General и пос­тавь галоч­ку на пун­кте Open Edit Window, наж­ми ОK и переза­пус­ти IDLE. Теперь мож­но писать прог­раммы, сох­ранять их и запус­кать кла­вишей F5. Ну что, пог­нали?

Переменные

В любом язы­ке прог­рамми­рова­ния есть такая шту­ка, как перемен­ные. Это как в школь­ной алгебре: вот перемен­ная a = 1 , вот перемен­ная b = 2 . То есть это такие абс­трак­тные шту­ки, внут­ри них лежит зна­чение, которое может менять­ся — нап­ример, ког­да ты пишешь пос­ле перемен­ной знак рав­но и какое‑то новое зна­чение.

Ну, то, что print( a) — это коман­да, которая печата­ет на экра­не текущее зна­чение перемен­ной, ты уже понял. Ты написал пос­ле зна­ка рав­но сно­ва саму перемен­ную + 2 , то есть сна­чала в перемен­ной было зна­чение 2, потом к это­му зна­чению при­бави­ли еще 2. На экра­не гор­до кра­сует­ся 4. Поз­драв­ляю, два и два сло­жили!

А если изна­чаль­но неиз­вес­тно, какие чис­ла надо скла­дывать? Тог­да приш­лось бы спер­ва поп­росить юзе­ра ввес­ти их в кон­соли и нажать Enter. Давай так и сде­лаем:

Внут­ри ско­бочек у input ты пишешь пояс­нение для юзе­ра, что кон­крет­но его про­сят ввес­ти. Но вот беда, по умол­чанию все, что вво­дит­ся через input, счи­тает­ся не чис­лом, а стро­кой, поэто­му, преж­де чем скла­дывать количес­тво лит­ров пива, нуж­но сна­чала пре­обра­зовать вве­ден­ные стро­ки в чис­ла с помощью фун­кции int().

Окей, пре­обра­зовал стро­ки в чис­ла, положил их в перемен­ную c , а даль­ше‑то что за треш внут­ри ско­бок у print ? Тут скла­дыва­ются стро­ки (стро­ки всег­да пишут­ся внут­ри кавычек), пояс­няющие, что имен­но выводит­ся на экран, а резуль­тат сло­жения переда­ется в фун­кцию print( ) .

Что­бы стро­ки без­болез­ненно сло­жились с перемен­ной c , в которой лежит чис­ло, надо пре­обра­зовать его в стро­ку фун­кци­ей str( ) — так же как мы прев­ращали стро­ки в чис­ла, толь­ко наобо­рот.

Во­обще, типов перемен­ных мно­го, но суть ты уло­вил — что­бы про­изво­дить с перемен­ными какие‑то дей­ствия, нуж­но их сна­чала при­вес­ти к одно­му типу — к стро­ково­му, или к чис­ловому, или еще к какому‑нибудь. Если с этим не замора­чивать­ся, Python сло­жит не чис­ла, а стро­ки и вве­ден­ные 2 и 3 лит­ра пива в сум­ме дадут не 5, а целых 23. Хорошо бы так было в реаль­нос­ти!

Вот еще при­мер­чик, рас­счи­тыва­ющий, сколь­ко тебе еще пить пиво, исхо­дя из сред­ней про­дол­житель­нос­ти жиз­ни в Рос­сии:

Здесь мы вызыва­ем фун­кцию input( ) , что­бы получить зна­чение, вычита­ем его из 73 (сред­няя про­дол­житель­ность жиз­ни рос­сияни­на), не забыв прев­ратить стро­ку в чис­ло, а потом печата­ем резуль­тат, прев­ратив чис­ло обратно в стро­ку и сло­жив с дру­гими стро­ками.

Итак, ты узнал, что такое целочис­ленные и стро­ковые перемен­ные, что эти типы мож­но пре­обра­зовы­вать друг в дру­га коман­дами int( ) и str( ) . К тому же теперь ты уме­ешь получать перемен­ные от поль­зовате­ля с помощью фун­кции input( 'Введите что-то') и печатать резуль­таты с помощью фун­кции print( ) .

Условия

В осно­ве любой прог­раммы лежат усло­вия. В зависи­мос­ти от того, выпол­няют­ся они или не выпол­няют­ся, прог­рамма может пой­ти по одно­му или дру­гому пути. Пред­ставь, ты едешь на машине и смот­ришь на часы: если уже есть десять вечера, то повора­чива­ешь домой, если нет, то мож­но заехать в гос­ти. Точ­но так же работа­ет и прог­рамма: про­веря­ет какое‑то зна­чение и сво­рачи­вает туда или сюда и выпол­няет соот­ветс­тву­ющий кусочек кода.

Бло­ки кода в Python отде­лают­ся отсту­пами. Отступ на самом деле может быть любым, нап­ример некото­рые пред­почита­ют исполь­зовать вмес­то четырех про­белов кла­вишу Tab. Глав­ное — не сме­шивать в одной прог­рамме отсту­пы раз­ного типа. Если уж начал исполь­зовать четыре про­бела, то исполь­зуй по всей прог­рамме, а то Python будет на тебя ругать­ся и уни­жать.

Фун­кция lower(), преж­де чем срав­нивать усло­вие, дела­ет все бук­вы в стро­ке малень­кими, потому что глу­пый юзер может ввес­ти сло­во YES с горящим Caps Lock, и это надо пре­дус­мотреть заранее.

На самом деле lower( ) — не прос­то фун­кция, а метод клас­са string (стро­ка). Имен­но поэто­му он вызыва­ется через точ­ку пос­ле перемен­ной, которая содер­жит стро­ку. О клас­сах и методах мы погово­рим как‑нибудь в дру­гой раз, а пока прос­то запом­ни, что некото­рые фун­кции вызыва­ются таким обра­зом.

Да­вай поп­робу­ем сде­лать усло­вие для про­вер­ки логина и пароля, исполь­зуя опе­ратор И, который пишет­ся как and . Он нужен для того, что­бы про­верить одновре­мен­но выпол­нение пер­вого и вто­рого усло­вия.

Читайте также: