Созданный в 1991 году Гвидо ван Россумом и названный в честь популярного британского комедийного телешоу 1970-х «Летающий цирк Монти Пайтона» (англ. Monty Python’s Flying Circus), язык Python (в произношении употребляется как «Пито́н», так и «Па́йтон») на сегодня является дним из самых популярных объектно-ориентированных языков программирования, сочетая понятный и достаточно простой синтаксис и мощные возможности за счет использования встроенных и подключаемых библиотек.

Наиболее известные и часто используемые библиотеки в проектах с ИИ:  

  • NumPy и Pandas — для добавления поддержки больших многомерных массивов, матриц, математических функций для операций с ними; 
  • Keras и TensorFlow — для работы с сетями глубинного обучения;
  • Requests и т.п.

Разработчики языка Python придерживаются определённой философии программирования, называемой «The Zen of Python» («Дзен Пито́на», или «Дзен Па́йтона»). Её очень просто получить для прочтения на экране с помощью команды 'import this'. Основные пункты философии Python:

  1. Красивое лучше, чем уродливое.
  2. Явное лучше, чем неявное.
  3. Простое лучше, чем сложное.
  4. Сложное лучше, чем запутанное.
  5. Плоское лучше, чем вложенное.
  6. Разреженное лучше, чем плотное.
  7. Читаемость имеет значение.
  8. Особые случаи не настолько особые, чтобы нарушать правила.
  9. При этом практичность важнее безупречности.
  10. Ошибки никогда не должны замалчиваться.
  11. Если не замалчиваются явно.
  12. Встретив двусмысленность, отбрось искушение угадать.
  13. Должен существовать один — и, желательно, только один — очевидный способ сделать это.
  14. Хотя он поначалу может быть и не очевиден, если вы не голландец.
  15. Сейчас лучше, чем никогда.
  16. Хотя никогда зачастую лучше, чем прямо сейчас.
  17. Если реализацию сложно объяснить — идея плоха.
  18. Если реализацию легко объяснить — идея, возможно, хороша.
  19. Пространства имён — отличная вещь! Давайте будем делать их больше!

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

Итак, в отличие от рассмотренной ранее визуальной среды программирования Scratch, Python основан на выполнении текстовых команд. Порядок таков: вначале вы будете писать инструкции, используя упрощенный язык и определенный формат, а затем эти инструкции будет выполнять компьютер. Нельзя сказать, что так уж трудно научиться писать программы на Python — немного попрактиковавшись, любой может писать простые программы на Python, а поработав над собой ещё немного — дойти и до сложных игр, а также программ с элементами машинного обучения (Machine Learning).

 

Представляем Thonny Python IDE

Thonny Python IDE — интегрированная среда разработки (англ. Integrated Development Environment) для Python, предназначенная для начинающих. Интегрированная среда разработки (IDE) — сложное название, но имеющее простое объяснение: она собирает вместе или интегрирует все различные инструменты, необходимые для написания или разработки программного обеспечения в едином пользовательском интерфейсе или среде. Доступно множество IDE, некоторые из которых поддерживают множество разных языков программирования, в то время как другие, такие как Thonny, сосредоточены на поддержке одного языка.  

Интерфейс Thonny выглядит следующим образом:

AToolbar (Панель инструментов). В Thonny есть две версии интерфейса: «Обычный режим» (Normal Mode) и «Простой режим» (Simple Mode), который лучше подходит для начинающих. Мы будем использовать простой режим, который загружается по умолчанию, когда вы открываете Thonny из раздела «Программирование» в Главном меню. В нём в качестве меню используется панель удобных значков, позволяющая создавать, сохранять, загружать и запускать программы Python, а также тестировать их различными способами.

BScript Area (Область сценария) — это место, где пишутся программы Python, и оно разделено на основную область для программы и небольшое боковое поле для отображения номеров строк.

