Мэтиз. Изучаем Python. Crash course2 n d e d i t i o na h a n d s o n, p r o j e c t b a s e d i n t r o d u c t i o n t o p r o g r a m m i n g
Скачать 6.2 Mb.
|
x, y, z = 0, 0, 0 Имена переменных должны разделяться запятыми; точно так же должны разде- ляться значения. Python присваивает каждое значение переменной в соответствую- щей позиции. Если количество значений соответствует количеству переменных, Python правильно сопоставит их друг с другом. 46 Глава 2 • Переменные и простые типы данных Константы Константа представляет собой переменную, значение которой остается неиз- менным на протяжении всего срока жизни программы. В Python нет встроенных типов констант, но у программистов Python принято записывать имена перемен- ных, которые должны рассматриваться как константы и оставаться неизменными, буквами верхнего регистра: MAX_CONNECTIONS = 5000 Если вы собираетесь работать с переменной в коде как с константой, не забудьте записать ее имя буквами верхнего регистра. УПРАЖНЕНИЯ 2.8. Число 8: напишите операции сложения, вычитания, умножения и деления, результа- том которых является число 8 . Не забудьте заключить операции в команды print() , чтобы проверить результат. Вы должны написать четыре строки кода, которые выглядят пример- но так: print(5 + 3) Результатом должны быть четыре строки, в каждой из которых выводится число 8 2.9. Любимое число: сохраните свое любимое число в переменной. Затем при помощи пе- ременной создайте сообщение для вывода этого числа. Выведите это сообщение. Комментарии Комментарии чрезвычайно полезны в любом языке программирования. До сих пор ваши программы состояли только из кода Python. По мере роста объема и слож- ности кода в программы следует добавлять комментарии, описывающие общий подход к решаемой задаче, — своего рода заметки, написанные на понятном языке. Как создаются комментарии? В языке Python признаком комментария является символ «решетка» ( # ). Интер- претатор Python игнорирует все символы, следующие в коде после # до конца строки. Пример: comment.py # Say hello to everyone. print("Hello Python people!") Python игнорирует первую строку и выполняет вторую. Hello Python people! Дзен Python 47 Какие комментарии следует писать? Главная задача комментария — объяснить, что должен делать ваш код и как он рабо- тает. В разгаре работы над проектом вы понимаете, как работают все его компонен- ты. Но если вернуться к проекту спустя некоторое время, скорее всего, некоторые подробности будут забыты. Конечно, всегда можно изучить код и разобраться в том, как должны работать его части, но хорошие комментарии с доступным изложением общих принципов работы кода сэкономят немало времени. Если вы хотите стать профессиональным программистом или участвовать в со- вместной работе с другими программистами, научитесь писать осмысленные комментарии. В наши дни почти все программы разрабатываются коллективно в группах — либо группами работников одной компании, либо группами энтузиа- стов, совместно работающих над проектом с открытым кодом. Опытные програм- мисты ожидают увидеть комментарии в коде, поэтому лучше привыкайте добавлять содержательные комментарии прямо сейчас. Написание простых, лаконичных комментариев — одна из самых полезных привычек, необходимых начинающему программисту. Принимая решение о том, нужно ли писать комментарий или нет, спросите себя, пришлось ли вам перебрать несколько вариантов в поисках разумного решения для некоторой задачи; если ответ будет положительным, напишите комментарий по по- воду вашего решения. Удалить лишние комментарии позднее намного проще, чем возвращаться и добавлять комментарии в программу. С этого момента я буду ис- пользовать комментарии в примерах для пояснения смысла некоторых частей кода. УПРАЖНЕНИЯ 2.10. Добавление комментариев: выберите две программы из написанных вами и добавьте в каждую хотя бы один комментарий. Если вы не найдете, что написать в комментариях, потому что программы были слишком просты, добавьте свое имя и текущую дату в начало кода. Затем добавьте одно предложение с описанием того, что делает программа. Дзен Python Опытные программисты Python рекомендуют избегать лишних сложностей и по возможности выбирать простые решения там, где это возможно. Философия со- общества Python выражена в очерке Тима Питерса «The Zen of Python». Чтобы просмотреть этот краткий набор принципов написания хорошего кода Python, до- статочно ввести команду import this в интерпретаторе. Я не стану воспроизводить все принципы, но приведу несколько строк, чтобы вы поняли, почему они важны для вас как для начинающего программиста Python. >>> import this The Zen of Python, by Tim Peters Красивое лучше, чем уродливое. 48 Глава 2 • Переменные и простые типы данных Программисты Python считают, что код может быть красивым и элегантным. В про- граммировании люди занимаются решением задач. Программисты всегда ценили хорошо спроектированные, эффективные и даже красивые решения. Со временем вы больше узнаете о Python, начнете писать больше кода — и когда-нибудь ваш кол- лега посмотрит на экран вашего компьютера и скажет: «Ого, какой красивый код!» Простое лучше, чем сложное. Если у вас есть выбор между простым и сложным решением и оба работают, ис- пользуйте простое решение. Код будет проще в сопровождении, а у вас и других разработчиков будет меньше проблем с обновлением этого кода в будущем. Сложное лучше, чем запутанное. Реальность создает свои сложности; иногда простое решение задачи невозможно. В таком случае используйте самое простое решение, которое работает. Удобочитаемость имеет значение. Даже если ваш код сложен, постарайтесь сделать так, чтобы он нормально читался. Работая над проектом, требующим написания сложного кода, постарайтесь напи- сать содержательные комментарии для этого кода. Должен существовать один — и желательно только один — очевидный способ сделать это. Если предложить двум программистам Python решить одну и ту же задачу, они должны выработать похожие решения. Это не значит, что в программировании нет места для творчества. Наоборот! Но большая часть работы программиста за- ключается в применении небольших стандартных решений для простых ситуаций в контексте большого, более творческого проекта. Внутренняя организация ваших программ должна выглядеть логично с точки зрения других программистов Python. Сейчас лучше, чем никогда. Вы можете потратить весь остаток жизни на изучение всех тонкостей Python и программирования в целом, но в таком случае вы никогда не закончите ни одного проекта. Не пытайтесь написать идеальный код; напишите код, который работает, а потом решите, стоит ли доработать его для текущего проекта или перейти на что-то другое. Когда вы перейдете к следующей главе и займетесь изучением более сложных тем, постарайтесь не забывать об этой философии простоты и ясности. Опытные программисты будут с большим уважением относиться к вашему коду, более охотно поделятся своим мнением и скорее будут сотрудничать с вами в интерес- ных проектах. УПРАЖНЕНИЯ 2.11. Дзен Python: введите команду import this в терминальном сеансе Python и просмо- трите другие принципы. Итоги 49 Итоги В этой главе вы научились работать с переменными. Вы узнали, как использовать содержательные имена переменных и как исправлять ошибки в именах и синтак- сические ошибки в случае их возникновения. Вы узнали, что такое строки и как выводить их в нижнем/верхнем регистре и с капитализацией всех слов. Мы рас- смотрели способы аккуратного оформления вывода с применением пропусков, а также удаления лишних пропусков из разных частей строки. Вы начали работать с целыми и вещественными числами и узнали о некоторых неожиданностях, встре- чающихся при работе с числовыми данными. Вы научились писать содержательные комментарии, которые упрощают написание кода для вас и его чтение для других разработчиков. В завершение главы была представлена философия максимальной простоты кода. В главе 3 рассматривается хранение наборов данных в переменных, называемых списками. Вы узнаете, как перебрать содержимое списка и обработать хранящуюся в нем информацию. 3 Списки В этой и следующей главе вы узнаете, что собой представляют списки и как на- чать работать с элементами списка. Списки позволяют хранить в одном месте взаимосвязанные данные, сколько бы их ни было — несколько элементов или несколько миллионов элементов. Работа со списками принадлежит к числу самых выдающихся возможностей Python, доступных для начинающего программиста. Операции со списками связывают воедино многие важные концепции в про- граммировании. Что такое список? Список представляет собой набор элементов, следующих в определенном порядке. Вы можете создать список для хранения букв алфавита, цифр от 0 до 9 или имен всех членов вашей семьи. В список можно поместить любую информацию, причем данные в списке даже не обязаны быть как-то связаны друг с другом. Так как спи- сок обычно содержит более одного элемента, рекомендуется присваивать спискам имена во множественном числе: letters , digits , names и т. д. В языке Python список обозначается квадратными скобками ( [] ), а отдельные элементы списка разделяются запятыми. Простой пример списка с названиями моделей велосипедов: bicycles.py bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles) Если вы прикажете Python вывести список, то на экране появится перечисление элементов списка в квадратных скобках: ['trek', 'cannondale', 'redline', 'specialized'] Конечно, вашим пользователям такое представление не подойдет; разберемся, как обратиться отдельным элементам в списке. Индексы начинаются с 0, а не с 1 51 Обращение к элементам списка Списки представляют собой упорядоченные наборы данных, поэтому для обраще- ния к любому элементу списка следует сообщить Python позицию (индекс) нужного элемента. Чтобы обратиться к элементу в списке, укажите имя списка, за которым следует индекс элемента в квадратных скобках. Например, название первого велосипеда в списке bicycles выводится следующим образом: bicycles = ['trek', 'cannondale', 'redline', 'specialized'] ❶ print(bicycles[0]) Синтаксис обращения к элементу показан в точке . Когда мы запрашиваем один элемент из списка, Python возвращает только этот элемент без квадратных скобок или кавычек: trek Именно такой результат должны увидеть пользователи — чистый, аккуратно от- форматированный вывод. Также можно использовать строковые методы из главы 2 с любым элементом списка. Например, элемент 'trek' можно более аккуратно отформатировать при помощи метода title() : bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles[0].title()) Этот пример выдает такой же результат, как и предыдущий, только название 'Trek' выводится с прописной буквы. Индексы начинаются с 0, а не с 1 Python считает, что первый элемент списка находится в позиции 0, а не в позиции 1. Этот принцип встречается в большинстве языков программирования и объясняется особенностями низкоуровневой реализации операций со списками. Если вы полу- чаете неожиданные результаты, определите, не допустили ли вы простую ошибку «смещения на 1». Второму элементу списка соответствует индекс 1. В этой простой схеме индекс любого элемента вычисляется уменьшением на 1 его позиции в списке. Напри- мер, чтобы обратиться к четвертому элементу списка, следует запросить элемент с индексом 3. В следующем примере выводятся названия велосипедов с индексами 1 и 3: bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles[1]) print(bicycles[3]) 52 Глава 3 • Списки При этом выводятся второй и четвертый элементы списка: cannondale specialized В Python также существует специальный синтаксис для обращения к последнему элементу списка. Если запросить элемент с индексом –1, Python всегда возвращает последний элемент в списке: bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles[-1]) Фрагмент вернет значение 'specialized' . Этот синтаксис весьма полезен, потому что при работе со списками часто требуется обратиться к последним элементам, не зная точного количества элементов в списке. Синтаксис также распространяется на другие отрицательные значения индексов. Индекс –2 возвращает второй элемент от конца списка, индекс –3 — третий элемент от конца, и т. д. Использование отдельных элементов из списка Отдельные значения из списка используются так же, как и любые другие перемен- ные. Например, вы можете воспользоваться f-строками для построения сообщения, содержащего значение из списка. Попробуем извлечь название первого велосипеда из списка и составить сообщение, включающее это значение. bicycles = ['trek', 'cannondale', 'redline', 'specialized'] ❶ message = f"My first bicycle was a {bicycles[0].title()}." print(message) В точке программа строит сообщение, содержащее значение из bicycles[0] , и сохраняет его в переменной message . Так создается простое предложение с упо- минанием первого велосипеда из списка: My first bicycle was a Trek. УПРАЖНЕНИЯ Попробуйте написать несколько коротких программ, чтобы получить предварительное представление о списках Python. Возможно, для упражнений каждой главы стоит создать отдельную папку, чтобы избежать неразберихи. 3.1. Имена: сохраните имена нескольких своих друзей в списке с именем names. Выведите имя каждого друга, обратившись к каждому элементу списка (по одному за раз). 3.2. Сообщения: начните со списка, использованного в упражнении 3.1, но вместо выво- да имени каждого человека выведите сообщение. Основной текст всех сообщений должен быть одинаковым, но каждое сообщение должно включать имя адресата. Изменение, добавление и удаление элементов 53 3.3. Собственный список: выберите свой любимый вид транспорта (например, мотоциклы или машины) и создайте список с примерами. Используйте свой список для вывода ут- верждений об элементах типа: «Я хотел бы купить мотоцикл Honda». Изменение, добавление и удаление элементов Как правило, вы будете создавать динамические списки; это означает, что во время выполнения программы в созданном вами списке будут добавляться и удаляться элементы. Например, вы можете создать игру, в которой игрок должен стрелять по кораблям космических захватчиков. Исходный набор кораблей сохраняется в списке; каждый раз, когда вы сбиваете корабль, он удаляется из списка. Каждый раз, когда на экране появляется новый враг, он включается в список. Длина списка кораблей будет уменьшаться и увеличиваться по ходу игры. Изменение элементов в списке Синтаксис изменения элемента напоминает синтаксис обращения к элементу списка. Чтобы изменить элемент, укажите имя списка и индекс изменяемого эле- мента в квадратных скобках; далее задайте новое значение, которое должно быть присвоено элементу. Допустим, имеется список мотоциклов и первым элементом списка хранится стро- ка 'honda' . Как изменить значение первого элемента? motorcycles.py ❶ motorcycles = ['honda', 'yamaha', 'suzuki'] print(motorcycles) ❷ motorcycles[0] = 'ducati' print(motorcycles) В точке определяется исходный список, в котором первый элемент содержит строку 'honda' . В точке значение первого элемента заменяется строкой 'ducati' Из вывода видно, что первый элемент действительно изменился, тогда как осталь- ные элементы списка сохранили прежние значения: ['honda', 'yamaha', 'suzuki'] ['ducati', 'yamaha', 'suzuki'] Изменить можно значение любого элемента в списке, не только первого. Добавление элементов в список Новые элементы могут добавляться в списки по разным причинам: например, для появления на экране новых космических кораблей, включения новых данных в визуализацию или добавления новых зарегистрированных пользователей на по- 54 Глава 3 • Списки строенный вами сайт. Python предоставляет несколько способов добавления новых данных в существующие списки. Присоединение элементов в конец списка Простейший способ добавления новых элементов в список — присоединение эле- мента в конец списка. Используя список из предыдущего примера, добавим новый элемент 'ducati' в конец списка: motorcycles = ['honda', 'yamaha', 'suzuki'] print(motorcycles) ❶ motorcycles.append('ducati') print(motorcycles) Метод append() в точке присоединяет строку 'ducati' в конец списка, другие элементы в списке при этом остаются неизменными: ['honda', 'yamaha', 'suzuki'] ['honda', 'yamaha', 'suzuki', 'ducati'] Метод append() упрощает динамическое построение списков. Например, вы може- те начать с пустого списка и добавлять в него элементы серией команд append() В следующем примере в пустой список добавляются элементы 'honda' , 'yamaha' и 'suzuki' : motorcycles = [] motorcycles.append('honda') motorcycles.append('yamaha') motorcycles.append('suzuki') print(motorcycles) Полученный список выглядит точно так же, как и списки из предыдущих примеров: ['honda', 'yamaha', 'suzuki'] Такой способ построения списков встречается очень часто, потому что данные, ко- торые пользователь захочет сохранить в программе, часто становятся известными только после запуска программы. Чтобы пользователь мог управлять содержимым списка, начните с определения пустого списка, а затем присоединяйте к нему каж- дое новое значение. Вставка элементов в список Метод insert() позволяет добавить новый элемент в произвольную позицию спи- ска. Для этого следует указать индекс и значение нового элемента. motorcycles = ['honda', 'yamaha', 'suzuki'] ❶ motorcycles.insert(0, 'ducati') print(motorcycles) Изменение, добавление и удаление элементов 55 В этом примере в точке значение 'ducati' вставляется в начало списка. Ме- тод insert() выделяет свободное место в позиции 0 и сохраняет в нем значение 'ducati' . Все остальные значения списка при этом сдвигаются на одну позицию вправо: ['ducati', 'honda', 'yamaha', 'suzuki'] Удаление элементов из списка Нередко возникает необходимость в удалении одного или нескольких элементов из списка. Например, когда игрок сбивает корабль пришельца, этот корабль стоит удалить из списка активных врагов. Или когда пользователь решает удалить свою учетную запись в созданном вами веб-приложении, этот пользователь должен быть удален из списка активных пользователей. Элементы удаляются из списка по по- зиции или по значению. Удаление элемента с использованием команды del Если вам известна позиция элемента, который должен быть удален из списка, вос- пользуйтесь командой del motorcycles = ['honda', 'yamaha', 'suzuki'] print(motorcycles) ❶ del motorcycles[0] print(motorcycles) В точке вызов del удаляет первый элемент, 'honda' , из списка motorcycles : ['honda', 'yamaha', 'suzuki'] ['yamaha', 'suzuki'] Команда del позволяет удалить элемент из любой позиции списка, если вам из вестен его индекс. Например, вот как из списка удаляется второй элемент, 'yamaha' : motorcycles = ['honda', 'yamaha', 'suzuki'] print(motorcycles) del motorcycles[1] print(motorcycles) Второй элемент исчез из списка: ['honda', 'yamaha', 'suzuki'] ['honda', 'suzuki'] В обоих примерах значение, удаленное из списка после использования команды del , становится недоступным. |