Продолжаем обзор книг по Python для новичков и в этой статье поговорим о третьем издании книги «Программируем на Python» Майкла Доусона. Одна из самых популярных книг для новичков. Предварительных знаний для её прочтения не требуется, что как раз нам и нужно.
Автор долгое время занимался разработкой игр, и именно это легло в основу книги. То есть обучение программированию на Python тут проходит через призму создания простейших игр. По большей части текстовых.
В книге 12 глав и в каждой главе разбирается как минимум одна игра. А последние три главы охватывают графические интерфейсы, графику, звук и анимацию.
Небольшую игру, которую вы видели в начале ролика, я как раз написал после прочтения книги. Но об этом я расскажу в конце, а сейчас поговорим о первой главе.
Game Over
Книга начинается с установки Питона, и первую программу, которую автор предлагает написать — это «Game Over». То есть вместо «Hello World», мы печатаем «Game Over», что в целом соответствует концепции книги и выглядит весьма забавно.
Далее автор постепенно знакомит читателя с Python, рассказывает про строки и числа, функцию print и переменные. В целом — это стандартный набор новичка и тут каких-то проблем не возникает.
Единственное, сами примеры записаны странным моноширным шрифтом, в котором запятые очень маленькие и похожи на точки.
В какой-то момент я даже подумал, что автор использует склейку строк с помощью точек, как в PHP и пошел гуглить, не пропустил ли я обновление синтаксиса в питоне. Но потом пригляделся и смог отличить точку от запятой. На мой взгляд не самый удачный шрифт. Хотя это мелочи.
Начальные главы
Вторую главу Майкл Доусон начинает с обзора типов данных и переменных, а также приводит программу с ошибкой. Но это специальная ошибка, на примере которой демонстрируются некоторые новичковые проблемы. Например, проблемы приведения строк к числам. Это классный приём, и он говорит, о том, что автор понимает с чем сталкиваются начинающие разработчики.
При этом, он очень подробно описывает в чем проблема и как её исправить.
В нашем курсе по Python, мы тоже стараемся обращать внимание на типичные ошибки в программировании, а в практической части мы даем серию заданий, где ученикам нужно исправить ошибки в программах, которые написали начинающие программисты. Разбираться в чужом коде — это очень полезный навык программиста. И круто, что у Доусона это есть.
Далее, в третьей главе, автор знакомит читателей с модулем random, а также условиями и циклом while. for он пока не затрагивает, что логично, ведь и if, и while имеют схожий синтаксис, обе конструкции используют условия. В первом случае для выбора ветки, а во втором для управления итерациями.
А еще, в этой главе, Майкл Доусон рассказывает про трассировку программы. То есть про то, как отлавливать ошибки с помощью карандаша и бумаги. Уметь построить выполнение программы на бумаге – это, опять же, очень полезный навык для программиста.
После трассировки в «Программируем на Python» говориться о проектировании алгоритмов и псевдокоде. То есть для Майкла Доусона важно не просто рассказать о Питоне, а именно сделать из вас программистов. И это здорово.
Завершается глава классической игрой — отгадай число.
Четвертый блок начинается с цикла for сперва автор объясняет последовательности на примере строк. А уже после вводит функцию range.
Далее Майкл рассказывает про индексы, включая отрицательные, а потом переходит к срезам. Причем, опять же, к срезам на строках. Это очень тонкий момент. Срезы действительно проще объяснить на строках, так как строки более наглядные.
При этом после строк вводятся кортежи, а не списки. Что выглядит как такой промежуточный этап. А вот про списки автор начинает говорить только в 5 главе, в которой разрабатывает классическую игру «Виселица». В этой же главе вводится и понятие словаря.
В целом, на протяжении всей главы, в книге демонстрируются разные части игры Виселица. Повторив которые, на выходе должна получиться законченная программа. Но надо понимать, что в данном случае код пишет Майкл Доусон. То есть если вы читаете книгу и повторяете всё за автором, то это не будет полностью вашей программой.
С одной стороны, игра написана, а с другой стороны вы выступили просто наборщиком текста. И если не предпринять дополнительных интеллектуальных усилий, то такое обучение будет мало эффективно.
И под дополнительными усилиями я имею в виду усовершенствование игры. Как только вы поняли, как работает каждый кусочек кода, задайте себе вопрос «Как я могу улучшить программу?». Может сделать так, чтобы слова брались из файла? А может добавить возможность сохранения результатов, чтобы можно было вернуться к игре после перерыва. А может начать вести таблицу побед? Внедрив эти улучшения, вы не только лучше поймете, как работает код из книги, но и сами сильно продвинетесь в программировании. Используйте этот подход, когда читаете эту книгу. Правда файлы вы изучите только через главу, но всегда можно придумать и другие усовершенствования. Главное немного пошевелить мозгами.
В следующем блоке автор переходит к функциям и разрабатывает игру крестики нолики. При создании функций Майкл Доусон немного отошел от PEP8 и мне стало интересно, это реально его код или правки внес корректор или редактор издательства.
Я решил скачать исходники, которые идут к этой книге. Благо сайт с исходниками упоминается в каждой главе. Но, к сожалению, данный сайт уже не работает. Точнее он перенаправляет на сайт компании Cengage Learing, которая занимается созданием образовательного контента. В том числе и выпускает эту книгу на английском языке.
Немного полазив по сайту, я всё-таки нашел
Итак, открыв исходники, я увидел, что автор, действительно, немного отходит от PEP8 в плане записи аргументов функций, если быть точным, то он отделяет знак равно пробелами. Но это придирка с моей стороны. Я сам не пишу идеальный код. Да и такая мелочь не влияет на работу программы, и даже близко не стоит с тем, что мы видел в исходниках Майка МакГрата в первом обзоре.
В целом же глава хорошая и функции автор объясняет отлично, особенно для новичков.
Файлы, исключения, ООП
Далее мы переходим к работе с файлами. А значит после этой главы вы можете вернуться к игре Виселица и улучшить её. В этой же главе рассматриваются исключения, а значит теперь ваши программы будут по-настоящему надежными.
Кстати, я не обращал внимания, но в конце каждой главы автор даёт небольшие задания. Например после файлов есть такое задание: «Доработайте игру Викторина таким образом, чтобы она хранила в файле список рекордов».
То есть Майкл Доусон советует тоже самое, что и я озвучил чуть ранее. Программы нужно усовершенствовать. Именно в этом суть работы с данной книгой.
После файлов и исключений, автор переходит к ООП. В том числе Майкл рассказывает про приватные атрибуты, которые в Python не совсем приватные, от чего периодически прикипает у Java программистов, которые только начинают писать на питоне. В целом же классы раскрыты хорошо, в том числе не забыты статические методы и свойства.
Итак, после 9 главы вы уже должны неплохо владеть Python. Как минимум уметь использовать его стандартные инструменты и библиотеку. Конечно, если вы не листали книгу, а вчитывались и реально программировали.
Графический интерфейс и создание игр
А вот с 10 главы автор начинает рассказывать про графический интерфейс на базе tkinter и разрабатывает несколько несложных шуточных программ. Анализировать tkinter я не буду, мне идея оконных приложений на Python не нравится. Хотя в контексте мини-игрушек она вполне уместна.
А вот в следующей главе мы переходим к написанию игр с помощью популярной библиотеки PyGame. Как раз после этой главы я и решил написать небольшую игрушку, которую вы видели в начале. Точнее я повторил игру из книги, но со своей графикой и дополнительными улучшениями.
Но давайте поговорим о книге. И тут, к сожалению, всё прошло не так гладко, как хотелось бы. Правда в этом есть и немалая доля моей вины.
Итак, во-первым мне пришлось повозиться с установкой PyGame на MacOS, так как были нужны дополнительные либы для компиляции. Но я довольно быстро нашел решение на stackoverflow и поставил эти библиотеки с помощью
Далее с помощью pip я установил библиотеку livewires, которую автор использует для работы с pyGame. Эту библиотеку разработала группа преподавателей из Англии, чтобы новичкам было проще работать с PyGame. И основная загвоздка в том, что автор использует собственную версию этой библиотекой, которая идет вместе с книгой.
А та версия, которую поставил я не подходит. И в книге об этом написано, но я как-то пропустил этот момент и потратил немало времени, чтобы понять в чем проблема. И судя по вопросам на форумах в интернете, таких как я было много.
Поэтому мне пришлось удалить оригинальную livewires и поставить версию Майкла Доусона. Но и на этом мои проблемы не закончились.
Оказывается, на данный момент PyGame не до конца поддерживает Python 3.8 и мне пришлось откатываться до версии 3.6. Такие моменты могут отпугнуть новичка. Но если запастись терпением, то всё получится.
Затем я начал набирать код из 11 главы, попутно подбирая картинки для моей игры. Вообще, в исходниках, которые идут вместе с книгой, есть все необходимые изображения, с очищенными авторскими правами.
Но мне они не понравились и я решил поискать графику на
Кстати, сам Майкл Доусон также упоминает о важности правильной лицензии при разработке игр и программ. Нельзя просто брать изображения из интернета и использовать их как хочется. У каждого произведения есть автор и лицензия. И если эта лицензия не разрешает использоваться фотографию в коммерческих целях, а вы напишите игрушку и начнете её продавать, то вас может ждать иск. Так что имейте в виду.
Но вернемся к игре. Так как я решил использовать свою собственную графику, то столкнулся с одной проблемой. Библиотека livewires не умеет работать с png изображениями. А точнее с png с полупрозрачностью. На таких картинках почему-то начинают появляться артефакты. Поэтому мне пришлось идти на официальный сайт PyGame и читать документацию про то, как включить png в свой проект. Но, к счастью, там нет ничего сложного.
После того, как я разобрался со всеми проблемами и запустил первую версию игры, процесс пошел быстрее.
И в целом, создание такой игрушки — это отличный опыт. Приходится плотно работать с классами, писать свои алгоритмы, беспокоиться о взаимодействии элементов на экране, подбирать графику и музыку.
Конечно, реальные игры на Python не пишутся, и после прочтения этой книги вы не устроитесь в Blizzard и не начнете работу над новой версией Diablo. Но вы, однозначно, лучше начнете разбираться в программировании на Python. Поэтому не пропускайте последние три главы, даже если вы хотите стать web-разработчиком.
И в целом, эту книгу я рекомендую, особенно она подойдет тем, кто не боится исследовать и улучшать программы.
Возможно, в ней не хватает более практических примеров, вроде создания сайтов или работы с базами данных, но как старт в Python — книга великолепна.
Пока, и успехов в учебе!