C Python Shell (Оболочка Python) — оболочка Python позволяет вам вводить отдельные инструкции, которые затем запускаются, как только вы нажимаете клавишу ENTER, а также предоставляет информацию о запущенных программах.

 

 

Ваша первая программа на Python: Hello, World!

Как и другие предустановленные программы на Raspberry Pi, Thonny доступен из меню: щелкните значок «Малинка»(Пуск), переместите курсор в раздел «Программирование» и щелкните Thonny Python IDE. Через несколько секунд загрузится пользовательский интерфейс Thonny (по умолчанию отображается простой режим).

В отличие от Scratch, который дает нам визуальные строительные блоки в качестве основы для программы, Python является более традиционным языком программирования, где все записывается символами. Запустите свою первую программу, щелкнув область Shell (оболочки) Python в нижнем левом углу окна Thonny, затем введите следующую инструкцию перед нажатием клавиши ENTER:

Когда нажмете ENTER, вы увидите, что программа мгновенно начинает работать: Python ответит в той же области оболочки сообщением «Hello, World!». Это потому, что оболочка является прямой линией интерпретатора (interpreter) Python, задача которого  сводится к просмотру ваших инструкций и интерпретации того, что они означают. Это называется интерактивным режимом (interactive mode), и вы можете сравнить это с тем, как ведется разговор лицом к лицу с кем-то: как только вы закончите что-то говорить, собеседник ответит, а затем будет ждать, что скажете дальше вы.

Обратите внимание: СИНТАКСИЧЕСКАЯ ОШИБКА (SYNTAX ERROR)
Если ваша программа не запускается, а вместо этого выводит сообщение «синтаксическая ошибка» в области оболочки, значит, где-то есть ошибка в написанном вами коде. Python требует, чтобы его инструкции были написаны очень специфическим образом: пропустите скобку или кавычку, неправильно напишете «print» или поставите заглавную P, или добавите дополнительные символы где-нибудь в инструкции — и она не будет работать. Попробуйте ввести инструкцию еще раз и убедитесь, что она соответствует приведенному выше примеру кода, прежде чем нажимать клавишу ENTER!

 

Однако вам не обязательно использовать Python в интерактивном режиме. Щелкните область сценария в левой части окна Thonny, затем введите свой код ещё раз:

Когда вы на этот раз нажмёте клавишу ENTER, ничего не произойдёт — за исключением того, что вы получите новую пустую строку в области сценария. Чтобы эта версия вашего кода заработала, вам нужно щелкнуть значок «Выполнить»  на панели инструментов Thonny. Когда вы это сделаете, вам будет предложено сначала сохранить вашу программу; введите описательное имя, например «Hello World», и нажмите кнопку «Сохранить». После сохранения программы вы увидите два сообщения в области оболочки Python:

Первая из этих строк — это инструкция от Thonny, говорящая интерпретатору Python запустить программу, которую вы только что сохранили. Вторая — результат работы программы:  сообщение, которое вы указали напечатать Python-у.

 

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

 

 

Следующие шаги: циклы и отступы кода

Подобно тому, как Scratch использует стеки блоков, похожих на мозаику, чтобы контролировать, какие биты программы связаны с какими-то другими битами, Python имеет свой собственный способ управления последовательностью, в которой выполняются его программы: отступы (indentation). Создайте новую программу, щелкнув значок  «New» (Создать)  на панели инструментов Thonny. Не волнуйтесь, вы не потеряете существующую программу — вместо этого Thonny создаст новую вкладку над областью скрипта. Начните с ввода следующего:

Первая строка выводит простое сообщение в оболочку, как и ваша программа Hello World. Вторая запускает конечный цикл (definite loop), который работает так же, как и в Scratch: счетчик i назначается циклу и получает ряд чисел — инструкцию диапазона range, который должен начинаться с числа 0 и двигаться вверх к числу 10, но не достигнуть его. Символ двоеточия (:) сообщает Python, что следующая инструкция должна быть частью цикла.
В Scratch инструкции, которые нужно включить в цикл, буквально включены внутри C-образного блока. Python использует другой подход: код отступов (indenting code). Следующая строка начинается с четырех пробелов, которые Thonny должен был добавить, когда вы нажали ENTER после строки 2:

Пробелы сдвигают эту строку внутрь по сравнению с другими строками. Этот отступ - это то, как Python сообщает разницу между инструкциями вне цикла и инструкциями внутри цикла; код с отступом называется вложенным.
Вы заметите, что когда вы нажимали ENTER в конце третьей строки, Thonny автоматически делал отступ для следующей строки, предполагая, что она будет частью цикла. Чтобы удалить это, просто нажмите клавишу BACKSPACE один раз, прежде чем вводить четвертую строку:

Ваша четырехстрочная программа завершена. Первая строка находится вне цикла и выполняется только один раз; вторая строка устанавливает цикл; третья находится внутри цикла и будет выполняться один раз для каждого исполнения цикла; а четвертая строка снова находится вне цикла.

Щелкните значок «Выполнить», сохраните программу как «Отступ» (Indentation) и просмотрите область оболочки (Shell), где показан результат работы:

 

Обратите внимание: СЧЕТ ОТ НУЛЯ
Python является языком с нулевым индексом, то есть он начинает отсчет с 0, а не с 1, поэтому ваша программа печатает числа от 0 до 9, а не от 1 до 10. Если хотите, вы можете изменить это поведение, переключив диапазон range(10) на диапазон (1, 11) — или любых других чисел, которые вам нравятся.

 

Отступы — это мощная часть Python и одна из наиболее частых причин, по которой программа не работает так, как вы ожидали. При поиске проблем в программе, процессе, известном как отладка (дебаггинг, debugging), всегда дважды проверяйте отступы, особенно когда вы начинаете вложение циклов внутри других циклов.
Python также поддерживает бесконечные циклы (infinite loops), которые выполняются без завершения. Чтобы изменить вашу программу с определенного цикла на бесконечный, отредактируйте строку 2 следующим образом:

Если сейчас щелкнуть значок «Выполнить», появится сообщение об ошибке: name 'i' is not defined (имя i не определено). Это потому, что вы удалили строку, которая создала и присвоила значение переменной i. Чтобы исправить это, просто отредактируйте строку 3, чтобы она больше не использовала переменную:

Щелкните значок «Выполнить», и если вы поторопились, то увидите сообщение ‘Loop starting!’ (Цикл запускается!), за которым следует нескончаемая строка сообщений ‘Loop running!’ (Цикл выполняется!)

Сообщение ‘Loop finished!’ (Цикл завершен!) никогда не будет напечатано, потому что у цикла нет конца: каждый раз, когда Python завершает печать сообщения ‘Loop running!’, Он возвращается к началу цикла и печатает его снова.

Щелкните значок «Stop» (Стоп)  на панели инструментов Thonny, чтобы программа прекратила свои действия - это называется прерыванием программы (interrupting the program). Вы увидите сообщение, появившееся в области оболочки Python, и программа остановится - так и не дойдя до строки 4.

 

 

Условные выражения и переменные

Переменные, как и во всех языках программирования, существуют не только для управления циклами. Запустите новую программу, щелкнув значок «New» (Создать)  в меню Thonny, а затем введите следующее в область сценария:


Щелкните значок «Run» (Выполнить), сохраните программу как Name Test и посмотрите, что произойдёт в области оболочки: вам будет предложено ввести свое имя. Введите свое имя в область оболочки и нажмите клавишу ВВОД. Поскольку это единственная инструкция в вашей программе, больше ничего не произойдет.

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

Чтобы заставить вашу программу делать что-то полезное с именем, добавьте условный оператор, набрав следующее:


Помните, что когда Thonny видит, что ваш код требует отступа, он делает это автоматически, но он не знает, когда ваш код должен перестать иметь отступ, поэтому вам придется удалять пробелы самостоятельно.
Щелкните значок «Выполнить» и введите свое имя в область оболочки. Если ваше имя не Clark Kent, вы увидите сообщение ‘You are not Superman!’ (Ты не Супермен!). Снова нажмите «Выполнить» и на этот раз введите имя ‘Clark Kent’ — убедитесь, что оно написано точно так же, как в программе, с заглавными буквами C и K. На этот раз программа распознает, что вы на самом деле Супермен.

 

Символ == указывает Python провести прямое сравнение, чтобы проверить, соответствует ли переменная userName тексту, известному в программе как строка (string). Если вы работаете с числами, вы можете сделать и другие сравнения, используя символы, известные как операторы сравнения (comparison operators):

> для того, чтобы увидеть больше ли число, чем другое;

для того, чтобы увидеть меньше ли число, чем другое;

=> для того, чтобы увидеть больше ли число или равно; 

=< для того, чтобы увидеть меньше ли число или равно; 

!=  означает полную противоположность оператору ==.

 

Обратите внимание!

Давайте разберемся в отличиях операторов = и ==
Ключ к использованию переменных в программах — это понять и запомнить разницу между = и ==. Помните: = означает «сделать эту переменную равной этому значению», то есть буквально — присвоить ей это значение, а == означает «проверить, равна ли переменная этому значению», то есть проверить. Путаница в этих базовых понятиях — верный способ получить неработающую программу!

 

Операторы сравнения также могут использоваться в циклах. Удалите строки со 2 по 5, а затем введите вместо них следующее:


Снова щелкните значок «Выполнить». На этот раз, вместо того, чтобы выйти, программа будет продолжать запрашивать ваше имя, пока не подтвердит, что вы Супермен — что-то вроде очень простого пароля. Чтобы выйти из цикла, введите ‘Clark Kent’  или щелкните значок «Стоп» на панели инструментов Thonny.

Поздравляем: теперь вы знаете, как использовать условные выражения и операторы сравнения!

 

 

Проект 1: Черепашьи снежинки

Теперь вы понимаете, как работает Python, пора поиграть с графикой и создать снежинку с помощью инструмента, известного как Черепашья графика.

 

Внимание! Файлы данного проекта можно скачать по ссылке:  rpf.io/turtle-snowflakes

 

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

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

Создайте новую программу, щелкнув значок «New» (Создать) , и введите следующее:


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


Чтобы протестировать свою программу, вам нужно дать черепахе чем-нибудь заняться. Наберите:


Щелкните значок «Выполнить» и сохраните программу как Turtle Snowflakes. Когда программа будет сохранена, появится новое окно под названием ‘Turtle Graphics’ (Графика черепахи), и вы увидите результат своей программы: ваша черепаха Пэт (Pat), переместится вперед на 100 единиц, рисуя прямую линию.

Вернитесь в главное окно Thonny — если оно скрыто за окном Turtle Graphics, либо нажмите кнопку свертывания в окне Turtle Graphics, либо щелкните запись Thonny на панели задач в верхней части экрана и нажмите кнопку Stop, чтобы закрыть графическое окно черепахи.

Вводить каждую команду движения вручную было бы утомительно, поэтому удалите строку 3 и создайте цикл для выполнения тяжелой работы по созданию фигур:


Запустите вашу программу, и черепашка Пэт (Pat) нарисует единственный параллелограмм.

Чтобы превратить это в форму снежинки, щелкните значок Stop в главном окне Thonny и создайте цикл вокруг вашего цикла, добавив следующую строку в качестве строки 3:


… и следующее внизу вашей программы:


Ваша программа не будет запущена как есть, потому что существующий цикл имеет неправильный отступ. Чтобы исправить это, щелкните начало каждой строки в существующем цикле — строки с 4 по 8 — и четыре раза нажмите клавишу ПРОБЕЛ, чтобы исправить отступ. Теперь ваша программа должна выглядеть так:

Щелкните значок «Выполнить» и наблюдайте за черепахой: она, как и раньше, нарисует параллелограмм, но когда это будет сделано, она повернется на 36 градусов и нарисует еще один, затем еще один и так далее, пока на экране не появятся десять перекрывающихся параллелограммов. Немного похоже на снежинку, не так ли?

В то время как роботизированная черепаха рисует одним цветом на большом листе бумаги, симулированная черепаха Python может использовать различные цвета. Добавьте новую строку 3 и 4, сдвинув существующие строки вниз:


Запустите программу еще раз, и вы увидите эффект нового кода: цвет фона графического окна черепахи изменился на синий, а снежинка стала голубой.

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

Обратите внимание! Правописание американского английского:
Во многих языках программирования используется написание американского английского, и Python не исключение: команда для изменения цвета пера черепахи написана 'color', и если вы напишете ее по-английски как 'colour', она просто не сработает. Однако переменные могут иметь любое написание, поэтому вы можете называть свои новые переменные 'colours', и Python их поймёт.

 

Измените цвет фона в строке 4 с ‘blue’ (синего) на ‘grey’ (серый), затем создайте новую переменную с именем ‘colours’, вставив новую строку 5:

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


Щелкните значок «Выполнить», и снежинка-штрих-ниндзя-звезда снова будет нарисована. Однако на этот раз Python выберет случайный цвет из вашего списка при прорисовке каждого лепестка, придав снежинке приятный многоцветный вид.

Чтобы снежинка меньше походила на звезду ниндзя, а больше походила на настоящую снежинку, добавьте новую строку 6 непосредственно под списком colours и введите следующее:

При использовании робота-черепахи инструкции penup и pendown будут перемещать (поднимать и опускать) физическую ручку на бумаге, но в виртуальном мире просто скажите черепахе остановиться и начать рисовать линии. Однако на этот раз вместо использования цикла вы создадите функцию (function) — сегмент кода, который можно вызвать в любое время, например, создав свою собственную инструкцию Python.

Начните с удаления кода для рисования снежинок на основе параллелограмма: это все, что находится между инструкцией pat.color("cyan") в строке 10 и до pat.right(36) в строке 17. Оставьте инструкцию pat.color(random.choice(colours)), но добавьте символ решетки (#) в начале строки. Это называется закомментировать (commenting out) инструкции и означает, что Python проигнорирует их. Вы можете использовать комментарии, чтобы добавлять пояснения к вашему коду, что упростит его понимание, когда вы вернетесь к нему через несколько месяцев или отправите его кому-то другому!
Создайте свою функцию, которая будет называться ‘branch’ (ветвь), набрав следующую инструкцию в строке 10 ниже pat.pendown(): 


Это определяет (defines) вашу функцию branch. Когда вы нажимаете клавишу ENTER, Thonny автоматически добавляет отступ для инструкций функции. Введите следующее, обращая особое внимание на отступы — потому что в какой-то момент вы собираетесь вложить код на три уровня отступа!

Наконец, создайте новый цикл внизу вашей программы, но над закомментированной цветной линией — для запуска (run) или вызова (call) вашей новой функции:

 

Готовая программа должна выглядеть так:

Нажмите «Выполнить» и наблюдайте в графическом окне, как черепашка Пэт рисует, следуя вашим инструкциям.
Поздравляем: ваша снежинка теперь больше похожа на снежинку!

 

ЗАДАНИЕ:

  • Попробуйте использовать закомментированную инструкцию, чтобы нарисовать ветки снежинки разными цветами.
  • Попробуйте создать функцию 'snowflake’ (снежинка) и использовать ее, чтобы нарисовать множество снежинок на экране.
  • Попробуйте сделать так, чтобы ваша программа изменяла размер и цвет снежинок наугад.

 

 

 

Проект 2: «Пугающая» разница

Python может обрабатывать изображения и звуки, так же хорошо, как и графику для черепах, поэтому их можно использовать для бОльшего эффекта в качестве розыгрыша ваших друзей. Давайте создадим игру «Найди разницу» со страшным секретом внутри, идеально подходящую для Хэллоуина!

 

Внимание! Файлы данного проекта можно скачать по ссылке:  rpf.io/scary-spot

 

Для этого проекта нужны два изображения — ваше уникальное изображение плюс «пугающее» изображение-сюрприз, а также звуковой файл. Щелкните значок «Малинка» (Пуск), чтобы загрузить меню Raspbian, выберите категорию Internet (Интернет) и щелкните веб-браузер Chromium. Когда он загрузится, введите в адресной строке rpf.io/spot-pic, а затем нажмите клавишу ENTER. Щелкните изображение правой кнопкой мыши и выберите ‘Save image as...’ (Сохранить изображение как ...), выберите папку Home (Домашнюю) из списка слева, затем нажмите Save (Сохранить). Вернитесь к адресной строке Chromium, введите rpf.io/scary-pic и нажмите клавишу ENTER. Как и раньше, щелкните изображение правой кнопкой мыши, выберите «Сохранить изображение как…», выберите домашнюю папку и нажмите «Сохранить».

Чтобы получить звуковой файл, который вам понадобится, снова нажмите в адресной строке и введите rpf.io/scream, а затем нажмите клавишу ENTER. Этот файл, звук крика, который преподнесет вашему игроку настоящий сюрприз, будет воспроизводиться автоматически, но его необходимо сохранить, прежде чем вы сможете его использовать. Щелкните правой кнопкой мыши небольшой аудиоплеер, нажмите 'Save as...' (Сохранить как ...), выберите домашнюю папку и нажмите «Сохранить». Теперь вы можете закрыть окно Chromium.

Щелкните значок «Новый» на панели инструментов Thonny, чтобы начать новый проект. Как и раньше, вам необходимо использовать дополнительную библиотеку для расширения возможностей Python: библиотеку Pygame, которая, как следует из названия, была создана для игр. Введите следующее:


Вам понадобятся некоторые части других библиотек, а также часть библиотеки Pygame. Импортируйте их, набрав следующее:

Инструкция from работает иначе, чем инструкция импорта import, позволяя импортировать только те части библиотеки, которые вам нужны, а не всю библиотеку. Затем вам нужно настроить Pygame, или другими словами произвести инициализацию (initialisation). Pygame должен знать ширину и высоту монитора или телевизора игрока, известную как его разрешение (resolution). Введите следующее:

Последний шаг в настройке Pygame - создание его окна, которое Pygame называет экраном 'screen'.
Введите следующее:

Обратите внимание на пустую строку посередине: вот где будет расположена ваша программа. А пока щелкните значок «Выполнить», сохраните свою программу как 'Spot the Difference' (Найди отличия) и посмотрите: Pygame создаст окно, заполнив его черным фоном, которое затем почти сразу исчезнет, как только появится инструкция для выхода. За исключением короткого сообщения в оболочке, программа пока особо ничего не делает.

 

Чтобы отобразить свое уникальное изображение, введите следующую строку в поле над pygame.quit():


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


Теперь изображение находится в памяти, и вам нужно указать Pygame, чтобы он отображал его на экране — процесс, известный как blitting (блиттинг), или bit block transfer (передача битового блока). Введите следующее:


Первая из этих строк копирует изображение на экран, начиная с верхнего левого угла; вторая говорит Pygame перерисовать экран. Без этой второй строки изображение будет в нужном месте в памяти, но вы никогда его не увидите!
Щелкните значок «Выполнить», и изображение ненадолго появится на экране:

Чтобы изображение отображалось дольше, добавьте следующую строку чуть выше pygame.quit():

Снова нажмите «Выполнить», и изображение останется на экране дольше. Добавьте изображение-сюрприз, набрав следующее сразу под строкой pygame.display.update():

Добавьте задержку, чтобы изображение зомби не появилось сразу:

Затем перенесите (blit) изображение на экран и обновите его, чтобы оно было видно игроку:

Щелкните значок «Выполнить» и посмотрите, что произойдет: Pygame загрузит ваше оригинальное изображение spot-the-difference, но через три секунды оно будет заменено страшным зомби.

Однако установка задержки на три секунды делает ситуацию немного предсказуемой. Измените строку sleep (3) над screen.blit (zombie, (0,0)) на:

Данное действие выбирает случайное число от 5 до 15 и задерживает программу на это время. Затем добавьте следующую строку чуть выше инструкции sleep, чтобы загрузить звуковой файл с ужасным воплем:

Переместитесь ниже инструкции sleep и введите следующее в новой строке, для того, чтобы начать воспроизведение звука и чтобы он сработал прямо перед страшным изображением, которое на самом деле показывается игроку:


Наконец, скажите Pygame, чтобы он прекратил воспроизведение звука, набрав следующую строку чуть выше pygame.quit():


Щелкните значок Run запуска программы и полюбуйтесь своей работой: после нескольких секунд невинной картинки spot-the-difference появится ваш страшный зомби вместе с леденящим кровь воплем — обязательно напугайте ваших друзей!  )))

Если вы обнаружите, что изображение зомби появляется до начала воспроизведения звука, вы можете компенсировать это, добавив небольшую задержку сразу после инструкции scream.play() и перед инструкцией screen.blit:


Готовая программа должна выглядеть так:

Теперь остается только пригласить друзей поиграть в «Найди отличия» — и, конечно же, убедиться, что динамики включены погромче! )))))

 

 

ЗАДАНИЕ на проработку кода:

  • Попробуйте изменить изображения, чтобы сделать розыгрыш более подходящим для других событий, например Рождества.
  • Попробуйте нарисовать свои собственные необычные и страшные изображения (с помощью графического редактора, такого как GIMP).
  • Можете ли вы отследить нажатие пользователем клавиш, чтобы сделать программу ещё более убедительной?

 

 

 

Проект 2: Лабиринт

Теперь, когда вы немного знакомились с Python, пришло время использовать Pygame, чтобы сделать что-то более сложное: полнофункциональную текстовую игру-лабиринт, основанную на классических ролевых играх (RPG-играх, role-playing games). Эти игры, известные как «текстовые приключения» (text adventures)  или «интерактивная фантастика» (interactive fiction), восходят к тому времени, когда компьютеры не могли обрабатывать графику, но до сих пор есть их поклонники, которые утверждают, что никакая графика не будет такой яркой, как та, что есть в вашем воображении!

 

Внимание! Файлы данного проекта можно скачать по ссылке: rpf.io/python-rpg

 

Эта программа немного сложнее, и чтобы упростить задачу, вы начнете с уже частично написанной версии. Откройте веб-браузер Chromium и перейдите по следующему адресу: rpf.io/rpg-code.
Веб-браузер Chromium автоматически загрузит код программы в папку «Загрузки», но предупредит вас о том, что тип файла — программа Python — может нанести вред вашему компьютеру. Вы загрузили файл из Raspberry Pi Foundation, надежного источника, поэтому нажмите кнопку Сохранить в предупреждающем сообщении, которое появляется в нижней части экрана. Вернитесь в Thonny и щелкните значок «Load» (Загрузить) . Найдите файл rpg-rpg.py в папке «Загрузки» и нажмите кнопку «Загрузить».

Начните с нажатия значка «Выполнить», чтобы ознакомиться с принципами работы игры. Результат игры появится в области shell в нижней части окна Thonny; увеличьте окно Thonny, нажав кнопку «развернуть», чтобы его было легче читать.

Игра в ее нынешнем виде очень проста: две комнаты и никаких предметов. Игрок начинает в Зале (Hall), первой из двух комнат. Чтобы перейти на Кухню (Kitchen), просто введите ‘go south’ (иди на юг), а затем нажмите клавишу ENTER. Находясь на кухне, вы можете набрать ‘go north’ (иди на север), чтобы вернуться в холл. Вы также можете попробовать ввести ‘go west’ (иди на запад) и ‘go east’ (иди на восток), но поскольку в этих направлениях нет комнат, игра покажет вам сообщение об ошибке.

Спуститесь вниз до строки 29 программы в области сценария, чтобы найти переменную с именем rooms. Этот тип переменных известен как словарь (dictionary) и сообщает игре о комнатах, их выходах и том, в какую комнату ведет данный выход.

Чтобы сделать игру более интересной, добавьте еще одну комнату: Dining Room (Столовую), к востоку от Зала (Hall). Найдите переменную rooms в области сценариев и расширите ее, добавив символ запятой (,) после } в строке 38, а затем введите следующее (точный отступ в словаре не важен):


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


Щелкните значок Run «Выполнить» и попробуйте свою новую комнату: введите ‘go east’, находясь в Зале, чтобы войти в Столовую, и введите ‘go west’ , находясь в Столовой, чтобы войти в Зал.

Поздравляем: вы создали себе комнату!

А вот пустые комнаты — не самое интересное. Чтобы добавить элемент в комнату, вам нужно изменить словарь этой комнаты. Остановите программу, щелкнув значок Stop (Стоп). Найдите словарь Hall в области сценариев, затем добавьте запятую в конец строки 'east' : 'Dining Room' перед нажатием ENTER и вводом следующей строки:


Снова нажмите Run «Выполнить». На этот раз игра сообщит вам, что вы можете увидеть свой новый предмет: ключ. Введите ‘get key’ (получить ключ), и вы сможете забрать его и добавить в список вещей, которые вы несете, называемые ваш инвентарь (inventory). Ваш инвентарь остается с вами, когда вы путешествуете из комнаты в комнату.

Щелкните значок «Стоп»   и сделайте игру более интересной, добавив монстра, которого нужно избегать. Найдите словарь Kitchen и добавьте элемент ‘monster’ (монстр) так же, как вы добавляли элемент ‘key’ (ключ), не забывая добавить запятую в конец строки выше:

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


Нажмите «Выполнить» и попробуйте войти в кухню — монстр не будет против, когда вы это сделаете!

Чтобы превратить это приключение в настоящую игру, вам понадобится больше предметов, еще одна комната и возможность «побеждать», покинув дом со всеми предметами в своем инвентаре. Начните с добавления еще одной комнаты, как вы это делали для столовой — только на этот раз это будет сад. Добавьте выход из словаря столовой, не забудьте добавить запятую в конец строки выше:


Затем добавьте новую комнату в словарь комнат rooms, снова не забудьте добавить запятую после символа } в строке выше, как и раньше:


Добавьте объект ‘potion’ (зелье) в словарь столовой, опять же не забудьте добавить необходимую запятую в строку выше:

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

Нажмите «Выполнить» и попробуйте завершить игру, взяв ключ и зелье, прежде чем идти в сад. Не забывайте не входить в кухню, потому что там монстр!

В качестве последней настройки игры добавьте несколько инструкций, рассказывающих игроку, как пройти игру. Прокрутите до верхней части программы, где определена функция showInstructions(), и добавьте следующее: «Доберитесь до сада с ключом и зельем
Избегайте монстров!
»

Запустите игру ещё раз, и вы увидите, что эти новые инструкции появятся в самом начале.

Поздравляем: вы создали интерактивную текстовую игру-лабиринт!

 

ЗАДАНИЕ на проработку кода:

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

 

 

Итак, подведём итоги!

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

 

Лайфхак:

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

 

Ну а если вы удовлетворили свой интерес, узнав о простейших возможностях языка Pyhton, и хотите посмотреть как с этим инструментарием можно управлять физическими устройствами, присоединенными к вашему Raspberry Pi через GPIO-интерфейс, то в следующей части мы этим и займёмся!