/
Author: Постолит А.
Tags: самоучитель искусство программирования компьютерные технологии язык программирования python
Year: 2025
Text
Интерактивный самоучитель Для детей и школьников
Анатолий Постолит
Python
Уроки от сороки
Читаем, учимся, играем!
Анатолий Посголит
Python. Уроки от сороки (интерактивный самоучитель для детей и школьников). - М.: 2025. -253 с.; ил.
Интерактивная цифровая книга по основам языка программирования Python предназначена для детей и школьников, которые решили познакомиться с основами Python с нуля. Это книга написано простым языком и максимально последовательно, а изложение материала сопровождается большим количеством примеров программ на основе детских сказок, стихов и мультфильмов Кроме того, для лучшего закрепления теории книга содержит еще и тесты для контроля знаний. Все это позволит новичкам самостоятельно изучить основы Python за максимально короткие сроки.
Интерактивное цифровое пособие включает в себя текстовые материалы с цветными, рисунками, листинги прог раммных модулей, аудио и видео контент, on-line редактор для запуска и модификации программных модулей. Таким образом, пользователю нет необходимости скачггвагь и устанавливать на свой компьютер какие либо инструментальные средства. Знакомится с учебными материалами, изучать листинги программ, вносить в программы свои изменения и запускать их на выполнение можно в рамках цифровой книги в среде web браузера. Кроме того, в интерактивный раздел книги встроено большое количество видео материалов, это мультфильмы, видео уроки, познавательное видео о программистах и устройствах компьютеров
Книга предназначена для детей младшего и старшего школьного возраста. С этой книгой можно самостоятельно знакомиться с языком программирования Python. Кроме того, данная книга может быть использована как лабораторный практикум для школьников гга уроках информатики, на факультативных занятиях и компьютерных курсах для детей.
Предисловие
Можно поздравить всех поклонников языка программирования Python, уже несколько лет он является самым популярным языком программирования в мире! Python это один из лучших языков для начинающих. Он гибкий, почти «всепрощающий», и у него простой и понятный синтаксис. В работе на Python не нужно беспокоиться о тонкостях работы с памятью как, например, в C++, и можно сразу приступить к программированию в дружелюбной среде. А еще Python подробно пишет, где и какая ошибка в программном коде в случае ее появления (правда на английском), но все равно это очень удобно.
Данная интерактивная цифровая книга предназначена для начинающих программистов (это дети даже дошкольного возраста и школьники). Для того чтобы начат ь работать с цифровой книгой, нужен только компьютер, при этом нет необходимости на компьютер устанавливать какие либо дополнительные программы. Книга работает в режиме «все включено». В нее, кроме текста и рисунков, встроен редактор программного кода на Python. 65 уроков с примерами, основанными на русских народных сказках, стихах и сюжетах мультфильмов В книге имеется аудио и видео контент, который будет постоянно пополняться. Можно изучать код. запускать его на выполнение, вносить в него изменения, и все это не выходя из своего интернет браузера Мало того, код программ можно скопировать и эти фрагменты использовать в своих программах в качестве мини-шаблонов. В книге очень удобное оглавление: можно моментально попасть в любой урок любой темы. При этом можно активировать тему книги с примерами программ, которые относятся именно к этой теме, и не нужно тратить время на ручной набор этого программного кода. Не зэбязательно изучать материалы книги строго последовательно, можно быс1ро переключаться между разными темами и уроками.
Кроме того, практически к каждой теме книги имеются контрольные вопросы. Эти вопросы включены в систему тестирования знаний, которая также встроена в интерактивную электронную книгу. Таким образом, она может использовать в учебных заведениях и как учебное пособие, и как средство контроля знаний. Еще в книгу встроены средства показа видеофайлов
Нс смотря на то, что книга предназначена для начинающих программистов, она содержит довольно много материала, касающегося структуры языка программирования Python, его внутренних механизмов и тонкостей. Для детей с первого прочтения этот материал может показаться не очень понятным, и чтобы разобраться с ним, нужно поработать с программным кодом примеров, приведенных в книге. Если такой материал достаточно сложен для понимания, а возможности таких тонкостей не особо важны на текущий момент, данный материал можно просто пропустить. Ио мере приобретения новых сведений из других разделов книги, к этому материалу всегда можно вернуться.
'Это интерактивная книга из серии «Академия Python» предназначена для первого знакомства детей с программированием. Для тех, кто хочет получить более глубокие знания гго языку программирования Python, на сайте rurnnik.ru имеются аналогичные интерактивные книги гго программированию пользовательского интерфейса, разработки web приложений, кросспла г форменных мобильных и настольных приложений и т.п.
В первой теме юные читатели могут познакомиться с синтаксисом языка программирования Python, с типами данных и такими понятиями, как идентификаторы. Рассказано о правилах расстановки отступов в тексте программ и комментировании строк.
Вторая тема посвящена типам данных, которые можно обрабатывать в Pytnon. Это числа, строки, списки, кортежи, словари и множества. Рассказывается о том, как эти данные хранятся в компьютере, и как можно их обрабатывать. Здесь дети смогут вместе с компьютером отгадать загадку «А и Б сидели на трубе...».
Третья тема посвящена обработки числовых данных. Здесь можно узнать, как обрабатываются целые числа, вещественные числа, дроби, и составляются математические выражения Кроме того дети познакомятся с логически операторами для сравнения чисел между собой, а помогут им раюбраться с этими вопросами герои мультфильма «Чебурашка».
В четвертой теме рассказано о возможностях обработки строковых данных, то есть, как можно разложить строку по буквам, или наоборот — как можно складывать стоки. Здесь вместе с компьютером дети воспроизведут песенку «В граве сидел кузнечик...».
Пятая тема посвящена спискам Из этой гемы можно узнать, что такое списки, как они создаются и обрабатываются. Л помощниками выступят герои мультфильма про козленка, который умел считать до десяти.
Шестая тема посвящена кортежам. Здесь малыш и Карлсон расскажут, чем кортежи отличаются от списков, а как обрабатываются кортежи, подскажет стихотворение «Дама сдавала в багаж, диван, чемодан, саквояж ..» и сказка «Колобок».
В седьмой теме рассказывается о словарях, о том, как можно «упаковать» в словари различные данные, а потом быстро достать их. Здесь потребуется узнать содержимое клада, который пираты спрятали в пещере, подобрать ключи к сундукам и открыть их. А еще нужно будет узнать - какие желания имели герои сказки «Волшебник изумрудного города». Восьмая тема посвящена множествам. Здесь нужно будет навести порядок с множеством игрушек, которые лежат в коробке и разбросаны на полу, обработать множество дней недели, а также определить, кто умеет летать, а кто умеет возить.
В Девятой теме рассказано о том, как компьютер может узнать, кто говорит правду, а кто обманывает, Здесь дети познакомятся с операторами сравнения и логическими константами «True» - правда, и «False» - ложь.
Десятая тема посвящена базовым компонентам языка программирования Python' инструкциям, выражениям и опера юрам А чтобы узнать, что это такое, придется немного поработать. Нужно будет разложить содержимое корзин с овощами и фруктами по пакетам и все это поместит ь в холодильник.
В одиннадцатой теме нужно будет разобраться - кому что принадлежи!, а для этого научиться использовагь операторы группового и позиционного присваивания. А помогут научиться этому несколько друзей, у которых есть велосипеды, самокат и скейтборд.
Тема двенадцать посвящена условной инструкции «if». С ней дети узнают, как автомобиль сможет объехать яму на дороге, на какой сигнал светофора можно переходить улицу, куда улетели стрелы в сказке «Царевна лягушка».
В теме тринадцать рассмотрены циклы с использованием инструкций «for» и «while». Здесь с использованием циклов нужно будет помочь героям сказки «Репка» вытянуть репку, которая выросла большая-пребольшая, а также помочь козленку и капитану гусю
перевозить на пароме пассажиров, когда их больше чем десять. И еще нужно будет научить компьютер составлять таблицу умножения.
И теме четырнадцать рассказано о том. как можно ввести данные в компьютер и как потом получить результаты работы программ А расскажет об этом кот ученый из поэмы А.С. Пушкина «Руслан и Людмила».
Пятнадцатая тема посвящена функциям. Приводятся общие сведения о функциях, о параметрах и аргументах. А помощниками опять будут герои мультфильма про козленка, который умел считать до десяти
В теме шестнадцать рассмотрены вопросы объект но-ориентированного программирования Приводятся сведения о классах, объектах, свойствах и методах классов. Здесь будет создан класс «Автомобили», несколько объектов на основе этого класса, и показано, как с использованием методов класса можно управлять автомобилями.
В материалах книги некоторые фрагменты текста выделены особым образохг. Это сделано для того, чтобы по оформлению текста сразу было видно, какая особенность у выделенного фрагмента.
Некоторые программ в тексте книги имеют фон черного цвета. Почему это так? Большинство программистов, когда пишут программы, используют темный фон в редакторе программного кода. Эю связано с тем, что темный цвет жрана меньше раздражает глаза при длительной работе за монитором. Кроме того, тексты программ приводятся в оригинальном вггде еще и для того, чтобы сохранить цвета, которые используются для написания ключевых слов и функций. В текстовых редакторах специфичные фрагменты программною кода выделяются разными цветами.
В этой книге тексты программ будут показаны в следующем виде (рис. 11.1).
X Рг-джтор кода
г » Листинг 1.1
2 01 » 'Ниф-нкф' р2 • ’Нуф-Нуф’
4 рЗ = 'Наф «аф1
5 prlnt('Имена поросят')
* printvpl)
Т pr1nt(p2) print,рз)
Рис. II 1 Пример показа листинга программного кода
Оригиналы листингов программ и результаты их работы можно найти в интерактивном разделе книги. Информация о том. как загрузить и выполнить тот или иной программный модуль будет выведена в соответствующей подсказке, например:
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 1», а боковой панели - «Листинг 1,2».
Результаты работы программного модуля можно будет посмотреть в раскрывающейся вкладке «I (оказать результат» (рис. 11.2).
\ Понизать результат
Учим синтаксис Python
Урок 1.1. Про синтаксис в Python
Имена поросят
Ниф*Ниф
НуфНуФ
Нуф-Нуф
Я Смотрите мультфильм про трех поро< Я1
Рис. П.2. Пример показа результатов рибозы прозраммиою модуля
Задания, которые необходимо выполнить самостоятельно, будет выделены следующим фрагментом текста:
Перенести эту программу в «Редактор кода», и укажите — какой домик хотел построить каждый из поросят.
Если к уроку прилагаются видео материалы в виде мультфильма или видео урока, то в тексте книги будет следующая подсказка:
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - загадку. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 1.7),
Если текст содержит примечание или иную важную информацию, то он выделяется особым образом, например:
Примечание.
Здесь присутствует ключевое слово «def», которое объявляет пользовательскую функцию. О пользовательских функциях будет подробно рассказано в следующих главах.
На протяжении всей книги раскрываемые вопросы сопровождаются достаточно упрощенными, но полностью законченными примерами Это в значительной степени облет чает восприятие приведенных в книге материалов Наилучший способ обучения - это практика. Интерактивная электронная книга - это прекрасная возможность познакомится с языком программирования Python, и понять, насколько он прост и удобен в использовании А уроки на протяжении все книги будет вести сорока - белобока.
Практически все уроки интерактивною раздела книги сопровождаются видеоматериалами Это мультфильмы с любимыми героями, песни и загадки, фрагменты уроков по математики, познавательные и развивающие мультфильмы Весь видео контент находится в сети интернет в открытом доступе, и нет никаких ограничений на его использование.
Итак, если Вас заинтересовало изучение основ программирования на Python, то самое время перейти к изучению материалов этой интерактивной электронной книги.
Как читать интерактивную цифровую книгу, как выполнять и редактировать программы примеров книги можно узнать из инструкции для читателей на сайте rumnik.ru
Примечание.
Цифровая книга формата pdf и интерактивный раздел данной книги - это совершенно разные, самостоятельные продукты, которые продаются отдельно. Вы можете купить только цифровой вариант книги формата PFD, или только интерактивный раздел книги. А можно использовать эти два продукта совместно.
Об авторе
Постелит Анатолий Владимирович - доктор технических наук, профессор, академик Российской академии транспорта, лауреат Всероссийского конкурса «Инженер года». Профессор Московского государственного автомобильно-дорожною технического университета (МАДИ), работал в государственных и коммерческих структурах. Занимался разработкой и внедрением информационных систем для транспортного комплекса Москвы и Московской области, транспортной дирекции зимних Олимпийских игр в г. Сочи, систем оплаты проезда и информирования пассажиров городского общественного транспорта. Специализируется на создании информационных систем на основе MS SQL Server. MS Visual Studio, Bluetooth технологий, реализации интерактивных образовательных систем на основе веб технологий, элементах искусственного интеллекта и языка программирования Python (anai post,» mail.ru).
RUSSIA 2025
БЛАГОДАРНОСТЬ
за вклад в прогресс, где инновации сл/жат человеку, бизнесу и науке ПОСТОЛИТ АНАТОЛИЙ
•'Г АНИЗАТС^Ы И СПОНСОРЫ
А С
Вот ЧеигоТе nolog о»
ДыбинаН
Как использовать интерактивный раздел киши
После загрузки интерактивного раздела книги в окне браузера будет показана страница с главным меню (рис. П.З).
Тема 1 v Тема2 v ТемаЗ v Тема4 v Тема5 v Тема6 v Тема? v Тема
'Г Листинги темы 1
Выберите листинг.,
Р^Тема 1. Знакомимся с Python
X Редактор кода Z
Листинг не выбран
Интерактивный самоучитель дм детей и школьников
Анатолий Постелит
Python
Уроки от сороки
Рис П.З. Главное меню интерактивного раздела книги
В главном меню необходимо выбрать нужную гему и листинги этой темы. Например, Тема 1 'Листинги гемы 1 (рис. 11.4).
Темз 1 л Тема 2 v ТемаЗ v
Г Листинги темы 1
Рис. П 4 Загрузка листингов программ выбранной темы
После этого в боковой панели можно открыть выпадающий список и выбрать интересующий листинг (рис 11.5).
Листинги темы 1
-----------------
|Ьыберите листинг.
Листинг 1.1
Листинг 1.2
Листинг 1.3
Листинг 14
Листинг 1.5
Листинг 1.6
Листинг 1.7
1 о
Рис. П.5 Выбор нудного лиспппа программы
После выбора нужного листинга на основной странице будет покатан выбранный листинг, кнопка для перехода в редактор кода «Редактор кода», раскрывающаяся вкладка с результатами выполнения выбранной программы, раскрывающаяся вкладка с приложенным видео файлом (рис. П.6).
^Тема 1. Знакомимся с Python
"Х, Редактор кода Z
1 » Листинг I 1
1 pl •Ниф-Ниф’
3 р2 = 1Нуф-Нуф'
1 рЗ = 'Наф-Наф"
S print('Имена поросят') print(pl) printtp2) printip3)
> \ Показать результат
> » Посмотреть мультфильм
Рис. П.6 Фрагмент inriepaKiiiniioro раздела книга с листингом программы
Если кликнуть левой кнопкой мыши на вкладке «Показать результат», то она раскроется, и будут показаны результаты работы текущего программного модуля (рис. II.7).
* Показать результат
Учим синтаксис Python
Урок 1.1. Про синтаксис в Python
Имена поросят
Ниф Ниф
Нуф-Нуф
Нуф-Нуф
Смотрите мультфильм про грех поросят
Рис. П.7. Фрагмент интерактивною раздела книги с результатами работы прсчраммы
Если кликнуть левой кнопкой мыши на вкладке «Посмотреть мультфильм», то она раскроется и будет показан видео проигрыватель с видео контентом, приложенным к данному листингу (рис. 11.8).
Посмотреть мулыфильм
Рис. 11.8 Фрагмент ин1сракгивно10 раздела книги с видое контентом
Если навести курсор мыши на листинг программы, то в правом верхнем углу появится кнопка для копирования листинга в буфер обмена (рис. П.9).
Р^Тема 1. Знакомимся с Pythc
'К Редактор кода /
1 Листинг 1.1
2 pl 'Ни^-Ниф
3 Р2 = 'Нуф-Нуф'
4 рЗ = 'Наф-Наф'
5 ргтпТ('Имена поросят')
6 printl.pl)
7 pr n<t(p2) printip3}
Рис. 11.9. Кнопка для копирования текста пршраммы в буфер обмена
Если кликнуть левой кнопкой мыши по данной кнопке, то листинг программы будет скопирован в буфер обмена. После этого текст программного модуля можно перенсти либо на свой компьютер, либо в прилагаемый редактор программного кода (рис. 11.10).
1^Тема 1. Знаком!
*\ Редактор кода Z
’ Листинг 1.1
2 pl = 'Ниф-Ниф' р2 = 'нуф-НуФ'
4 рЗ = 'Наф Наф'
5 print('Имена поросят') print(pl)
7 print(pi) print(рЗ)
Рис П. 10. Кнопка для вызова редактора программного кода
Если кликнуть левой кнопкой мыши на кнопку «Редактор кода», то в новой вкладке интернет браузера откроется встроенный редактор (рис. 11.11).
Рис. IL 11 Интерфейс редактора пртраммного кода
Этот редактор разделен на две части: в левую часть можно вставить скопированный в буфер обмена программный код, в правой части можно посмотреть на результаты выполнения программы. Для запуска программы на выполнение здесь имеется кнопку Run.
Если кликнуть правой кнопкой мыши в левой части редактора программного кода, то откроется выпадающее меню (рис. 11.12).
Вь*реытъ С1Л«Х
копировать Ctri*C
Вставить Ct.ru V
Вставь как обычный текст Ctrt*Shitt»V Выделить все Ctrt+.л
Открытье дежиме чтения проверка правописания >
Направление письма >
Просмотреть «од
Рис. П 12. Вставка листиш а программы в редактор программною кода
Рис. 11.13. Листинг iipoiраммы в окне редактор программного кода
Если теперь кликнуть левой кнопкой мыши на кнопку «Run», то встроенный интерпретатор Python выполнить этот программный код и отобразить результаты выполнения программы в правой части этого редактора (рис. 11.14).
ГПЬ = Pj >w4 DUHd |
1 Имена поросят
2 pl = Ниф Ниф Ниф Ниф
3 р2 « 'Нуф-Нуф' Нуф-Нуф
4 рЗ = 'Наф-Наф' Наф Наф
5 print(Имена поросят')
6 print (pl)
7 print(р2)
8 prlnt(p3)
Рис. П. 14 Результаты работы программы в окис редактор программного кода
Кнопка «Очистить» предназначена для очистки правой части редактора кода от результатов выполнения программы
В данном встроенном редакторе можно внести любые изменения в программный код, загруженный из буфера обмена, или набрав свой программный код и выполнить его.
Тема 1. Знакомимся с Python
Чтобы начать писать лаже простейшие программы на языке Python, необходимо изучить хотя бы основы синтаксиса языка. В противном случае компьютер просто не сможет понять, что вы от него хотите, и вместо выполнения программы сообщит вам об ошибке. А что же такое синтаксис?
С точки зрения грамматики, синтаксис - это правила, по которым слова соединяются в предложения. В программировании синтаксис это набор правил, которые программист должен обязательно соблюдать для того, чтобы компьютер понял - что же он должен делать. Если в программном коде будет хотя бы одна синтаксическая ошибка, то программа просто не будет работать (рис. 1.1).
Рис 1 1 Синтаксис важнейший элемент я гыка программирования Pylhon
Говоря о синтаксисе в языке программирования Python, мы подразумеваем правила написания идентификаторов и литералов, использования ключевых слов, оформления инструкций гг комментариев. Уверенное знание этггх правил, позволит без ошибок писать программы любой сложности. А учитывая простоту и лаконичность синтаксиса Python, сделать это будет совсем не трудно. Но прежде давайте познакомимся с такими понятиями, как лексемы и литерала.
Лексемы - это символы, или слова, которые не могут быть разбиты на более мелкие части. Другими словами - это неделимы «кирпичики», из которых строятся фрагменты программного кода. Самые короткие лексемы состоят всего из одного символа. Такими лексемами являются знаки арифметических операций: сложение «+», вычитание «-», умножение «*», деление «/», возведение в степень «**», знак присвоения значения «=». Лексемы могут состоять из нескольких символов, такие лексемы еще называют ключевыми словами. Например, ключевыми словами являются слова: begin, end. if. while, for и многое другие. С ними мы познакомимся немного позже.
Игак, запомним, лексемы это неделимые кирпичики, из которых программист будет строить свою программу.
Теперь разберемся со следующим понятием - литералы.
Литералы представляют собой данные (некая информация о ком-то или о чем-то), которые содержатся в переменной или константе Тут может сразу возникнуть вопрос а что такое переменная, и что такое константа. Разберемся и с этими понятиями
Переменная - это область памяти компьютера (ячейка памяти), у которой есть имя. Имя каждой ячейки памяти задает программист. Каждая переменная состоит из трех частей:
• имя переменной (или идентификатор), это название переменной, которое придумал программист для тою, чтобы обращаться к переменной (например, записать в переменную информацию, нли прочитать данные, которые хранились в переменной);
• значение— это информация, которая хранится в памяти компьютера и с которой работает прот рамма,
• адрес— это номер ячейки в памяти компьютера, в которой хранится значение переменной.
Рассмотрим использование переменных на несколько примерах. Допустим, вы создаете игровую программу под названием «Три поросенка» и в памяти компьютера нужно хранить имена поросят: «Ннф-Ниф», «Наф-Наф» и «Нуф-Нуф». Для этого программист сам придумывает имена для трех переменных, например: pl (первый поросенок), р2 (второй поросенок), рб (третий поросенок). Если этим именам нужно присвоить значения, это делается с помощью оператора присвоения «=».
Теперь программист может попросить компьютер выполнить следующие команды (их еще называют инструкции): сохранить в переменных pl, р2 ,рЗ имена поросят - «Ннф-Ниф», «Нуф-Нуф» и «Наф-Наф» В этом случае инструкции для компьютера, или программный код, будет выглядеть следующим образом (листинг 1.1).
I Листинг 1-1. Присвоение значений переменным
X Редактор кода *
1 ? Листинг 1.1
2 pl = 'Ннф-Ниф
з р2 'Нуф-Нуф1
4 рз 'Наф-Наф'
5 рппУ('Имена поросят') pnntipl)
print (р2)
print(p3)
Вот мы и написали наш первый программный код на языке программирования Python. Теперь мы можем посмотреть, как компьютер выполнит эту программу.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для зтого в главном меню нужно выбрать опцию « Гема I», а боковой панели - «Листинг 1.1».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой программы (рис. 1,2).
v Помхать результат
Учим синтаксис Python
Урок 1.1. Про синтаксис в Python
Имена поросят
Ниф-Ниф
Нуф-Нуф
Нуфнуф
* Смотрите мультфильм про трех поросят
Рис. 1.2. Результаты присвоения переменным pi. р2. рЗ текстовых значений
Эта интерактивная книга может не только выполнить программный код. но и показать вам мультфильм про трех поросят. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 1 3).
v * Посмотреть мультфильм
Рис. 1.3. Мультфильм про трех поросят
А теперь посмотрим, какие шаги были сделаны в этой программе для того, чтобы создать наши переменные. Первый шаг - мы дали имена переменным (р 1, р2 ,рЗ), затем присвоили переменным значения («Ниф-Ниф», «Нуф-Нуф» и «Наф-Наф»). Теперь нужно сделать третий шаг, определить в каких ячейках памяти компьютер будет хранить имена наших поросят. Достаточно давно, в самых первых языках программирования, номера ячеек для хранения переменных задавал сам программист. Но в современных языках программирования, таких как Python, компьютер сам определяет номера этих ячеек, и запоминает, в какую ячейку он положил ту или иную переменную. Поэтому программисту
не нужно заботиться о разделении памяти между переменными. Наш умный Python сам определит, что куда нужно положить, и что откуда потом взять.
Перенести эту программу в «Реоактор кода», и укажите — какой домик хотел построить каждый из поросят.
Л почему же литералы для хранения имен поросят называют переменными? Л потому, что в ячейках памяти с именами pl, р2, р.' могут храниться совершенно разные значения. Мы дали нашим поросятам имена «Ниф-Ниф», «Нуф-Нуф» и «Наф-Наф». Однако в любом месте программы программист может поменять эти имена на другие, например «Рюша». «Хрюша», «Кирюша».
Это можно сделать с помощью следующих программных инструкций (листинг 1.2).
Листинг 1.2. Присвоение значений переменным
Редактор кода
1 з? Листинг 1.2
pl = 'Рюша‘ р2 = 'Хрюша1
4 рз = 1 Кирюша'
s print('Имена поросят') print(pl) pr!nt(p2) print(p3)
После этого, в тех же ячейках памяти компьютера будут храниться другие значения.
Результаты работы этой программы можно посмотреть в интерактивном разделе киш и. Для зтою в главном меню нужно выбрать опцию «Тема 1», а боковом панели - «Листинг 1.2».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой программы (рис. 1.4).
\ Показать результат
Учим синтаксис Python
Урок 1.1. Про синтаксис в Python
Имена поросят
Рюша
Хрюша
Кирюша
Рис. 1.4. Результаты присвоения переменным pl. р2. рЗ трегнх текстовых значений
Перенести эту программу в ъ Редактор кода» и дайте поросятам другие имена.
Итак, мы познакомились с переменными, теперь разберемся с такими понятиями, как константы.
Константа в Python— это особый тип переменной, значение которой нельзя изменить в ходе выполнения прокраммы. Есть два типа констант: те, которые содержаться в самом языке про<раммирования Python, те, которые определят сам программист.
Например, в Python есть константы: True (означает - 1, да или правда), False (означает - О, нет или лож).
Нро1раммист может и сам для себя определить собственный набор констант. В Python принято имена констант писать заглавными буквами, чтобы легче отличить константу от переменной. Еще в Python принято программный код, в котором константам задают значения, выделять в отдельный программный файл. Вот пример программного кода, в котором программист задает константы (листинг 1.3):
I Листинг 13- Присвоение значений константам
X Редактор кода J
1 # Листинг 1.3
2 рт =3.14
з е = э.8
4 print( Константы')
5 print(pi) print(g)
Ускорение свободного падения Вся тела а данном маем земли лама ют с одмиаапаыы , страшим -усирянмгы снооодно-о -чдаии*
Ускорит* свободного ладанна усаораьие с аогорым двгамтся тало ао араме саюоодиого падения
g = 9,8 м/с2
Здесь константа PI будет содержать значение неизменяемое значение числа «пи», а константа G - постоянного значения ускорения свободного падения. В mix инструкциях программист задал значения числа «пи» (оно всегда равно 3,14), и значение ускорения свободною падения, оно всегда равно 9.8.
Результаты работы этой про1раммы можно посмотрет ь в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 1», а боковой панели - «Листиш 1.3».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой npoi раммы (рис. 1.5).
ч Показать результат
Учим синтаксис Python
Урок 1.1. Про синтаксис в Python
Константы
Рис. I 5. Результаты присвоения константам числовых значений
Перенести эту программу в «Редактор кода» и присвоить константам другие значения
Итак, мы разобрались с такими понятиями, как переменные и константы. Но Python имеет еще целую группу литералов, среди которых можно выделить следующие типы литералов:
• строковые;
• числовые;
• логические;
• специальные;
• литеральные коллекции.
Разберемся теперь с этими понятиями и определениями.
Урок 1.2. Типы литералов в Python
Строковые литералы предназначены для формирования и хранения текстовой информации, их можно создать, заключив любой текст в кавычки. Можно использовать как одинарные, так и двойные кавычки для создания строки. В Python поддерживаются два тина строк;
однострочная строка;
• многострочная сгрока.
Однострочные строки находятся в пределах одной строки программного кода. Например, вспомним детскую загадку: «А и Б сидели на трубе...». Эту загадку можно сохранить в компьютере в виде трех строковых литералов, или строковых переменных (листинг 1.4).
Листинг 14. Присвоение значений строковым переменным
Редактор кода У
1 » Яисгинг J.4
2 textl 'А и Б сидели на тр 3 text2 'А упала, Б пропала 4 text3 = "что осталось на тр s print('Строки') б print( textl)
7 pr1nt( text2) pr1nt( text3)
Здесь textl, text2 и text.3 - это переменные, а в одинарных и двойных кавычках находится текст, то есть строковый литерал.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для зтого в главном меню нужно выбрать опцию «Тема 1», а боковой панели - «Листинг 1.4».
Если в интерактивном разделе книги открыть вкладку «Показать результат», го мы увидим следующие итоги работы этой программы (рис. 1.6).
Учим синтаксис Python
Урок 1.2 Типы литералив в Python
Строки
А и Б сидели на трубе.
А /пала, Б пропала.
что осталось на трубе’
* Смотрите мультфильм- загадку
Рис. 1.г> Пример использование однострочных текстовых переменных
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - загадку. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 1.7).
* ч ПоказлТо ре зультат
и»—.
Посмотреть мультфильм
Рис. 1 7 Мультфильм — загадка
Перенести эту программу в «Редактор кода» и запрограммируйте другую загадку.
Есть несколько способов разделение фрагмент программного кода на несколько строк:
• добавление косой черты «\» в конце каждой строки:
• использование тройных кавычек;
• использование скобок.
Пример программного кода, в котором строковая переменная представлена в виде нескольких строк программного кода, приведен в листинге 1.5.
Листинг 1.5. Присвоение значений строковым переменным
X Редактор кода /
* Листинг 1.5
textl « 'А и Б сидели на трубе Д
А упалас Б пропалаД что осталось на трубе?'
6 texts « ’ "А и Б сидели на трубе, i А упала, Б пропала, а что осталось на трубе?"'
ю texts ('А и б с»дели на трубе,'
11 'А упала, 6 пропала, '
12 'что осталось м* * трубе?*)
13
14 pH nt ('Длинные строки')
is print(textl)
16 pr1nt(*--------------------------»)
п pHnt(texti)
IB printc---------------------------’)
19 print(textS)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию « Гема 1», а боковой панели - «Листинг 1.5».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итога работы этой программы (рис. 1.8).
v -ч Показать результат
Учим синтаксис Python
Урок 1.2.Типы литералов в Python
Длинные строки
А и Б сидели на трубе А упала. Б пропала, что о< талоеь на трубе?
А и Б сидели на трубе.
А упала, Б пропала,
что осталосо на трубе'
А и Б сидели на трубе
А упала, Б пропала,
что осталось на трубе'
Рис. 1.8. Пример использование многострочных текстовых переменных
Перенести эту программу в «Редактор кода» и дайте строковым переменны и новые значения
Числовые литералы предназначены для задания чисел. Числовыми литералами можно задать следующие четыре типа чисел:
• целые числа (int);
• длинные целые числа (long);
• действительные (вещественные) числа с дробной частью (float);
• сложные комплексные числа (complex).
Целые числа могут быть как положительными, так и отрицательными, у них нет дробной части, например. ЮО, 1500. -200, -I
Длинные целые числа представляют собой последовательность цифр, за которыми следует строчная или прописная буква L, например: 870328454567893456L. Предпочтительно
использовать прописную букву L, не строчную, поскольку строчная буква похожа и на единицу (1), н на прописную букву i.
У действительных (вещественных) чисел целая и дробная част и отделяются Друг от друга десятичной точкой, например: -26.2. 150.8, -34,25, 1500.15.
Сложные комплексные числа мы здесь рассматривать не будем, так как они используются только для выполнения специальных инженерных вычислений
Логические литералы Логический литерал может иметь только одно из двух значений: True (истина) или False (лож). Пример использования логических литералов приведен в листинге 1.6.
• Листинг 1.6. Логические литералы
X Редактор кода
1 # Листинг 1.6
2 х = True
з у = False я print('х=|, х) 5 print('y=l, у)
Значение True означает положительное или правдивое утверждение, а значение False
означает отрицательное, или ложное утверждение.
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрал ь опцию «Тема 1», а боковой панели - «Листинг 1.6».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой программы (рис. 1.9).
• , Показать результат
Урок 1.2.Типы литералов в Python
Логические литералы
Х= true
у= False
Рис. 1 9. Вывод значений логических переменных
Где и как используются логические литералы, мы рассмотрим немного позже.
-яхт
Перенести эту програм му в «Редактор кода» и присвойте логические значения другим переменны м
Специальный литерал Хопе (пусто). Python имеет всего один специальный литерал None (никто, ничто, ничего). None используется для указания некого пустого значения Он также используется для конца списков в Python Литерал None можно представить в виде пустого холодильника, в который можно положить продукты.
Литерал None говорит программе, что необходимо зарезервировать место в памяти компыо1ера, куда будут положены некие данные, но пока в этих ячейках памяти ничего не лежит. I (ример использования специального литерала None приведен в листинге 1.7.
I Листинг 1.7. Специальный литерал Хопе (пусто)
"Х Редактор кода
1 л Листинг 1.7
2 х = None
з у = None
4 print(’х=1, х)
5 print('y=', у)
В этих инструкциях программист зарезервировал в памяти компьютера две ячейки для хранения значений переменных «х» и «у», но пока в этих ячейках ничего не сохранил,
оставив их пустыми.
Результаты работы этой про!раммы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 1», а боковой панели - «Листинг 1.7».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой программы (рис. 1 Н>).
\ Показать результат
Урок 1.2.Типы литералов в Python
Пустое значение
Х= hone
у= None
Рис. 1.10. Вывод значений переменных None
Теперь более подробно познакомимся с литеральными коллекциями Это очень важные структуры языка программирования Python, поэтому они выделены в отдельный урок.
Перемети эту программу в «Редактор кода» и присвойте значение None другим переменны м.
Урок 1.3. Литеральные коллекции
Python имеет четыре типа коллекции литералов:
• List (список);
• Tuple (кортеж);
• Diet (словарь);
• Set (набор).
Список (List) - это набор либо однотипных элементов, либо элементов с разными типами данных. Данные, которые хранятся в списке, заключаются в квадратные скобки - [ ], а между собой разделяются запятой (,). I (римсром списка может быть ваш шкаф для одежды, в котором можно хранить самые разные веши
Пример программы, в которой создается список, приведен в листинге 1.8.
Листинг 1.8. Создание списков
X Редактор кода /
1 * Листинг 1.8 list_l = [100, 500, 1000, 5000]
3 list_2 = [55.5 , 33.8, 44.17, 105.5] list_name - [ Ниф-Ниф', 'Нуф Нуф', 'Наф-Наф ] list_3 = [ludO, 55.1 "Хрюша"]
6
7 printf‘Списки’) printi'Henue числа- ', Ust_l ргтnt('Вецес1венные числа ', list_2j
IE ргтnt('Строки- ', list.name'1
11 print('Разные типы данных - ', Ust_3)
Здесь список list_l содержит четыре целых числа, а список list_2 - четыре дробных числа В списке list name содержатся имена трех поросят А вот в списке list_3 мы имеем набор совершенно разных типов данных: здесь хранится целое число, дробное число, и строка символов. Язык программирования Python обладает той особенностью, что в коллекции данных с одним именем, можно хранить совершенно разные виды информации. Списки обладают еще одной особенностью, хранимую в них информацию можно изменять в ходе работы программы. Вы же можете на одних и те же полках шкафа хранить разные вещи!
Результат! работы этой пртраммы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 1», а боковой панели - «Лисипп 1.8».
Если в интерактивном разделе книги открыть вкладку «Показать результат», го мы увидим следующие итоги работы этой программы (рис. 1 11).
v \ Показать резулыа!
Урок 1.3. Литеральные коллекции
Списки
Списки
Целые числа ; 100.500.1000,5000]
Вещественные числа- [555,33.8,44.17,105.5)
Строки- ['Ниф-Ниф' 'Нуф-Нуф', 'Наф-Наф']
Ра зиме 1 ипы данных - [ 1000,55.8, 'Хрюша']
Рис I 11 Вывод значений переменных None
Перенести эту программу в «Редактор кода» и присвойте спискам другие значения
Кортеж (Tuple) - это тоже набор либо однотипных элементов, либо элементов с ратными типами данных. Данные, которые хранятся в кортеже, заключаются в крутлые скобки ( ), а между собой разделяются запятой (,). В отличие от списков кортежи неизменяемы. Кортеж создается один раз и его нельзя изменить в процессе работы программы. Примером кортежей могут быть закрытые банки с вареньем. Ьанки - это то место, где лежит варенье или соленья, при этом банки плотно закрыты железными крышками Ьанки можно переставлять с одного места на другое, можно через стекло посмотреть - что там лежит, но их содержимое нельзя изменить, гак как эти банки плотно закрыты. Это бы сильно расстроило Карлсона, который просто обожает варенье.
Пример программы, в которой создаются кортежи, приведен в листинге 1.9.
Листинг 1.9. Создание кортежей
'Х, Редактор кода
т № Листинг J.9
2 tup_l = (100, 500, 1000, 50000) tup_2 = (100.5, 20.2, 1000, 2000)
- tup_3 = (1 Рюша1, 1 Хрюша1, 1 Кирюша1) tup_4 = (10, 20.5, "Ниф-Ниф'1, [2, 3, 4, 5, 6]) 6
7 pri nt ('кортежи1)
! print( Целые числа- ', tup.l) print( 'Вещественные числа- ', tup_2)
10 print(‘Стрики- ', tup_3)
11 print (Разные типы данных - ', tup_4)
Здесь кортеж tup 1 содержит четыре целых числа, а кортеж tup_2 - два дробных и два целых числа. В кортеже tup_3 содержатся имена ipex поросят. А вот в кортеже tup 4 мы имеем набор совершенно разных типов данных: здесь хранится целое число, дробное число,
строка символов, а также список из пяти целых чисел.
Резулыагы работы этой пршраммы можно посмотреть н ингеракгнвном разделе книги. Для этого в главном меню нужно выбра! ь опцию «Тема 1», а боковой панели - «Лисипп 1.9».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим
следующие итоги работы этой программы (рис. 1.12).
\ Показать результат
Урок 1.3. Литеральные коллекции
Кортежи
Целые числа- (100.500 1000,50000.
Вещее таенные числа (100.5,20 2,1000,2000)
Строки- ('Рюша', 'Хрюша'. 'Кирюша'1
Разные типы данных - (10,20.5, Ниф-Ниф'. [2,3,4,5,6])
Д| Смотрите мультфильм про Карлсона
Рис. 1.12. Вывод значений кортежа
В этом примере показано, что в коллекции данных с одним именем, можно хранить совершенно разные виды информации, включая другие коллекции Важно помнить, что данные в кортеж можно загрузить только один раз и к ходе работы программы их невозможно изменить.
-зь-
Перенести эту программу в «Редактор кода» и присвойте кортежам другие значения.
Словарь (Diet) - ото набор либо однотипных элементов, либо элементов с разными типами данных. В словаре данные хранятся в виде пары: ключ-значение. Данные, которые хранятся в словаре, заключаются в фигурные скобки { }, а между собой разделяются знаком двоеточия (:).
Примером использования словарей может служить библиотека. В библиотеке есть картотека, где лежат карточки с информацией о книгах, и есть хранилище, где на полках находятся сами книги (рис. 1 1).
Здесь карточка является аналогами ключа, на котором записана информация о названии книги и месте ее хранения. Когда читатель приходит в библиотеку, он сначала в картотеке находите карточку с нужной книгой, а потом передает карточку библиотекарю. Библиотекарь, посмотрев на карточку, получает информацию о том, какую книгу нужно принести, и узнает номер полки, где зта книга лежит. После зтого библиотекарь идет в хранилище и приносит чита!елю нужную книгу.
Пример программы, в которой создается словарь, приведен в листинге 1.10.
Листинг 1.10. Создание словарей
'К Редактор кода <
1 ж Листинг 1.1©
2 dict_l = {'Имя_1' ‘ Ныф-Ниф', 1Дом_1': 'Из соломы',
'Иня_2': ' Нуф-Нуф , 'Дом_2': 'Из веток',
4 'Имя_3': ' Наф-Наф‘ , Дом .3': 'Из камней'}
5
pnnt(‘Словарь- ', dict_l)
Что же содержит словарь в этом примере9 В ггом словаре хранятся данные об именах поросят и о домах, которые они построили. То, что находится до знака «:» является ключом элемента словаря, а го, что находится после знака «:» - является значением ключа. Например, ’И.мя_Г: 'Ниф-Ниф', здесь 'Имя Г - ключ,' Ниф-Ниф' - значения ключа. То есть пой инструкции программист сказа компьютеру, что в ячейке памяти с именем <Имя_1> нужно сохранить текст <Ннф-Ннф>.
* kk Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать оппню «Тема 1», ж. г[н » а боковой панели - «Листинг 1.10».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой программы (рис. 1 13).
Показать результат
Урок 1.3. Литеральные коллекции
Словари
Словарь-
’ <
"Имя_1" : • Ниф-Ниф"
“Дом_1" : "Из соломы"
"Имя.2" : " Нуф-Нуф"
"Дом_2" : "Из веток" "Имя_3" : " Наф-Наф" "Дом.3" : "Из камней"
Рис I 13 Вывод значений словаря
Как можно прочитать данные из словарь мы рассмо1рим на примерах немного позже.
Перенести эту программу в «Редактор кода» и присвойте словарям другие значения.
Набор (Set) - это неупорядоченная и ненндексированная группа элементов. Данные, которые хранятся в наборе, заключаются в фигурные скобки { }, а между собой разделяются запятой (,). Примером набора данных может служить корзина с фруктами.
Пример программы, в которой создается набор, приведен в листинге I 11
i Листинг 1.11. Создание наборов
% Редактор кода
1 # Листинг 1.11 f ______ Д
fruits = {"Яблоки", "Бананы", "Апельсины"} '*.
4 ргтnt('Набор- fruits)
Информацию в таких наборах можно располагать в любой последовательности. Например, следующая инструкция будет аналогична предыдущей инструкции.
fruits = {"Апельсины", "Бананы", "Яблоки"}
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема I», а боковой панели - «Листинт 1.11».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой программы (рис. 1.14).
ч Показать результат
Урок 1.3. Литеральные коллекции
Наборы
Набор {‘Яблоки’, ‘Бананы’, ’Апельсины’}
Рис. 1.14. Вывод значении набора
Как можно прочитать данные из набора типа «Set» мы рассмотрим на примерах немного позже.
Перенести эту программу в «Редактор кода» и присвойте наборам другие значения
Урок 1.4. Имена в Python (идентификаторы)
Мы уже знаем, что переменные и константы в Python имеют имена, или идентификаторы, Так как мы планируем стать настоящими программистами, го нам нужно дать четкое определение идентификатору и запомнить его.
Идентификатор —это имя некоторого объекта в программе, являющееся его уникальным признаком, позволяющим отличать его от других объектов. Другими словами идентификаторы - это просто имена констант, переменных, функций или классов. Программа, используя идентификаторы, может извлекать нужные данные из ячеек памяти и обрабатывать их. Аналогом идентификаторов яв.тяются адреса электронной почты. Почтовые сервера, имея адреса электронной почты, то есть идентификаторы пользователей, знают, откуда и куда необходимо доставить электронные письма.
В Python идентификаторы чувствительны к регистру. Например, переменные text, Text и TEXT, написанные одними и теми же символами. Python разместит в разных ячейках памяти, и в них можно будет хранить совершенно разную информацию.
Идентификаторы должны начинаться с любой буквы алфавита в Юникоде (в нижнем или верхнем регистре) или с символа подчеркивания (_), после чего могул следовать любые буквы, цифры или символы подчеркивания. При этом имена не должны начинаться с цифры.
Примерами идентификаторов могут служить' g (латинская буква), ж (русская буква), g (начинается со знака подчеркивания), ру| 2 (включает цифру), Фио (начинается со знака подчеркивания и включает русские буквы, одна из которых заглавная), S123 (начинается с заглавной буквы), set file. setFile и т.д.
Комбинации символов 15var_l, $Var2 или var 3 нельзя использоваться в качестве идентификаторов, так как первый начинаются с цифры, второй содержат недопустимый символ, третий содержит пробел. Также следует помнить про регистр используемых символов. Например, идентификаторы var_l, Var_l и VAR_ 1 будут обозначать имена совершенно разных переменных или функций, так как регистр символов у них не совпадает. В Python допускается использовать символы кириллицы для задания имен. Однако это не желательно, поскольку, во-первых многие редакторы программного кода будут воспринимать такие идентификаторы как ошибку (при этом сама программа будет работать), во-вторых вполне вероятно, что в некоторых операционных системах или на некоторых платформах в сети интернет программа действительно будет работать с ошибками. Использование символов латинского алфавита для задания имен будет гарантировать работоспособность программ в любой среде.
В Python идентификаторы (или переменные), это, по сути, имена объектов, в которых хранятся некоторые данные. Имена переменным придумывает программист, но есть несколько ограничений, связанных с именами переменных. В качестве имен переменных нельзя использовать ключевые слова, которые для Python имеют определенный смысл. В редакторах программного кода ключевые слова в инструкциях кыделяются определенным цветом. Перечень основных ключевых слов приведен на рис. 1.15.
and as assert break class continue
def del elif else except
finally for from global if import
in is lambda nonlocal not or
pass raise return tty while with
yield True False None
Рис. 1.15. Перечень ключевых слов языка программирования Python
Для лучшего восприятия кода следует давать именам понятные и по возможности краткие названия, которые бы соответствовали хранящимся в переменных данным или выполняемым функциями действиям (например, имя - пате, файл - file, фамилия имя отчество - fio). Идентификаторы могут состоять нс только из одной буквы или слова, но и из нескольких слов Для таких случаев в программировании существуют два распространенных стиля записи идентификаторов. Можно два слова объединить в одно, написав каждое с заглавной буквы (FileName), а можно два слова разделить нижним подчеркиванием (file name). Можно объединить эти два стиля (File_Name).
Урок 1.5. Отступы и точка с запятой в Python
Во многих языках программирования, например в C++, С#, конец строки обозначают символом точка с запятой - «;». В отличие от них в Python каждая инструкция (или строка с командой) не имеет символа, который обозначает конец строки. Общее правило Python гласит, что конец любой строки автоматически считается концом инструкции, находящейся в этой строке. В свою очередь это правило порождает другое, которое предписывает (за редким исключением) писать в каждой строке по одной команде.
Другим важным правилом языка Python является то. что вложенные инетрукцин одного уровня должны оформляться одинаковым количеством отступов от левою края. Именно по количеству отступов иятерпретатор определяет, где заканчивается очередной блок инструкций и начинается новый. Общий шаблон оформления составных (вложенных) инструкций имеет вид (здесь каждая точка условно обозначает пробел):
Основная инструкция:
. . . .Вложенный блок инструкций
. . . .Вложенный блок инструкций
Как и в большинстве других языков программирования в Python присутствует условная инструкция if, которая в общем случае имеет следующий формат записи:
if Условие №1:
....Вложенный блок инструкций №1
elif Условие №2:
....Вложенный блок инструкций N>2
В данном примере вложенные блоки инструкций имеют отступы от начала строки 4 символа (здесь гак же вместо пробелов отступы условно обозначены точками). Большинство редакторов программного кода автоматически формируют количество
отступов от начала строки для вложенных инструкции. Обычно это 4 пробела, которые можно задать клавишей табуляции (Tab). Пример использования обязательных отступов в условных операторах и операторах цикла представлен на рис. 116.
Отступы обязательны!
Условный оператор; Цикл;
s =
for х in range( 1( ): а = х с » 0 while а > :
с + а % а = а // s = s + с
Рис. I 16. Использование отступов в условных операторах и операторах цикла
Пример программного кода, демонстрирующий использование отступов, приведен в листинге 1.12.
Листинг 1.12. Использование отступов в протраммном коде
X Редактор кода <
1 ж Листинг 1.12
2 х = 100
з у = 1ь
4 7 = Ноле
5 i f у > и:
6 z = х / у
7 eli f у == 0:
z = ‘На ноль делить нельзя'
9 print("z= ", z)
Отступы обчзагтелык
Условный оператор:
If х > в: а • х [if х > 1: Ь - х с • » * х lelse: о - х - 1 с • х*х В - Ь ♦ с
Цикл: 3 •
х in rang«(Tt0) а х
С • 0 нП11е • > с « а X В |» - а и а з - s ♦ с
Примечание.
В первой строке этого программного кода присутствует ключевое слово «def», которое объявляет пользовательскую функцию. О пользовательских функциях будет подробно рассказано в следующих троках,
©Результаты работы ной программы можно насмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 1», а боковой панели - «Лhcthhi 1.12».
Если в интерактивном разделе книги открыть вкладку «Показать результат», го мы увидим следующие итоги работы этой программы (рис. 1.17).
ч Показать результат
Урок 1.5. Отступы и точка с запятой в Python
Отступы
Z= 1...
Смотрите мультфильм прото, как важно уступать
Рис. I 17. Результаты работа программы демонстрации отступов
Эта интерактивная книга может не только выполнить программный код, но и показать вам познавательный мультфильм про вежливость и про то, как иногда важнее уступить, чем настаивать на своем. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис 1 18).
v Al Посмотреть мультфильм
Рис 1.18 Мультфильм как важно уступать
Перенести эту программу в «Редактор кода» и выполните ее с другими значениями переменных.
Бывают ситуации, когда в программном коде имеется несколько коротких команд, которые идут одна за другой, В Python допускается записывать их в одной строке, разделяя команды точкой с запятой. Например:
a = I; b = 2; c = 3
Однако такой стиль не приветствуется, и многие редакторы программного кода автоматически разносят такие команды в разные строки
Бывают случаи, что инструкция очень длинная и не помещается на экране. В зтом случае ее можно разнести на несколько строк, заключив в пару круглых, квадратных или фигурных скобок. Пример программы, в которой длинные инструкции разнесены по разным строкам программного кода, представлен в листинге 1.13:
i Листинг 1.13. Длинные инструкции в нескольких строках прог раммного кода * 1 2 * * * б * 8 * io 11 12 * 14 15
X Редактор кода
1 # Листинг 1.13
2 a=l;d=2;s=3
pnnt('a=', а, ' Ь=', d. 1 с=', s;
п = (143.77 t 34 * 439.25 -
23 / (а ' dj ♦ abs(-36 * s)
б )
prlnt( 'n=', n)
8 П = [143.77 + 34 * 439.25
23 / (a i d) * abs( 36 * s)
io ]
11 print( 'n=', n)
12 n = (143,77 ♦ 34 • 439.25
23 / (a » d} ♦ absi 36 * sj
14 }
15 prHTt('n=' , n)
Отступ, офязателы*.
Условный оператор If x > :
a . X 1* > > 1: b > x c a + x pise: b * x - 1 c x’x a '• n ♦ c
Цикл s • for x In range(loO) a • x c в while a > :
Пс a X 8 ___|a • a // 8 s • s ♦ c
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрат ь опцию «Тема 1», а боковой панели - «Листинг 1.13».
Если в интерактивном разделе книги открыть вкладку «Показать результат», то мы увидим следующие итоги работы этой программы (рис. 1 19).
v \ Показа! ь результат
Урок 1.5. Отступы и точка с запятой в Python
Длинные инструкции
а= 1 Ь= 2 с= з
П= 15174.77
n=[15174.77j
п={15174 771
* Смотрите мультфильм про измерение длинны
Рис 1 19 Результаты работа программы с многострочными инструкциями
Эта интерактивная книга может не только выполнить программный код, но и пока iamb вам познавательный детский мультфильм из серии увлекательная математика про такие понятия, как длинные и короткие пред меты. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 1 20).
- * Посмотреть мультфильм
Рис. 1.20. Мулыфильм про длинные и короткие предметы
В официальном руководстве советуют использовать строки кода длиной не более 79 символов Поэтому, если строка программного кода очень длинная, необходимо разбивать ее на несколько С1рок, используя скобки.
Перенести эту программу в «Редактор кода» и выполните ее с другими значениями переменных.
Урок 1.6. Комментарии в Python
Еще одной важной частью синтаксиса любого языка программирования является возможность вставлять в программный код комментарии и пояснения. В Python можно использовать однострочные и многострочные комментарии. Строка с однострочным комментарием начинаются с символа «#». Весь код после символа «#» интерпретатором Python игнорируется Комментарии можно вынести в отдельную строку, а можно разместить в строке с выполняемым программным кодом. Вот пример использования символа «#» для строк с комментариями
х = 10 # Это комментарий в строке с кодом программы
# Это комментарий перед строкой с кодом программы
у = 20
Многострочные комментарии представляют собой текст, расположенный между тронными апострофами ("‘строки с комментариями'"). Пример использования комментариев в программном коде приведен в листинге 1 14.
Листинг 1.14. Использование комментариев в программном коте
’X, Редактор кода /
tT>
г ? Листинг 1.14 ’у
ргтпС('Для однострочного комментария используется символ - *')
з х = 1е 4 Это комментарий в строке с кодом программы
4 ж Это комментарий перед строкой с кодом поограммы 5 у = 20
7 ргтпГ("Дпя многострочного комментария используется тройной апостроф") printfНапример - '''Это комментарий''' ")
9 >и
10 Это многострочный комментарий в тройных апострофах.
11 Его видит только программист.
12 При работе программы он не выводится на экран
13 ' "
14
15 pnnt('HnH тройные кавычки, например - """Это комментарий""" ')
16 """
17 Это многострочный комментарий в тройных кавычках.
18 Его видит только программист.
19 При работе программы он не выводится на экран
20 """
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Гема 1», а боковой панели - «Листинг 1.14».
Если в интерактивном разделе книги открыть вкладку «Показать результат», го мы увидим следующие итоги работы этой программы (рис. 1.21).
v ч Показать результат
Урок 1.6. Комментарии в Python
Комментарий в программном коде
Для однострочного комментария используется символ я
Для многое।речного комментария используется тройной anociрогр
Например Эго комментарий'"
Или тройные кавычки, например """Это комментарий'""'
Рис. 1.21 Рс тулы а гы работа прыраымы с примерами комментариев
Возможность вставки пояснений в программный код позволяет лучше понимать смысл заданных команд. Интерпретатор Python, когда читает заданные ему команды, текст комментарий просто игнорирует.
Любой программист знает, что по истечении некоторого времени разобраться даже в собственном коде становится достаточно трудно. Поэтому в процессе разработки программ нужно обязательно исполыовать комментарии, которые позволяют:
• пояснить какую задачу решает тот или иной фра1 мент программного кода:
• временно закомментировать фрагмент кода во время отладки npoi раммы;
• черег некоторое время освежить в памяти программиста детали работы того или П1Ю1 о фрагмента программно! о кода;
• пояснить другим программистам назначение того или иною фрагмента программного кода (особенно эго важно, когда группа программистов работает в команде).
Э Перенести эту программу в «Редактор кода» и выполните ее с другим текстом в комментариях .
Гема 2. Типы данных в Python и элементарные действия с данными
Урок 2.1. Базовые типы данных Python
Когда программист пишет программный код, то он, просит компьютер обработать различные типы данных, например, числа или строки В Python, как и в других языках программирования, имеется встроенный набор типов данных, но программисту дастся возможность определять и собственные типы данных. Все, чем оперирует Python, тто объекты. Типы данных являются классами, а их значения - это экземпляры или объекты соответствующих классов. Каждое значение в Python имеет свой тип. В первом уроке мы уже знакомились с типами данных, вспомним ггро них.
Числа - целые (-8, 0, 47) и вещественные числа (-0.54 или -.54, 0.0, 2.475). Все они относятся к неизменяемым типам данных.
Строки - это текст произвольной длины, взятый в одинарные, двойные или тройные кавычки. Например. 'Текстовая строка', "Hello Python'", "'Строка в тройных кавычках"', ('троки также являются неизменяемым типом данных, хотя получить доступ к отдельному символу строки можно гго его индексу (номеру).
Списки - это упорядоченные неименованные изменяемые коллекции значений (объектов), например. ['А', 'В', 'С'] или [2, [True, False], "house"]. Списки ограничиваются квадратными скобками, внутри которых через запятую перечисляются значения любых типов данных, включая и сами списки. Доступ к значениям списка осуществляется по индексам (об этом чуть позже) В Python нет таких понятий, как одномерный, двумерный или трехмерный массив. Списки - эти аналог массивов, но с более широкими возможностями. С использованием вложенных списков можно получить аналог массива любой размерности.
Кортежи это упорядоченные неименованные неизменяемые коллекции значений (объектов), например. ('А', 'В', С) или (2, "house". True). Кортеж задается круглыми скобками, внутри которых через запятую перечисляются значения неизменяемых типов данных. Доступ к значениям элементов кортежа осуществляется по индексам. Но, гак как кортежи являются неизменяемыми последовательностями, то добавлять или удалять элементы из них нельзя.
Словари это именованные, изменяемые, неупорядоченные коллекции значений (объектов), например. {‘Имя’: 'Максим', 'Возраст': 25). Словарь задается фигурными скобками, внутри которых через запятую перечисляются пары «ключ: значение». В качестве ключей в принципе можно использовать любые неизменяемые уникальные значения, например, числа или строки, а в качестве значении вообще любые типы объектов, включая другие словари. Доступ к значениям в словаре осуществляется по ключам.
Множества - тто неименованные и неупорядоченные изменяемые коллекции уникальных и неизменяемых значений (объектов), например, {'Апельсины’, ‘Мандарины’, 45}. Множество задается фигурными скобками, внутри которых через запятую перечисляются значения неизменяемых типов данных. Сами множества являются изменяемыми коллекциями
значении но вот значения в коллекции должны относиться к неизменяемым тинам вроде чисел и строк.
Логические значения - этот тип данных содержит всего две константы: True и False,
None - специальное значение, ко герое означает отсутствие значения
Необходимо отметить, что встроенные типы данных можно классифицировать (разделять) ио нескольким признакам:
• изменяемые (списки, словари, множества);
• неизменяемые (числа, строки, кортежи);
• логические;
* нусгые (None);
• упорядоченные (строки, списки кортежи);
• неупорядоченные (словари, множества).
Эта классификация очень важна для понимания возможностей каждого типа данных и области их применения. Пока мы не будем углубляться в эти детали, они будут подробно рассмотрены в следующих уроках на конкретных примерах.
Урок 2.2. Динамические типы данных
У Python есть одна особенность - он относится к языкам программирования с динамической (изменяемой) типизацией данных. Давайте разберемся - что такое динамическая типизация данных на примере вашего портфеля. В один и тот же портфель можно каждый день складывать совершенно разные предметы: ручки, карандаши, пенал, книжки, тетради, игрушки, то есть любые предметы, которые могут в него войти (рис. 2.1).
Рис 2.1 Портфель как хранилище разных предметов
Представьте, что вы собираетесь в школу. Сначала портфель был пустой, потом вы начинаете складывать в него свои веши. Точное содержимое портфеля будет известно только тогда, когда вы закончите укладку в пего всех предмегов
Так и Python в одной и тон же ячейке памяти может хранить совершенно разные обьекгы: числа, строки, списки, кортежи, словари, то есть все, что поместится в памяти компьютера. До начала работы программы не знает, какие типы данных будут лежать в ячейках памяти компьютера Что лежит в конкретной ячейке он узнает только тогда, когда туда будут положены некоторые данные. Другими словами Python сам задаст нужный тип данным всем
переменным тогда, когда им будет присвоено значение. Это значит, что в Python программисту не нужно объявлять тип переменной в исходном коде, как это делается в других языках. Интерпретатор делает это автоматически во время присваивания переменной нового значения При этом он самостоятельно выделяет нужный объем памяти под вновь создаваемый объект.
Сами переменные в Python не имеют конкретного типа. Когда s коде программы переменной присваивается значение, интерпретатор создает обьект, в котором хранятся и тип переменной, и значение переменной, и набор операций, допустимых для этого типа данных. Самой же переменной присваивается только ссылка на этот объект. Таким образом, в Python переменные не хранят сами значения, а только ссылаются на объекты присваиваемых им значений. Когда той же переменной будет присвоено другое значение, ей присваивается новая ссылка, указывающая на другой объект . А прежний объект, если он больше не используется в программе, просто удаляется. При этом программисту не нужно заботиться об удалении старого объекта, гак как в Python используется механизм автоматической сборки мусора. Рассмотрим этот механизм на простом примере (Листинг 2.1).
Листинг 2.1. Динамические типы данных в Python
•X, Редактор кода /
1 » Листинг 2.1
2 а - 10и
з print (’В переменную "а" положили число aj
5 а = 0.25
б print('B переменную "а" положили другое число , а)
а - 'А и Б сидели на трубе'
9 print('B переменную "а" положили строку а) ie
11 а = 'А упала Б пропала, что осталось на трубе'
12 print('B переменную "а” положили другую строку а)
14 а = ['Ниф-Ниф', ‘Нуф-Нуф’, 'Наф-Наф4]
15 print(’B переменную ’'а” положили список имен поросят , а)
16
17 а = ( * Рюша , • Хрюша ’ , ' Кирюша')
18 print('В переменную "а” положили кортеж с именами поросят а)
19
2€ а = {'Имя': Накснм', 'Возраст': 25}
21 print('B переменную "а” положили словарь , а)
22
23 а = {'Апельсины', 'Мандарины', 'Лимоны']
24 print('B переменную "а" положили набор set а)
а « True
print(’8 переменную "а” положили логическую константу , а)
29 а в None зе print('8 переменной "а" пусто а)
В этом программном модуле переменной «а» присваиваются совершенно разные типы данных, и значения этих данных выводятся на экран с помощью встроенной функции print().
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрат ь опцию «Тема 2», а боковой панели - «Лист инг 2.1».
После выполнения программного модуля будет получен следующий результат (рис. 2.2):
v < П гказать результат
Урок 2.2. Динамические типы данных
Смена типа данных в Python
В переменную "а" положили число ют
в переменную “а’ положили другое число- в.25
В переменную "а' положили < троку А и Б сидели на трубе
В переменную 'а' положили другую строку -А упала Б пропала, что ос талось на трубе
8 переменную "а" положили список имен поросят ['Ниф-Ниф'. 'Нуф-Нуф. Наф-Наф ]
В переменную "а" положили кортеж с именами поросят -('Рюша'. 'Хрюша', 'Кирюша')
В переменную "а" положили словарь -{'Имя' Максим, Возраст’: 25}
В переменную "а" положили набор set - з'Ияищрииы-, *пеп»сииы‘, Лимона'}
В переменную "а" положили логическую константу True
В переменной "а' пусто Но- е
Рис 2.2. Результаты присвоения переменной данных разного типа
Рассмотрим более подробно, как Python работает с переменными. Здесь есть существенная особенность, которая отличает его от других языков программирования, где переменным явно задается тип (например, целое число) и он не меняется в процессе работы прш раммы
Рис. 2.3. Механизм присваивания значения переменной
Python в момент выполнения присваивания значения, например а=100, в памяти компьютера создается объект, расположенный по некоторому адресу (условно обозначим его как adr 1). В ячейку с адресом adr 1 будет занесено значение 1U0 целочисленного типа int. Затем создается переменная с именем «а», которая связывается с адресом объекта adrl. Таким образом, переменные в Python содержат не сами значения, а адреса объектов, в которых хранятся значения. Можно сказать, что переменные ссылаются на объекты.
Теперь посмотрим как та же переменная «а» получит другое значение, например, текстовую строку (рис. 2.4).
а = Это первая текстовая строча'
Адри-
adr2. Это первая текстовая строка
Рис. 2.4. Механизм изменения значения переменной
В момент присваивания той же переменной «а» другого значения, например строкового типа «Это первая текстовая строка», в памяти компьютера будет создан другой объект по адресу adr2 строкового типа, в который будет помещена заданная С1рока. После этого изменится содержимое переменной «а», вместо адреса adrl она получит ссылку па адрес adi2. Также Python увидит, что на объект по адресу adrl больше никто не ссылается и поэтому удалит его из памяти. Python самостоятельно производит автоматическую сборку мусора. Как видно из данного рисунка, переменная осталась той же, но она теперь ссылается на другой адрес. Теперь та же переменная имеет и другое значение, и другой тип данных не целое число, а строка.
Перенести эту программу в «Редактор кода», задайте другие значения „ переменным и посмотрите, как изменятся результаты.
Урок 2.3. Изменение тина данных в Python
Довольно часто в про!рамме требуется преобразовать значение одного типа данных в другой. Например, достаточно часто требуется складывать числовые и символьные данные для того, чтобы вывести на печать результаты работы программы. В этом случае нужно преобразовать число в строку. Если этого не сделать, то Python не поймет эту инструкцию и сообщит об ошибке в программе.
Рассмотрим программный код, в котором необходимо сложить числовое значение с символьным значением (листинг 2.1).
Лисипп 2.2.
X Редактор кода
1 # Листинг 2.2
2 а = 'Стоимость товара - '
3 b = 1М
4 С - ' руб.'
5 try: d = а + Ь + с printid)
except ТуреЕггог
print*'Ошибка - глажение переменных разных типов')
©Результаты работы этой пршраммы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбраз ь опцию «Тема 2», а боковой панели - «Листинг 2.2».
При выполнении этого программного кода должен быть выдан результат:
Стоимость товара - 100 руб.
Однако после запуска программы интерпретатор Python выдаст ошибку, если не реализовать перехват возможных ошибок (рис 2.5).
* ч Показать результат
Урок 2.3. Изменение типа данных в Python
Сложение данных разного типа
Ошибка сложение переменных разных типе
* Смотрите мультфильм про ошибки
Рис. 2.5. Ошибка при сложении данных разного типа
Здесь мы пытаемся сложить две текстовые переменные с числовой переменной. Для того, чтобы исключить ошибку при выполнении сложения нужно число 100 преобразовать в
текст. Для такого преобразования используется встроенная функция str().
MSI Эта интерактивная книга может не только выполнить программный код, но и 11«»| °П показать вам мультфильм про то, что нужно быть очень внимательными при решении любых задач и не делать ошибок. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 2.6).
* Посмотреть мультфильм
Рис 2.6. Мультфильм про остров ошибок
llpoiраммный код, в котором числовая переменная преобразуется в строку текста, приведен в листинге (листинг 2.3).
Листинг 23.
X Редактор кода
1 ж Листинг 2.3
2 а = 'Стоимость товара -
3 b = 100
4 Ь = str(b)
5 С = 1 руб.1
6 try: d - а + b + с orint(d)
except TypeError
> pr1nt('Ошибка - сложение переменных разных типов’)
Здесь мы переменную Ь, в которой содержалось число 100, преобразовали в строку - ’100’. Теперь переменной d будет присвоена сумма трех строковых переменных.
Результаты работы этой upoi раммы можно посмотреть в интерактивном разделе книги. Для этою в главном меню нужно выбрать опцию «Тема 2», а боковой панели - «Листит 2.3».
После зыполнения этого программного модуля ошибок не будет, и мы получим тот результат, который ожидали (рис. 2.7).
х. Показать результат
Урок 2.3. Изменение типа данных в Python
Приведение данных к нужному типу
Стоимость товара 100 руб.
Рис. 2.7. Приведения данных к нужному типу при выполнении арифметических операции
В данном примере для преобразования строки в число мы использовали встроенную функцию strf). Кроме нее в Python имеется набор других функций для преобразования типов данных: bool(), int(), complex(), tuple(), IiistQ, dictf), set(). Каждую из них мы рассмотрим подробнее в других уроках этой книги
Как можно было убедиться на данном примере, во избежание ошибок в процессе преобразования типов нужно следить за возможностью такого преобраювания. В общем случае один гип числа легко преобразуется в другие типы чисел, один объект - в другие типы объектов, а логический тип можно преобразовать вообще во все что угодно.
Перенести эту программу в «Редактор кода», задайте другие значения и переменный и посмотрите, как изменятся результаты.
Урок 2.4. Программируем загадку «А и Б сидели на ।рубе»
Л теперь давайте проверим, действительно ли одни и те же переменные могут принимать разные значения. Наверно все знают детскую загадку «Л и Б сидели на трубе. Л упала, Б пропала, что осталось на трубе» (рис 2.1
Давайте найдем отгадку, для чего напишем простенькую программу, которая будет обрабатывать символьные переменные. Текст такой программы приведен в листинге 2.4,
Листинг 2.4.
X Редактор кода
1 в Листинг 2.4
2 а = 'А ' А Это А
3 1 'И ' 9 ЭТО И
4 b 'Б 1 # Это Б
bt = a + i-rb й Это кто сидел на трубе
? в Загадка print('Ha трубе сидели t)
к а « ' ' 9 Это Л упала и b = '' а Это Б пропала
1 t - а ♦ 1 ♦ b # Это кто остался на трубе
13 # 01 гадка
14 print('Ha трубе осталось tj
В этой программе создано гри символьных переменных (a, i, b), и этим переменным заданы начальные значения. Затем мы создали еще одну переменную -1, в которой подсчитали, кто же сидел на трубе (t " а + i + Ь), и с помощью встроенной функции print() показали результат. Затем, так как у нас буква А - упала, а буква Б - пропала, то переменным «а» и «Ь» были присвоены «пустые» значения. После этого с использованием той же инструкции (t = а + i + Ь) определили, кто же остался на трубе.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для згою в главном меню нужно выбрать опцию «Тема 2», а боковой панели - «Лисипп 2.4».
После выполнения этого программного кода мы получим следующий результат (рис. 2.8).
v \ Показать результат
Урок 2.4. Загадка «А и Б сидели на трубе
Переменная может принимать разные значения!
На грубе сидели А и Б
На трубе осталось и
Sf Смогрите мультфильм загадку
Рис. 2.8. Результаты работы прозраммы обработки символьных переменных
Как видно из данного примера, действительно одни и те же переменные в программе могут принимать разные значения.
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - загадку. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 2.9).
- » Посмотреть мультфильм
Рис. 2.9. Мультфильм загадка «А и Б сидели на трубе...»
Перенести эту программу в «Редактор кода», задайте «пустые» значения другим переменным и посмотрите, как изменятся результаты.
Краткие итоги темы 2
Все данные в Python представлены в виде объектов, которые включаю! в себя как сами данные, таки и методы их обработки.
К базовым типам данных Python относятся числа (int. float), строки (str), списки (list), кортежи (tuple), словари (diet), множества (set), логические значения (True, False) и специальное значение - пусто (None).
Python относится к языкам программирования с динамической типизацией данных, поэтому программисту не нужно объявлять тип переменной в исходном коде. Интерпретатор делает это автоматически во время присвоения переменной нового значения. При этом он самостоятельно контролирует объем памяти, распределяемый под вновь создаваемый объект
Переменные в Python хранят не само значение, а ссылки на объект, в котором хранится это значение.
Для преобразования одного типа данных в другой можно пользоваться встроенными функциями или конструкторами типов данных: hool(), int(), float(), str(), tuple(), hst(), dict() или set(). Однако нужно быть внимательным и избегать ошибок, связанных с невозможностью преобразования одного типа данных в тругой.
На этом мы заканчиваем краткое описание типов данных Python, и переходим к более подробному рассмотрению каждого типа данных, упомянутых в этом уроке.
Вопросы для самоконтроля к теме 2
Какой тип данных является числом: 123,'123‘, 11,2,3], {1,2,3}, {1: 1, 2: 2,3: 3}, (1.2,3)?
Какой тип данных является строкой: '123', [1,2,3], {1,2,3}, 123, {1: 1,2:2,3: 3}, (1,2.3)?
Какой тип данных является списком: [1,2,3],'123', {1.2,3}, 123, {1 1,2:2, 3: 3}, (1.2,3)?
Какой тип данных является кортежем: (1,2.3), '123', [1,2,3], {1,2.3}. 123, {1: 1, 2: 2, 3: 3}?
Какой тип данных является словарем: {1: 1,2: 2. 3: 3},'123', [1.2,3], {1,2.3}, 123,(1,2.3).
Какой тип данных является множеством: {1,2,3},'123', [1,2,3], 123, {1: 1,2: 2, 3: 3}, (1,2,3)?
Гема 3. Обработка числовых данных в Python
Когда мы хотим провести какие-либо математические вычисления, обработать сведения о количестве перелетных птиц, подсчитать свои игрушки, мы оперируем с числами (складываем, вычитаем, умножаем, делим и т.п.). В Python числа представлены несколькими типами это: целые числа (int), вещественные - с дробной частью (float). Есть еще и комплексные числа (complex), но мы их рассматривать не будем, с ними работают только взрослые дяди и тети. Если возможностей базовых типов чисел не хватает. всегда можно воспользоваться числовыми расширениями с использованием модулей decimal (десятичный) или fractions (дроби). Все перечисленные числовые типы довольно легко преобразуются один в другой, а математические операции с ними интуитивно понятны и производятся по общепринятым правилам математики.
Урок 3.1. Целые числа
По умолчанию для обработки целых чисел в Python используется десятичная система исчисления, однако разрешается записывать числа в двоичном, восьмеричном и шестнадцатеричном виде
Так как мы еще не волшебники, а только учимся, то будем работать только с привычными десятичными числами С двоичным, восьмеричным и шестнадцатеричным представлением чисел вы познакомитесь немного позже, когда подрастете. А пока следует помнить, что вне зависимости от используемого формата представления чисел. Python все результаты отображает в деся тичном виде.
Целые числа могут быть как положительными, так и отрицательными. На числовой оси отрицательные числа расположены слева от пуля, а положительные справа от нуля.
Рассмотрим код программы обработки целых чисел, который приведен в листинге 3.1.
Листинг 3.1.
X Редактор кода J
1 й Листинг 3.1
2 й Целое положительное число.
з int.l - 15
4 print(,int_l=‘) int_l)
б й Целое отрицательное число
7 int_2 - -2
. print('int_2=', int_2)
9
ie й Сложение целых чисел
11 г = int_l ♦ int_2
12 ргint('Сложение r=', г)
13
14 й Вычитание целых чисел
15 г int_l 1пт_2
16 print('Вычитание г=', г)
17
18 й умножение целых чисел
19 г = int.l * 2
20 print('Умножение г=', г)
22 я Деление целых чисел
23 г = int.l / 2
24 print('Деление г=', г)
В этом программном модуле переменным ini_l, in(_2 были присвоены значения положительного (15) и отрицательного (-2) целого числа, а потом выполнены различные арифметические действия. Результаты вычислений были записаны в переменную «г» и выведены на печать
Результаты работы этой протраммы можно посмотреть в интерактивном разделе книги. Для этою в главном меню нужно выбрать опцию «Тема 3», а боковой панели - «Листинг 3.1».
Ниже представлены результаты работы данной программы (рис.3,1)..
а. Показа, ь результат
Урок 3.1 Целые числа
Десятичные целые числа
int_i= IS
•nt .2 = 2
Сложение г= и
Вычитание г = 1т
умножение г = зе
Делениег- i.s
Смотрите мультфильм - учимся считать
Рис. 3.1. Результаты арифметических действий над целыми числами
Как видно из данного примера, результаты всех вычислений показаны в десятичном виде.
Эта интерактивная книга может не только выполнить программный коО, но и показать вам мультфильм - про то. как нужно правильно считать. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 3.2).
“ » Посмотреть мультфильм
Рис. 3 2. Мультфильм учимся считать
Целые числа в Python отличаются от целых чисел других языков программирования тем, что их размер ограничивается лишь доступной памятью, т.е. они поддерживают .длинную арифметику и могут быть сколь угодно большими. При этом следует помнить, что при обработке очень больших чисел приходится жертвовать скоростью их обработки.
Перенести эту программу в «Редактор кода», задайте другие значения пере менным и посмотрите, как изменятся результаты.
Урок 3.2. Вещественные числа
Веем известно, что в математике дробная часть числа отделяется от целой частью с помощью запятой. Например: «0.1», «23,4», «5,6», «78,9». Как видно из данного ghbvthf, между целой и дробной частью числа присутствуют запятая Однако в языках программирования, в том числе и в Python, для отделения целой части числа от дробной части используется не запятая, а «десятичная точка». В Python для вещественных чисел используется следующий синтаксис: сначала записывается знак числа (плюс можно не указывать), затем последовательность цифр целой части, разделительная точка и последовательность цифр дробной части. Например: «0.35», «.44», «0.0», «.0», «123.45», «-.321». Также допустима запись вещественных чисел в экспоненциальной форме. При этом для представления степени 10п используется латинская буква Е в верхнем или нижнем pet негре («е» или «Е»), затем следует необязательный знак плюс (+) или обязательный знак минус («-»), а также сам показатель степени в виде положительного целою числа или нуля Пример программы работы с вещественными числами приведен в листинге 3.2.
Листинг 3.2.
X Редактор кода /
т я Листинг 3.2
2 я Положительное вещеетаенное число
3 float.nuin. 1 = 123.45
4 print('Положительное вещественное число:', float_nu«_l)
б ж Отрицательное вещественное число
7 float_num_2 -123.45
a print('Отрицательное вещественное число:', fXoat_num_2) э
it # Отрицательное с пропущенным нулем
11 float_nuis_3 = -.45
12 print('Отрицательное с пропущенным нулем (-.45)"', float_num_3)
13
14 я 1.2345е8 в экспоненциальной ферме
fXoat_num_4 = 1.2345-г
16 print('1.2345e8 в экспоненциальной форме это:', float_nui»_4)
(И 134 тая
я 1.2345Е-4 в экспоненциальной форме float_num_5 = 1.2345Е-4
print('1.2345Е-4 в экспоненциальной форме это:', float_nun_5)
Результаты работы этом программы можно посмотреть в интерактивном разделе книги. Для зтого в главном меню нужно выбрать опцию « Гема 3», а боковой панели - «Листинг 3.2».
После выполнения этой программы будет получен следующий результат (рис. 3.3).
v X Показать результат
Урок 3.2. Вещественные числа
Числа с дробной частью
Положительное вещее i венное число: 12з.«
Отрицательное вещественное число -123.45
Отрицательное с пропущенным нулем (-.45): -е.45
1 2345е8в жспоненциальнойформе это: 123451 >:.е
1.2345Е-4 в экспоненциальной форме это: е.ееехгздз
Смотрите урок про степень чис ла
Рис. 3 3 Результаты арифметических действий над вещественными числами
Экспоненциальная форма представления вещественных чисел используется тогда, ко1да число очень большое, и очень, очень маленькое.
Эта интерактивная книга может не только выполнить программный код. но и показать вам видео урок про возведение чисел в степень. Для этого достаточно открыть вкладку «Посмотреть урок» (рис. 3.4).
* По» ь ч гр»1о урок
Рис. 3.4 Видео урок - возведение чисел в степень
Перенести эту программу в «Редактор кода», задайте другие значения переменным и посмотрите, как изменятся результаты.
Урок 3.3. Арифметические операции с вещественными числами
С вещественными числами можно выполнять следующие арифметические операции
• сложение (х + у);
• вычитание (х - у);
• умножение (х * у);
• деление (х / у);
• возведение числа х в степень у (х ** у); Пример программы, показывающей использования арифметических операций с вещественными числами, приведен в листинге 3.3.
Лисипп 3.3. * * * * * 6 * В
X Редактор кода /
» Листинг 3.3
X = 18.5
у = 2.2
print''Даны числа х=‘, х, ' у-', у'.
6 г Сложение
? z = х ♦ у print('Сложение:', Z)
9
18 ж Вычитэние
11 z = х у
12 printi'Вычитание:’, z)
13
14 ? умножение
15 Z 1 X • у
И print;'Умножение:', Z)
1Г
ia в Деление
19 z ’ х / у
29 print; 'Деление:', z)
21
22 • Возведение в степень
23 z = х «• у
24 print;'Возведение в степень:', z)
В этой программе мы создали две переменные «х» и «у», затем выполняли с этими числами различные арифметические операции, а результат сохраняли в переменной «z». Значение переменной «z» выводили на экран с использованием встроенной функции print().
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Гема 3», а боковой панели - «Листинг 3.3».
Если запустить эту программу на выполнение, то получим следующий результат (рис. 3.5).
* 'л. Показать результат
Урок 3.3. Вещественные числа
Арифметические операции
Даны числа х- ie.s у = 2.г
Сложение- и.?
Вычитание: ».з
умножение; гз.1
Деление1, I.772T2T2T27272T25
Возведение я степень: пб.алтиззтгаым
» Смотрите мультфильм - учимся считать
Рис. 3.5. Результаты арифметических действий над вещественными числами
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - про то, как нужно правильно с читать. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 3.6).
- » Посмотреть мультфильм
Рис. 3.6 Мультфильм учимся считать
Перенести эту программу в «Редактор кода», задайте другие значения переменным, измените арифметические выражения и посмотрите, как изменятся результаты.
Вещественные числа, отличаются от целых тем, что по умолчанию точность вычисления ограничивается 17 значащими цифрами. Как видно из данного примера, при делении мы
получили результат с большим количеством цифр после десятичной точки -4 7727272727272725, Если такая высокая точность не нужна, то программист может попросить Python ограничить количество цифр, которые нужно показывать после десятичной точки. Для этого используется вспоенная функция округления результатов расчетов - round(). Немного изменим нашу программу и скажем нитону, чтобы он при делении и возведении в степень показывал только два знака после десятичной точки. ')та программа приведена в листинге 3.4.
Листинг 3.4.
X Редактор кода
1 # Листинг 3_4
2 X = 10.5
3 у = 2.2
4 ргтггЦ'Даны числа х=', х. ' у='я у)
6 « Деление
z = roundцх / у), 2) print('Деление:', z)
9
1 » Возведение в степень
11 z = round((x «* у), 2)
12 print('Возведение в степень:', z)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книг и. Для ною в главном меню нужно выбрат ь опцию «Тема 3», а боковой панели - «Лисипп 3.4».
Теперь наша программа выдаст следующие результаты (рис. 3.7).
v X Показать резулотат
Урок 3.3. Вещественные числа
Округление чисел
Данычислах= 1В.5 у= 2.2
Деление: «.г?
Возведение в степень: 176.4S
Я Смотрите мультфильм про округление чисел
Рис. 3 7. Результаты округления чисел
Как видно из данного примера, полученные числа не такие длинные.
Эта интерактивная книга может не только выполнить программный код, но и показать нам мультфильм про то, как нужно округлять числа. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 3.8).
* Л Посжпретъмультфмльы
Рис 3.8. Мультфильм округление чисел
Перенести эту программу в «Редактор кода», задайте другие значения переменным, измените арифметические выражения и посмотрите, как и вменятся результаты.
Кроме функции округления результатов расчетов round() у Python есть еще несколько функций для обработки вещее 1 венных чисел:
• abs(x) - получение абсолютного значения числа,
• eval(‘x") - преобразование символьной строки в арифметическое выражение;
• int(x) - преобразование вещест венного числа в целое число;
• tloat(x) - преобразование числа или символьного значения «X» в вещественное число;
• inax(xl, х2, хЗ, ...') - нахождения «максимального» (самого большого) значения в последова гельности чисел;
* min(xl, х2, хЗ, ...’) - нахождения «минимального» (самого маленького) значения в последовательности чисел;
• sorted(xl. х2, хЗ, ...’) - сортировки последовательностей чисел (например, можно построить группу детей по росту).
Напишем программу, в которой будем использовать эти функции - листинг 3.5.
.Ihctiiiii 3.5.
X Редактор кода f
1 В Листинг 3.5
2 х = 1 .5
3 у * -16.5
ч print('Дани числа х*', х, ' у*', у)
в в Получение абсолютного значения
7 г • abs(-y)
print('Получение абсолютного значения:', z)
1в Преобразование строки в арифметическое выражение
11 z - eval;‘х - у')
12 print('Преобразование строки в выражение:', z
ix г Преобразование вещественного числа * целое
is z * int(x)
16 print!'Преобразование в целое:', z)
17
18 ; Преобразование строки е вещественное число
19 х • '25.3' z • float(x)
21 print!'Преобразование в вещественное:', z)
23 f Рост детей
2Х Maksia 1 141
25 Vova • 15(
26 Vika 14(
27 Sveta - 145
8 3 Поиск максимального значения
29 z • вах Maksie, Vova, Vika, Sveta)
38 print('Самый высокий:', z)
31
32 i Поиск минимального значения z - «nn'HaksiB Vova Vika Sveta)
зх print;'Самый маленький:', z)
36 i сортиров*а чисел list_deti (Haksiw Vova Vika Sveta)
1 print;'Строимся no росту:', sorted;iist_deti))
В пом примере мы переменным «» и «у» присвоили два числа (положительное и отрицательное). Затем с использованием функции abs() получили абсолютное значение числа, которое записано в переменную «у». После этого была создана текстовая строка «х -у» и с использованием функции eval() эту строку преобразовали в арифметическое выражение, и нашли разность между числами, которые хранятся н переменных «х» и «у».
Далее было сделано два преобразования с использованием функции int() мы из вещественного числа сделали целое число, а с использованием функции float строковую переменную «х» превратили в вещественное число.
На следующем шаге мы попросили Питон запомнить рост детей с именами: Максим. Вова, Вика и Света. А потом дали следующие команды: найти самого высокого ребенка, найти самого маленького ребенка, построить дегей по росту. Для того чтобы построить детей по росту- сначала был создан список детей (переменная list deti), а потом этот список отсортировали с использованием функции sorted!).
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 3», а боковой панели - «Листинг 3.5».
Эта программа выдала нам следующие результаты (рис. 3.9).
v \ Показать результат
Урок 3.3. Вещественные числа
Функции обработки чисел
Даны чис ла х= те. 5 у = те.с
Получение абсолютного значения. 10.5
преобразование строки в выражение: 2Т. 0
Пре сбра зование в целое то
преобразование в вещественное: 25.3
Самый высокий 250
Самый маленький Т40
Строимся по росту [140,145, 248,150]
Рис. 3.9. Результаты обрабигки чисел функциями
Как видно из данного примера, самым высоким оказался Вова (рост 150), самой маленькой -Вика (140), а по росту дети должны построиться в следующем порядке: 140, 145, 148, 150 (то есть Вика, Света, Максим и Вова).
Перенести эту программу в «Редактор кода», задайте детям другие значения роста, и посмотрите, как изменятся результаты
Урок 3.4. Математические выражения
В предыдущих примерах в каждой строке программы присутствует всего одна арифметическая операция Однако Python позволяет в одной строке выполнить сразу
несколько арифметических операций, то есть можно и складывать, и вычитать, и умножать, и делить различные переменные. Такие строки называются математическими выражениями.
При создании математических выражений, в которых выполняется сразу несколько операций, нужно понимать, в какой последовательности питон будет выполнять эти операции, и как можно изменить эту последовательность, что бы получить правильный результат. Для начала познакомимся с приоритетом арифметических операций Приоритет - это порядок или очередность выполнения тех или иных действий Что касается арифметических операций, то они выполняются в следующей последовательности
• В первую очередь выполняется возведение в степень (х**у).
• Во вторую очередь делается умножение (х*у) или деление (х/у).
• В последнюю очередь выполняется сложение (х + у) и вычитание (х - у).
Если в выражении всфечаются подряд идущие операторы с одинаковым приоритетом, то по умолчанию питон обрабатывает их слева направо. Программист может изменить естественный порядок выполнения операций с помощью скобок. Если какие либо арифметические операции находятся внутри скобок, то они будут выполнены в первую очередь, а операции, находящиеся за скобками - во вторую. Когда вы будете писать программы, то, во избежание ошибок, старайтесь всегда использовать скобки, самостоятельно определяя порядок выполнения арифметических операций.
Пример программы, показывающей использование скобок в арифметических выражениях, приведен в листинге 3.6.
Листинг 3.6.
X Редактор кода
1 # Листинг 3.6
2 а • W
з b = 2G
4 с 2
5 рг1п1('Дань числа а=', а, ' Ь=', Ь, ' с=', с) 6
7 я Арифметическое выражение без скобок
d = a*b + c + a-c + b/2 + с**2 с
9 print(*Вычисление без скобок d=‘, d) те
11 # Арифметическое выражение со скобками
12 а = а < b + с + ас + о/(2 ♦ с**2 с)
1. pel nt ('Вычисление со скобками d-’, d)
В этой программе заданы значения для трех переменных «а», «Ь» и «с». Затем составлено арифметическое выражение, в котором с этими переменными выполняется сразу несколько арифметических операций. Результаты расчетов сохраняются в переменной <<d» и выводятся на печать. Здесь имеется два выражения с одними и теми же арифметическими
операциями. Они отличаются только тем, что во втором арифметическом выражении присутствуют две скобки
Результаты работы этой программы можно посмотреть в интерактивном разделе киш и. Для этого в главном меню нужно выбрать опцию « Гема 3», а боковой панели - «Листинг 3.6».
Если запустить этот программный код на выполнение, то получим следующий результат (рис. 3.10).
ч Показать результат
Урок 3.4. Математические выражения
Скобки в математических выражениях
Даны числа а = то 0= 21 с= 2
Вычисление без скобок d= ьд.а
Вычисление со скобками d= st.о
Рис. 3.10. Результаты вычислений с использованием арифметических выражений
Обратите внимание, при одних и тех же значениях переменных, и при тех же арифметических операциях с переменными мы получили совершенно разные результаты. А виной тому всего две скобки, которые изменили порядок выполнения действии
Перенести эту программу в «Редактор кода. Задайте другие значения и переменным и во втором арифметическом выражении поставьте скобки в других местах. Посмотрите, как изменятся результаты работы программы
Урок 3.5. Сравнение чисел между собой
В Python можно не только выполнять арифметические операции с числами, но и сравнивать их между собой, то есть выяснить какое число больше (меньше), или числа равны. Результатом сравнения является одно из значений - «да» или «нет», а вернее «True» (правда) или «False» (ложь)
Для сравнения чисел в Python доступно X операций, причем все они имеют одинаковый приоритет:
• х < у - Тше, если «х» меньше «у», иначе False;
• х <= у - True, если «х» меньше или равно «у», иначе False;
• х > у - Тше, если «х» больше «у», иначе False;
• х >= у -1 rue, если «х» больше или равно «у», иначе False;
• х: у - True, если «х» равно «у», иначе False;
• х != у - True, если «х» не равно «у», иначе False;
• х is у - True, если «х» и «у» это один и тот же объект, иначе False;
• х is not у - True, если «х» и «у» это не один и toi же объект, иначе False.
Для того чтобы показать, как использовать операции сравнения, напишем программу про сравнение роста Чебурашки, крокодила Гены и старухи Шапокляк.
Дзя сравнения роста наших героев зададим следующие условия:
• рост старухи Шапокляк- 160 см.;
• рост крокодила Гены - 160 см.;
• рост Чебурашки - 40 см.
Пример программы, показывающей использование операций сравнения, приведен в листинге 3.7.
I Лисипп 3.7.
Г..___________
X Редактор кода /
1 # Листинг 3.7
2 # Рост героев
з Gena = 169 # Это рост крокодила Гены
4 Cheburaska -4 и Это рост Чеоураыки Shapoklak = 169 д Это рост старухи Шапокляк
6
7 # Сравнение рост героев print('Гена и Шапокляк одного роста:’, Gena == Shapoklak)
9 ргзпТСГена и Чебурашка одного роста:', Gena == Cheburaskaj 1в print,'Гена выше Чебурашки:', Gena > Cheburaskaj
11 print('Гека ниже Чебурашки: Gena < Cheburaska)
12 print(TeHa и Шапокляк разного роста: Gena = Shapoklak!
13 print(TeHa и Чебурашка разного роста:' Gena ! = Cheburaska)
В этой программе создано три переменные: Gena, Cheburaska и Shapoklak. В эти переменные был загружен рост наших героев: крокодил Гена - 160 см., Чебурашка - 40 см. и старуха Шапокляк - 160 см. Затем в программе с использованием операторов сравнения было определено, кто одинакового роста, кто выше или ниже. Если, например, рост героев одинаков, го мы получил: результат «True». Это будет означать «Да» или «Правда». А если, например, рост героев окажется разным, то мы получим результат «False». Это будет означать «Нет» или «Ложь».
Результаты работ ы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать пинию « Гема 3», а боковой панели - «Листинг 3.7».
Если выполнить эту программу, то будет получен следующий результат (рис. 3.11).
ч Показать результат
Урок 3.5. Сравнение чисел между собой
Операции сравнения чисел
Гена и Шапокляк одного роста: True
Гена и Чебурашка одного роста: False
Гена выше Чебурашки: г rue
Гена ниже Чебурашки: False
Гена и Шапокляк разного роста: False
Гена и Чебурашка разного роста True
Смотрите мультфильм - про Чебурашку
Рис 3.11 Результаты сравнения чисел
Эта интерактивная книга может не только выполнить программный код. но и показать вам мультфильм - про Чебурашку. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 3.12).
- * Посмотреть мультфильм
Рис. 3.12. Мультфильм про Чебурашку
Перенести эту программу в «Редактор кода. Задайте другие значения пере менны и и операторам сравнения. Посмотрите, как изменятся результаты работы программы.
Операций сравнения чисел в основном используются совместно с инструкцией разветвления «if», с которой мы подробно познакомимся чуть позже.
У рок 3.6. Комбинированные операторы присваивания
Мы уже знаем оператор присваивания «=». Он используется для того, чтобы сохранить в переменной какое либо значение. Например «а=3» будет означать, что в ячейке памяти с именем «а» будет записано число 3. Но в Python есть еще и комбинированные операторы присваивания. Они отличаются от обычного оператора присваивания «=» тем, что перед сохранением значения переменной в ячейки памяти с ним выполняются некоторые арифметические операции В Pjthon можно использовать следующие комбинированные операции присваивания
* сложение и присваивание (+=);
• вычитание и присваивание (-=);
• деление и присваивание (/=);
• умножение и присваивание (♦=)•
• возведение в степень и присваивание (**=).
Программа, в которой показано использование комбинированных операций присваивания, приведена в листинге 3.8.
' Листинг 3.8.
X Редактор кода J
1 й Листинг 3.8
2 а 4
з print(1Простое присваивание (=):', а) д а += 1
5 print('Сложение и присваивание а)
б а -= 1
7 print('Вычитание и присваивание (-=)', а)
г а /« 2
9 print('Деление и присваивание (/=)', а)
1б а »= 2
11 print('Умножение и присваивание (*=)', а)
12 а **= 2
13 print('Возведение в степень и присезие ние (**=)', а)
В этой программе в переменную с именем «а» сначала положили число 4. а потом значение этой переменной меняли с использованием комбинированных операций присваивания.
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Ддя этого в главном меню нужно выбрать опцию «Гема 3», а боковой панели - «Листинг 3.8».
Если запустить эту программу на выполнение, то будет получен следующий результат (рис. 3.13).
“ Показать результат
Урок 3.6. Комбинированные операторы присваивания
Варианты комбинирс раннего присваивания
Простое присваивание (=): 4
Сложение и присваивание (*=): 5
Вьыитание и присваивание (-=) 4
Деление и присваивание (/=) 2
Умножение и присваивание (*=) а..
Возведение в степень и присваивание (••») 1В.В
Я Смотрите мультфильм про лень
Рис. 3.13. Результаты присваивания значений переменным
Комбинированные операции присваивания обычно используются в инструкциях организации циклов «Гог» для увеличения значений переменных. С этими инструкциями мы познакомимся немного позже.
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - про то, как плохо лениться. Для этого достаточно открыть вкладку «Посмотреть нт /ьтфильм» (рис. 3.14).
v Посмотреть мультфильм
Рис. 3.14. Мультфильм про лень
Перенести эту программу в «Редактор кода. Задайте другие значения переменным и комбинированным операторам присваивания. Посмотрите, как изменятся результаты работы программы.
Урок 3.7. Специальные математ ические функции в Python
Мы уже знаем, как Python позволяет делать простые арифметические действия, такие как сложение, вычитание, умножение, деление и возведение в степень. Однако в математике есть еше много других важных действий, которые используются в точных расчетах. Это, например, определение синусов и косинусов углов, взятие логарифмов, извлечение квадратного корня и т.п. Кроме того, для получения очень точных результатов расчетов, например орбит космических кораблей, нужно иметь значение числа «пи» с большим количеством знаков после десятичной точки. Для всего этого в Python есть специальный программный модуль, который называется math
Модуль math обеспечивает доступ программистам к широкому кругу математических функций и констант. Для начата давайте рассмотрим на представленные в модуле math математические константы’
• math.pi представляет значение числа «л» (мы его помним, как число 3.14);
• math.tau (читать тау) - представляет удвоенное значение числа «я» (в простых расчетах оно приблизительно равно 6.28);
• math.e - представляет значение числа «е» (в простых расчетах используется, число 2.72);
• math.inf (от англ. Infinity - бесконечность) - представляет положительную бесконечность (например, количество звезд на небе).
В модуле math, представлен набор различных математических функций: логарифмические, три1 онометрические, гиперболические и т.п. Все мы их здесь рассматривать не будем, приведем лишь короткий перечень наиболее употребительных:
• math.fsum - сумма всех членов последовательности;
• math.exp(X) экспоненциальная функция ( еХ );
• math.log 1 р(Х) - натуральный логарифм;
• math loglO(X) - десятичный логарифм;
• math.pow(X, У) - возведение в степень ( ХУ );
• math.sqrt(X) - извлечение квадратного корня из X;
• math.sin(X) - синус X (X указывается в радианах);
• math.cos(X) - косинус X (X указывается в радианах);
• math.tan(X) - тангенс X (X указывается в радианах);
• math.radians(X) - конверт ирует градусы в радианы.
Может быть, сейчас вам зги функции и нс понадобятся, но вы должны знать, что они есть А когда вы станете инженерами или учеными, вы обязательно будете их использовать при
написании своих программ. А пока рассмотрим небольшую программу, в которой используются эти математические функции (листинг 3.9).
X Редактор кода /
1 » Листинг 3 9
2 i икюорт модуля »oth
3 1 Bipod qiatti
5 » Выведем ЧИСЛО pi print!'Число pi *ath pi)
7 » Выведем тау (удвоенное значение числа pi)
Я print!'Число tau •' Bath tau)
9 t Выведем число е print!'Число е path.*)
i t Выведем бесконечность - inf
print!'Полс&нгельпая Ггсконечность:', math infl
14 в Cvteu
15 a - (1, 2, 3, 4, 5.5)
print('Суша последовательности чисел •' math, f аил га )
17 » Экспонента
print!'Экспонента Bath exp(105))
19 t Натуральный логарифм
print!'Натуральный логгр--?ы •' Hath loglp(1...5))
21 i Десятичный логарифм
22 print!’Десятичный логариЛы *' Hath Togl9(It.5))
23 г Возведение в степень
24 print!’Возведение в степень ' Bath рои(10. 2.5))
25 а Извлечение квадратного корня
print! Квадратный корень •' чатЬ sqrt(l ))
27 я Угол 36 градусов в радианах
28 z • math radians(30) я перевод градусов в радианы
29 в Синус угла 38 градусов
print!'Синус 30 град. ' nath.sinrz))
31 я Косинус угла за градусов
32 print!'Косинус 30 град. •' Bath cos(z))
33 f Тангенс угла 30 градусов
34 print!'Тангенс 39 град. •' Math tan(z))
Обратите внимание на первую строчку этой программы - import matli. В этой строке мы выполнили импорт программного модуля math. Это достаточно большой программный модуль и имеет не одну сотню строк программного кода. Так boi всего одной инструкцией import мы как бы вставили этот большой программный модуль в свою программу, и теперь можем использовать все специальные математические операции, которые там есть.
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 3», а боковой панели - «Лип иш 3.9».
Если запустить нашу про!рамму на выполнение, то будет получен следующий результат (рис. 3.15).
v \ Показать результат
Урок 3.7. Специальные математические функции
Использование математических функций
ЧИСЛО pi = 3.141592653589793
ЧИСЛО tail = 6.263185307179586
Число е= 2.718281828459O45
Положительная бесконечность «вг
Сумма последовательностичисел = is.s
Экспонента= 36315.50267424 636
Натуральный ЛОГарИфМ = 2.4423470353692043
Десятичный логарифм = 1.02118Э29906У93В
Возведение в степень = 316.22776ЬО1683’9>-
Квадратныйкорень= ю.е
Синус 30 Г рад = .49999999999 <59994
Косинус 30 I рад. = -.6660254037844367
Тангенс 30 град. = >.5773502691896257
Рис. 3.15 Результаты вычислений с исполыованием ма тематических функций
Перенести эту программу в «Редактор кода. Задайте другие значения переменны м и посмотрите, как изменятся результаты работы программы
Урок 3.8. Управляем точностью вычислений с модулем decimal
Потребность в максимальной точности расчетов требуется там, где некорректно выбранная точность может обернуться серьезными проблемами Например, финансовыми потерями клиентов банков, или в космической отрасли, когда космический корабль не сможет состыковаться с орбитальной станцией. Дело в том, что при обработке чисел с плавающей точкой можно получить не совсем верный результат. Например, если сложить три числа 0,1+0.1+0.1 должно получиться 0.3 Однако Python в 17-м знаке после запятой допустит одну неточность, он выдаст результат - 0.3U000000000000004. Минимальная ошибка в 17 знаке после запятой не всегда, но все же может повлиять па итоговый результат цепочки вычислений. Для исключения таких ошибок можно использовать модуль decimal. Он позволяет программисту задать нужную точность вычислений (количество знаков после десятичной точки), и тем самым избежать отмеченных выше неточностей. Как работать с модулем decimal показывает в листинге 3.10.
Листинг 3.10.
X Редактор кода Z
1 ft Листинг 3.19
fron decimal import Decimal
3 a * a.l
4 print ('Дано числа »=', a)
5 b а т a + a
6 print('MTor с точностью по умолчанию b=', b)
a = Decimal('6.1') b = a + a + a printf'HTor с заданной точностью b1', b)
В этом примере сначала в переменной «а» сохранили число 0,1, а потом в переменную «Ь» записали сумму из трех этих чисел и напечатали результат. Затем в туже переменную «а» записали то же число 0.1, но с использованием модуля Decimal. Здесь число 0,1 задано в виде символьной строки, а модуль decimal превратил эту с троку в число. После лого снова в переменную «Ь» записали сумму из трех этих чисел, хранящихся в переменной «а» и
напечатали результат.
Результаты работы этой iipoi раммы можно посмотреть в интерактивном разделе книги. Для этою в главном меню нужно выбрать опцию «Тема 3», а боковой панели - «Листинг ЗЛО».
Если выполнить эту программу, то получим следующий результат (рис 3.16).
s Показать результат
Урок 3.8. Точность вычислений с модулем decimal
Задаем точность вычислений
Даночислоа= м
Итог с точностью по умолчанию Ь= ).зоооооовооеооооо4
Итог с заданной точностью Ь= о.з
Рис. 3.10. Округление результатов вычисления до заданной точности
И; вышеприведенною примера видно, что при заданной точности вычислений мы исключили появление возможных ошибок. Для создания числа фиксированной точности в модуль Decimal нужно передать строку с указанием количества знаков после десятичной точки.
Перенести эту программу в «Редактор кода. Задайте другие значения переменным и посмотрите, как изменятся результаты работы программы.
Урок 3.9. Дроби и модуль fractions
Напомним, что такое дроби - это математические выражения, которые покатывают часть (или долю) от чего то. В виде дроби может быть представлена часть круга, кусочек (часть) Topia, степень наполнения стакана водой и т.п. Модуль fractions пригодится в тех случаях, когда необходимо выполнить вычисления с дробями, при этом результат будет получен то же в формате дроби. Кроме того, этот модуль обеспечивает превращение десятичных чисел и текстовых переменных в дроби. Программа, в которой для выполнения арифметических дейст вий с дробями использовал модуль Fraction, приведена в листинге 3.11
*аамааамааамааама.амааама>амаааммашааашмамааамааата«амшаммаммамшамма»а*аа«жа»а«а»а.а»а<аама«ама.ама.амааама.ама.аа«ааама«аа«а.ама.ама.аа«а.аша.ама.амааама>амааашааамааа»ааамааама.амааама.ама.амаммашмамма»амаммаааша|
Листинг 3.11.
X Редактор кода -
1 а Листинг з. 11
г from fractions import Fraction
4 ? Кусочек торта разделили на 3 пирожных
5 pirog = Fraction('l/3')
6 print('Одно пирожное это pirog, ' часть торта') тез пирожных сложной внес те
print('Сложили 3 пирожных и получили pirog » pirog г- pirog, ' торт')
и е Наполнили стакан водой на половину
12 polj>tak Fraction('1/2")
13 print('Полстакана в виде дроби:', pol.stakl
14 print(’Полстакана десятичном виде:', 1/2)
15 print('---------------------------------')
it s Гун*. дробей в виде числа с плавающей точкой
18 print('Это дроби в десятичном виде')
19 а - 1/3
20 Ь - 1/2
21 print('a=', а, 'Ь=', Ь)
22 print('Сумма дробей е виде десятичного числа* , а » Ь)
23 prirrt(’--------------------------------')
24
25 е Сунна дробей в виде дроби
26 print('Это дроби с виде дроби')
27 a Fraction(11/3')
. b Fraction('1/2')
29 print('a=', а, 'b=', Ь) print С Сумма дробей в виде дроби;', а ♦ Ь)
Какие же задания эта программа дала нашему компьютеру? В самой первой строке компьютеру дана команда импортировать модуль Fraction, в котором есть инструкции для работы с дробями. Потом дана команда взять торт, разрезать его на зри части и получить пирожное (переменная pirognoe), размер которого составляет 1/3 часть торта (Карлсон был бы доволен таким большим пирожным). А потом дана команда компьютеру проверить, если три пирожных сложить вместе, го получим ли мы снова целый торг? При этом пирожное должно быть представлено в виде дроби
Потом компьютеру была дана команда - наполнить стакан водой ровно наполовину и показать, сколько в стакане воды (в виде дроби и в виде десятичного числа).
Наконец компьютер должен сложить две дроби (1/3 и 1/2), причем сделать это сначала с числами в десятичном виде, а том с числами, представленными в виде дроби.
©Результаты работы этой прснраммы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 3», а боковой панели - «Лист ииг 3.11».
После того, как компьютер выполнить эту программу, будет получен следующий результат (рис. 3.17).
v X Показать результат
Урок 3.9. Дроби и модуль fractions
Операции с дробями
Одно пирожноезто- т/з часть торга
Сложили 3 пирожных и получили - 1 торт
Полсгакана в виде дроби 1/2
Полетакана десятичном виде: 0.5
Это дроби в десятичном виде
а= о.зззззззззззззззз Ь= о.5
Сумма дробей в виде десятичною числа- .аззззззззззззззз
Это дроби в виде дроби
а= 1/3 Ь= 1/2
Сумма дробей в виде дроби- &/е
* Смотрите урок - про дроби
Рис. 3.17. Результаты выполнения операций с дробями
Как видно из этих результатов, компьютер вполне успешно справился с поставленной задачей. Он смог выполнять вычисления с дробями, как в десятичном виде, так и в том виде, как вы привыкли видеть дроби в учебниках по математике.
Эта интерактивная книга может не только выполнить программный код. но и показать вам видео урок про дроби. Для этого достаточно открыть вкладку «Посмотреть урок» (рис. 3.18).
* Я Посмотреть урок
Рис. 3.18. Видео урок про дроби
Перенести эту программу в «Редактор кода. Задайте для дробей другие значения и повторите вычисления
Краткие итоги гемы 3
Числа в Python представлены тремя базовыми типами целые числа int, числа с плавающей точкой float. Также доступны два модуля обработки чисел с фиксированной точностью Decimal, и операций с дробями Fraction
Для записи целых чисел используется десятичная система счисления
Целые числа могуз быть сколь угодно большими. Кри пом следует помнить, что при обработке очень больших чисел приходится жертвовать скоростью их обработки.
Для записи вещественных чисел используется привычный синтаксис, например. -2.57, 0.0. .28 (ноль перед точкой можно опускать). Также допустима запись вещественных чисел н экспоненциальной форме, например. 1.2345е2 (т.е. 1.2345*102) или -1.2345Е-3 (т.е. -1.2345*10-3).
В обычных условиях точность вещественных чисел ограничивается максимум 17 значащими цифрами. Поэтому не стоит сравнивать их, доверяя точности до последнего знака.
В Python поддерживаются все известные математические операции: сложение «х + у», вычитание «х - у», умножение «х*у», деление «х/у», возведение в степень х**у.
В дополнение к базовому оператору присваивания «=» в Python применяется целый ряд комбинированных операторов присваивания, которые объединяют операцию присваивания с друюй операцией. Например, «+=», «-=», «♦=», «/=».
Дтя сравнения чисел используются операторы «<», «>», «<=», «>=», «=» (равно), «!=» (не равно).
Помимо стандартных арифметических операций имеется и ряд полезных встроенных функций для работы с числами
abs(x) - возвращает модуль числа «х»;
roundfx. п) - округляет число до n-го разряда после запятой:
tnaxlnl, п_2,.... п_п) - возвращает максимальное значение из последовательности чисел;
т1П(п_1, п_2,.... п п) - возвращает минимальное значение из последовательности чисел;
sorted(х 1, х2, хЗ,сортирует последовательность чисел.
Если встроенных функций недостаточно, можно воспользоваться расширением math стандартной библиотеки, которое обеспечивает доступ к широкому кругу математических функций и констант
Дтя случаев, когда требуется повышенная или заданная точность вычислений, в Python предусмотрены дополнительные объекты: для обработ ки чисел с фиксированной точностью Decimal, для работы с дробями - Fraction, которые явным образом хранят числитель и знаменатель рациональной дроби.
Вопросы для самоконтроля к теме 3
Какие из литералов чисел относятся к типу int: 795, 3.4, 5.0, 0.0, 123+4.1J?
Какие из литералов чисел относятся к типу float: 3.4. 15, 123^4.1]. 795?
Какое число является десятичным: 755. 0xDD5A. Ob 1101. 0о755?
Чему будет равно «А» в выражении А = 2 + 4 / 2: (4, 1,2, 3)?
Чему будет равно «А» в выражении А = (2 + 4) / 2: (3, 1, 2,4)?
Гема 4. Обработка строковых данных в Python
Дтя хранения и представления текстовой информации в Python используются строки, которые представляют собой отдельный тип данных «str». Говоря о тексте, здесь подразумевается: содержимое текстовых файлов, исходный код прогреми, отдельные фразы, слова или даже символы.
Строки (от англ, strings) - зто неизменяемые упорядоченные последовательности символов Юникода, которые используются в Python для хранения и представления текстовой информации. По умолчанию в программах используется кодировка UTF-8 - это одна из популярных и наиболее часто используемых кодировок символов.
Давайте разберемся, что такое Юникод и для чего он нужен. На самом деле компьютер ничего не знает ни про буквы, ни про числа. Он знает всего-то две цифры: 0 (ноль) и 1 (единица). Чтобы компьютер смог показать букву или цифру создатели компьютера придумали следующий способ Они создали табличку с картинками, на которых нарисованы буквы и цифры от 0 до 9, и с каждой картинкой связали номер, или код, состоящий из нулей и единиц. Вы и сами можете придумать такую табличку. Например, картинку с буквой «а» можно связать код «0000», с буквой «б» - «00(11», с буквой «в» -«0010» и так далее. Когда программист писал программу, то он говорил компьютеру, напечатай букву с номером «00(И», компьютер искал картинку с таким номером и печатал нужную картинку (у нас бы он напечатал картинку с буквой «б»).
Когда первые персональные компьютеры появились в Америке, то в такой таблице были только буквы латинского атфавита. некоторые математические символы и управляющие команды. Такая таблица получила название ASCII (Американский стандарт представления информации). В этой таблице можно было закодировать 128 символов с помощью комбинации семи нулей и единиц.
Потом компьютеры стали использовать в других странах, а там другие языки: русский, китайский, арабский индийский и много, много других. Каждый язык содержал свой набор букв, и таблицы, у которой всего 128 ячеек, не хватало для того, чтобы каждой букве присвоить свой помер.
Чтобы решить все проблемы с кодировками во всех странах, придумали Unicode — это сокращение отелов universal code (универсальный код). Идея заключалась в том, чтобы собрать все символы всех языков с их кодами водной таблице, чтобы можно было прочитать любой текст в любой стране, набранный на любом языке мира. В Юникоде можно закодировать 1 112 064 символа — букв, знаков, иероглифов, пиктограмм и других элементов письменности. Сейчас Юникод содержит примерно 150 тысяч символов, но этого уже достаточно, чтобы охватить почти всю письменность всех стран мира. И сейчас ещё миллион кодов ждет, когда для них придумают символы и добавят в таблицу. Все современные компьютеры поддерживают Юникод, поэтому сейчас мы можем спокойно открыть любые файлы с китайскими иероглифами или арабской вязыо.
Урок 4.1. Создание строк в Python
Важно помнить, что строки в Python относятся к неизменяемым последовательностям. Отдельные символы в строке располагаются в строгом порядке слева направо. Строки индексированы, отдельный символ может быть получены при помощи своего индекса (или номера). Значение индекса для первого символа строки равно нулю Добавить новый символ, изменить или удалить уже существующий символ не получится, можно только создать измененную копию строки.
Следует добавить, что строки в Python могут хранить и двоичные значения (О, I). Это используется при обработке файлов изображений, аудиофайлов и видео, Создать строку в коде программы на Python довольно просто. Достаточно заключить требуемую последовательность символов в одинарные, двойные или тройные кавычки.
Теперь напишем небольшую программу, в которой попросим компьютер рассказать сказку о золотой рыбке. Программа, которая расскажет начало сказки о золотой рыбке, приведена в листинге 4.1.
Листинг 4.1.
х Редактор кода £
1 в Листинг 4.1
2 4 Строка в одинарных кавычках str_l = 'Жил старик со своею старухой' print(str_lj
б # Строка * двойных кавычках str_2 = "У самого синего моря."
8 print(str_2)
9
те 4 Используем три двойные кавычки str_3 : """Они жили ' ветхой землянке
12 Ровно тридцать лет и три года."'"' print(srr_3)
is в Используем три апострофа
16 str_4 = '''Старик ловил неводом рыбу,
17 Старуха пряла свою пряжу.'1' print(str_4)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книг и. Дли лог о в главном меню нужно выбрал ь опцию «Тема 4», а боковой панели - «Листинг 4.1».
Если выполнит ь данную прог рамму, го она выдаст следующий текст (рис. 4.1):
~ Q. Пона ит» результат
Урок 4.1. Создание строк в
Python
Варианты создания строковых переменных
Жил < тарик со < воею < тарухой
У самого синего моря.
Они жили в ее псои землянке
Ровно тридцать лет и три года.
Старик ловил неводом рыбу.
Старуха пряла свою пряжу
» Смот рите мультфильм - "Сказка о золотой рыбке'
Рис. 4.1. Варианты создания строковых переменных
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - про рыбака и рыбку. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 4.2).
- » Посмотреть мультфильм
Рис. 4 2. Мультфильм - «Сказка о рыбаке и рыбке»
Использование для создания строк сразу нескольких видов кавычек (одинарных, двойных, тройных) дает возможность вставлять в текст с одним типом кавычек, другой текст, заключенный в кавычки иного типа.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте для символьных переменных другие значения и снова запустите программу на выполнение.
Урок 4.2. Доступ к символам строки по индексу и срезы строк
Как говорилось в предыдущей геме, строки в Python представляют собой неизменяемые упорядоченные последовательности символов Юникода. II хо1я изменить строку нельзя, доступ к ее отдельным символам можно получить по индексу (номеру) символа. Для этого нужно указать в квадратных скобках после имени строки порядковый номер символа, не забывая, что нумерация символов в строке начинается с нуля. В отличие от многих других языков программирования в Python доступ к символам строки возможен также и по отрицательным индексам. В >том случае можно считать, что отсчет ведется с конца cipoKii и начинается с -1. Кроме того, в Python для строк (и других упорядоченных последовательностей) доступна операция извлечения среза, которая позволяет извлекать целые диапазоны символов, не прибегая при этом к специальным методам или встроенным функциям.
А теперь напишем программу, которая расскажет фра1 мент поэмы А.С.Пушкина «Руслан и Людмила», и извлечет из этого текста некоторые символы и слова. Программный модуль, демонстрирующий доступ к символам строк из этой поэму, приведен в листинге 4.2.
Листинг 4.2.
Редактор кода <'
1 ж Листинг 4.2
2 ж Формируем строку
3 str.l = ’"У лукоморья дуб зеленый;
4 Златая цель на дубе том:
5 И днём и ночью кот учёный
6 Всё ходит по цепи кругом;1 *•
a print(’----Исходная строка----’)
9 print(str.l)
ie prlntC------------------------’)
12 ж 1-й символ строки (нумерация начинается с нуля)
13 pr1nt(’Первый символ строки str_l[e]) 14
is ж Последний символ строки(длина строки минус один).
16 print(’Последний символ строки str_l(len(str_l)-l])
1в ж Можно использовать отрицательные индексы, тогда
1э ж нумерация будет идти с конца и начинаться с -1 м pHnt(’Предпоследний символ строки str_lf-2])
21 print(’------------------------’)
23 ж Выводим первые два слова
4 print(’Первые два слова - str_l[e:ll] str.lfe:11]) 25 ж Можно и так
25 pHnt(1Первые два слова - 5tr_i(:ii] str_l[ill])
2? print------------—
29 ж Выводим последнее слово
pHnt(’Последнее слово - str_l[-7:-l] »>’, str_ir~7:-ll)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Гема 4», а боковой панели - «Листинг 4.2».
После выполнения этой программы получим следующий результат (рис. 4.3).
« 1 < Показать результат
Урок 4 2 Доступ к символам строки по индексу и срезам
Варианты поиска симьол<-и в строках
— Исходная строка—
у лукоморья дуб зеленый-
Златая цепь на дубе том:
И днем и ночью кот ученый
Все ходю по цели кругом
Первый символ строки -» У
Последний символ строки
Предпоследним символ строки + и
Первые два слова - str.lTOTl] » У лукоморья
Первые два слова - str_l(:l 1] •» У лукоморья
Последнее слово - str_l(-7:-l] » кругом
* Смотрите мультфильм- "У лукоморья дуб зеленый"
Рис 4.3. Результаты обработки строковых переменных
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - но мотивам поэму «Руслан и Людмила». Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 4.4).
* * Посмотреть иуамфимы
Рис 4.4 Мультфильм - по мотмамт поэмы А.С.Пушкина «Руслан и Людмила»
Перенести эту программу в «Редактор кода. выполните ее и посмотрите на результат Задайте для символьной переменной другое значение, задаете поиск других символов или слов и снова запустите программе на выполнение.
Урик 4.3. Арифметические операторы для обработки ci рок
Не смотра на то, что строки это набор символов, с ними можно выполнять некоторые арифметические операции. Например, с использованием оператора сложения «+» можно складывать, а вернее объединять несколько строк в одну. Соответственно комбинированный оператор «+=» добавляет новую строку к текущей строке. Еще одним арифметическим оператором, который применим к строкам, является оператор умножения «*», который обеспечивает многократное повторение текущей строки. Для этого можно использовать и соответствующий комбинированный оператор «*=».
Вспомним детскую песенку про кузнечика.
В граве сидел кузнечик, В т раве сидел кузнечик, Совсем как огуречик, Зелененький он был. Представьте себе, 11редставьте себе. Совсем как огуречик. Представьте себе, Представьте себе. Зелененький он был.
В этой песенки некоторые строчки повторяются несколько раз. Значит, их можно сохранить в переменных, а потом складывать их или умножать. Напишем программу, в которой компьютер соберет из нескольких текстовых переменных эту песенку и выдаст ее на печать. При выводе на печать будет использована одну хитрость. Ведь нам нужно каждую строчку песенки выводить с новой строки, и для этого в начале каждой символьной строки добавлено два управляющих символа «\п». Эти символы функция print() понимает, как команду - выводить текст с новой строки. Программный модуль, который демонстрирует арифметические операции со строками, приведен в листинге 4.3.
Листинг 4.3
Редактор кода
1 # Листинг 4.3
2 ft Формируем строки
str_l = '\п В траве сидел кузнечик,'
4 str_2 = '\п Совсем как огуречик, 1
s str_3 = ’\п Зелененький он был.'
6 str_4 = '\п Представьте себе,' 7
. # Сложение строк song = str_l * 2
10 song += str_2
ii song += str_3 song = song ♦ str_4
1 song ~ song + str_4
14 song += str_2
15 song song + str_4 song = song + str_4
17 song += Str_3
it print(song;
19 # Умножение строк
2G printC'-' * 30)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этою в главном меню нужно выбрать опцию «Тема 4», а боковой панели - «Листинг 4.3».
Если запустить этот программный код на выполнение, то компьютер выполнит со строками заданные арифметические операции и выдаст следующий ретулыат (рис. 4.5).
* г\ Показать результат
Урок 4.3. Арифметические операторы для обработки строк
Сложение и умножение строк
В траве сидел кузнечик, В т past сидел кузнечик. Совсем какогуречик. Зелененький он был. Представьте себе. Представьте себе, Совсем как огуречик. Представьте себе. Представьте себе, Зелененький он был,
Рис. 4 5. Арифметические операции со строковыми переменными
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм - песенку про кузнечика. Дзя этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 4.6).
Рис 4.6. Мультфильм песенка «В траве сидел кутнечик»
Посмотрите, действительно всего из четырех текстовых переменных получилась наша песенка.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте символьным переменным другие значения, соберите из них песенку или стишок и снова запустите программу на выполнение.
У Python есть еще достаточно много специальных функций для обработки символьных неременных:
• изменение per не гра в символах строки;
• поиск фрагментов текста вороке;
* выравнивание элементов строки;
• удаление пробелов и части строки;
• разбиение строки на фрагменты;
• анализ наличия или отсутствия определенных символов в строке;
• смена кодировки символов в сiроке;
• функции для определения длины строки и положения заданных символов в строке.
Так как мы еще не волшебники, а только учимся программировать на Python, то этот набор функций пока рассматривать не будем Вы с ними можете познакомиться в других книжках, когда немного подрастете.
Краткие итоги гемы 4
Строки используются в PyThon для хранения и представления текстовой информации и представляют собой неизменяемые упорядоченные последовательности символов Юникода. По умолчанию в программах используется кодировка UTF-8.
Чтобы создать строку, достаточно заключить последовательность символов в одинарные, двойные или тройные кавычки. При этом допускается использование кавычек одного типа вну1ри строки, заключенной в кавычки другого типа.
Если строка в программном коде имеет большое количество символов, то ее можно разбить на несколько строк. Сделать это можно с использованием тройных кавычек
Доступ к отдельным символам строки можно получить при помощи их индексов. Для этого в квадратных скобках после имени или литерала строки нужно указать порядковый номер символа в с троке, не забывая, что нумерация символов в строке начинается с нуля. Более того, доступ к символам строки возможен также и по отрицательным индексам. В этом случае отсчет ведется с конца строки и начинается с -1
Также для строк доступна операция извлечения не только отдельных символов, но и группы символов из заданного диапазона без использования встроенных функций.
Для манипулирования строками можно использовать арифметические операции: «+» и «+=» для объединения ctpoK, «*» и «*=» для получения повторяющейся копии строки.
Вопросы для самоконтроля к теме 4
Какие из представленных литералов относятся к типу «str»: '3.4', 5 0,432?
Какая кодировка используется в Python по умолчанию: UTF-8. UTF-16. UTF-32, ASCII?
Как правильно использовать кавычки внутри строки? Варианты.
• рппЦ'Что делает функция "print" в Python’);
• рппЦ'Что делает функция 'print' в Python');
• рппЦ"Что делает функция "print" в Python");
• рппЦ"Что делает функция "print* в Python").
Гема 5. Списки в Python
Урок 5.1. Что такое списки
Список (от англ, list) - это изменяемая упорядоченная коллекция объектов произвольного типа Сами объекты называются элементами списка, а доступ к ним может быть получен при помощи целочисленного индекса или среза (то есть по номеру элемента в списке). Списки по своей сути - это аналоги массивов, которые используются в других ягьгках программирования. Почему же разработчики Python вместо термина «массив» стали использовать термин «список». Дело в том, что списки, хоть это и аналог массивов, имеют важно принципиальное отличие. Массивы могут содержать элементы только оного типа, например, только числа или только строки. Массивом могут быть, например 33 богатыря. Богатырей много, каждый имеет свое имя (или номер), и никого, кроме богатырей в этом массиве нет (рис. 5.1).
Рис 5.1. Аналог массива из однотипных элементов 33 богатыря
Списки же в качестве элементов содержат объекты. А в объектах, как мы уже знаем, могут содержаться и числа, и строки, и даже другие объекты. Поэтому списки являются более универсальным средством обработки данных, чем массивы. В один список можно вкладывать другие списки, таким образом, на основе списков можно формировать одномерные, двумерные, трехмерные массивы, и вообще массивы данных любой вложенности. Списком может быть, например, ваш портфель. Ведь в портфеле может находиться много рагных предметов; пенал, линейка, транспортир, тетради, карандаши, кисти, краски (рис. 5.2).
Рис. 5.2. Аналог списка - портфель с надиром разных предметов
При этом пенал, который лежит в портфеле, тоже можно представить как список, потому что в нем могут лежать карандаши, резинки, кисти и другие предметы.
Как и строки, списки в языке Python относятся к упорядоченным последовательностям. Однако в отличие от строк, списки являются изменяемыми объектами и могут содержать значения любых типов уже известные нам числа и строки, сами списки, а также объекты любого другого тина данных, При этом изменяться списки могут непосредственно без всяких дополнительных манипуляций и фокусов (ведь всегда же можно изменить содержание портфеля). Сделать это можно как при помощи операций присваивания по индексам и срезам, гак и при помощи методов или специальной инструкции удаления «del». По сути, списки являются самым гибким типом упорядоченных коллекций в Python, реализуя практически все необходимое для создания и обработки структур данных любой степени сложности.
Урок 5.2. Как в Python создаются списки
Списки в Python создаются при помощи квадратных скобок, внутри которых находятся элементы списка, перечисляемые через запятую. В случае необходимости последний элемент списка можно также завергпить запятой. Это никак не повлияет на количество элементов списка, а значит и на его длину.
Давайте вспомнить мультфильм про козленка, который считал до десяти. Это замечательный пример списка из десяти элементов. Вог список из десяти животных, которые поместились на пароме:
Один —- это я;
два - это Теленок:
три — это Кирова;
четыре — это Бык;
пять —это Конь;
шесть — это Свинья;
семь — это Кот;
восемь — это Пес:
девять — это Баран;
десять — это капитан Гусь
Напишем программу, в которой сформируем список пассажиров парома и выведем этот список на печать. Код этой программы приведен в листинге 5.1.
Листинг 5.1
Редактор кода •*
1 в Листинг 5.1
2 в Создаем список пассажиров парома list_pass = ["Козленок", "Теленок",
4 "Корова", "Бык", "Конь",
"Свинья”, "Кот", "Пес", "Баран", "Гусь"]
7 print('Список пассажиров паоома.') print('Пассажир Ж1 - ', Hst_pass[b])
9 print('Пассажир ш - ', list_pass[i]) 1в print('Пассажир »з - ', list_pass[2])
11 print('Пассажир *4 - ', list_pass[3]) 12 print('Пассажир W5 - ', Ust_pass[4])
13 print('Пассажир *6 - ', list_pass[5])
14 print('Пассажир №7 - ', list_passre])
15 print('Пассажир Ж8 - ', list_pass[7])
16 print('Пассажир *9 - ', list_pass[8]) print('Пассажир №16 - ', list_pass[9])
В этой программе создан список пассажиров (переменная list_pesa). При этом Python каждому пассажиру сам присвоил номер (его называют индекс). С использованием встроенной функции pnnt() список пассажиров был выведен на печать. Для печати сведений о пассажире эта функция использовала его номер, который указан в квадратных скобках. Здесь нужно обратить внимание на одну важную особенность, нумерация пассажиров начинается не с единицы, как мы привыкли, а с нуля. Поэтому пассажир №1 имеет значение индекса - «О», а пассажир №10 имеет индекс «9».
Резу.1ыа1ы работы этой программы можно посмшрегь в интерактивном разделе киш и. Для этою в главном меню нужно выбраю опцию «Тема 5», а боковой напели - «Листинг 5.1».
Если выполнить этот программный код, то мы получим следующий результат (рис. 5.3.).
\ Показать результат
Урок 5.2. Как в Python создаются списки
Создание списка с использованием скобок (]
Список пассажиров парома.
Пассажир №1 - Козленок
Пассажир №2 - Теленок
Пассажир №3 • Корова
Пассажир №4 - Бык
Пассажир №5 - Конь
Пассажир №6 - Свинья
Пассажир №7 - Кот
Пассажир №8 * Пес
Пассажир №9 Баран
Пассажир №10 - Гусь
jfe Смотрите мультфильм про козленка, который умел считать
Рис. 5.3. Результаты работы программы создания списков
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про кузнечика, который умел считать. Для этого достаточно открыть вкладку «Насмотреть мультфильм» (рис. 5.4).
* * Посмотреть мультфильм
Рис. 5.4. Мультфильм про козленка, который умел считать»
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Создайте список с другими пассажирами и снова запустите программу на выполнение.
Урок 5.3. Как списки хранятся в памяти компьютера
Давайте посмотрим, как питону удается в один список поместить совершенно разные объекты: и числа, и строки, и другие списки, и кортежи, и словари Для того, чтобы показать такие фантастические возможности списков напишем программу, текст которой приведен в листинге 5.2.
Листинг 5.2.
"Х Редактор кода /
1 « Листинг 5.2
2 а Простой список из разных объектов lTst_l • [15, "Иванов", None, 33.5, True]
4 printf'Элементы списка ->•, 5
6 я Список с вложенньни списками
7 list_2 = [[1, 2, 3], ['А*, 'В*, 'С']. [7. 9']
8 print('Списки внутри списка ->’, list_2) 9
18 4 Список из разных вложенных объектов
lx lT«t_3 - [{'1': 'start', '2': ['stop', [4, 5]]}, В.З]
12 print('B списке разные объекты ->', Hst_3)
Здесь список list ! состоит из разных одиночных объектов; целое число, строка, значение «пусто», вещественное число, логическая константа. Список hst_2 имеет ipn других вложенных списка, а список list 3 имеет два вложенных словаря, причем второй словарь имеет другие вложенные списки. Конечно, на практике такие сложные конструкции создавать не стоит, питон то разберется где что лежит, и что откуда брать, но вот сам программист может запутаться. В этом примере просто показаны безграничные возможности языка программирования Python.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этою в главном меню нужно выбрат ь опцию «Тема 5», а боковой панели - «Листинг 5.2».
Если запустить этот программный код, то будет получен следующий результат (рис. 5.5).
< Показать результат
Урок 5.3. Как списки хранятся в памяти компьютера
Хранение в списках разных объектов
Элементы списка > (15 Иванов , None, 33.5, True]
Списки внутри списка -> [[1,2,3]. ('А'. 'В', ’С], [7,8,9]]
В списке разные объекты -> [('Г: start'. '2': ['stop'. [4,5]]}. 0.3)
Смотрите мультфильм, как работает мозг и память
Рис 5.5. Резулыаты работы программы создания различных списков
Эта интерактивная книга может не только выполнить программный код, но и показать вам познавательный мультфильм про то. как работает маш мозг и память. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 5.6).
А Посмотреть мультфильм
Рис. 5.6 Мультфильм про то, как работает наш мозг н память
Как видно из данного примера, внутри списков разрешаемся использовать объекты любого типа, создавая при этом любые их комбинации и уровни вложенности А теперь посмотрим, как список list ! будет размещен в памят и компьютера (рис.5.7).
Рис. 5.7. Размещение списка в памяги компыозера
Как видно из данного рисунка, после инструкции присваивания по адресу, который мы условно назвали adr:List_l, был создан объект. По в этом объекте не хранятся сами данные, там хранится пять ссылок на другие объекты с условными именами (или индексами): idO, idl, id2, id3, id4. Эти объекты расположились в других ячейках памяги с условными адресами adnitlO. adnidl. adr:id2. adr:id3, adr:id4 И уже в этих ячейках записаны значения данных разных типов. Таким образом, уникальность списков заключается в том, что через единственный идентификатор можно получить доступ к совершенно разным типам данных, просто указав значения индекса нужного элемента.
Если теперь этому же списку присвоить новый набор данных, например listl = [0.03,‘Петров’], то будет создан совершенно новый объект по другому адресу, а старые данные Python просто почистит (рис. 5.8).
Рис 5.8. Обновление списка в памяги компьютера
Как видно из данного рисунка, переменная list ! просто получила ссылку на новый объект и по новому адресу, а старые объекты Python просто удалит и освободит 01 них память.
Перенести эту программу в «Редактор кооа, выполните ее и посмотрите на результат. Создайте списки с другими значениями и снова запустите программу на выполнение.
Урок 5.4. Доступ к элементам списков по индексу и через срезы
Доступ к элемен там списка реализован гак же. как и для с трок через индексы элементов или через срезы. Вернемся к нашему умному козленку и списку пассажиров парома, попробуем разными способами вывести на печать сведения об отдельных пассажирах. Пример такой программы приведен к листинге 5.3.
Листинг 5.3.
Редактор кода '
я Листинг 5.3
* Создаем список пассажиров паром list_pass • ["Козленок", "Теленок", "Корова1
Ъаран
» Первый элемент списка (нумерация начинается с нуля) printf'Первый элемент списка г . индексу в') printf'Пассажир IP1 ->', list_pass(e]) printf'-' * 30'
12 я Второй элемент списка (нумерация начинается с нуля':
13 printf'Второй элемен, списка по индексу 1*)
14 printf ‘Пассажир Р2 ->' tist_pass[l])
1$ printf'-' » Зв)
17 р Последний элемент списка (по отрицательному индексу -1)
18 printf'Последний элемент списка по индексу -1')
19 print С Пассажир Ж] з ->', t.ist_pass[-l])
28 prietf'-' • Зв)
22 * предпоследний элемент списка (по отрицательному индексу -2)
23 printf'Предпоследний элемент списка по индексу -2')
24 printf'Пассажир Ж9 -> list_pas«[ 2])
25 printf'-' * Зв)
27 । Элемент списка из среза (индексы 2-4)
28 printf'Пассажиры по индексу 2-4')
29 printf'Пассажир РЗ и И >', list_pass[2:4])
Какие же инструкции были использованы в этой программе? Сначала компьютеру дано указание создать список из десяти пассажиров - list_passagir. Затем с помощью указания индекса (номера пассажира) дана команда вывести на печать сведения о первых двух пассажирах №1 и №2 (помним, что индексы у них «О» и «1»), После этого была команда напечатать сведения о последних двух пассажирах №10 и №9 (через значения отрицательных индексов «-1» и «-2»). И наконец, была написана команда - напечатать сведения о пассажирах, которые находятся внутри списка, используя срезы. Срез задается двумя индексами, разделенными двоеточием. В этой программе в срезе указаны индексы «[2:4]», а по этим индексам будут выданы сведения о пассажирах №3 и №4.
Резулыаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 5», а боковой панели - «Листинг 5.3».
Если выполнить эту npoi рамму, то будут получены следующие результаты (рис 5.9).
v X Показать результат
Урок 5.4 Доступ к элементам списков по индексам и срезам
• том, как найти нужный элемент в списке
Первый элемент списка по индексу С
Пассажир №1 -> Коэленок
Второй элемент списка по индексу 1
Пассажир №2 Теленок
Последний элемент списка по индексу -1
Пассажир №10 е Гусь
Предпоследний элемент списка по индексу -2
Пассажир №9 -> Баран
Пассажиры по индексу 2-4
Пассажир №3 и №4 ->[’Корова’. 'Бык’]
Рис. 5.9. Результаты работы программы, демонстрирующей доступ к элементам списка
Обратите внимание, что срез [2:4] содержит 3 индекса (2, 3 и 4), а на печать была выдана информация не о грех, а только о двух пассажирах (Корова и Бык). Здесь нужно помнить
одну важную особенность Python - элемент с первым индексом всегда будет попадать в итоговый список, а элемент с последним индексом нет.
ВАЖНО: При срезе, первый индекс входит в выборку, а второй нет!
При использовании срезов следует помнить, что нумерация элементов в списках начинается с нуля, а элемент с индексом второю предела, указанного в квадратных скобках, не будет присутствовать в срезе. Например, в срезе списка my_list[0:7] будут присутствовать первые семь элементов с индексами от 0 до 6. но будет отсугсгвоват ь элемент с индексом 7.
В теме №1 этого урока было скатано, что списки могут иметь вложенные списки, а также кортежи, словари и многие другие объекты. Информацию о том. как можно извлекать нужные данные из таких сложных списков, вы сможете найти в других книжках, когда немного подрастете. Для начинающих изучать Python этот материал может оказаться сложным, но когда у вас будет опыт написания простых программ, изучение работы с вложенными списками не составит большого труда.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения индексам и снова запустите программу на выполнение.
Урок 5.5. Операторы и инструкции для обработки списков
Поскольку списки относятся к упорядоченным последовательностям (все элементы списков всегда располагаются друг за другом и не перепутываются), то для них можно использовать арифметические операторы «+», «+=», «*» и «*=» (рис. 5.10).
Рис. 5.10. Элементы списка всегда следуют друг та другом в и трот ом порядке
Кроме того, в Python есть инструкция «ш», которая позволяет найти в списке нужный объект. Если заданный объект будет найден, то операция поиска вернет значение 1 rue. а если не найден, то результат будет иметь значение - False. Программа, в которой показано применение арифметических операций к спискам, и операции поиска приведена в листинге 5.4.
Лисипп 5.4.
X Редактор кода
1 V Листинг 5.4
2 а Рсрмируем списки
3 list.l [1, 2, 3]
4 list.l • [4. 5, 6!
5 list_3 • ['Ниф-Ыиф', 'Нуф-Нуф , 'Нзф-Наф']
6 print(’Исходные списки:')
7 print('Список list.l:', list.l)
8 print('Список list_2:', list_2) print('Список list_3:', list_3)
16 printf----------------------------------------')
11 в Объединение списка1.
12 list_4 list.l list.2
1J print('Объединение списков list.l + list_2', list_4)
14
15 a Ооъединение списков
16 list.i list_3
17 print(’Объединение списков (list.l *• list_3) list.l) IS
19 в Объединяем с самим собой 3 раза
28 list.l [1, 2, 3]
21 print('Умножение списка (list_l*3) ->’, list.l * 3)
22
23 а Поиск в списке
24 pl • 'Наф Наф in list_3
25 print('Наф-наф найден pl
26 pl • 'Kapuaia' in list_3
21 print('Кнрмва найден plj
В этом примере создано три списка (list 1, list 2, list 3), потом выполнены операции сложения и умножения списков. Список list_3 представляет собой набор символьных строк с именами трех поросят В последних строчках этой программы с использованием инструкции «in» заданы команды, найти в этих списках поросят с именами «Наф-Наф» и «Кирюша».
©Результаты работы этой npoi раммы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрат ь опцию «Тема 5», а боковой панели - «Листинг 5.4».
Если выполнить данную программу, то будет получен следующий результат (рис. 5.11).
z\ Показать результат
Урок 5.5. Операторы и инструкции для обработки списков
О том. как можно обработать список
И< лодные с писки:
Список 2,3)
Список list_2:|4, S, 6]
Список йй.Зф'Ниф Ниф 'Нуф Нуф'. 'Наф-Наф']
Объединение списков bst_l •» ltsL2[l, 2,3.4,5,6]
Объединение списков (ВЯ_1 т= list_3) -41.2.3, Ниф-Ниф , Нуф-Нуф', 'Наф-иаф'1
Умножение списка (list. ГЗ) ->(1,2,3.1,2,3,1,2,31
Наф-Наф найден ->Тгие
Кирюша найден ---Falie
« Смотрите мультфильм' про список
Рис 5.11 Результаты работы про|р.1ммы обработки списков
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про список. Для этого достаточно открыть вкладку «Посмотреть м\ ттфильм» (рис. 5.12).
w Л Посмотреть мультфильм
Рис. 5.12. Мультфильм про смешариков и список
Как видно из представленных результатов, при сложении и умножении списков выполняется не сложение и умножение элементов списка друг на друга, а добавление элементов одного списка к элементам другого списка. Когда была дана команда, найти в списке list 3 поросенка с именем «Наф-Наф», то компьютер ответил «Тше», го есть поросенок с таким именем есть в списке. Когда компьютер попросили найти в списке list_3 поросенка с именем «Кирюша», то он ответил «False». Это значит, что поросенка с таким именем в списке нет.
Перенести эту программу в «Редактор кооа. выполните ее и посмотрите на результат. Задайте другие значения элементами списка и снова запустите программу на выполнение.
Урок 5.6. Функции и методы обработки списков
В Python есть много функций и методов, которые позволяют обрабатывать элементы списков. Можно добавлять или удалять элементы из уже существующих списков, считать количество элементов в списке, находить сумму значений всех элементов, сортировать списки по возрастанию или убыванию. Ведь Python позволяет работать сразу со многими элементами списков, подобно тому, как вы можете положить в портфель новые теградки. или вынуть некоторые учебники (рис. 5.13).
Рис. 5.13. Портфель зто «список»», содержимое которого можно менять
Списки можно обрабатывать с использованием функций и методов. Давайте разберемся, чем же отличаются функции от методов? Если нужно обработать список с помощью функции, то нужно написать название функции, а в скобках указать идентификатор списка, например, len(list 1). Здесь «1еп» - это название функции, a «list_ 1» идентификатор списка. Л если нужно вызвать метод списка, то нужно написать идентификатор списка, а затем после точки указать название метода, например, list_1.рор(). Здесь «list l» - идентификатор списка, а «рор()» - название метода
Мы рассмотрим только некоторые полезные функции и методы обработки списков:
.count(x) - мегод возвращает количество элементов в списке с указанным значением «х»;
.append(x) - метод добавляет элемент со значением «х» в конец списка.
.remove(x) - метод удаляет из списка первый попавшийся элемент, имеющий значение «х»;
• .popt[i]) - метод удаляет из списка элемент с указанным индексом «i», а татем возвращает его (если индекс не указан, удаляется последний элемент списка, так как по умолчанию «i» принимается равным -1);
• min() - функция возвращает элемент с минимальным значением, при этом элементы должны быть одного типа с возможностью сравнения;
• тах() - функция возвращает элемент с максимальным значением, при этом элементы должны быть одного типа с возможностью сравнения;
• sum() - функция возвращает сумму элементов списка, при этом элементы должны быть числами;
• 1еп() - функция возвращает количество элементов в списке;
• sorted() - функция сортирует элементы списка.
Как можно использовать эти методы и функции показано в программном коде листинга 5.5.
Листинг 5.5.
i___________________________________________________________и.мм...и.ми.ми.мм.ми.мм...и.мм...и.ми.мил
X Редактор кода
1 в Листинг 5.5
2 liet_l = [1, 8, 4, 3, 3] list_2 = ['Ниф-Ниф', 'Нуф-Нуф', 'Наф-Наф', 'Кирюша']
4 printt'Исходные списки:’)
5 print;'Список list_l:', list_l) print('Список list_2:'i list_2)
7 print;'------------------------------')
9 n_3 = list_l count(3)
18 print;'Сколько цифр 3 в списке Iist_l->', п_3)
11
list_l append(9)
13 print;'Добавили элемент в список list_l->', list_l)
14
15 list_2.remove;"Кирюша')
16 print;'Удалили элемент из списка lisx_2->', list_2)
17
18 print;'Минимальное значение в списке li»t_l->' min(list_l))
19 print;'Максимальное значение в списке list_l->' max(list_l;)
26 print('CyMMa значений в списке list_l->', sum[list_l))
21 print;'Количество элементов в списке list_l->', lentilst_l))
21 pt int;'Сортируем элементы в списке list_l->', sortedIlist_l))
В этом примере создано два списка: list 1 с числовыми данными, и list 2 с текстовой информацией. Потом компьютер подсчитал, сколько чисел «3» находится i списке list 1, и записал эти данные в переменную п 3. Потом компьютеру была дана команда, добавшь
число 9 в список list_l, и убрать поросенка «Кирюша» из списка hst_2. В последних пяти строчках показано несколько функций, которые обработали все элементы списка list l.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию « Гема 5», а боковой панели - «Листинг 5.5».
Если запустить эту npoi рамму на выполнение, то получим следующие результаты (рис. 5 14).
* \ показать результат
Урок 5.6. Функции и методы обработки списков
Полезные функции и методы обработки списков
Исходные списки:
Список bst Ь, 4,3,3]
Список||й_2:[Ниф-Ниф ‘Нуф-Нуф, 'Наф Наф' Кирюша‘1
Сколько цифр 3 в списке list_l-»2
Добавили элемент к список list_l->-(1. Ь 4 3,3,9]
Удалили элемент из списка list. 2-Я’Ниф-Ниф", Нуф-Нуф Наф-Наф’1
Минимальное значение в списке list_l-»l
Максимальное значение в списке list_l~»9
Сумма значении в списке iist_l->28
Количество элементов в списке list_l->6
Сортируем элементы в списке list _1-*11,3,3,4,8,9]
А Смотрите мультфильм: про просраммиста
Рис. 5 14. Ре>ультаты обработки списков функциями и методами
Как видно из результатов работы этой программы, компьютер успешно справился со своей работой!
Эта интерактивная книга может не только выполнить программный код, но и покашть вам познавательный мультфильм про профессию программиста. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис 5.15).
V А Посмотреть мультфильм
Рис. 5.15. Мультфильм про профессию программиста
А теперь попробуйте выполнить задание ПиВиты, самостоятельно создать свои списки и выполнить их обработку.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения элементами списка и снова запустите программу на выполнение.
Элементы списков можно еще обрабатывать с использованием инструкции «Гор», но с ней мы познакомимся немного позже, на уроках, связанных с изучением инструкций создания циклов.
Краткие итоги темы 5
В Python списки представляют собой упорядоченные изменяемые коллекции объектов произвольного типа с доступом по индексу.
Чтобы создать список достаточно перечислить требуемые объекты (элементы списка) через запятую внутри квадратных скобок. Доступ к элементу списка можно получить по его индексу, то есть порядковому номеру элемента в списке. При этом следует помнить, что индексация элементов в списках начинается с нуля.
Что касается срезов, то операция среза всегда возвращает новый список, состоящий из указанных в срезе элементов исходного списка. Сам же исходный список не изменяется.
Списки можно изменять: удалять или добавлять новые элементы, изменять значения уже существующих элементов.
К спискам применимы арифметические операторы («+», «+=») - для объединения списков. «*» и «*=» для дублирования элементов списков указанное число раз (умножение списков). К спискам применимы инструкции «in», которая позволяет найти в списке заданный элемент.
Списки имею! ряд методов, которые дают возможность выполнять широкий спектр операций над списками, а для их использования не нужно импортировать никаких модулей. Списки могут быть обработаны стандартными функциями Python.
Не стоит забывать, что в отличие оз строк, списки изменяемы, поэтому их методы изменяют сам список, а не возвращают его измененную копию.
Вопросы для самоконтроля к теме 5
I Какие из литералов относятся к типу список: ['Иванов', 'Петров'], 5.0, "Python"?
2. Какое значение будет присвоено переменной num в строке программы: List I = 11, 2, 3,
4, 5]; num = List lfl]:
• num-2:
• num=l;
• num=3;
• num=5;
• num=4.
3. Какое значение будет присвоено переменной num в строке программы List I =| 1,2,3,
4, 5]; num = List_l[-1]:
• пшв—5;
• num-l;
• num-3;
• num=2;
• num=4.
4. Какое значение будет присвоено переменной num в строке программы: List 1 = [1, 2, 3,
4, 5]; num = List_l[3]:
• numM:
• num=l;
• num=3;
• num=-2;
• num=5.
Гема 6. Кортежи в Python
Кортеж (от англ, tuple) это неизменяемая упорядоченная коллекция объектов произвольного типа. Сами объекты называются элементами кортежа, а доступ к ним может быть получен при помощи целочисленного индекса или среза. Кортежи во всем похожи на списки, однако в отличие от списков кортежи не могут изменяться, поэтому многие операции применимые к спискам, становятся недоступными для кортежей. Кроме того, литералы кортежей записываются не в квадратных, а в круглых скобках. Кортеж можно представить в виде закрытой банки с вареньем или компотом. Там лежит много фруктов и ягод, но банка плотно закрыта и в нее нельзя ничего, ни положить, ни достать. Хотя саму банку можно разглядывать, смотреть на ее содержимое, переставлять с полки па полку. Карлсон был бы не доволен такой банкой, он предпочел бы открытую банку, из которой можно доставать варение или другие сладости.
Да. кортежи обладают меныней гибкость и функциональностью но сравнению со списками. Но для чего же их придумали? Существует несколько причин, по которым стоит использовать кортежи вместо списков Одна из них - это обезопасить данные от случайного изменения. Если мы в ходе работы программы получили массив данных, и нужно, чтобы они случайным образом не испортились, го здесь кортежи придутся как нельзя кстати. Кроме того мы получим экономию памяги, гак как кортежи в памяти компьютера занимают меньше места, чем списки. И еще будет повышена скорость работы программы, так как операции с кортежами выполняются быстрее, чем со списками.
Урок 6.1. Создание кортежей в Python
Кортежи в Python создается при помощи круглых скобок, внутри которых через запятую перечисляются элементы кортежа. В случае необходимости последний элемент кортежа можно также завершать запятой. Это никак не повлияет на количество элементов кортежа, а значит и его длину. Однако если кортеж состоит всего из одного элемента, то запятую после него нужно указывать обязательно, иначе интерпретатор не сможет отличить кортеж от простого значения или выражения
Вспомним стихотворение Самуила Маршака «Багаж».
Дама сдавала в багаж
Диван,
Чемодан,
Саквояж.
Картину,
Корзину,
Картонку
И маленькую собачонку.
В этом стихотворении маленькая собачка по дороге потерялась и даме в городе Житомир по квитанции вместо щенка вручили огромного взъерошенного пса. Напишем программу, которая создаст и выведет на печать зто стихотворение. А чтобы щенок по дороге не потерялся, багаж представим в виде кортежа. Текст этой программы показан в листинге 6.1
Листинг 6.1. Создание кортежей
X Редактор кода 4
1 г Лктюн 6.1
2 L вСДМИру&Т строки
з str_8 'Дама сдавала в багаж'
4 str_l » 'Диьан,'
s str_2 * 'Чемодан, '
str_3 - 'Саквояж,'
str_4 'картину,'
str_5 = 'Корзину, '
str.6 = ’Картонку'
str_7 'И маленькую собачонку.'
я Создаем подтек
bagag = (str.e. str.l str.2 str_3 str_4 str_5 str_6 str_7)
print'bagagfOJ) print .bagagf1]) print nagagr2]) print(bagag[3]) printfbagagKJ) print'bagagf5]) print(bagagF6]) printfbagagF7]) print!’-' * 3^)
print('4oe3fl приехал па станцию “Дно"') print!'И гам заменили место одно*) print('Решили грузчики гак пошутит а - ') str_7 • 'Лохматого пса о ба аж посадить* print(str_7) print('-' * 3< )
а Получение оагака
print!'Но получила дама багаж') print bagagflj)
рп nt'bagagt2])
prTnt(bagagl3])
print<bagagr4j)
print(bagagl5])
print;bagagr6])
print'bagag)7])
Результаты работы этой программы можно посмотрет ь в интерактивном разделе книги. Для зтого в главном меню нужно выбрать опцию «<Тема 6» а боковой панели - «Листинг 6.1».
< Показать результат
Урок 6.1. Создание кортежей в Python
Элементы кортежа нельзя изменить!
Дама < давала в багаж
Диван.
чемодан.
Саквояж
ьар'иму.
Корзину.
кар'онку
И маленькую собачонку
Поезд приехал на станцию 'Дно'
И гам заменили месюодно
Решили грузчики так пошутить
Лохматого гса в багаж посадить
Но получила дама багаж
Диван,
Чемодан,
Саквояж
Кар।ину
Корзину,
Картонку
И маленькую собачонку.
3/ -метрите мультфильм: про багам
Рис. 6.1. Результаты работы программы создания кортежей
В этой программе сначала созданы строковые переменные. Затем из этих строковых переменных сформирован кортеж с именем «bagag». После этого компьютер напечатал все содержимое багажа. После этого, на станции «Дно» грузчики решили пошутить, и вместо щенка посадили в багаж большого и лохматого пса. То есть в строковой переменной str 7 сменили текст с «П маленькую собачонку» на «Лохматого пса в багаж посадить».
Содержимое переменной str_7 является последним элементом кортежа bagag, и в Житомир должен приехать лохматый нес Посмотрим, что же доехало до Житомира. Выполним этот программный код и получим следующий результат (рис. 6.1).
Эта интерактивная книга может не толыю выполнить программный код, но и показать вам мультфильм про даму и багаж. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 6.2).
- * Посмотреть мультфильм
Рис. 6.2. Мультфильм про даму и багаж
Из результатов работы программы видно, что вещи ламы по дороге не потерялись. Грузчики не учли, что содержимое кортежа поменять невозможно, поэтому все вещи дамы приехали в Житомир в ценности и сохранности. Как видно из данного примера, доступ к элементам кортежа можно получить, указав их индекс, то есть так же, как и для списков.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения элементам кортежа и снова запустите программу на выполнение.
У рок 6.2. Доступ к элементам кортежей по индексу и срезу
Операции доступа к элементу по индексу и получения срезов для кортежей имеют практически тот же самый синтаксис и смысл, что и для списков. Давайте вспомним сказку «Колобок», и героев, от которых колобку удалось уйти.
Я от дедушки ушел,
Я от бабушки ушел,
Я от зайца ушел, Я от волка ушел. От медведя ушел, От тебя, лиса, Не хитро уйти.
Пример программы, демонстрирующей доступ к элементам кортежа по индексу и по срезам, приведен в листинге 6.2.
Листинг 6.2. Доступ к элементам кортежа по индексу и по срезам
Редактор кода
1 । Листинг 6.2
г i Создаем корте» героев сказки Колобок
3 kolobok - ("Дед/жк»". "Ьабувка", “Заяц", "Волк”,
4 "Медведь”, "Лиса")
6 printf’-----Элементы кортекг-----------')
7 printfkolobok) printf'-' • 57)
9 а Первый элемент кортежа (нумерация начинается с нуля)
16 printf'Первый элемент кортеж по индексу В')
11 printf'Гтрои •! Koljbokie])
12 printf-' • ЗВ1
13
14 я Второй злемент кортеж >нумерация начинается с нуля!
15 printf "торой элемеиг корiежа по индексу 1')
16 printf Герой *2 ->', kolobokll])
17 printf'-' • ЗВ)
18
19 г Последний злемент кортежа (по отрицательному индексу -1)
26 printf'Последний элемент кортежа по индексу -1')
21 printfTepoa Mt kolopok'-l])
22 printf-' • ЗВ)
23
24 i Предпоследний злемент кортежа (ло отрицательному индексу
25 printf Предпоследний элемент кортежа по индексу 2')
26 printf'Герой И ->', kolobokL-2j)
27 printf-' * ЗВ)
29 я Элементы кортежа из среза (индексы 2-4)
3ft printf'Герои по индексу 2-4')
1 printf Герой Юи»-»' kolobok|2:4])
©Результат ы работы этой npoi раммы можно посмотреть в интерактивном разделе книги. Для этого в к данном меню нужно выбрат ь опцию «Тема 6», а боковой панели - «Листинг 6.2».
Какие же инструкции компьютеру передано в этой программе? Сначала опа дала указание компьютеру создать список из шести героев сказки- list kolobok. Затем с помощью указания
индекса (номера героя) дано указание - вывести на печать сведения о первых двух героях Л»1 и №2 (помним, что индексы у них «О» и «1»). После этого была команда напечатать сведения о последних двух героях N°6 и №5 (через значения отрицательных индексов «-1» и «-2»). И наконец, была написана команда - напечатать сведения о героях, которые находятся внутри списка, используя срезы. Срез задается двумя индексами, разделенными двоеточием. В этой программе в срезе указаны индексы «[2:4]», а по этим индексам будут выданы сведения о героях №3 и №4. Если выполнить эту программу, то будут получены следующие результаты (рис 6.3).
v < Показа! в резулы ат
Урок 6.2. Доступ к элементам кортежей по индексу и срезу
Поиск и выборки элементов кортежа
—Элементы кортежа--
(Дедушка’. 'Бабуина'Заяц'. 'Волк'. 'Медведь 'Лиса")
Первый элемент кортеж по индексу О
Герои №1 -> Дедушка
Второй элемент кортежа по индексу 1
Герой №2 -» Бабушка
Пос ледний элемент кортежа по индексу 1
Герои -> Лига
Предпоследний элемент кортежа по индексу 2
Герои №5 Медведь
Герои по индексу 2-4
Герои N»3 и №4 -> (’Заяц’, Волк')
* Смотрите мультфильм: Колобок
Рис. 6.3. Результаты работы программы выборки элементов ит кортежей
Обратите внимание, что срез [2:4] содержит 3 индекса (2. 3 и 4), а на печать была выдана информация не о трех, а только о двух героях (Заяц и Волк). Здесь нужно помнить одну
важную особенность Python - элемент с первым индексом всегда будет попадать в итоговый список, а элемент с последним индексом нет.
ВАЖНО: При срезе, первый индекс входит в выборку, а второй нет!
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про Колобок Для много достаточно открыть вкладку «Посмотреть мультфильм» (рис. 6.4).
- » Посмотреть мультфильм
Рис. 6.4. Мультфильм про Колобок
При использовании срезов следует помнить, что нумерация элементов в кортежах начинается с нуля, а элемент с индексом второго предела, указанного в квадратных скобках, не будет присутствовать в срезе. Например, в срезе кортежа my_tuple[0:7] будуг присутствовать первые семь элементов с индексами от 0 до 6, но будет отсутствовать элемент с индексом 7.
В геме №1 этого урока было сказано, что кортежи могут иметь вложенные кортежи, а также списка, словари и многие другие объекты. Информацию о том, как можно извлекать нужные данные из таких сложных кортежей, вы сможете найти в других книжках, когда немного порастете. Для начинающих изучать Python этот материал может оказаться сложным, но когда у вас будет опыт написания простых программ, изучение работы с вложенными кортежами не составш большого труда.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения индексам и снова запустите программу на выполнение.
Урок 6.3. Операторы и инструкции для обработки кортежей
Поскольку кортежи относятся к упорядоченным последовательностям, операторы «+», «+=», «*» и «*=» имеют для них практически гот же смысл, что и для списков и строк. Кроме тою, в Python есть инструкция «in», которая позволяет найти в кортеже нужный объект. Если нужный объект будет найден, то операция поиска вернет значение True, а если не найден, то результат будет иметь значение - False. Да, кортежи нельзя изменить, но искать, извлекать элементы их кортежей в виде копии, и выполнять различные действия с копиями элементов, конечно же можно.
Программа, в которой показано применение арифметических операций к кортежам, и операции поиска приведена в листинге 6.3.
Листинг 6.3.11 poi рамма выполнения операции с кортежами
“Ч Редактор кода
1 l Листинг 6.3
2 । йодмидуеч коргрчи
3 tuple.l • (1, 2, 3)
4 tuple.2 (4, S, 6)
5 tuple.3 • ('Храм' * 1 11 Кирпы' Степааа')
6 ! Исходные кортежи
7 print('Сформирована следующие кортежи:’)
8 р<int('tuple.!:' tuple.!)
9 print(‘tuple.2:•, tuple.2)
18 pri nt ('tuple_3:' tuple_3)
11 printt'-' • kl)
12
13 » Объединение изо течей
14 tuple.a tuple.l t tuple.2
15 print('Объединение кортежей tuple.l * list_2 tuple_4)
17 i объединение хортелеи
18 tuple.l tuple.3
19 print('Объединение кортежей (tuple.l +e tuple_3) ->', tuple.l)
21 » Ооъединяен с сайты собой 3 роза
22 tuple.l >= (1, 2, 3)
23 print('Умножение кортежей (tuple_l«3) ->', tuple.l • 3)
25 г Пойен в Hoptere
26 pl - 'Степмш' in tuple.3
27 print('Степаеа наиден->‘, pl)
28 pl « Toe.' in tuple.3
29 print(Toea найден pl)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Гема 6», а боковой панели - «Листинг 6.3».
В этом примере создано три кортежа (tuple l, tuple _2, tuple _3), потом выполнены операции сложения и умножения кортежей. Кортеж tuple _3 представляет собой набор символьных строк с именами трех поросят. В последних строчках этой ирот раммы с использованием инструкции «1п» заданы команды, найти в этих списках поросят с именами «Степаша» и «Гоша». Если выполнить данную программу, то будет получен следующий результат (рис. 6.5).
* ч Пока мт» результат
Урок 6.3. Операторы и инструкции для обработки кортежей
Арифметические операции с кортежами
Сформированы следующие кортежи.
tuple_l:(l, 2,3)
tupie_2: (4,5.6)
tuple.3: ('Хрюша'. Кирюша Степаша')
Объединение кортежей tuple. 1 ♦ list.2 » (1,2,3.4,5,6)
Объединение кортежей [tuple_l »= tuple_3) ->(1,2,3, 'Хрюша' 'Кирюша*, 'Степаша')
Умножение кортежей (tuple. 1*3) -> (1,2.3,1,2,3,1,2,3)
Степаша найден-> True
Гоша найден > False
Л Смотрите мультфильм: Кортеж - на примере автомобилей
Рис. 6.5. Результаты работы программы выполнения операций с кортежами
Как видно из представленных результатов, при сложении и умножении кортежей выполняется не сложение и умножение элементов кортежа друг на друга, а добавление элементов одного кортежа к элементам другого кортежа. Когда была дана команда, найти в кортеже tuple_3 поросенка с именем «Степаша», го компьютер ответил «True», то есть поросенок с таким именем есть в кортеже. Когда компьютер попросили найти в кортеже tuple _3 поросенка с именем «Гоша», го он ответил «False». Это значит, что поросенка с таким именем в кортеже нет.
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про автомобильный кортеж. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 6.6/.
v jg Посмотреть мультфильм
Рис 6,6, Мультфильм про автомобильный кортеж
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения элементами кортежа и снова запустите программу на выполнение.
5 рок 6.4. Функции и методы обработки кортежей
Что касается методов и функций обработки кортежей, то для них применимы общие методы упорядоченных последовательностей, которые не приводят к их изменению. К таким методам и функциям относятся:
• .count(x) - метод возвращает количество элементов с указанным значением «х» в целевом кортеже;
• 1еп() функция возвращает количество элементов в кортеже;
• ininQ - функция возвращает элемент с минимальным значением, при этом элементы должны быть одного типа;
• тах() - функция возвращает элемент с максимальным значением, при этом элементы должны быть одного типа;
• sum() - функция возвращает сумму элементов кортежа, при этом элементы должны быть числами
Пример программы, демонстрирующей методы и функции для обработки кор1ежей, приведен в листинге 6.4.
Лисипп 6.4. Методы и функции для обработки кортежей
X Редактор кода
1 » Листинг 6.4
2 4 Созреем картеж
3 tpl - (е, 1, 2 3, 4, 5, 6, Т, 8. 9. 9, 8)
4 » Ис хорные кортежи
5 print' "Сформирован следуюции кортеж:") print("tpl_l ->", tpl)
7 print("-" - : )
9 ж Ицем количество элементов со значением - э
18 n_l - tpl counti.9)
11 print("Количество чисел 9 ->", п_1)
13 ж Количество элементов в кортеже tpl._l.en lenitol)
1 print( "Количество элементов в кортеже ->", tpT._l.en)
17 в Минимальное значение элемента кортежа tpl_min mint tpl)
19 print("Минимальное значение элемента кортежа tpl_ain>
ж Максимальное значение элемента кортежа
tpl_max чах.tpl)
print("Максимальное значение элемента кортежа tpl.maxi
25 я Сукжха значений элементов кортежа
2 tpl_sun sun,tpl)
27 print("Сумма значений элементов кортежа ->", tpl_sua)
В этом примере создан кортеж tpl с числовыми данными. Потом компьютер подсчитал, сколько чисел «9» находится в кортеже, и записал эти данные в переменную п_1. Потом компькиер) была дана команда, найти минимальное и максимальное число в кортеже, а так
же подсчитать сумму всех элементов кортежа.
Результаты работы этой про)раммы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 6», а боковой панели - «Листинг 6.4».
Если запустить эту программу на выполнение, то получим следующие результаты (рис. 6.7).
\ Показан ь результат
Урок 6.4. Функции и методы обработки кортежей
обрабатываем кортежи встроенными функциями
Сформирован следующий кортеж
tpl_l > (С. 1,2.3.4,5,6,7.8,9, 9,8)
Количество чисел 9 -> 2
Количестве элементов в кортеже •> 12
Минимальное значение элемента кортежа » О
Максимальное значение элемента кортежа -» 9
Сумма значении элементов кортежа -> 62
Рис. 6.7. Результаты работы программы обработки кортежей функциями и методами
Как видно из результатов работы этой программы, компьютер успешно справился со своей работой! А теперь попробуйте выполнить задание ПиВиты, самостоятельно создать свой кортеж и выполнить его обработку.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на и результат Задайте другие значения элементами кортежа и снова запустите программу на выполнение.
Элементы кортежей можно еще обрабатывать с использованием инструкции «for», но с ней мы познакомимся немного позже, на уроках, связанных с изучением инструкции создания циклов
Урок 6.5. Отличие кортежей о г списков
На первый взгляд кортежи похожи на списки, которые ограничены в возможностях (в частности они неизменяемые). Однако неизменяемость это одно из преимуществ кортежей. Благодаря этому свойст ву можно бы ть уверены, что кортеж не будет и зменен в каком либо фра! менте программы. При выборе между списками и кортежами нужно руководствоваться следующими принципами:
• если в программе необходимо использовать упорядоченные коллекции объектов с возможностью их изменения - нужно выбирать списки;
• если в программе необходимы фиксированные коллекции объектов - следует выбирать кортежи
Следует помнить, что хотя сами кортежи и неизменяемы, они могут содержать элементы изменяемых типов (например, списки или словари), а те могут быть изменены в программе.
Второй важной особенностью кортежей является то, что за счет неизменяемости, а значит и более простой внутренней структуры, кортежи занимают в памяти меньше места, чем списки. Как следствие, операции с кортежами являются более производительными, хотя и не такими гибкими.
Пример программы, в которой показана разность в размерах занимаемой памяти списками и кортежами, приведен в листинге 6.5
• Листинг 6.5. Определение размера памяти для списка и кортежа
X Редактор кода
1 к Листинг 6.5
2 # Импортируем модуль sys
3 imoort sys
5 й Создаем и список и корте» list_l ’ [180, 200, 300, 400, 500, 600, 700, 800, 900] tpl_l = (100, 200, 300, 400, 500, 600, 700, 890, 900)
8
9 « Получаем размеры printf'Размер list_l->', sys.getsizeof(list_l))
11 pi Tnt( ’Размер tjl_l->', sys getsTzeof (tpl_l))
В этой программе был импортирован модуль sys из стандартной библиотеки Python, который позволяет получить объем памяти, занимаемой объектом.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать отшито «Тема 6», а боковой панели - «Лист нит 6.5».
Ниже представлены результаты работы этого программного модуля (рис. 6.8).
* 'А, Показать результат
Урок 6.5. Отличие кортежей от списков
Кортежи занимают меньше памяти, чем списки
Размер iist_l-> 136
Размер tp(_l-> 112
* Смотрите мультфильм про память компьютера
Рис. 6.8. Определение объема памяти для кортежей и списков
Эта интерактивная книга может не только выполнить програ ммный код, но и показать вам мультфильм про память компьютера. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 6.9).
* Я Посмотреть мультфильм
Infcurok
Что такое информация ?
Рис. 6.9. Мультфильм - про память компьютера
Из полученных результатов видно, что кортежи действительно занимают в компьютере меньше памяти. Здесь объекты состоят всею из десяти элементов. А если массив данных будет содержать миллионы элементов, то экономия памяти будет значительной.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения элементами кортежа и списка и снова запустите программу на выполнение.
Краткие итош гемы 6
В Python кортежи представляют собой упорядоченные, но неизменяемые коллекции объектов произвольного типа с доступом но индексу.
Чтобы создать кортеж достаточно перечислить требуемые объек!ы (элементы кортежа) через запятую внутри круглых скобок (не стоит забывать, что если создается кортеж с одним элементом, то после него следует ставить запятую).
После создания кортежа доступ к любому элементу кортежа можно получить по его индексу, то есть порядковому номеру элемента в кортеже (при этом следует помнить, что индексация элементов в кортежах начинается с нуля).
Из кортежей можно получать срезы, при этом срезы нельзя использовать для замены, удаления или добавления элементов в кортеж.
Дтя кортежей можно применять арифметические операюры «+», «+=», «♦» и «*=» для объединения кортежей и для многократного дублирования кортежа.
Инструкция «in» обеспечивает поиск требуемого элемента в кортеже.
Для кортежей доступны некоторые методы и функции.
Благодаря своей неизменяемости кортежи занимают в памяти меньше места, чем списки, а операции с ними являются более производительными.
Вопросы для самоконтроля к геме 6
1 Какие из литералов относятся к кортежу:
• ('start', 'stopt');
• '(3,4)';
• 5.5;
• 'Python'.
2. Задан кортеж: tpll =( 1,2, 3,4, 5, 6, 7). Какое значение будет получено по индексу [2]:
• tpl_l[2]->3;
• ф1,1[2]->2;
• tpl_l[2]->l;
• Ф1_1[2]-^4.
3. Задан кортеж’ tpl_l=(l, 2, 3,4, 5, 6, 7). Какое значение будет получено по индексу (-1]:
• tpl_l[-l]->7,
. tpl_l [-!]-> 6,
. tpl_l|-l]->5,
• tpl_l [-!]-> 4
4 Задан кортеж: tpl 1=(1,2, 3,4, 5, 6, 7). Какое значение будет получено по индексу |:2]:
. tpl_l[:2]-> (1,2);
. tpl_l[:2]-> (2, 3);
. tplJ [:2]-> (3,4);
• tp|_l[:2]-> (5, 6).
5 Задан кортеж: tpl l=(l,2, 3,4, 5, 6, 7). Какое значение будет получено по индексу [2:5]:
• tpl_l[2:5]-> (3,4, 5);
• tpl_l[2:5]-> (1,2,3);
• tpl_l[2:5]-> (2, 3,4);
• tp|_l [2:5]-> (5,6, 7).
6. Какое значение нельзя поменять в кортеже (1, [2, 3,4J):
• 1;
• 2;
• 3;
• 4.
Тема 7. Словари в Python
Словарь (от англ dictionary) - это именованная, изменяемая, неупорядоченная коллекция объекзов произвольного типа. Сами объекты называются элементами словаря, а доступ к ним может быть получен при помощи ключей словаря
Так же как и списки, словари нужны для хранения произвольных объектов. Однако если в списках и картежах для доступа к элементам используются индексы, которые определяют позицию элемента в последовательности, то в словарях это делается при помощи ключей. Ключи представляют собой неизменяемые значения (числа, строки или кортежи), которые позволяют однозначно идентифицировать элементы словаря Словарь можно представить как пещеру, в которой стоят сундучки, закрытые на замки. У каждого замка есть свой ключик, и к каждому замку подходит только один ключик. Для того чтобы посмот реть что же хранится в сундучке, нужно подобрать нужный ключик и им открыть сундучок (рис. 7.1).
Рис. 7.1. Словари в виде сундучков с ключами
Так как словари относятся к неупорядоченным последовательностям, то данные в них можно хранить как угодно, то есть в пещере сундучки можно переставлять с места на место, при этом содержимое сундучков не изменится.
Урок 7.1. Создание сдоварей
Словари представляют собой конструкцию:
{Ключ1: Значение!, Ключ?: Значение?, КлючЗ: ЗначениеЗ,...)
Это последовательность, состоящая из элементов, заключенных в фигурные скобки. Каждый элемент последовательности состоит из уникального ключа, за которым через двоеточие следует значение этого ключа Последний элемент словаря разрешается завершить запятой. Это никак не повлияет на количество элементов словаря, а значит и его длину. В словаре может быть сколько угодно элементов, то есть можно в пещеру принести сколько угодно суттдучков. В каждом сундучке может быть рашое содержимое, а может быть и одинаковое, но вот все ключики к сундучкам обязательно должны быть рашые
Представьте себе, что когда то давно пираны спрятали в пешере сундуки с сокровищами, а мы нашли эту пещеру Там было 4 сундука и мешочек с ключами. Нам интересно, что же лежит в этих сундуках, а для этого нужно подобрать ключи к замкам и открыть каждый сундук. Что бы показать, как работать со словарями на примере сундучков напишем следующую iipoi рамму (листинг 7.1).
Листинг 7.1 Демонстрация доступа к элементам словаря мере? ключи
Редактор кода /
1 s Словарь для хранения текста
2 klad {'Ключ!': 'Золото', 'Ключ2': 'Серебро', 'КлючЗ': ’Жемчуг’, 'Ключ4': 'Золото'}
4 print('Пираты спрятали клад и мешочек с ключами:*)
5 print’klad)
6 print('-' * 76)
print('A мы нашли клад и открыли сундуки:')
9 я Открываем первый сундук
те sunduk.l klad('Кл»ч1']
11 print('Открыли первый сундук ->’, sunduk_l)
12
13 я Открываем второй сундук
14 sunduk_2 kladf'Ключ2']
15 print('Открыли оторой сундук ->', sunduk_2) 1<
it Я Открываем третий сундук
18 sunduk_3 kladr'Kn«43']
19 print('Открыли третий сундук ->', sunduk_3)
20
21 я Открываем четвертый сундук
22 sunduk_4 - kladt*Ключ4’]
I print('Открыли четвертый сундук ->', sunduk_4)
В этой программе создан словарь, который назван «klad». В этом словаре четыре элемента (сундука). Каждый элемент состоит из ключа и значения. У нас ключи представлены символьными строками (Ключ!, Ключ2, КлючЗ, Ключ4). Значения каждого элемента словаря (это у нас содержимое сундуков) то же заданы в символьных строках (Золото, Серебро, Жемчуг, Золото). Для того чтобы заглянуть в сундук (узнать значение элемента словаря), нужно после имени словаря в квадратных скобках указать ключ Например, чтобы узнать значение первого элемента словаря нужно написать инструкцию - к!аб['Ключ Г].
Результаты работы этой программы можно посмотреть в интерактивном разделе киш и. Для этого в i лавном меню нужно выбрать опцию «Тема 7», а боковой панели - «Листинг 7.1».
В результате работы этой программы мы получим следующие результаты (рис. 7.2).
а, Показать результат
Урок 7.1. Создание словарей
Структура словарей
Пираты спрятали клад и мешочек с ключами;
| Ключ1 'Золото', 'Ключ2': Серебро'. КлючЗ" ’Жемчуг Ключ4'. ’Золою'}
А мы нашли клад и от крыли сундуки:
Открыли первый сундук - > Золот о
Открыли второй сундук 'Серебро
Открыли третий сундук -> Жемчуг
Открыли четвертый сундук - > Золото
а Смотрите мультфильм; про клад
Рис. 7,2. Результаты работы программы создания словаря
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про кота Леопольда и клад. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 7.3).
» Посмотреть мультфильм
Рис. 7.3. Мультфильм про клад
Перенести эту программу а «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения элементам словаря и снова запустите программу на выполнение.
Урок 7.2. Словари с разными типами данных
Итак, мы уже знаем, что такое словарь, как его создать и получить доступ к содержимому элементов словаря Теперь проверим, а действительно ли в словарь можно положить разные типы данных. Для этого вспомним сказку «Волшебник изумрудного города». Там девочка Элли, Страшила, железный Дровосек и Лев имели разные желания. Девочка Элли хотела вернуться домой, С тратила очень хотел получить мозги, Дровосек мечтал о сердце, а Лев хотел стать смелым Создадим программу, в которой могли бы исполниться желания каждого героя зтой сказки, а как она работает, вы можете посмотреть в листинге 7.2.
Листинг 7.2. Пример создания и обработки словарей
X Редактор кода Z
1 ж Герои сказки - кортеж
2 geroi = (’Элли', 'Страшила', 'Дровосек', 'Лев')
з * Желания героев список
4 g = ['Домой', 'Мозги', 'Сердце', 'Смелость']
Б print("Вот о чем мечтали герои:")
7 я Что попросила Элли
a eUi = (gereitO): g[9]}
9 print( "Желание Злли eUi)
и ж Что попросил Страшила
12 atrashila = {geroi '!]: gfl])
13 print("Желание Стравил* strabhiTa)
15 I Чтс попросил Дрияосех
16 Oiovosek = igeroif2] gr2])
it print("Желание Дровосека ->*, drovosek)
19 г Что попросил Пев
lev - lgeroiL31: gf3]J
21 print("Желание Ль.а ->' lev)
21 print("-' * 66)
24 » Гудвин выслушал желания всех героев
is » и сохранил их а словаре gudvin = .geroiГв] g.e], geroi'll gtl],
geroi[2]: g[2], geroi[3]: g[3]}
28 printfBoT такие желания исполнил волаебник Гудвин:") printigeroi[6], ‘вернулась - , gudvintgeroi I 6]]) print(geroi[I], "получил guovin[geroiI J]])
31 printigeroi[2]. "получил gudvin.geroi|2]])
32 print'geroi[3], "получил gudvintgeroiГ331)
В этой программе использовались списки, кортежи и словари. Для хранения имен героев сказки использовался кортеж, которому дали идентификатор - «geroi». В лом кортеже четыре элемента символьного типа. Для хранения желаний героев использовался список, которому дали идентификатор - «g». В этом списке тоже четыре элемента символьного типа
Каждый герой хранил свои желания в своем собственном словарике (elli, strashila drovosek, lev). Эти словари были созданы на основе коргежа имен героев и списка их желаний. Здесь в качестве ключа словаря использовались данные кортежа. Мы помним, что кортежи относятся к неизменяемым данным, и то, что ключи словаря должны быть уникальными и не изменяемыми. Поэтому именно элементы кортежа были использованы для ключей словаря. С помощью функции рппЦ) желания героев будут выводиться на печать.
Наконец, наши герои после долгих приключений дошли до изумрудною города и рассказали волшебнику Гудвину о своих желаниях, которые он сохранил в своем словаре под именем «gudvin». В этом словаре лежит 4 желания. Ключом желания является имя героя (элемент кортеж geroi), а самим желанием является элемент из списка желаний (список - g). В ной программе волшебник Гудвин, как и в сказке, исполнит желания всех наших героев, и программа сообщит нам об этом с помощью функции print().
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 7», а боковой панели - «Листинг 7.2».
Если выполнить эту про1рамму. то будет получен следующий результат (рис. 7.4).
Показать результат
Урок 7.2. Словари с разными типами данных
Словари могут хранить данные разных типов
Бот о чем мечтали герои
Желание Элли > {'Элли'; Домой')
Желание Страшилы -» {'Страшила': 'Mori и')
Желание Дровосека -»('Дровосек 'Сердце')
Желание Льва -> {'Лев'. 'Смелое гьТ
Вот такие желания исполнил волшебник Гудвин-
Элли вернулась Домой
Страшила получил Мозги
Дровог е* получил - Сердце
Лев получил Смелости
« Смотрите мультфильм: про город изумрудный (песня)
Рис. 7.4. Результаты работы программы создания словарей
Эта интерактивная книга может не только выполнить программный код, но и послушать песню из мультфильма "Волшебник изумрудного города». Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 7.5).
- * Посмотреть мультфильм
Рис. 7.5. Мультфильм прл изумрудный город
Обрат ите внимание на то. ка были выведены на печать исполнения желаний наших юроев в функции print(). Было укатано имя словаря (gudviv), и ключ элемента словаря (имя героя из кортежа geroi). Поскольку словари относятся к неупорядоченным коллекциям объектов, операторы «+», «+=», «•» и «*=» с ними не используются
Перенести эту программу в «Редактор кода, выполните ее и посмотрите ни результат Задайте другие значения элементам словаря и снова запустите программу на выполнение.
Урок 7.3. Функции и методы для обработки словарей
Давайте рассмотрим имеющиеся у словарей методы. При этом не будем забывать, что словари относятся к изменяемым коллекциям объектов, поэтому многие методы словарей изменяют их непосредственно, а нс возвращают измененную копию. Boi только некоторые методы, которые позволяют работать со словаря ни
♦ get(key[,value]) - возвращает значение по ключу key. Второй параметр «value» не обязателен Если ключа «кеу» в словаре не окажется, то метод вернет го значение, которое задано в параметре «value» (при этом значение «value» не будет добавлено в словарь). Этот параметр чаще используют в тех случаях, когда нужно вывести сообщение о том, что заданный ключ в словаре отсутствует. Если «value» не указать, а ключа «кеу» в словаре нс окажется, то данный метод вернет значение «None».
• dict.keys() - возвращает список всех ключей, содержащихся в словаре;
• dict.valuesQ возвращает список всех значений, содержащихся в словаре;
* dict.items() - возвращает список всех элементов словаря в виде кортежей с парами (key, value), где «key» это ключи словаря, a «value» - значения элементов словаря.
Теперь покажем некоторые встроенные функции, которые применимы к словарям
• len(dict) - возвращает количество элементов в словаре;
• list(dict) возвращает список ключей словаря
Ну и конечно проверим работу этих методов и функций в программе, приведенной и листинге 7.3.
Листинг 7.3. Обработка словарей с использованием методов н фу нкций
X Редактор кода у
з й Формируем словарь
2 d_.l = {1: ’Элли', 2: 'Страшила1,
3 3: 'Дровосек', 4: 'Лев'}
4 print('Исходный словарь ->', d_l)
6 print('----------Пробуем методы------------------')
print("Значение по ключу 1 d_l.get(l))
print("Значение по ключу 2 ->", d_l.get(2))
9 print("Значение по ключу 3 ->", d_l get(3, "Такого клгча нет в словаре"))
II print("Значение по ключу 4 d_l get(4, "Такого ключа нет в слоядре"))
13 ргт'пТ("Значение по ключу 5 d_l get(5, "Такого ключа нет в сльворе"))
16 й Метод получения всех ключей словаря
17 print("Bce ключи слоеаря ->" d. 1 keys())
19 я Метод получения всех значений словаря
20 print("Bce значения словаря ->", d_l.values())
31
22 я Метод получения все содержимое словаря
23 print(”Bce содержимое словаря d_l.iteMs())
24
25 print('--------- Пробуем функции---------------')
26 я Функция получения количества элементов в словаре
27 print("Количества элементов в словаре ->", len(d_l))
29 й Функция получения списка ключей словаря
" рг1п1("Список ключей словаря ->", list<d_l))
Это достаточно простая программа, в которой создан словарь с именами героев сказки «Волшебник изумрудного города» и с ключами словаря в виде чисел 1,2. 3,4.
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Ддя этого в главном меню нужно выбрать опцию «Тема 7», а боковой напели - «Листинг 7.3».
После запуска программы получим следующий результат (рис. 7.6).
v s. Показать регул ы ат
Урок 7.3. Функции и методы для обработки словарей
Python имеет встроенные функции для обработки словарей
Исходный словарь -» (1 'Элли'. 2: ’Страшила’. 3: 'Дровосек1.4: ’Лев’)
------Пробуем методы---------
Значение по ключу 1 >Элли
Значение по ключу 2 > Страшила
Значение по ключу 3 'Дровосек
Значение по ключу 4 •> Лев
Значение по ключу 5 > Такого ключа нет в словаре
Все ключи словаря >dict_keys([},2,3,4])
Все значения словаря -> dict_vatues(C3nrn' 'Страшила' 'Дровосек, Левг|)
Все содержимое словаря -> dict_items([(l, Элли’), (2, 'Страшила'). (3, 'Дровосек'). [4, 'Лев')])
------Пробуем функции--------
Количес тва элементов в словаре -> 4
Список ключей словаря ->[1,2,3,4]
Рис 7.6. Результаты работы программы обработки словарей
Как видно из этой программы все функции и методы успешно обработали словарь.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения элементам словаря и снова запустите программу на выполнение.
Краткие итог и гемы 7
В Python словари представляют собой неупорядоченные изменяемые коллекции объектов произвольною типа с доступом по ключу.
Чтобы создать словарь, нужно в фигурных скобках через запятую перечислить пары «ключ: значение», в которых ключи отделить от значений двоеточием. В случае
необходимости последний элемент словаря можно завершить запятой. Это никак не повлияет на количество элементов словаря, а значит и его длину.
Доступ к элементам словаря можно получать при помощи ключей, которые нужно указывать в квадратных скобках после имени словаря. Например, для словаря <1 = {'one': 1, 'two': 2} инструкция d['two'J вернет значение - 2.
В качестве ключей словаря могут использоваться только объекты неизменяемых типов данных, так как они должны однозначно идентифицировать элементы словаря Сюда относятся числа, строки, кортежи с неизменяемыми элементами, фиксированные множества. None, логические значения True и False, а также другие неизменяемые тины данных.
В словаре нельзя использовать один и тот же ключ для нескольких элементов. В то же время один и тот же объект вполне может быть доступен по разным ключам.
Поскольку словари являются изменяемыми коллекциями объектов, их можно изменять: удалять элементы, добавлять новые, изменять значения уже существующих элементов
Словари поддерживают ряд методов, которые дают возможность выполнять широкий спектр операций над словарями. При этом для их использования не нужно импортировать никаких модулей, так как они уже встроены в сам интерпретатор. Однако не стоит забывать, что словари изменяемы, поэтому их методы изменяют сам словарь, а не возвращают его измененную копию.
Вопросы для самоконтроля к теме 7
1 .К какому типу данных относятся словари
• неупорядоченные, изменяемые;
• упорядоченные, изменяемые;
• упорядоченные, неизменяемые;
• неупорядоченные, неизменяемые.
2 .Какие из литералов относятся к словарю:
• {1: 'один', 2: 'два'};
- 5.0;
• [3,4];
• "{'а' 1,'Ь':2}".
З.Дан словарь d = {'а': [{'Г 'Иванов'}, 'Негров'], 'Ь': 3}. Какое значение будет выдано при значении ключа d[‘b’] = ?:
• 3;
• Иванов;
• Петров;
• И
4.Дан словарь d - {'а': [(’!': 'Иванов'}, 'Петров'], 'Ь': 3}. Какое значение будет выдано при значении ключа d|a'] = ?:
• [{'Г: 'Иванов'}, 'Петров'];
• Иванов;
• Петров;
• 3.
7.Сколько элементов в словаре d - |1: 'а', 2: ['ab', {'а': 1, Ъ': 2}], (1, 2): ('а', 'Ь')}:
• 3;
• 2;
• 1;
• 5.
8.Что в этой инструкции ключ словаря d= {1 'а', 2: ['ab', {'а': 1, 'Ь': 2}], (1, 2): ('а', Ъ')}: • (1,2);
• 'а';
• 'а': I;
• Ъ': 2.
9.Что в этой инструкции является значением ключа словаря
d= {1:'а',2: ['ab', {'а': 1, Ъ': 2}], (1,2): ('а', Ъ')}:
• ('а'. Ъ');
• 1;
• 2.
Гема 8. Множества в Python
Множества (от англ, set) - это неупорядоченные коллекции уникальных и неизменяемых объектов, называемых элементами множества. Как следует из определения, множества не
являются последовательностями, как списки или кортежи, и в тоже время не являются такими хранилищами (сундучками), как словари. Это просто коллекции уникальных и неизменяемых объектов, во многом похожие на математические множества. Множества можно объединять, искать пересечение, находить разность или выполнять над ними какие-нибудь другие типичные математические операции. Множество можно представить в виде совершенно разных игрушек, которые в беспорядке лежат в коробке или просто валяются на полу.
Рис. 8.1 Множества в виде ра глинных игрушек
У множества есть одна особенность - среди элементов множества не могут быть двух и более совершенно одинаковых предметов. Каждый предмет должен хоть чем-то отличаться от других. Вы, конечно же, можете сказать Питону, что в коробку положили два совершенно одинаковых мячика, но он их будет считать - как один
Урок 8.1.Создание множеств
Для того чтобы создать множество, нужно прос то перечислить элементы множества через запятую внутри фигурных скобок. При этом последний элемент множества разрешается завершать запятой, поскольку это никак не повлияет на количество его элементов Посмотрим на рис. 8.1 с игрушками и напишем программу, в которой эти игрушки будут представлять собой два, нет, даже три множества. 11ервое множество это коробка, в которой лежат следующие игрушки: «Машинка», «Медвежонок», «Кубик», «Ракета», «Кукла» и «Петрушка». Вторым множеством будет пол, на котором находятся «Солдатик», «Солдатик», «Мячик», «Мячик», «Кубик», «Кубик» и «Бита». На полу у нас два солдатика, два кубика и два мячика, которые немного отличаются друг от друга, но мы эти предметам дадим одинаковые имена. И, наконец, третьим множеством будет тот же пол, с геми же игрушками, но каждому предмету дадим уникальное имя: «Солдатик-1», «Солдатик-2», «Мячик желтый», «Мячик красный», «Кубик большой», «Кубик маленький» и «Бита». Как создать такие множества, показано в следующей программе (листинг 8.1 ).
Лисипп- 8.1. Создание множества
Редактор кода X
1 «• Листинг 8.1
' г Множество норовка
box = {'иэшинва', Медвежонок', 'Кубик', 'Ракета',
а 'Кукла', 'Петрушка')
s г Множество - игрушки на полу 1
6 ро1_1 = ('Солдатик", 'Солдатик', 'Мячик', 'Мячик'. 'Кубик', 'Кубик', 'Бита'}
» Множество - игрушки на полу 2
ро!_2 = {'Солдатик-1', 'Солдатик-2', 'Мячик желтый', 'Мячик красный', 'Кубик большой',
11 'Кубик маленький', 'Бита'}
12 print('Множество коробка ->', box;
13 pr1nt('Множество pol_l (игрушки на полу) ро!_1)
14 print('Множество pol_2 (игрушки на полу) роТ_2)
В это программе первое множество (коробка с игрушками) множества с игрушками на полу имеют имена «pol l» и «ро1_2».
имеет имя «Ьох», а два
Результаты работы этой программы можно посмотреть в гиперактивном разделе книги. Для зтог о в главном меню нужно выбран, опцию «Тема 8», а боковой панели - «Листинг 8.1».
После выполнения этой программы получим следующий результат (рис. 8.2).
* Ц, Показать результат
Урок 8.1.Создание множеств
Игрушки в виде множества предметов
Множество коробка -> ('Машинка', 'Кукла', 'Ракета', 'Кубик', 'Петрушка', ’Медвежонок"}
Множество ро!_1 (игрушки на полу) -> ( Бита; 'Кубик', 'Мячик*, Солдатик'}
Множество pol_2 (игрушки на полу) -> {’Кубик большой", 'Мячик красный', 'Бита', "Мячик желтый', 'Солдатик-1". 'Солдатик-2', 'Кубик маленький'}
Смотрите мультфильм: про программиста
Рис. 8.2. Результаты работы программы создания множества
Посмотрим на эти результаты. В коробке лежало 6 игрушек, и программа нам сказала, что действительно там 6 игрушек и перечислила их. А вот на полу количество игрушек оказалось разным. Множество «pol l» содержит всего 4 игрушки, а множество «ро1_2» - 7 игрушек. Утверждение о том, что множество может содержать и отображать только уникальные объекты, подтвердилось. Во множестве «poll» для двух кубиков, двух мячиков и двух солдатиков Пи гон в памяти компьют ера выделил всею по одной ячейки
памяти. А вот для множества «ро!_2» выделено 7 ячеек памяти, гак как каждая игрушки имеет свое уникальное имя.
Эта интерактивная книга может не только выполнить программный кос), но и показать вам мультфильм про програ ммиста. Для этого достаточно открыть вкюдку «Посмотреть мультфильм» (рис. 8.3).
- л Посмотреть мультфильм
Рис. 8.3. Мультфильм -про программиста
Еще обратите внимание на порядок следования элементов во множествах, Питон их перемешал и расположил по-своему. В начале программы в коробку были уложены игрушки в следующем порядке: 'Машинка', 'Медвежонок', 'Кубик', 'Ракета', 'Кукла', 'Петрушка'. А потом Питон их перемешал и напечатал в другой последовательности: 'Петрушка', 'Машинка', 'Ракета', 'Медвежонок', 'Кубик', 'Кукла'. В начале урока было сказано, что множества это неупорядоченные коллекции объектов. Питон сам решает, в каком порядке расположить элементы множества в памяти компьютера. Но он хорошо помнит, где что лежит, и всегда найдет нужный элемент множества.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Перезапустите программу несколько раз и проверьте, действительно зи Питон будет менять порядок следования элементов в списке.
У рок 8.2. Операторы для сравнения множеств
Поскольку множества, как и словари, относятся к неупорядоченным коллекциям объектов, операторы «+», «+=», «*» и «*=» с ними не используются. Однако множествам доступен целый ряд других математических операторов, которые можно разбить на две группы: для сравнения множеств, для обработки множеств.
В Python используются следующие операторы сравнения: «==». «<», «>», «<=». «>=». С помощью этих операторов можно проверить, является ли набор подмножеством, надмножеством или эквивалентом другого набора Эти операторы возвращают следующие значения
• s_l = s_2 возвращает True, если множество s_l является подмножеством $ 2 и
при этом они равны;
• s_l < s_2 - возвращает True, если множество s_l является подмножеством s_2 и при этом они не равны;
• $_1 > - возвращает True, если множество s_l является надмножеством s_2 и при
этом они не равны;
• s_l >= s_2 возвращает Тше, если множество s_l является надмножеством s_2, т.е каждый элемент второго множества есть в первом множестве;
• s _l <= s 2 - возвращает True, если множество s_l является подмножеством s_2, т.е. каждый элемент первого множества есть во втором множестве.
У многих от слов множество, подмножество, надмножества в голове все смешалось и запуталось. Для того чтобы с этим разобраться напишем небольшую программу, в коюрой множеством будут дни недели (рис. 8.4).
Рис 8.4. Множесзво вагонов в виде дней недели
Как вы знаете к неделе 7 дней, все они имею разное название и неделю можно представить в виде множества. Среди дней недели выделяются два дня. которые все очень любят - это выходные (суббота и воскресенье). Выходные дни тоже можно представить в виде множества, состоящею из двух дней. Программа, в которой выполняется сравнение эти множества, приведена в листинге 8.2.
X Редактор кода
1 я Листинг 8.2
2 а Дне недели week ("Понедельник", "вторник", "Среда",
< "четверг", "Пятница",
"Суббота", "Воскресенье") в • выходные дни
vyx.l = ("Суббота", "Воскресенье") в vyx_2 » ("Воскресенье", "Суббота")
!• » Сравнение ынолесг» pr1nt('неделя и выходже равны? week vyx.l)
12 pr1 nt ('Выходные vyx.l и vyx_2 paaw? ->*, vyx.l -- vyx_2)
14 print(’Выходные являются подмножеством недели? vyx.l < week)
И print('Выходные является надмножеством недели? vyx.l > week)
IB print(’неделя является надыномеством выходных? week >= vyx.l)
В этой программе множеством является объект, который назван «nedelya», и он состоит из семи элементов. Выходными днями являются два множества: vyxl и сух2, каждое множество состоит из двух элементов, они одинаковы, но имеют разный порядок следования. А дальше следуют инструкции, которые сравнивают эти множества между собой.
©Результаты работы этой прог раммы можно иосмотреть в интерактивном разделе книги. Для этою в главном меню нужно выбрать опцию «Тема 8», а боковой панели - «Листинг 8.2».
После выполнения этой программы получим следующие резулыаты (рис. 8.5).
v , Показать результат
Урок 8.2. Операторы для сравнения множеств
Дни недели, как элементы множества
Неделя и выходные равны? •» False
Выходные vyx_l и vyx_2 равны? -» Тите
Выходные являются подмножет том недели?-» Tiue
Выходные являются надмножеством недели? о False
Неделя являются надмножеством выходных? -> Ttue
Смотрите мулы фильм, про дни недели
Рис. 8.5. Результаты работы программы сравнения множеств
Теперь давайте разберемся с этими результатами.
В первой строке проверялось, равны ли множества неделя и выходные, и получили результат «False» - не равны. Действительно, как по количеству элементов, так и по их содержанию (название дней недели) это разные множества
Во второй строке проверялось, равны ли два множества с выходными днями, и получили результат «True» - равны Порядок следования элементов в этих множествах разный, но по количеству элементов, и по их содержанию это одинаковые множества.
В третьей строке проверялось, являются выходные дни подмножеством недели, и получили результат «True» - да. Действительно, количество выходных дней меньше, чем общее количество дней недели, и каждый элемент выходного дня присутствует среди элементов дней недели. В таких случаях говорят маленькое множество «выходные дни» является подмножеством другого, большого множества, которое называется «неделя».
В четвертой строке проверяюсь, являюзея выходные дни надмножеством недели, и получили результат «False» - нет. Действительно, каждый элемент выходного дня присутствует среди элементов дней недели, но вот количество выходных дней меньше, чем общее количество дней недели В лом случае маленькое множество «выходные дни» не может быть надмножеством другого, большого множества, которое называется «неделя».
В пятой строке проверялось, является ли неделя надмножеством над выходными днями, и получили результат «True» - да. Действительно, среди элементов недели есть все элементы выходных дней, и количество дней в неделе больше, количества выходных. В этом случае большое множество «дни недели» являются надмножеством другого, маленького множества, которое называется «выходные дни».
Ну вот, с использованием этой программы мы смогли разобраться с такими понятиями, как множество, подмножество и надмножество.
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про дни недели. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 8.6).
* Посмотреть мультфильм
Рис. 8.6. Мультфильм про дни недели
Следует помнить, что математические операторы «>», «>=», «<» и «<=» не сравнивают множества по количеству элементов, а проверяют на вхождение одного множества в другое. В результате выполнения этих операция могут быть получены только два значения «True» или «False». Поэтому, например, операция {1, 2, 3} > {4, 5} вернет False, хотя элементов в первом множестве больше.
Перенести эту- программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения элементам множества и снова запустите программу на выполнение.
У рок 8.3. Операторы для обработки множеств
Обработка множеств может выполняться с использованием следующих операторов:
• объединение двух множеств - «|»;
• пересечение двух множеств - «&.»;
• разница двух множеств - «-»;
• симметричная разность двух множеств - «Л».
Объединение двух множеств вычисляется с помощью оператора в виде вертикальной черты «|». Объединенный набор будет содержать все элементы, которые присутствуют в
обоих наборах В результате операции «U=Days_l | Dayj_2> - будет получено новое множество «U». которое объединит исходные множеств, Новое множество будет включать все элементы, которые есть хотя бы в одном из множеств, участвующих в операции (рис. 8.7).
Рис. 8.7 Результаты операции объединения шух множеств
Пересечение двух множеств может быть выполнено с помощью операторе «&». Пересечение двух множеств это набор элементов, которые содержаться в обоих множествах. В результате операции «U=Day$_l & Days_2» - будет получено новое множество «Н». образуемое через пересечение множеств. Такое множество будет состоять только из тех элементов, которые есть в обоих .множествах, участвующих в операции (рис. 8.8).
Рис 8.8. Результаты операции пересечения двух множеств
Разницу двух множеств можно вычислить с помощью оператора вычитания «-». В результате операции «U-Days_l - Days_2» во множество «U» будут включены те элементы из Daysl, которых нет во множестве Days_2. Иными словами новое множество будет состоять из всех элементов, которые есть в уменьшаемом множестве (левый операнд), но нет в вычитаемом множестве (правый операнд) рис. 8.9.
Рис 8.9. Результаты операции разница двух множеств
Симметричная разность двух множеств вычисляется с помощью оператора Симметричная разность множеств удаляет те элементы, которые присутствуют в обоих множествах. В результате операции «U=Days_ 1 л Days_2» во множество «U» будут включены все элементы обоих множеств, но при этом удалены те элементы, которые есть и во множестве Days l, и во множестве Days_2 (рис.8.10).
Рис. 8.10. Результаты операции симметричная разность двух .множеств
Описанные выше действия могут быть выполнены и с использованием составных операторов’
• s_l |= s_ 2 -- обновляет множество s_l, добавляя элементы из множества s_2;
• s_l &=s_2 - обновляет множество s_l, оставляя в нем только элементы, которые есть сразу в обоих множествах, участвующих в операции;
• s_l -= s_2 обновляет множество s_l, оставляя в нем только элементы, которых нет во множестве s_2;
• s_l A=s_2 - обновляет множество s_l, оставляя в нем только элементы, которые есть в одном из множеств, участвующих в операции, но не в обоих сразу.
Программа, в которой используются эти операции над множествами с днями недели, приведена в листинге 8.3.
X Редактор кода '
I • ЛХ1ГИН: 8.3
г в Мьоле^тял с днвми недглх Daysl ("Понедельник", "Вторник", "Ср*да", "Четверг"}
4 Days? = ("Пятница", "Суббота", "Воскресенье")
5 Days3 = ("Вторник", "Среда”}
6 print('Заданы множества:')
7 print('Daysl = ', Daysl)
8 pr1nt(*Days2 =', Days2)
9 pr1nt('DayS3 DayS3)
18 pr1nt('-' • 38)
12 print* 'Объединение множеств Daysl | (Days2’) print Daysl | Days2)
14 pr1nt('-' * 38)
16 print('Пересечение множеств Daysl & (Days3’) pr1nt<Daysl & DayS3)
18 print(*-* * 3B)
2e print(•Разница множеств Daysl - Days3')
21 pr1nt Daysi - Days3,
22 print('-' • 38)
24 print('Симметричная разность двух множеств Daysl * (Days3')
25 print Daysl * Days3)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Ддя этого в главном меню нужно выбрать опцию «Гема 8», а боковой панели - «Листинг 8.3».
В результате работы этой программы были получены следующие результаты (рис. 8 11).
v \ Показать результат
Урок 8.3. Операторы для обработки множеств
Множества можно обрабатывать специальными операторами
Заданы множества:
Daysl - {' Вторник', 'Среда*, 'Четверг’, 'Понедельник'}
Days2 = {'Воскресенье", ’Суббота’, 'Пятница*}
Days3 {’Вторник’, ’Среда*}
Объединение множеств Daysl | (Days!
ГВтормик’, 'Четверг', ’Пятница', ’Среда', Понедельник', ’Суббота', ’Воскресенье*}
Пересечение множеств Daysl & (Days3
ГВторнмк’, ’Среда'}
Разница множеств Daysl - Days3
{’Четверг', ’Понедельник'}
Симметричная разность двух множеств DayslА (Days3
{'Четверг1, ’Понедельник'}
Рис. 8.11. Результаты работы программы обработки множеств
Как видно из данного примера, результатами описанных выше действий, являются новые множества.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения цементам множества и снова запустите
программу на выполнение.
Урок 8.4. Функции и методы для обработки множеств
Множества имеют встроенные .методы и функции, при использовании которых нужно учитывать, что это изменяемые объекты, поэтому многие методы меняют содержимое множеств, а не возвращают их измененную копию. Многие методы дублируют действия соответствующих математических операюров. перечисленных выше (здесь si и si это два множества):
• sl.union(s2) - метод делает тоже, что и оператор «si |s2»;
• si intersection^) -- метод делает тоже, что и оператор «si & s2»;
• si difterence(s2) метод делает тоже, что и оператор «si - s2»;
• si.symmetric_diflercnec(s2) - метод делает тоже, что и оператор «si Л s2».
Для множеств можно использовать инструкцию проверки на вхождение «in». Применительно к множествам она совершает поиск переданного объекта (левый операнд) среди элементов целевого множества (правый операнд). В случае успеха операция возвращает «True».
Помимо собственных методов к множествам применим и ряд встроенных функций, например:
• 1еп() - возвращает количество элементов во множестве;
• min() - возвращает элемент с минимальным значением, при этом элементы должны быть одного типа с возможностью сравнения;
• тах() - возвращает элемент с максимальным значением, при этом элементы должны быть одного типа с возможностью сравнения;
• sum() возвращает сумму элементов множества, при этом элементы должны быть числами.
В программах с использованием этих функций и методов можно определить: два множества одинаковы или разные, есть в разных множествах одинаковые объекты, объединить два множества с исключением повторяющихся объектов и т.п.
Создадим два новых множества и испытаем на них работу этих функций и методов. Представим себе две группы ратных объектов в первую группу соберутся объекты, которые летают, а во вторую, которые возят грузы и пассажиров. Для простоты каждая группа, то есть множество, будет состоять из 3-х объектов. Итак, в первом множестве у нас будут объекты, которые летают (птица, бабочка и самолет), и это множество будет называться «letaet». Во втором множестве будут объекты, которые возят пассажиров (поезд, корабль и самолет), это множество будет назваться - «vozit» (рис.8.12).
Рис 8.12 Обработка элементов множеств
Посмотрите внимательно на данный рисунок, где каждое множество объединено кружком. Из данного рисунка видно, что самолет попал сразу в оба множества, ведь он и летает и перевозит. Напишем программу обработки этих множеств, а также обработку множества, состоящего из чисел. Текст этой программы приведен в листинге 8.4.
Листинг 8.4. Поимео обработки множеств
X Редактор кода
Пне г ИНГ 8.4
2 letaet - {'Птица', 'Бабочка', 'Самолет'}
3 vozit {'Самолет', 'Поезд1, 'Корабль'}
4
5 printf'Задал» мноьеглва:1)
6 piintf'letaet (летает) =', letaet)
7 print('vozit (возит) • ', vozit) print('-' • 30)
le print('Объединили два множества')
11 print(letaet union", vozitj)
12 print('-' • 30)
14 print('намли обвив элемен» у двух множеств’) pr’nt(letaec intersectiomvozit))
1Б print('-' • 30)
print('M3 мьожеова "letaet" убрали общий элемент') print^letaet difference’.vozit printf-' • 30)
22 printCMa двух множества убрали общий элемент') print(letaet syniMetric.chfferenceIvozit))
24
25 print('Есть лн "Птица" в мнпжес’ве letaet->', "Птица" in letaet)
27 print('-' • 30)
29 i Создаем множество с числами
s.l {1, 22, 33. 44)
31 print('Используем функции для обработки множества s.l*)
32 print('Исходное множество ->' s.l)
зз print''Количество элементов множества ->', len.'s.l))
34 print('Минимальный элемент множества ->', ain(s.l)) print?'Мзксима"ьныи элемент множества ->', nax(s.l))
36 print('CywMa элементов множества ->', subis.I))
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрат ь опцию «Тема 8», а боковой панели - «Листинг 8.4».
Если выполнить эту программу, то получим следующий результат (рис. 8.13).
w ч Покрыть результат
Урок д.4 Функции и методы для обработки множеств
Множества можно обрабатывать функциями Python
Заданы множества.
letaet 'Летает) * рсамолет', Бабочка', 'Птица')
vozit (возит) •(’Корабль. Поезд,'Самолет 1
Объединили два множества
(Самолет' Корабль, Поезд, Бабочка'. 'Птица')
Нашли общий элемент у двух множеств
(•Самолет"
Из множества "letaet' убрали общий элемент
('Бабочка, 'Птица')
Из двух множества убрали общин элемент
('Корабль' Поезд Бабочка Птица')
Есть ли "Птица" в множестве letaet » True
Используем функции для обработки множес тва s_l
Исходное множество >(1 44,22,33}
Количество элементов множества >4
Минимальный элемент множества -»1
Максимальный элемент множества >44
Сумма элементов множества >100
Рис. 8.13 Результаты работы функций и методов обработки множеств
Как видно из этих результаюв. компьютер понял все инструкции и выполнил программу без ошибок.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значении элементам множества и снова запустите программу на выполнение.
Краткие икни гемы 8
В Python множества представляют собой неупорядоченные изменяемые коллекции объектов неизменяемого типа.
Чтобы создать литерал множества, нужно просто перечислить элементы множества через запятую внутри фигурных скобок (например, s = {'а', V, 'с'}). В случае необходимости последний элемент множества можно завершить запятой. Это никак не повлияет на количество элементов множества, а значит н ею длину. При этом следует помнить, что пустое множество при помощи фигурных скобок создать не получится, так как конструкция {} зарезервирована под пустой словарь
Что касается операторов «+», «+=», «*» и «*=», го они с множествами напрямую нс используются. Однако к множествам модно применять инструкцию проверки на вхождение «in» (проверяет наличие во множестве целевого объект).
Множествам доступен целый ряд математических операторов, которые позволяют выполнять над множествами операции объединения - «|», пересечения «&», «-».
Множества имеют ряд методов, которые дают возможность выполнять операции над множествами. При этом нужно помнить, что методы изменяют само множество, а не возвращают его измененную копию.
Вопросы для самоконтроля к разделу 2.7
1. Какое из утверждений о множествах верно:
• неупорядоченные элементы, не индексированные;
• упорядоченные элементы, не индексированные;
• неупорядоченные элементы, индексированные;
• упорядоченные элементы, индексированные.
2. Можно ли удалять элементы из множества или добавлять в него новые?
• Да;
• Нет;
• Только добавлять;
• Только удалять.
3. Какие из представленных литералов относятся к множеству:
• {3,4};
♦ {1: 'один', 2: 'два'};
• [3,4];
• "{5,6}“.
Какой оператор позволяет объединить два множества:
• оператор «|»;
• оператор «&»; /
• оператор«-»;
* оператор «Л».
5. Какой оператор позволяет найти пересечение двух множеств:
оператор «&»;
• оператор«-»;
• оператор «г*»;
• оператор «|»;
6. Какой оператор позволяет найти разницу двух множеств:
• оператор«-»;
• оператор «|»;
• опера тор «&»>;
• оператор «Л».
7. Какой оператор позволяет найти симметричную разность двух множеств.
• оператор «Л»; f^U
Hijra 1 V
• оператор «I»; ;
* оператор «&»; I I
• оператор«-».
Тема 9. Логический тип данных, логические операторы и выражения
Часто в жизни приходиться соглашаться с каким-либо утверждением или отрицать его. Например, если нас спросят, число 5 больше числа 3, вы согласитесь, скажете - «Да» (утверждение истинно). А если спросят: число 5 меньше числа 3, вы скажете - «Нет» (утверждение ложно). В жизни нам достаточно часто приходится выполнять операции сравнения и принимать решения кто выше, у кого карандашей больше, у кою собака умнее, кто больше поймал рыбы и т.п. Сами того не осознавая, мы в этих случаях используем логические операции сравнения и логического заключения (рис. 9.1.).
000090000^
Рис. 9.1. Примеры логических операторов сравнения
В Python, как и в других языках программирования, используется логический тип данных (bool). Выразить истинность или ложность утверждения можно всего двумя объектами (или, по сути, константами) True и False. Логические константы обычно являются результатом операций сравнения, особенно в выражениях, которые определяют ход дальнейших действий программы (чаще в инструкции разветвления программы «if»). С инструкцией «if» мы еще не знакомы, о ней пойдет речь в отдельной теме, а пока рассмотрим использование констант True и False на простых логических выражениях. Для создания лот ических выражений используются следующие операторы сравнения:
• «~»- равно:
• «!=» - не равно;
• «>» - больше;
• «<» - меньше;
• «>=» - больше или равно;
• «<=» - меньше или равно.
Урок 9.1. JJoi ические онера юры сравнения
С использованием операторов сравнения можно создавать логические выражения, в которых сравнивается значения переменных или выражений. Рассмотрим очень простую программу, в которой просто выполняется сравнение различных чисел (листинг 9 I )
Листинг 9.1. Использование операций сравнения чисел
X Редактор кода '
1 и Листинг 9.1
2 printf’Начальны» значения переменным хну')
3 X * 1-
4 у = 2 0
5 printf’x = ’, X, 'у = ’, у)
7 printf'Сравниваем числа') printf’x == 10 х == 10I printf’x 1= 10 , х 1= 10)
10 printf’x > у х > у)
11 printf’* < у ->' х < у)
12 printf’x >= 10 х >= 10)
13 printf’у <- 20 у <- 20)
14 printf True « 1 True == 1) is printf'False = 0 False == 0)
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 9» а боковой панели - «Листинг 9.1».
Если выполнить эту программу, то будет получен следующий результат (рис.9.2).
v Показать результат
Урок 9.1. Логические операторы сравнения
Логические операторы сравнения чисел Начальные значения переменным х и у х« и у« 2« Сравниваем числа X—10* Тпае х!=10* False Х>у* False Х<у* True хе 10* Trv< ys20-* True TrueBl* Tru« False x 0* True ill Смотрите мультфильм про сравнение чисел
Рис. 9.2. Результаты работы программы сравнения чисел
Как видно из данного примера, результатом логических операций сравнения могут быть только два значения. True (да) или False (нет). В этой программе также показано, что константа I rue имеет значение -1, а константа False значение - 0.
Эта интерактивная книга может не только выполнить программный коО. но и показать вам мультфильм про сравнение чисел. Дэя этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 9.3).
- Л Посмотреть мультфильм
Рис. 9 3. Мультфильм про сравнение чисел
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения числам и снова запустите программу на выполнение.
Урок 9. 2. JToi ические выражения
Для составления более сложных логических выражений Python поддерживает и стандаргные логические операторы: «and» (логическое И), «от» (логическое ИЛИ), «not» (логическое НЕ). Все они используются в логических выражениях для определения того или иного хода выполнения программы В зависимости от возвращаемого выражением результата логические операторы будут возвращать следующие значения:
• s and f - логическое «И» (True, если оба значения suf равны, в остальных случаях False);
• s or f - логическое «ИЛИ», если хотя бы один из операндов истинный, то и все выражение будег истинным (True or True равно True, True or False равно True, False or True равно True, False or False равно False);
• not s - логическое «НЕ», изменяет логическое значение операнда на противоположное (True, если значение s равно False, False, если значение s равно True).
Важно понимать, как интерпретатор обрабатывает логические выражения. Если в выражении с оператором «ог» первый (левый) операнд будет иметь значение True или в выражении с оператором «and» первый операнд будет иметь значение False, то второй (правый) операнд уже вычисляться не будет. Это связано с гем, что конечный результат в таких случаях уже не изменится, следовательно, отпадает и необходимость обработки кода второго операнда. Однако при этом нужно быть внимательным и нс помещать в правый операнд код, от которого может зависеть правильная работа программы.
Рассмотрим еще одну программу, в которой выполняется сравнение различных чисел с использованием логических выражений (листинг 9.2).
' Листинг 9.2. С равнение различных чисел с использованием логических выражений
X Редактор кода /
1 g Листинг 9.2
2 print('Начальные значения переменным х и у*)
3 х = 10
4 у = 20
5 print('x =', х, 'у = ', у)
б
7 z = (х == 1 and у == 2о) pr1nt('(x == 10 and у == 20) z)
g
ie z = (х == 1 and у == 10)
11 print('(x == 16 and у == 10) z)
12
13 z = (x == 1 or у == 10)
14 print('(x == IE or у == 1 ) z)
16 Z = (x == 20 or у == 30)
17 print('(x == 20 or у == 30) z)
19 z = (x == 10)
26 print(*(x == 10) z)
21
22 Z = (not X == 10)
23 print('(not x == 16) z)
Результаты работы этой ттротраммы можно посмотреть в интерактивном разделе книги. Для этот о в главном меню нужно выбрать опцию «Тема 9», а боковой панели - «Листинг 9.2».
Если выполнить эту программу, то будет получен следующий результат (рис. 9.4).
-s Показа! ь результат
Урок 9.2. Логические выражения
Логические выражения из нескольких операторов
Начальные значения переменным хну
х= 1в у= 29
(х = Ю and у = 20) -> True
(х = 10 and у = 10) > False
(X = 1U ОГ у = 101 » True
(х -- 20 or у -- 30) -> False
(х=-10)-» True
(not Х=» 10)-г False
» Смотрите мультфильм: про прог раммиста
Рис. 9.4. Результаты работы программы использования логических выражений
Как видно из данного примера, в результате выполнения логических выражения могут быть только два значения -7 rue или False.
Эта интерактивная книга может не только выполнить програм мный код, но и показать вам мультфильм про программиста. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 9.5).
- » Посмотреть мультфильм
Рис 9.5. Мультфильм про программиста
м~дн-*'
ТГ1
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения числам и снова запустите программу на выполнение.
Урок 9.3. Тип данных None (пусто)
В Python есть константа None, означающая отсутствие значения. Обычно ее используют для инициализации переменных и объектов, значения которым будет присвоено позже в процессе выполнения программы. Например, у вас у всех в одежде есть карманы, но в них совсем не обязательно что то лежит. Карманы могут быть пустыми, но в какой то момент вы можете в них, что то положить (рис.9.6).
Л
V -у
Рис. 9.6 Карманы, как пустое .место для хранения различных предметов
Чаще такой тип данных используется при инициализации классов, koi да нужно заранее объявить общую переменную, которая будет использоваться в разных методах класса, но о классах мы поговорим позже. Кроме того. None неявно возвращается функциями, у которых отсутствует оператор return (вернуться). Но о функциях мы тоже будем говорить в следующих уроках.
Пример программы, в которой мы резервируем «пустую» переменную, а затем присваиваем ей данные разных типов, приведен в листинге 9.3.
Листинг 9.3. Пример использования данных типа None
Редактор кода 4.
i » Листинг 9.3
2 * Инициализируем переменную с пустим значением J п • None
4 print('Пустое значение (ничего) > , п)
S print('B переменной п пусто? (л is None) ->' n is None) 6 printi'-'*3S)
в t Создаем список n = [1, 2, 3, 4]
le print('B переменной n лежит список n) 11
12 » Создаем корте* n = (1, 2, 3, 4)
14 printl'B переменной n лежит кортеж n)
is i Создаем мнилестао it n = (1 2, з, 4}
print('B переменной n лежит множество ->', n)
20 print(’B переменной n пусто? (n is Nonej ->', n is None)
Результаты работы этой пршраммы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема 9» а боковой панели - «Листинг 9.3».
Если выполнить эту программу, ю будет получен следующий результат (рис. 9.7).
м ч Показать результат
Урок 9.3. Тип данных None (пусто)
Резервирование памяти для данных
Пустое значение (ничего) » ноле
В переменной п пусто? (ne None: и True
В переменной п лежит список •> (1,2,3,4(
В переменной п лежит кортеж ч (1, 2 з, 41
В переменной п лежит множество (1, 2, з, 4)
В переменной п пусто? in is None;-» False
A Смотрите мультфильм: про пустое место
Рис. 9.7. Результаты работы программы оценки памяти для данных
В этой программе была создана переменная «п» с пусгым значением, и с использованием инструкции «п is None», проверили, что в ней действительно ничего не хранится Потом в эту переменную записали данные разных типов: список, кортеж и множество. В последней арокс, проверили наличие данных в этой переменной, и она действительно оказалась не пустой.
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про пустое место. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 9.8).
At Посмотреть мультфильм
АНГ1 Х»Г
Рис. 9 8. Мультфильм про пустое место
- Ний
си
Л
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения переменной «п» и снова запустите программу на выполнение.
Вопросы для самокон троля к теме 9
1 .Какая константа написана без ошибки:
• True;
• NONE;
nene false;
• true.
2 . Какая константа написана без ошибки:
False;
NONE:
попе
true;
false.
3 . Какая константа написана без ошибки:
• None
• NONE;
• false;
• tme.
4 .Какое выражение имеет результат True;
• 5 <7;
• 5 >= 7;
• 5 >9:
• 9<-7.
5 .Какое выражение имеет результат False:
• 5>7
• 5 >= 5;
• 5 <7;
• 9>=7
6 Какое выражение имеет результат True:
• 7 >= 5 and 3 < 9;
• 7 <= 5 and 3 < 9;
• 7 == 5 and 3 < 9;
• 7 > 5 and 3 > 9.
7 .Какое выражение имеет результат False:
• 7 < 5 or 3 > 9;
• 7 < 5 or 3 > 9;
• 7 <= 5 or 3 > 9;
• 7 = 5 or 3 > 99.
8 .Какое выражение имеет результат True.
• not 10 = 20;
• not 10 < 20;
• not It) <=20;
• not 20 > 10.
Тема 10. Базовые компоненты языка программирования Python
Любая книга состоит глав, главы можно разбить па разделы, разделы на абзацы, абзацы на слова, слова на буквы В итоге мы остановились на букве - это тот базовый элемент, из которого можно сформировать любой текст и любую книгу. В конструкторе «Лего» есть много разных неделимых элементов, из которых можно собрать машинку, паровозик, домик, да все, что захотим. Эти неделимые элементы и есть базовые компоненты конструктора (рис. 10.1).
Рис 10.1. Базовые (неделимые) элементы конструктора «Лего»
Если провести параллель с программированием, то любое приложение (программа) состоит из модулей, модули из строк программною кода, строки из инструкций, выражений, операторов и ключевых слов. Для того чтобы написать приложение, нужно иметь представление о базовых элементах, из которых оно будет состоять. Из базовых элементов -ключевых слов, операторов и выражений составляются инструкции, которые затем и выполняет компьютер. Давайте посмотрим, что же это за базовые элементы прозраммы на Python инструкции, выражения и операторы.
Инструкция в Python - это логически закопченная конструкция, которую интерпретатор Python может прочесть и на ее основе компьютер выполнит какие либо действия. Примеры инструкций: «import match» - в вашу программу будут загружен набор математических функций, «for 1 in range(l, 100):» - в программе будет организован цикл, который повторит дейст вия, находящиеся в геле цикла. 100 раз. Пли, например, с помощью инструкции «def my_func()» в программе будет создана новая функция. Инструкция содержит группу связанных элементов, которые нельзя разделить. Например, если из инструкции «def my func’O» убрать хотя бы одну скобку, то компьютер нс поймет что ему делать и программа сообщит об ошибке.
Выражение — эго один из типов инструкции Выражение содержит логическую последовательность чисел, строк, объектов и операторов, которые всегда возвращают некоторое значение. С помощью выражений можно выполнять такие операции, как сложение, вычитание, умножение и друтие. Они также могут представлять собой вызовы функций, которые возвращают результат. Вот примеры выражений: «а - х + у», «z = sum(list)». Выражение то же должно включать набор обязательных элементов и отсутствие одного из них вызовет ошибку в программе. Например, если из выражения «а = х + у» убрать знак «=» («а х + у»), го программа работать не будет.
Оператор в Python — это символ, который указывает, что нужно сделать с одним или несколькими операндами. В качестве операторов используются специальные символы, например: «+» - сложение, «-» - вычитание, «*» - умножение, «/» - деление. Операндом может быть константа, переменная, функция и т.п., то есть некие итачения. над которыми выполняется операция.
Для новичков в программном коде бывает достаточно сложно определить, что является инструкций, а что выражением. Однако они отличаются как пи целям использования, так и по и смысловому содержанию. Вог их принципиальное отличие:
• выражения - это все, что состоит из объектов (или ссылок на них) и операторов (выражение может быть вычислено интерпретатором и возвращает конкретное значение);
• инструкции - это указания на выполнение программой каких-либо действий, которые не возвращают значений.
Выражения можно считать частью инструкций, в результате выполнения которых будет получены значения. Выражения практически веема входят в состав каких-либо инструкций или сложных (смешанных) выражений. А вот использование инструкций в выражениях недопустимо. Например, в выражении «d = 5 t- (def my func())» присутствует инструкция «def my_func()», которая не возвращает значение, а дает указание создать функцию. Такая конструкция приведет к ошибке. Л вот выражение «d = 5 + my_func()», к ошибке не приведет, поскольку «ту func()» вернет значение, вычисленное в этой функции.
В уроках данной темы мы познакомимся: с инструкциями и правилами их составления; с правилами написания выражений; с операторами и правилами использования операторов в выражениях.
Урок 10.1. Инструкции в Python
Давайте разберемся, а что же это за слово такое «инструкция», и что оно означает. Инструкция - это некое руководство, состоящее из подсказок, что нужно делать и в какой последовательности. Например, на следующем рисунке показана инструкция «Как нарисовать слона». Сначала нужно нарисовать один кружок, потом добавить второй, к кружкам дорисовать небольшие фигурки, и в конце все это раскрасить (рис. 10.2).
Рис. 10.2. Инструкция как нарисовать слона
Инструкция языка программирования (от англ, statement) - это команда, посредством которой компьютеру сообщается о необходимости выполнения одного определенного шага по обработке порции информации.
Для того чтобы наша программа могла делать что-то полезное, мы должны предоставить интерпретатору Python верные инструкции, то есть посредством программного кода
сообщить ему логическую последовательность действий, выполнение которой и приведет к желаемому результату.
По сути, любой python-екрипт (программный код) представляет собой не что иное, как некоторую последовательность инструкций, которая может состоять из десятков, сотен, тысяч или даже сотен тысяч и миллионов инструкций. Все зависит от того, сколько инструкций потребуется для того, чтобы описать все шаги, необходимые для достижения целей программы
Пример программы, в которой показаны различные виды инструкций, приведен в листинге 10.1.
Листинг 10.1. Пример различный инструкция на языке Python
X Редактор кода /
1 I Листинг 1в.1
2 a Нчпорт переменной pi из модуля moth
3 fro«i math im, rt pi
5 » Присваивание значений переменньич
6 x. у I [1, 2, з]
» Объявление функции
det «y.funciz'13):
s.l • i • • 2
for i in rangei25): » Запускает цикл
12 if i < S: * Условная инструкция
13 continue к Перехода s начало цикла
14 elif 5 <- i < U;
15 s.l ♦- i я Увеличиваем s.l
16 else:
17 break . Прерывание цикла
return s.l * Возврата значения функции
19
26 к Инструкция будет обрабатывать (ошибки;
21 try:
22 я Инструкция обращения к функции
а.1 • my.func(z)
24 » Выполнение арифметических операций
res а_1 int(pi) • 19 * х » у » Инструкция выводиг результат print-'"Результат ьычмсленин res-", res)
28
29 г Блок инструкций обработки овибок
34 except Exception as err print(err) а Вьнодим сообщение Об ошибке
32 else: » Если ошибок нет pass * пустая инструкция
34 finally » Этот блок выполняется всегда pr in V Конец rtpoi рашм' )
Kro-то сейчас посмотрит на эту программу и скажет: «Ой! Что это за инструкции, тут же ничего не понятно?». Да, мы только начали изучать программирование, и здесь есть много инструкций, с которыми мы еще не знакомы. Но все впереди, мы изучим эти инструкции на следующих уроках. Пока просто посмотрите на комментарии, которые поясняют, какие действия будет выполнять компьютер, получив эти инструкции. Ведь компьютер вместе с Python знает все эти инструкции наизусть!
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «ТемаЮ», а боковой панели - «Листинг 10.1».
Если выполнить эту программу, то будет получен следующий результат (рис. II).3).
* \ Показать результат
Урок 10.1. Инструкции в Python
Инструкция - это последовательность действий
Результат вычислений res- тт
Конец программы
Смотрите мулы фильм: про инструкцию
Рис. 10.3. Результаты работы программы использования различных инструкций
Как видно из данного примера, к инструкциям можно отнести практически все команды, которые мы пишем в коде npoi раммы:
• импорт модулей;
• присваивание или удаление ссылок на объекты;
• определение функций;
• организация циклов;
условные конструкции для перехода в разные части программы;
обработка исключений (ошибок) и т.д.
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про инструкции Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 10.4).
Д| Посмотреть мультфильм
Рис 10.4 Мультфильм - про инструкцию
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения переменным «х. г, г» и снова запустите программу на выполнение.
В Python группы инструкций могут быть объединены в блоки с использованием отступов Отступы - это очень важный элемент в Python, неверно расставленные отступы будут приводить к ошибкам в программе. Фра, менты программного кода с правильно расставленными отступами приведены на рис. 10.5.
Отступы обязательны!
Условный оператор if х > :
Цикл:
S
for х in range(10 ) а > х с = while а > :
с +» а % а = а // s « s + с
Рис. 10.5. Фрагменты программного кода с отступами
На данном рисунке блоки связанного программного кода, отделенные отступами, для наглядности выделены другим цветом. Каждый из таких блоков может содержать собственные вложенные блоки инструкций. В последующих разделах все виды инструкции будут рассмотрены достаточно подробно. Сейчас же мы просто перечислим только некоторые (основные) инструкции, дав краткие пояснения, для чего они используются.
• а - b - это инструкция присваивания (например, а = 8**2 - 6 или b = 1еп([1,2, 3])).
• def определение функций и методов Например,
def my_func(a, b, с=0, *d);
return a + b + с + d[Oj.
• return - возврат результата из функций и методов.
• class - определение классов. Например.
class MyClass:
pass
• pass - пустая инструкция-заполнитель
• global - инструкция объявления глобальных переменных (если переменных несколько, то они перечисляются через запятую).
• ifzelif else - условная инструкция (разветвление программы).
• for'else - инструкция обхода последовательности в цикле.
• while/else - цикл общего назначения.
• break инструкция выхода из цикла.
• continue - инструкция перехода в начало цикла.
• import - инструкция импорта всех доступных имен из указанных модулей (модули перечисляются через запятую).
• try/except/finaliy - инструкция обработки исключений (обход ошибок).
Со всеми этими инструкциями мы будем знакомиться в следующих уроках. Отметим, что список инструкций языка Python достаточно большой, и он постоянно изменяется. Обычно это происходит после выхода очередных версий языка (появляются новые виды инструкций, а некоторые старые обновляются или вообще удаляются). Поэтому нужно всегда следить за обновлениями.
Урок 10,2. Выражения в Python
Выражение (от англ expression) - это любой фрагмент программного кода, который формирует (вычисляет) и возвращает некоторое значение. Выражения являются не менее важными элементами в Python, чем другие инструкции. Ведь большая часть тою, что пишется в коде, является именно выражениями
Выражения делятся на простые (первичные) и сложные выражения. Простые выражения не могуг быть разделены на более мелкие фра! менты К ним относятся, например, числа (1, 10.5,0 34), переменные (х. у. my list), вызовы функций «len(myjist)».
Сложные выражения составляются из более простых при помощи различных операторов, которые позволяют выполнять такие операции, как сложение, вычитание, деления и другие. Например, «х = у + (z / 3) * len(my list)». Посредством операторов простые выражения объединяются в более длинные смешанные или сложные выражения. Выражения могут выглядеть довольно длинными и сложными, но в результате вычислений на выходе будет получено одно результирующее значение.
В последующих уроках будут более подробно рассмотрены все виды выражений и особенности их использования Сейчас же, просто перечислим основные выражения, дав краткие пояснения их назначения.
Выражения литеральное* значения - это литералы в коде про) рам.мы. например:
• 'Иванов'-> строка,
• 10 -> число,
• ['Петров', 10]-> список,
• list -> объект.
Выражения переменных - обычные инициализированные переменные, например, «res» в выражении «res in [900, 1000]» (здесь переменная инициализирована, а значит, обращение к ней возвращает значение, сохраненное в памяти подданным именем).
Арифметические выражения - это выражения, в которых используются знакомые всем математические операторы (например, «+», «*», «-», «/») в выражении «а + b*3 - d / 8».
Условные выражения или выражения сравнения используются операторы сравнения, например, а <= Ь.
Выражения с логическими операторами - это выражения, в которых используются логические операторы (например, «>», «and», «<» в выражении «а > b and а < с»).
Выражения с операторами принадлежности - это выражения, в которых используются операторы принадлежности (членства) «in» и «not in» (например, «in» в выражении «5 m [ 1, 2, 3]»).
Выражения с операторами идентичности - это выражения, в которых используются операторы идентичности «is» и «is not» (например, «is not» в выражении «5 is not '5'»).
Вызовы функций и методов это тоже выражения, так как они явно или неявно возвращают результат (например, «1еп(‘Иванов’)»).
Однострочные выражения разветвления «ifelse» эти конструкции позволяют использовать в выражениях условную инструкцию «ifrelse» в рамках одно строки программного кода (например, «х = True if у > 0 else False»).
Пример программы, в которой показаны примеры выражений, приведен в листинге 10.2.
: Листинг 10.2. Пример различный выражений на языке Рыйоп
X Редактор кода Z
19
и ж Логическое выражение
1? printix > yj
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию
«Тема 10». а боковой панели - «Листинг 10.2».
Результаты работы этой программы приведены на рис. 10.6,
ч Показать результат
Урок 10.2. Выражения в Python
Выражение всегда возвращает некоторое значение
х- те а-Строка
у= res.
False
Д| Смотрите мультфильм: про компьютерную мышь
Рис. 10.6. Результаты работы программы использования различных выражений
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про кота и компьютерную иышь. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 10 7).
- Л Посмотреть мультфильм
Рис. 10.7, Мулы фильм про компьютерную мышь и коза
Урок 10.3. Операторы в Python
Операторы (от англ, operators) это элементы программного кода, которые используются для указаний программе выполнять определенные действия в выражениях. Проще говоря, операторы это символьные обозначения команд, с помощью которых выполняются операции.
Операции (от англ, operations) - это те действия, которые мы выполняем над переменными и обьекгами.
Как было отмечено в предыдущих темах и уроках, для составления выражений используются операторы, то есть некие символы, которые позволяют сообщить интерпретатору о тех действиях, которые нужно выполнить над объектами (фактически над данными). Некоторые операторы и обозначающие их символы нам известны: «+» -сложение, «-» - вычитание, «*» - умножение. С частью операций, используемых в программировании, еще предстоит познакомиться.
Примерами выражений с использованием операторов могут служить: «А + В», «а != 4», «z>d», «-Ь», «(Ь + 7)/(5 - 3**2)» и т.п. Здесь символы и комбинации символов «+», «!=», «♦♦», «-», «/», «>» и есть операторы. При этом выражения или значения, расположенные по сторонам операторов, называют операндами
Большинство операторов обрабатывают свои операнды в определенном направлении. Это свойство принято называть ассоциативностью. Одни операторы выполняют обработку своих операндов слева направо, обладая левой ассоциативностью, другие обладают правой ассоциативностью, выполняя обработку в обратном направлении, то есть справа налево. Также существуют операторы, не имеющие ассоциативности
Кроме того, операторы могут отличаться своим приоритетом, который определяет порядок (очередность) их выполнения в ходе вычисления значения выражения Первыми обрабатываются операторы с более высоким приоритетом, затем операторы с более низким приоритетом и так далее по мере убывания их приоритетности. Если приоритет операторов одинаков, они 1руппируются и обрабатываются либо согласно их ассоциативности, либо в соответствии с установленным для них порядком (это касается операторов, у которых ассоциативность отсутствует). Также отметим, что «для принудительного указания порядка выполнения операторов используются круглые скобки.
Программа, в которой показана последовательность действия операторов по умолчанию и. при наличии скобок, приведена в листинге 10.2.
Листипг 10.3. Последовательность ленствня операторов по умолчанию и при наличии скобок
1
2
6
8
ie и
12
13
le J7
18
19
28
21
22
23
24
25
26
27
29
31
33
36
37 ЗЯ
39
42
е Листинг 1е.З
print("Приоритет оператора '*' выае, чем у •♦'•) а « 6 + 9 * 2
print( '6 + 9 » 2 ->', а)
рмпГ("Скобки сменили приоритет, теперь ' + ' выже, чем у '*'”) э « (6 т 9) • 2
print('(6 + 9) * 2 ->', Ь) print('-'*51)
с = 2
ргтnt('Приоритет слева-» направо.*) print('a < Ь > с а < b > с) ргтпТ("Скобии сменили приоритет, теперь налево <- справа.") print('a < (Ь > с) а < (Ь > с)) print('-'*56)
й Согласно принятому порядку это токе самое, что яс- (о = Ь) print("3flecb по умолчание приоритет налево <- справа.") рмпсРКак будтс присутствуют скобки с = (а = Ь).") prTnt('b»', Ь) print('a=', а) с = а = Ь
print('c = а = b ->', с, а. Ь) print('-'*56)
print('Операторы и имеют равной приоритет.’)
print(*no умолчанию левая ассоциативность.') print('Kan будт"- присутствуют скобки d (5 - 6) - 7') d = 5 - Г. - 7 piint('5 - 6 - 7 ->', d) print(•-*56)
print('По умолчанию левая ассоциативность.') print('KaK будп присутствуют скобки о = (9 and 6) .г 1') d • ’ and or 1 print('6 and ‘ or 1 •>', d) prTnt('-'*5fl)
printf'Теперь правая ассоциативность.')
piint('Tah как операция в скобках выполняется первой.') d = Г and (6 or 1) print and • or 1) ->' d)
Для младших школьников этот пример может показаться сложным, осооенно порядок действий в логических выражениях, поэтому они могут пока его пропустить. Но
старшеклассникам его нужно изучить внимательно, так как на олимпиадах по программированию (как и при практическом программировании), нужно все знать о приоритетах выполнения операций
Результаты работы пой программы можно посмотреть в интерактивном разделе книги. Для зтого в главном меню нужно выбрать опцию «Темп 10», а боковой iiuiie.ni - «Листинг 10.3».
После выполнения этой программы будет получен следующий результат (рис. 10.8).
Приоритет оператора выше, чем у '+' 6 + 9 ‘ 2 •> 24
Скобки сменили приоритет, теперь '+' выше, чем у »' (6 ♦ 9) • 2 -> зе
Приоритет слева-> направо, а < б > с -> True Скобки сменили приоритет, теперь налево <- справа, а < (Ь > с) -> False
Здесь по умолчанию приоритет налево <- справа.
Как будто присутствуют скобки с = (а = о). Ь= 30 а= 24 с = а = b -> 30 30 30
Операторы и имеют равный приоритет.
По умолчанию левая ассоциативность.
Как будто присутствуют скобки d = (5 - 6) - 7 5 - 6 - 7 -> -8
По умолчанию левая ассоциативность. Как будто присутствуют скобки d = (0 and 0) or 1 о and о or 1 -> 1
Теперь правая ассоциативность.
Так как операция в скобках выполняется первой. 0 and (0 or 1) -> 0
Рис 10.8 Результаты работы программы использования скобок в выражениях
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про программиста. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 10.9).
- л Посмотреть мультфильм
Рис. 10 9 Мультфильм про программиста
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения переменным, югическим оператора и снова запустите программу на выполнение. Особое внимание уделите логическим выражениям.
У операторов Python есть еще одна особенность, связанная с операторами «*» и «**». Оператор «*» чаще всего применяется с операцией умножения, а «**» - с возведением в степень В этом случае они стоят между двумя переменными (например, f * h. или х**2). Но в Python звездочки могут иметь и друге назначение. Достаточно часто можно встретить инструкцию, когда звездочки являются префиксом, стоят рядом лишь с одной переменной и не отделяется от нее пробелом. Например, инструкция *args, **kwargs при работе с функциями, или инструкция *name. где звездочка стоит перед именем переменной. Ьолее детально эта функция звездочек будет рассмотрена в следующем уроке
Хорошей практикой программирования считается использование скобок, принудительно определяющих порядок выполнения операций. Это облегчит сопровождение кода и поиск ошибок, как при наличии сложных выражений, так и в случае изменения поведения операторов при переходе от одной версии Python к другой.
Фрагменты кода с присваиванием значений переменным в Python принято считать инструкциями присваивания. Например, фрагменты кода «d = 5» или «s += 7**2» относятся к инструкциям присваивания.
5 рок 10.4. Особенности операторов * н ** в Python
Операторы «*» и «**» встречаются в питоне очень часто. Традиционно в языках программирования они обозначают операции умножения и возведения в степень Однако иногда эти операторы встречаются в инструкциях, которые непонятны не только новичкам, но и опытным программистам, переходящим на Py thon с других языков программирования. В данном разделе мы будем говорить про операторы-префиксы «*» и «**», которые используются перед переменными.
В сферу применения рассматриваемых операторов входит:
• операторы «*» и «**» - передача аргументов в функцию;
• операторы «♦» и «**» - захват аргументов, переданных н функцию;
• оператор «♦» - принятие аргументов, содержащих только ключевые слова:
• оператор «*» - захват элементов во время распаковки кортежа (tuple);
• оператор «*» - распаковка итерируемых (нумерованных) объектов в списке или кортеже;
• оператор «**» - распаковка словарей в других словарях.
Использование этих операторов в функциях будет рассмотрено позднее в соответствующей теме, а здесь рассмотрим их возможности для работы с последовательностями. Представите, что вы на даче и родители принесли две корзины с овощами и фруктами, а вам дали задание - разобрать эти корзины по пакетам, и пакеты положить в холодильник
(рис. 10.10).
Рис. 10.10 Корзины с овощами и фруктами, которые нужно разобрать по пакетам
На следующий день родители принесли еще две маленькие корзинки, их содержимое нужно было просто выложить в самый нижний короб холодильника с овощами и фруктами. Для решения этой задачи мы напишем программу, которая позволит разобрать (распаковать) содержимое корзин. Программа, в которой операторы «*» и «**» используются для разбора корзин (распаковки словарей, кортежей и списков), приведена в листинге 10.4
Листинг 10.4. Программа разбора корзин с овошами и фруктами
s Листинг IB. 4
2 fruits ” ['Сливы*, 'Груши'.
3 'Висня', 'Яблоки']
4 pr-int('Корзина с фруктами ->', fruits)
6 print)'» Распаковываем список фруктоь *•)
7 f_l f_2 »f_3 = fruits print)'Пакет с фруктами f_l->' f_l) print)'Пакет с фруктами f_2->', f_2)
10 рг!п1('Пакет с фруктами f_3->', f_3)
11 print)'”' * 30)
12
13 vegetables • ('Огурцы', 'Помидоры',
14 'Капуста', 'Морковь')
print) Корзина с овощами ->', vegetables)
17 print)'* Распаковываем кортеж овощей ♦')
18 ov_l ov_2 »ov_3 = vegetables
19 print)'Пакет с овощами ov_l->' ov_l)
I print)'Пакет с овощами ov_2->’, ov_2)
21 print(‘naKeT с овощами ov_3->’, ov_3j
22 print)'”' • 30)
23
24 print)'Исходные словари')
25 d_l - {б: 'Сливы', 1: 'Груии',
2: 'Вишня', 3: 'Яблоки}
2 d_2 ” {4: "Огурцы", 5: "Помидоры",
•6’ : "Капуста", 7: "Морковь"}
pr mt)'Корзина с фруктами d_l ->', d.l)
30 print)'Корзина с овощами d_2 ->', d_2)
31 print)'-----Объединенный словарь--------')
32 all_d = {*‘d_l, »*d_2}
33 print)'Короб с овощами и фруктами all_d:')
34 print)all_d)
Выполним анализ инструкции это программы. Здесь создан список фруктов (корзина с фруктами - fruits). При распаковке этого списка значения первых двух элементов списка присвоены переменным f_l и f_2, а оставшиеся элементы списка распакованы в новый список f_3. Таким образом, корзина с фр>ктами была разложена в три пакета.
На втором шаге был создан кортеж из овощей (корзина с овощами - vegetables). При распаковке этого кортежа значения первых двух элементов кортежа присвоены переменным ov_l и ov_2, а оставшиеся элементы кортежа распакованы в новый список ov_3. Таким образом, кориша с овощами то же была разложена в три пакета.
На третьем шаге было создано два словаря - d_l и d_2 (корзины с овощами и фруктами). Затем эти словари были распакованы и объединены в один словарь - d_3 (нижний короб холодильника с овощами и фруктами).
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Темп 10». а боковой панели - «Листинг 10.4».
Если выполнить эту npoi рамму. то получим следующие результаты (рис. 10.11)
•* ч Показать результат
Урок Ю 4. Особенности операторов * и ** в Python
|для распаковки словарей, кортежей и списков)
Корзина с фруктами ->['Слиьь|', 'Груши' 'Вишня', 'Яблоки']
• Распаковываем < писок фруктов *
Пакет с фруктами f_l-> Сливы
Пакет с фруктами f _2-> Груши
Пакет с фруктами f ,3->[ Вишня', Яблоки']
Корзина С ОММЦМШ-) СОгурци*, ’Помнаоры* 'Капуста*, ’Норко»*)
• Распаковываем кортеж овощей '
Пакете овощами ov_l-> Огурцы
Пакет с овощами ov_ 2» Помидоры
Пакете овощамиov_3->['Kanycra','Морковь"]
Исходные словари
Корзина с фруктами d_l ->{0; 'Сливы, Е 'Груши'. Z 'Вишня. 3: 'Яблоки')
Корзина с овощами d_2 ->(4- 'Огурцы 5: 'Помидоры', '6': 'Капуста' 7: 'Морковь')
— Объединенный словарь —
короб с овощами и фруктами all.d
{0:'Сливы. Е'Груши'.Z‘Вишня.3:'Яблоки'4. Огурцы',5: Помидоры '6': 'Капуста',7: 'Морковь')
Смотрите мультфильм: про программиста
Рис. 10.11 Ретулыаты работы программы исполыования оперлоров «*» и «**»
В результате работы про1рам.мы мы увидел» содержимое каждого пакета, и содержимое нижнего короба холодильника. Все фрукты и овощи успешно разложены и нашли свое место в холодильнике (рис. 10.12).
Рис. 10,12. Холодильник после распаковывания'^ пакетов с фруктами и овощами
Таким образом распаковку корзин (списков, кортежей и словарей) выполнили всего два оператора - «*» и «**».
Эта интерактивная книга может не только выполнить програ ммный код, но и показать вам мультфильм про программистов. Для много достаточно открыть вкладку «Посмотреть мультфильм» (рис. 10.13).
v Л Посмотреть мультфильм
Рис. 10.13. Мультфильм про программистов
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения списку и кортежу, и снова запустите программу ни выполнение.
Краткие итоги гемы 10
Инструкции - это команды на языке Python, которые сообщают интерпретатору последовательность действий, необходимых для достижения поставленных целен. По умолчанию интерпретатор выполняет инструкции последовательно одна за другой в порядке их следования в коде. Если нужно изменить выполнение хода программы по умолчанию, используются управляющие конструкции: условные инструкции, циклы.
инструкции переходов или инструкции обработки исключений. Инструкции только управляют ходом выполнения программы и не вычисляют значения.
Выражение тто любая единица программного кода Python, которая может быть использована интерпретатором для получения значения Сложные выражения составляются из более простых при помощи различных операторов, которые позволяют выполнять над объектами такие операции как сложение, вычитание, сравнение и т.д. Ио каким бы сложным не было выражение, в результате последовательных вычислений на выходе интерпретатор получит результирующе значение.
Выражения практически всегда входят в состав каких-либо инструкций, а использование инструкций в выражениях недопустимо.
Операторы представляют собой символьные обозначения команд, с помощью которых выполняются операции над объектами. Выражения или значения, расположенные по сторонам операторов, называют операндами
Большинство операторов обрабатывают свои операнды в определенном направлении. Это свойство называют ассоциативностью. Одни операторы выполняют обработку своих операндов слева направо (левая ассоциативностью), другие справа налево (правая ассоциативность). С уществуют и операторы, не имеющие ассоциативности.
Важным является приоритет выполнения операторов. Операторы е большим приоритетом обрабатываются первыми.
Если приоритет операторов одинаков, то они выполняются либо в очередности согласно их ассоциативности, либо в заданном для них принудительным порядке, который задается скобками. Рекомендуется всегда использовать скобки, определяя принудительный порядок выполнения операций.
В Python операторы «*» и «♦*» в разных инструкциях имеют совершенно разное назначение. Это обстоятельство нужно учитывать при написании программ.
Вопросы для самоконтроля к теме 10
1 Какой из фрагментов программного кола относится к инструкциям
• def my_func(a,b.c):;
• s = 2**3;
* d = 1 < hue,
• A+=l.
2 .Какой из фрагментов программного кода относится к выражениям-
• d = {I: 'Иванов', 2: 'Петров'}:
• def my_func(a,b,c):;
• if а > b ;
• for i in num:
3 .Какое значения вернет выражение: А = 5 + 5 * 2?
• А=15;
• А=10:
• A = 25;
• A = 20.
4 Какое значения вернет выражение: А = (5 + 5) * 2?
• А = 20;
• А=15;
• А =10;
• А = 25.
Тема 11. Операторы нриеваивания в Python
Операторы присваивания предназначены для связывания имен со значениями и для изменения атрибутов или элементов изменяемых объектов Оператор присваивания связывает переменную с объектом или с набором (списком) объектов. Оператор присваивания обозначается «=». В языке Python существуют следующие формы (разновидности) присваивания
• обычная (каноническая) форма:
• комбинированные инструкции присваивания;
• позиционное присваивание:
• групповое присваивание одного значения.
С обычным и комбинированным присваиванием мы уже встречались. Давайте вспомним основные инструкции присваивания, комбинированные с арифметическими операторами'
• «а += Ь» - тоже, что и а = а + Ь;
• «а-=Ь» тоже, что и а = а Ь;
• «а *= Ь>> - тоже, что и а = а * Ь;
• «а **= Ь»-тоже, что и а = а**Ь;
• «а /- Ь» - тоже, что н а = а/Ь
А вот особенности группового и позиционного присваивания разберем более детально.
Урок 11.1, Групповое и позиционное присваивание
В случае группового присваивания объект, расположенный справа, присваивается всем переменным группы, которые слева. В результате несколько отдельных инструкций присваивания могут быть заменены одной эквивалентной и более компактной инструкцией. Например, Миша, Саша и Маша имеют одинаковые велосипеды (рис. 111).
Рис. 11.1. Дети Миша, Саша и Маша имеют одинаковые велосипеды
О том, что все дети имеют велосипеды компьютеру можно сообщить и с помощью обычною, и с помощью группового присваивания.
Л юперь предположим, что Егор. Артем и Света имеют разные средства передвижения у Егора скейтборд, у Артема велосипед, а у Свет ы самокат (рис. 11.2).
Рис 11.2. Дети liiop. Артем it Света имени разные средетва передвижения
Об этом компьютеру так же можно сообщить с помощью обычного и позиционного присваивания. Следует заметить, что программный код будет короче, если использовать групповое или позиционное присваивание. Программа, где используется ipyiinoeoe и позиционное присваивание, приведена в листинге 11 I
Листинг 11.1. Пример использования обычного и группового присваивания * 1 2 3 * 5 6 7 * 9
X Редактор кода J
1 г Листинг 11.1
2 в Обычное припаивание
3 Misha - "у пеня есть велосипед"
a Sasha - "У пеня есть велосипед"
5 Masha - "У меня есть велосипед"
6 print!'Нива - 1 Misha)
7 рНпс('Сама - *, Sasha)
printCMaea - ', Masha)
9 print!'-I «49)
11 » Групповое присваивание
.1 Misha Sasna Masha ~ "У меня есть велосипед"
"1 ргтпсСМима • Misha)
1* print!'Сава - ', Sasha)
is print!'мама - Masha)
ir print!'='«4<M
» Обычное присваивание
19 Igor - "У меня есть скейтборд"
Аг сеч - "У меня есть велосипед"
21 sveta » "У меня есть ъамокаг"
print!'Егор - ' Egor) prlntl'ApreM - Artemi
21 print!'Света - ’ Sveta.
25 print!'49)
27 » Групповое присваивание Egor Arte* Sveta = "У меня есть скейтборд",\ "У меня есть велосипед", \ "у меня есть самокат"
31 print!'Егор Egor)
32 print!‘Артем - АгСемт
33 print!'Света * Sveta;
Посмотрите внимательно, при использовании обычного присваивания нужно написать три строчки программы, а с групповым присваиванием то же самое было сделано всего в одной строке (одной инструкцией).
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для зтого в главном меню нужно выбрать опцию
«Тема! 1», а боковой панели - «Листинг 11.!».
Если выполнить эту npoi рамму, то получим следующий результат (рис. 11.3).
v \ Показать результат
Урок 10.1. Инструкции в Python
Инструкция - это последовательность действий
Миша - У меня есть велосипед
Саша У меня ес ть велосипед
Маша У меня есть велосипед
Миша - У меня есть велосипед
Саша - У меня есть велосипед
Маша - У меня есть велосипед
Егор У меня есть скейтборд
Артем - У меня есть велосипед
Света - У меня есть самокат
Егор - У меня есть скейтборд
Артем - У меня ест ь велосипед
Света - У меня есть самокат
Смотрите мультфильм, песенка про компьютер
Рис. 11.3, Результаты pa6oiM программы с операциями присваивания
Эта интерактивная книга может не только выполнить програ ммный код, но и показать вам мультфильм - песенку про компьютер. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 11.4).
Л П<х «отрет ь мультфильм
Рис. 11.4. Мультфильм - песенка про компьютер
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения переменным и снова запустите программу на выполнение.
Урок 11.2. Особенности группового присваивания
Следует иметь в виду, что при групповом присваивании в памяти компьютера создается всего лишь один объект, разделяемый всеми переменными группы Поэтому такая форма присваивания будет полезна для неизменяемых объектов.
А вот использовать групповое присваивание для изменяемых объектов (типа списков или словарей) нужно очень осторожно, так как изменение объекта через один из элементов группы будет оказывав влияние и на другие элементы зтой |руппы. Это связано с тем, что переменные в Python хранят не сами объекты, а ссылки на них. A раз так, го после изменения одного объекта через ссылку на него все остальные объекты то же изменятся
Программа, в которой показано отличие использования группового присваивания для неизменяемых и изменяемых объектов, приведена в листинге 11.2.
. Листинг 11.2. Отличие i pi пиового присваивания для неизменяемых и изменяемых объектов
X Редактор кода
1 » Листинг 11.2
2 * Используем число (неизменяемы ооъект)
3 print;’Для нем вменяемого объекта*) с = Ь = » = 111
5 print(*a а *, Ь ->* Ь с с)
7 < Изменим Ь и с 6=1
9 с = 2 prlntfa а, Ь ->' Ь с с) 11 printf*->46)
13 к Используем список (изменяем.й объект)
14 printf'Для изменяемого объекта*) с • Ь • а = (]
16 printf'a а, Ь->*, Ь, с с)
1в » Прооуем изменит, о и с
Ь =• [1J с •- Ц] printf’a а Ь б, *, с с)
Не смотря на свою простоту это достаточно сложная программа, поэтому сначала нужно выполнить ее, а уже потом детально разобраться с итоговыми цифрами
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию
« Гема! I», а боковой панели - «Листинг 11.2».
После выполнения программы на печать будут выведены следующие значения (рис. 11.5).
* Показать результат
Урок 11,2 Особенности группового присваивания
Для объектов разного типа еть особенност и распределения памяти
Для неизменяемого объекта
а-» хм ,Ь-> ш ,с-» in
a-» in .Ь-» 1 ,с+ з
Для изменяема о объекта
аъ[|.Ь>С.с »D
аf 1,2]. Ь-» (1,2] ,c-r [1.2|
* Смотрите мультфильм: про безопасность в интернете
Рис. 11.5. Результаты работы программы с групповым присваиванием
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про безопасность в интернете. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 11 6).
v * Посмотреть мультфильм
Рис. 116 Мультфильм про безопасность в ишернете
Вот теперь можно приступить к разбору результатов.
В данном примере на первом шаге всем трем переменным было присвоено значение неизменяемого объекта - число 111, в результате чего все три переменные получили ссылки па него (внимательно смотрим на рис. 11.7, Шаг I).
Рис. 11.7. Групповое присваивание значений неизменяемым объектам
Затем на втором шаге двум переменным было присвоены новые значения (C“l, d=2). Поскольку числа относятся к неизменяемым объектам, то для чисел I и 2 были созданы новые объекты, и переменные с и b получили на них ссылки После этого все три переменные стали иметь свои уникальные значения (1,2 и III).
После этою с использованием списка на первом шаге всем трем переменным присвоили пустой список «[ ]», а это изменяемый объект, В результате чего все гри переменные получили ссылки на него (внимательно смотрим на рис 11.8, Шаг 1).
Шаг 1
Шаг 2
Рис. 11.8. Групповое присваивание значений изменяемым объектам
Затем на втором шаге двум переменным было присвоены новые значения (с=1, Ь=2). Поскольку списки относятся к изменяемым объектам, то для чисел I и 2 новые объекты не создавались, а данные были внесены в существующий изменяемый объект (фактически общий пустой список был дополнен новыми данными). После этого все три переменные стали иметь повое (измененное) значение, полученное из существующего объекта. То есть изменения были внесены только в две переменные (два списка) «с-l» и «Ь-2», но после этого все три переменных (три списка) получили новые и совершенно другие значения с=[1,2],Ь=[1,2],а={1,2].
Таким образом, во избежание проблем с изменяемыми объектами, их инициализацию лучше производить в отдельных инструкциях, то есть использовать не групповое, а обычное присвоение. Но бывают случаи, когда в программе требуется фиксировать синхронное изменение сразу в группе объектов, вот тут полезным окажется именно групповое присваивание.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на и результат. Задайте другие значения переменным и списку, и снова запустите программу на выполнение.
Краткие итоги гемы 11
В Pjthon инструкции присваивания всегда сохраняют ссылки на объекты, например, в переменных или в элементах структур данных, и никогда не создают копии присваиваемых объектов
Классическая форма присваивания имеет вид «идентификатор-значение», что соответствует синтаксису большинства языков программирования. Однако • Python доступны и другие формы инструкций присваивания;
• комбинированные инструкции присваивания (например, у += 3);
• групповое присваивание одного значения нескольким элементам (например, а=Ь=с=3);
• позиционное присваивание (например, х, у - 3, 5).
При групповом присваивании одною значения в памяти создается всего лишь один объект, разделяемый всеми переменными )руппы. Поэтому такая форма присваивания будет полезна для неизменяемых объектов, например, чисел или строк. А вот при использовании
изменяемых объектов типа списков или словарей нужно быть осторожными, так как изменение объекта через один из элементов группы будет оказывать влияние и на все другие элементы 1руппы.
Вопросы для самоконтроля к теме 11
1.Групповым присваиванием 3-м переменным было присвоено следующее значение: а=Ь=с=1. Затем двум переменным были присвоены другие значения: Ь=2, с=3. Какие в итоге значения будут иметь переменные а, b и с:
а=1. Ь=2, с=3:
а=1. Ь=1,с=1;
а=3, Ь=1, с=2;
а=3, Ь-2,е=1
2.Групповым присваиванием 3-м переменным было присвоено следующее значение: >=Ь=с=[]. Затем этим переменным были присвоены другие значения: а=1, Ь=2, с=3. Какие в
итоге значения будут иметь переменные а, b и с:
• а=[ 1,2,3J, Ь=-11,2,3], с“[ 1,2,3];
. а=[1],Н2],с-[3];
• а={1 J, b=[ 1,2], с=[ 1,2,3];
. а=| 1,1], b=[2,2|, c=|3,3J.
Тема 12. Условная инструкция if в Python
В ходе работы программ часто приходится выполнить (или пропустить) тот или иной фрагмент программного кода в зависимости от того, какие результаты были получены в предыдущих выражениях. Другими словами, в программе может присутствовать ветвление, которое реализуется условными операторами или операторами управления,
Как и в большинстве других языков программирования в Python присутствует условная инструкция «if», которая в общем случае имеет следующий формат записи:
if ^Условие №1>:
<Блок инструкций №1>
elif <Условие №2>:
<Блок инструкций №2>
else:
<3апасной блок инструкций»
Если первое условие истинно (результатом вычислений будет True), то выполняется первый блок инструкций. Если первое условие ложно (результатом вычислений будет False), то по очереди проверяются все условия необязательных блоков «elif» и. если найдется истинное условие, то выполняется соответствующий этому условию блок инструкций. Если все дополнительные условия окажутся ложными, выполнится запасной блок инструкций «else». Обязательным является только блок инструкций «if», остальные блоки могут быть опущены. При этом разрешается использовать любое количество блоков «elif», но только один блок «else».
Урок 12.1. Простейшая форма инструкции if
Для наглядности начнем с простейшей условной инструкции Простейшая инструкция содержит только основную часть «if», в которой вычисляется значение единственного условного выражения и по результатам вычисления принимается решение (рис. 12.1).
Рис. 12.1 Простейшее разветвление с использованием инструкции if
Как видно из данного рисунка, алгоритм разветвления работает следующим образом:
• если конечный результат имеет значение True, то интерпретатор выполняет блок кода, который следует за «if»;
• если конечный результат имеет значение False, то интерпретатор пропускает данный фрагмент кода и начинает выполнять инструкцию, следующую за текущей условной инструкцией.
Простейшая форма инструкции «if» предполагает, что если какое то условие выполняется, то нужно выполнить блок команд, следующих за служебным словом «if». А если условие не выполняется, го команды, следующие за служебным словом «if» пропускаются, и начинают выполняться все остальные команды после ipynnw команд блока «if». Представьте себе автомобиль, который едет по дороге. И он едет все время прямо и прямо. Но если на дороге вдруг попадется препятствие, например, яма, то автомобиль объедет ее и снова поедет прямо.
Давайте посмотрим, как эту ситуацию можно реализовать в программе с использованием простейшей инструкции «if». Это сделано в программном коде листинга 12.1.
Листинг 12.1. Изменение направления звижсиия автомобиля при обнаружении препятствия
X Редактор кода Z.
1 s Листинг 12.1
2 dotoga.rovno 'Ровная дорога' dorogayama = 'Яма на дорог'
a tormoz = 'Нужно сбавить скорость и объехать яму'
s rovno = 'Дорога ровная, можно ехать вперед*
т print гrovno> 8 doroga = rovno
if doroga == doroga.yama print<tormoz)
11 doroga = rovno
12 print(rovno।
13
14 print('-'-3e)
16 print(rovnoj
17 doroga = doroga.yama
18 if ooi oga doroga.уama
19 print(tormoz) doroga = rovno
21 print(rovno>
В этой пршраммс задано 4 текстовых переменных, в которых описано два состояния дороги (дорога ровная, яма на дороге) и два действия водителя (объехать яму или ехать прямо). Далее следуют две абсолютно одинаковых инструкции с простейшим разветвлением «if». В
этих инструкциях указано: если на дороге есть яма, то нужно объехать ее и продолжать движение, а иначе (то есть, когда ям на дороге нет) - можно просто двигаться дальше. Перед каждой инструкцией «if» стоит строка с оператором присвоения, в которой меняется состояние дороги. Сначала дорога ровная, а потом на ней появляется яма. В обоих случаях, когда автомобиль объедет яму, дорога снова становится ровной.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для зтою в главном меню нужно выбрать опцию
«Тема!2», а боковой панели - «Листинг 12.1».
Если выполнить эту npoi рамму, го получим следующий результат (рис. 12.1).
v s Пока эать результат
Урок 12.1. Простейшая форма инструкции if
Выполнение фрагмента программы по условию
Дорога ровная, можно ехать вперед
Дорога ровная, можно ехать вперед
Дорога ровная, можно ехать вперед
Нужно < ба вить скорость и объехать яму
Дорога ровная, можно ехать вперед
Рис 12 2. Результаты работы программы с инструкцией if
Обратите внимание, что один и тот же фрагмент программного кода выдал совершенно разные результаты. То есть в первый раз условие в инструкции «if» не было соблюдено (дорога была ровной и логическое выражение получила значение False), поэтому блок инструкций, который следует за служебным словом «if», был пропущен. Потом на дороге появилась яма (doroga = dorogayama), в этом случае условие в инструкции «if» было соблюдено (на дороге была яма и логическое выражение получила значение True), поэтому блок инструкций, который следует за служебным словом «if», был выполнен.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения переменным, поменяйте югическое условие, и снова запустите программу на выполнение.
Отметим, что в блоках кода инструкции if разрешается использовать, другие (вложенные) инструкции «И», а так же размещать инструкции других видов (например, циклы или обработчики ошибок).
Урок 12.2. У правляющая инструкция if/else
С использованием инструкции «if/else» можно выполнить не один, а два допустимых наборов инструкций. Инструкция «if» может быть расширена при помощи ключевою слова «else», которое в случае, когда значение условия равно False, позволяет выполнить альтернативный набор инструкций (рис. 12.1).
Рис. 12 1. Алгоритм работы инструкции «if/else»
Представьте, что вы находитесь па пешеходном переходе и перед вами светофор для пешеходов, у которого есть два огонька: красный и зеленый. Если загорится зеленый огонек, то дро1 у можно переходить, а если будет горегь красный огонек, то нужно стоять на
тротуаре и ожидать зеленого огонька (рис. 12.1).
Рис. 12.1. Действия пешехода при разных сигналах светофора
Программа, в которой показано использование условной инструкции «if/else», показана в листинге 12.2.
Листинг 12 2. Использование условной инструкции «if/else»,
X Редактор кода >
1 а Листинг 12.2
2 red_signal = 'Красный*
3 green_signal - ’Зеленый*
4 stop = 'Стоять и ждать зеленого сигнала* start 'Переходить дорогу*
в
svetofor = red_signal в if svetofor == red_signal
print('Сигнал светофора -*, svetofor) print(stop)
11 else
print('Сигнал светофора -*, svetofor;
i; print* start)
14
15 printl*-’*3G)
16
17 svetofor green_signal
18 if svetofor red_sigoal print('Сигнал светофора -*, svetofor) print(stop>
21 else:
printi'Сигнал <нетофора -*, svetofor) 23 print(start)
В этой программе задано 4 текстовых переменных, в которых содержаться сигналы светофора (красный, зеленый), действия пешехода (стоять, переходить дорогу), и две абсолютно одинаковых инструкции разветвления «iPelse». В этих инструкциях указано: если у светофора горит красный сигнал, то нужно стоять, а иначе (то есть когда торит деленью сигнал) - можно переходить дорогу. Перед каждой инструкцией «if/else» стоит строка с оператором присвоения, в которой светофору зажигают сначала красный, а потом зеленый сигнал.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию
«Тема 12», а боковой панели - «Листинг 12.2».
Если выполнить зту программу, то получим следующий результат (рис 12.2).
v \ Показать результат
Урок 12,2. Управляющая инструкция if/else
Разветвление в программе на две ветки
Сигнал светофора - Красный
Стоять и ждать зеленого сигнала
Сигнал светофора Зеленый
Переходить дорогу
Л Смотрите мультфильм про светофор
Рис 12.2 Резулыаты работы лро!раммы с инструкцией iCelse
Обратите внимание, что один и тот же фрагмент программного кода выдал совершенно разные результаты. То есть в первый раз был выполнен блок инструкций, который следует за служебным словом «if» (выражение svetofor — red signal получило значение True), а все инструкции после служебного слова «else» были пропущены
Во вюром случае блок инструкций, который следует за служебным словом «if» был пропущен (выражение svetofor = ied_signal получило значение False), а все инструкции после служебного слова «else» были выполнены.
В этом примере было явно задано выполнение действий, как при значении логического выражения True, так и при значении логического выражения False. Такой код более
понятен и лучше читается.
Эта интерактивная книга может не только выполнить программный код, но и показать вам му гьтфильм про кота светофор. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 11.3).
* Посмотреть мультфильм
Рис. 12.3. Мультфильм про светофор
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения переменным, поменяйте логическое условие, и снова запустите программу на выполнение.
Урок 12.3. Управляющая инструкция if/elif/else
Когда требуется выполнить выбор не из двух вариантов, а из трех и более, то инструкция «if» может быть расширена при помощи требуемого количества ключевых слов «elif», которые, по сути, служат для объединения двух соседних инс1рукний «if». Обратимся к сказке «Царевна ля1 ушка» (рис. 12.1).
Рис. 12.1. Г ерои скажи «Царевна лягушка»
Приедем фрагмент этой сказки
Вышли братья на широкий отцовский двор, натянули свои тугие луки и выстрелили Пустил стрелу старший брат. Упала стрела на боярский двор, и подняла ее боярская дочь. Пустил стрелу средний брат полетела стрела к богатому купцу во двор. Подняла ее купеческая дочь.
Пустил стрелу Иван-царевич — полетела его стрела прямо в топкое болото, и подняла ее лягушка-квакушка...
Вог вам замечательный сюжет, который можно использовать для изучения инструкции «if/elif/else». Программа, которая написана на основе сюжета этой сказки, приведена в листинге 12.3.
Листинг 12.3. Использование инструкции «if/clif/clse»
X Редактор кода
1 * Листинг 12.3
1 я Братия
brat_l = 'Старики брат'
4 brat_2 = 'Средний брат'
brat_3 = 'Младиий брат'
т я Дворы dvor_l = 'Боярский двор’
9 dvor_2 = 'Купеческий двор* ie dvor_3 = 'Болото топкое' 11
12 я Кто выпустил стрелу strela brat.J
14 я strela = brat_2
15 я strela = brat_3
17 я Инструкции выбора if strela == brat_l print('Выпустил стрелу - ', strela) print(‘ynana стрела на - ' dvor_l; elif strela «« brat_2
print('Выпустил стрелу - ', strela) print('Упала стрела на - •, dvor_2) 24 else:
print('Выпустил стрелу - ', strela print('Упала стрела на - dvor_3)
Здесь в переменных brat l, brat 2 и brat 3 сохранены сведения о братьях, а в переменных dvor l, dvor _2 и dvor _3 созданы дворы, куда упали стрелы. Затем в переменной strela указано, кто же из братьев выпустил стрелу. Обратите внимание, что здесь переменная strela присутствую в грех строчках, две из которых закомментированы. Ну и в последних строках содержится инструкция «ifrelifielse», в которой будет показано то место, куда упала стрела. Если логическое условие в одном из блоков разветвления программы «iPelif'else» будет выполнено, то отработают только те инструкции, которые находятся в теле этого блока (то есть имеющие отступ от края строки в 4 символа).
Теперь выполним тгот программный код 3 рата. Первый раз выполним программу в том виде, как она есть. Л второй и третий раз после того, как удалим символ комментария «#»
со строк: strela = brat_2 и strela = brat_3. Таким образом, все три брага по очереди будут
выпускать свою стрелу.
Результаты работы этой программы можно посмотреть в интерактивном разделе киш и. Для этого в главном меню нужно выбрать опцию «Тема 12». а боковой панели - «Листинг 12.3».
В тоге получим следующий результат (рис 12.1).
Показать результат
Урок 12.3. Управляющая инструкция if/elif/else
Разветвление и программе на множество веток
Выпус гил стрелу - Старший брат
Упала стрела на Боярепий двор
* Смотрите мультфилом: "Царевна лжушка"
Рис 12.2. Результаты работы программы с инструкцией if/elid- else
Примечание.
В этом примере можно было бы использовать инструкцию организации цикла, но циклы мы будем рассматривать в следующих уроках.
Как видно из данного примера, при использовании ключевых слов «elif» выполнение альтернативного блока инструкций происходит лишь тогда, когда соответствующее блоку условие имеет значение True, а условные выражения всех предыдущих блоков в результат е вычислений дают False. Блок инструкций после ключевою слова «else» будет выполнен только тогда, когда все предыдущие лог ические выражения получать значения «False».
Эта интерактивная книга может не только выполнить программный код, но и показать вам мультфильм «Царевна - лягушка». Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 11.3).
* Посмотреть мультфильм
Рис. 123. Мультфильм «Царевна - лягушка»
Перенести эту программу в «Редактор кода, выполните его три раза, снимая комментарии со строки «strela-», и посмотрите на результаты.
У рок 12.4. Однострочное выражение if/else
Достаточно часто возникают ситуации, когда логические условия настолько просты, что использование многострочных условных инструкций становится нецелесообратным. Именно по этим причинам в Python была введена специальная однострочная конструкция, называемая трехместным выражением if/else или тернарным оператором if/else. коюрая может использоваться, как сама по себе, так и в составе арифметических выражений. Программа, в которой показано использование однострочного трехместного выражения if else. приведена в листинге 13.4.
Листинг 13.4. Пример использования трехместного выражения if/else
X Редактор кода
1 # Листинг 12.4
2 й Инициализируем переменные
з х = 15
4 у = 10
5
6 й ОЬычная инструкция if/else
7 If х > у:
s = х ♦ у
э else:
ie s = х - у
11 print('Обычная инструкция if/else: s=‘, s)
12
13 й Однострочное (трехместное) выражение
14 s х * у if х > у else х - у
is print('Однострочное выражение if/else: s=', sj
16
17 й Однострочное (трекместное) выражение в составе другой инструкции
18 s«x + (x + yifx>y else х у) + у**2
19 print('Однострочное выражение if/else в составе другой инструкции') 28 printi's =', s)
В этой программе используется три разных версии инструкции if/else.
Результаты работы этой программы можно посмотреть» интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема12», а боковой панели - «Листинг 12.4».
После выполнения этой программы будет получен следующий регультат (рис. 12.1).
v ч Показать результат
Урок 12.4. Однострочное выражение if/else
Разветвление в программе одной строкой
Обычная инструкция if/else: s= »
Однострочное выражение if/else s= м
Однострочное выражение If/else в составе другой инструкции s= не
» Смотрите мультфильм: про клавиатуру
Рис. 12.2. Резулыаты работы про1раммы с однострочным выражением if/else
Как видно из данного примера, однострочное выражение «if else» дает тот же результат, что и традиционная инструкция «if». Однако в этом случае программный код гораздо короче и имеет всего одну строку, в то время как традиционный способ организации вычисления в разных ветках программы имеет 4 строки.
В этом примере операции в трехместном выражении «s = х + у if х > у else х - у» выполняются в следующей логической последовательности:
• проверяется условие х > у;
• если результат этой проверки будет иметь значение True, то будет найдена сумма переменных (s = х + у);
• если результат этой проверки будет иметь значение False, то будет найдена ра зность переменных (s = х - у).
ЮЕ) Эта интерактивная книга может не только выполнить программный код, но и °П покачать вам мультфильм про клавиатуру. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 11.3).
Рис. 12.3 Мультфильм про клавиатуру
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения пере менным, поменяйте логическое условие, и снова запустите программу на выполнение.
Краткие итоги гемы 12
Условная инструкция «iPelif/else» дает возможность изменить ход программы за счет выполнения только определенных фрагментов (веток) программного кода. Обязательным является только ключевое слово «if», остальные ключевые слова конструкции могут быть опущены. При этом разрешается использовать любое количество ключевых слов «elif», но только одно ключевое слово «else».
В Python есть специальное однострочное (трехместное) выражение «if/else» (его еще называют тернарным оператором «if'else»). Эту конструкцию можно представить в следующем виде: «RbZ = A if X else В». Вычисления здесь выполняются по сокращенной
схеме: интерпретатор обрабатывает выражение «А», только когда условие «X» истинно, а выражение «Z» обрабатывается, только когда условие <<Х» ложно
Вопросы для самоконтроля к теме 12
I. Какая ит частей условной инструкции if/elif/else является обязательной:
• if;
• elif.
• else;
• if/else.
2. Какая из частей условной инструкции if/elif/else позволяет разделить ход выполнение программы на 3 и более веток.
• elif;
• if;
• else;
• if/else.
Гема 13. Циклы for и while в Python
Выполнение программ, написанных на любом языке программирования, но умолчанию является последовательным (прока за строкой про!раммного кода). По достаточно часто требуется изменить ход выполнение программы, например, повторить несколько раз выполнение определенного фрагмента кода. Для этого в языках программирования предусмотрены различные типы циклов, которые способны повторять определенный код несколько раз. Чтобы понять принцип работы инструкций организации цикла, рассмотрим следующие схемы на рис. 13.1.
Рис. 13.1 Алгоритмы работы инструкций организации цикла
Согласно схемам, приведенным на рисунке, возможны два варианта организации циклов в программах:
♦ схема «пока» - программный код в блоке цикла повторяется до тех пор, «пока» логическое выражение, присутствующее в инструкции организации выхода из цикла, имеет значение True;
• схема «для» - программный код в блоке цикла повторяйся до тех пор. пока «для» переменной, присутствующей в инструкции организации цикла, не будут перебраны все значения в интервале 1 п.
Циклы позволяют изменить ход программы таким образом, что вместо многократного написания и выполнения блоков похожего кода, можно повторить один блок кода заданное (или конечное) число раз.
Урок 13.1. Цикл for/in
Важной инструкцией языка Python является инструкция организация циклов «for/in». Это универсальный итератор (повторитель) последовательностей, поскольку эта инструкция позволяет выполнять обход (перебор) элементов в любых объектах, поддерживающих
возможность совершения итерации (перебора элементов). Сюда относятся как встроенные объекты (например, строки, списки или словари), так и объекты, создаваемые с помощью классов (о классах будет рассказано чуть позже).
В общем виде для цикла «for» используется следующий синтаксис:
for <Переменная> in «-Изменяемый обьект>:
<Тело цикла>
else:
^Дополнительный блок инструкпий>
Давайте вспомним сказку «Репка» (рис. 13.2).
Рис. 13.2. Г еров сказки «Репка*
А ведь компьютер сможет рассказать эту сказку, если использовать инструкции для организации циклов. Вспомним фрагменты этой сказки:
«Посадил дед репку и говорит:— Расти репка сладкая-сладкая! Расти большая-пребольшая! Выросла репка сладкая и большая-пребольшая Пошел дед репку рвать: тянет-потянет, вытянуть не может». Потом он стал звать помощников, и общими усилиями Мышка за кошку. Кошка за Жучку, Жучка за внучку, Внучка за бабку. Бабка за дедку. Дедка за репку —
Тянут -потянут— и вытянули репку.
Программа по мотивам сказки «Репка», в которой показано использование инструкции организации цикла «for/in», приведена в листинге 13.1
Листинг 1.3.1. Использование инструкции орт антгзации цикла «for/in»
X Редактор кода S
1 в Листинг 13.1
2 # Формируем список героев
3 list.l = ['Дедка 'Бабка ', 'Внучка ',
4 'Жучка ', 'Кишка ', 'Мышка ']
5 list_2 = ['за репку', 'за дедку', 'за бабку', 'за внучку', 'за Жучку', 'за кошку']
# Цикл перебора элементов списка printf'TepoH сказки:")
19 for geroi in list.l
11 print(geroi)
12 print('-'*30)
13
14 # Цикл перебора элементов списка
15 print("Кто за кого дермался:")
16 i = 0
for geroi in list.l print(li*t_l[1] ♦ list_2[i]) i += 1
29 printf-' * 30)
22 printfKaK герои тянули репку:")
23 i = 5
24 for geroi in list.l print(Xist_l[1] * list_2[i])
26 i -= 1
27 printf'Тянут-потянут — и вытянули репку!')
В этой программе сначала создано два списка (с героями сказки и кто за кого держался), а потом с использованием инструкций «for/in» организовано три цикла:
* в первом выводятся на печать герои сказки,
во втором цикле показано - кто за кого держался
в третьем цикле показано, в каком порядке выстроились герои сказки, когда смогли
вытянуть репку.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Гема13». а боковой панели - «Листинг 13.1».
После выполнения этой программы будет получен следующий результат (рис. 13.3).
ВОН
Герои сказки: Дедка Бабка Внучка Жучка Кошка Мышка
Кто за кого держался: Дедка за репку Бабка за дедку Внучка за бабку Жучка за внучку Кошка за Жучку Мышка за кошку
Как герои тянули репку: Мышка за кошку Кошка за Жучку Жучка за внучку Внучка за бабку Бабка за дедку Дедка за репку Тянут-погянут - и вытянули репку!
Рис. 13.3. Результаты работы программы с инструкцией tifbr'in»
В цикле «for/in» можно точно также обрабатывать элементы кортежа.
Эта интерактивная книга может не только выпо. шить программный код, но и показать вам мультфильм про репку. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 13.4).
* *По<мо грезь му. ътфилъм
Рис. 13.4 Мультфильм про репку
MmJH • ’ “ЗЕ-1
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения спискам (например, числовые данные), измените инструкции обработки чисел и снова запустите программу на выполнение.
Урок 13.2. Прерывание цикла for/in инструкцией
При рафаботке программ часто требуется npepaaib выполнение цикла при выполнении некоторого условия Если цикл нужно прервать, то используется ключевое слово «break», которое передает управление инструкции, следующей сразу за циклом Вернемся к мультфильму про козленка, который умел считать до десяти, там паром мог выдержать только десять пассажиров. Значит можно написать программу, в которой нужно прекратить посадку на паром, если на него уже сели 10 пассажиров (рис. 13.5).
Рис. 13.5.1 ерои мультфильма «Про козленка»
Вспомнив этот мультфильм, напишем программу, в которой с использованием инструкции «break» прерывается процесс загрузки парома. Текст этой программы приведен в листинге 13.2.
Листинг 13.2. Прерывание цикла с использованием инструкции «break»
X. Редактор кода
1 ff Листинг 13.2
2 и Создаем список из 15 пассажиров парома
з Иst_passagiг = ["Козленок", "Теленок", "Корова",
4 "Бык", "Конь", "Свинья", "Кот",
"Пес", 'Бар,эн", "Гусь", "Индюк", "Курица", "Волк", "Лиса", "Медведь"]
print('Список пассажиров, желающих попасть на паром.') for spisok in list_passagir
J printtspi sok; 11
12 parom = [] * Пустой паром
13 i = 0 Счетчик пассажиров
14 for passagir in list.passaglr param append'passagir) if на паром сел один пассажир 1 *= 1 ft Увеличиваем счетчик пассажиров
17 if 1 >= 10: в Проверяем загрузку парима
18 break « Прекращаем посадку
19
2S print('Кого взяли на паром.')
21 printiparom)
22 print('Всего пассажиров на пароме - ', 1)
Разберемся с кодом этой программы Здесь создан список из 15 пассажиров, которые желают сесть на паром (list_passagir), и этот список выведен на печать. Потом заданы две переменные: parom - список пассажиров, которые сядут на паром (в начале программы список пустой), i - счетчик пассажиров, которых будут пускать на паром. Затем с использованием инструкции «for/in» организован цикл, в котором из списка желающих поехать list passagir выбирается очередной пассажир, который добавляется к списку пассажиров парома. Это делается с использованием инструкции - parom.append»passagir). После того, как пассажир сел на паром увеличивается счетчик пассажиров (i+=l) и следом проверяется условие: а не зашел ли на паром уже 10-й пассажир. Если на пароме меньше десяти пассажиров (условие i>=10 имеет значение False), то цикл посадки продолжается и на паром заходит следующий пассажир из списка list passagir Как только на паром зашел 10-й пассажир (условие i>=10 имеет значение True), отрабатывает инструкция «break», которая прерывает цикл, то есть прекращает посадку пассажиров После этого выполняются инструкции, которые находятся ниже инструкций тела цикла. То есть на печать выводится информация о пассажирах, которые сели на паром (список - parom), и значение счетчика севших на паром пассажиров (i).
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию
«Тема 13», а боковой панели - «Листинг 13.2».
После выполнения этой программы получим следующие результаты (рис. 13.6).
—__________________________________________________________________£
Список пассажиров, желающих попасть на паром. Козленок Теленок Корова Бык Конь Свинья Ко г Пес Баран Гусь Индюк Курица Волк Лиса Медведь Кого взяли на паром ['Козленок', 'Теленок', 'Корова', 'Бык', 'Конь', 'Свинья', 'Кот', 'Пес', 'Баран', 'Гусь'] Всего пассажиров на пароме - 16
Рис. 13.6. Результаты работы программы с инструкцией «break»
Эти интерактивная книга может не только выполнить программный код, но и показать вам мультфильм про козленка, который умел считать. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 13 7),
* ЯВ Пхмотрсть мультфильм
Рис. 13.7. Мультфильм про козленка, который умел считать
Как видно из результатов работы этой программы, на паром из 15 пассажиров было допущено только 10.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения спискам, измените условие прерывания цикла и снова запустите программу на выполнение.
Урок 13.3. Цикл for/in с функцией range()
С инструкции организации цикла «for» очень часто используется функция range(), которая позволяет генерировать ряд чисел в рамках заданного диапазона. Эта функция возвращает последовательность целых чисел на основе переданных ей аргументов, и может иметь три аргумента - range( start, stop, [step]):
• start — зто первое значение в диапазоне чисел (если функция rangef) вызывается только с одним аргументом, го start = 0);
• stop — это верхняя граница диапазона (важно помнить, что само граничное значение не включается в последовательность).
• step - таг изменения чисел в заданном диапазоне (не обязательны!) аргумент).
Вернемся на берег реки к нашему парому. Па пристани 15 пассажиров, которые хотят переправит ься на другой берег, а паром вмещает только 10. Как же перевезти всех? Но ведь паром может сделать 2 рейса: первый рейс перевезет 10 пассажиров, потом паром верншея и заберет оставшихся 5 пассажиров.
А запустить пассажиров на паром может эта замечательная функции range(), ведь она очень хорошо умеет считать, и не только до десяти. Как раз такая программа приведена в листинге 13.3.
Листинг 13.3. Цикл for/in с функцией range (см. листинг на следующей ci ранние)
Посмотрим, что же написано в этой программе. Здесь создан список из 15 пассажиров, которые желают cectb на паром (list passagir). Потом заданы две переменные: patom -список пассажиров, которые сядут на паром (пока он пустой), vsego - счетчик пассажиров (он будет считать пассажиров, которые зашли на паром). Затем с использованием инструкции «for 1 in range(0, 10)» организован цикл. В этой инструкции в функции range(0, 10) как раз и задано количество пассажиров, которых можно пропустить на паром. Когда паром делал первый рейс, функция имела вид range(0, 10). Фактически в цикле переменная «Ь> будет увеличиваться на единицу, и принимать значения от 0 до 9 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), а это 10 индексов (номеров) наших пассажиров в списке - list passagir. Далее, с использованием инструкции «parom.append(list_passagir|i]j» на паром садится «i-й» пассажир. Ну и наконец, переменная «vsego» увеличивается на единицу, то есть подсчитываются севшие пассажиры Таким образом, в инструкциях первого никла был сформирован первый рейс парома из 10-ти пассажиров.
Потом паром вернулся назад за оставшимися пассажирами. Здесь все повторилось, только параметры организации цикла получили другие значения - «for i in range(10, 15)». Фактически в этом цикле переменная «Ь> будет увеличиваться на единицу, и принимать значения от 10 до 14 (10, 11, 12, 13, 14), а это ка раз 5 индексов (номеров) наших оставшихся пассажиров в списке - list passagir. Таким образом, в инструкциях второго цикла был сформирован второй рейс парома из 5-ти пассажиров,
1 а Листинг 13.3
2 а Создаем список из 15 пассажирое парома list.passagi г = ["Козленок", "Теленок", "Корова",
4
5 е
"Бык", 'Конь'-, "Свинья", "Кот", "Пес", "Баран", "Гусь", 'Индюк", "Курица", "Волк", "Лиса", "Иедведо"]
print?'Рейс 1 - первые 10 пассажиров')
9 pare» - [] а Пустой паром
1< vsego = 0 # Счетчик пассажиров
11 for i in range। 0, J ):
12 а на паром сеп один пассажир paroa append?list_passagir[i])
14 а Увеличиваем счетчик пассажиров vsego ♦= 1
10
17 print?'Кого взяли на паром:')
18 printfparonj printf'Bcero пассажире в на парные - ’, vsego)
20 print? "-’«36)
21
22 print?'Рейс 2 - оставвиеся 5 пассажиров')
23 рагсв = [] а Пустой паром vsego =6 а Счетчик пассажиров
2S for i in rangetie, 15):
26 а на паром сел один пассажир рагов append?11 st_passagir[i]) а Увеличиваем счетчик пассажиров vsego ♦= 1
31 print?'Kof взяли на паром:')
32 print(paroB) print?'Всего пассажире? на пароме - ', vsego)
34 print?'-'*36)
35
36 print?'Рейс 3 - назад поехали через одного')
37 рагсв = [] t Пустой паром vsego - 0 а Счетчик пассажиров
39 for i in rangefO, 15, 2): а на паром сел один пассажир рагов append?list.passagir[i])
42 а Увеличиваем счетчик пассажиров vsego ♦= 1
45 print?'Кого взяли на паром:')
46 pnntiparcBi
47 print?'Bcero пассажиров на пароме - ', vsego)
Через некоторое время пассажиры стали возвращаться назад, и паром сделал третий рейс. Но садились пассажиры на паром через одного. Здесь был создан третий цикл, в котором все повторилось, только параметры организации цикла получили другие значения - «tor i in range(U, 15, 2)». Фактически в зтом цикле переменная «I» будет принимать значения от 0 до 14, но индекс «I» в каждом цикле будет увеличиваться не на 1, а на 2 (0, 2, 4, 6. 8. 10, 12, 14), а это 8 индексов (номеров) наших пассажиров в списке - list passagir Таким образом, в инструкциях третьего цикла был сформирован третий рейс парома из 8-ми пассажиров.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меннз нужно выбрать опцию «Тема13», а боковой панели - «Листинг 13.3».
Если запустить эту программу на выполнение, то оудет получен следующий результат (рис 13.8).
Очистить
Рейс 1 первые Ю пассажиров
Кого взяли на паром: ["Козленок", "Теленок", 'Корова", ‘Бик', 'Конь", 'Свинья', 'Кот", Пес . Баран', Тусь] Всего пассажиров на пароме - 19
Рейс 2 оставшиеся 5 пассажиров Кого взяли на паром. ('Индюк', 'Курица', 'Волк', 'Лиса', Медведь') Всего пассажиров на пароме - 5
Рейс 3 - назад поехали через одного
Кого взяли на паром: ['Козленок', 'Корова', 'Конь', Кот', 'Баран , 'Индюк , ’Волк", Медведь ] Всего пассажиров на пароме - в
Рис. 13.8. Роулыаты работы программы организации цикла с функцией range))
Как видно из этих результатов, паром перевет всех пассажиров и не утонул, так как их количество не превышало десяти.
При использовании в циклах функции range() нужно помнить об одной особенности: число, в котором указана верхняя граница диапазона (stop), не войдет в список создаваемых чисел для индекса «i». Из приведенного выше примера видно, что когда был задан диапазон получения чисел range! 10. 15). фактически был получен набор чисел от 10 до 14 (10, II, 12, 13. 14).
У функции rangeO есть еще одна особенность она будет успешно работать и при наличии всего одного аргумента. Например, когда в программе формировался первый рейс для перевозки десяти пассажиров, то инструкция организация цикла имела вид «for i in range(0, 10)». Но ее можно было написать и так - «for i in range! 10)».
’ ir-1
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения аргументам функции rangef) и снова запустите программу па выполнение.
Урок 13.4. Цикл while
Инструкция цикла «while» представляет собой универсальный цикл общего назначения. Он служит для повторного выполнения кода, расположенного в его теле, до тех пор, пока условие цикла остается истинным, то есть имеет значение True. В общем случае синтаксис цикла «while» в Python можно представить в следующем виде:
while <Условное выражением
-Тело цикла>
else:
•«Дополнительный блок инструкций
Работает цикл «while» следующим образом. Каждый раз перед выполнением новой итерации, то есть перед очередным выполнением блока инструкций в теле цикла, происходит проверка условия (в заголовке цикла) и, если результат будет иметь значение True, код в геле цикла выполняется. Далее интерпретатор возвращается в начало цикла и снова проверяет его условие, повторяя все процедуры заново до тех пор. пока условие цикла не вернет значение False. При этом значении интерпретатор прерывает выполнение цикла и, пропустив блок инструкций в его теле, передает управление либо необязательному ключевому слову «else», выполняя дополнительный блок инструкций, либо инструкции, следующей за циклом. При этом следует иметь в виду, что набор инструкций блока «else» выполняется только тогда, когда выход из цикла производится не инструкцией «break».
Вернемся на пристань к нашему парому и посадим 10 пассажиров с использованием инструкции «while» для организации цикла (листинг 13.4).
: Листинг 13.4. Цикл с инструкцией while
"X, Редакт op кода '
1 я Листинг 13.4
2 я Создаем список из 15 пассажиров парома Vist_passagir = ["Козленок", "Теленок", "Корова", "Бык",
4 "Конь", "Свинья", "Кот", "Пес", "Баран",
"Гусь", "Индюк", "Курица", "Волк",
б "Лиса", "Медведь"]
parom = [] в Пустой паром
vsego =0 # Счетчик пассажиров
1С virile vsego := 1Э:
11 я на паром сел иди» пассажир parom append(list_passagir[vsego]) ж Увеличиваем счетчик пассажиров
14 vsego *= 1
IS else:
parom.pop() # последнего пассажира не пустили
vsego -= 1 « 11-й пассажир не вовел
18 printf'Посадка закончена, отдать концы!')
19 printf'-'*3в)
20
21 printf'Кого взяли на парен:') printt,parom)
23 printf'Bcerr пассажиров на пароле - ', vsego.
Посмотрим, что же написано в этой программе. Здесь создан список из 15 пассажиров, которые желают сесть на паром (list passagir). Потом заданы две переменные: parom -список пассажиров, которые сядут на паром (пока он пустой), vsego - счетчик пассажиров (он будет считать пассажиров, которые зашли на паром). Затем с использованием инструкции «while vsego <= 10» организован цикл. В этой инструкции в заголовке цикла задано условие «vsego <= 10», то есть количество пассажиров, которых можно пропустить на паром, должно быть меньше или равно 10. Здесь переменная «vsego» сначала имеет значение - 0 (еще никто не садился). Далее в теле цикла с использованием инструкции «parom.appendflist j>assagir|vsego])» на паром садится очередной пассажир, а переменная «vsego» увеличивается на единицу, то есть подсчитываются севшие пассажиры. После этого управление работой программы передается в заголовок цикла к инструкции «while», где проверяется, а не превысило количество пассажиров на пароме числа 10? Если не превысило (логическое выражение имеет значение True), то к посадке допускается следующий пассажир (здесь счетчик пассажиров «vsego» одновременно является и индексом пассажира в их списке). Если пассажиров больше 10 (то есть 11), то условие «vsego <= 10» получает значение False и 11-го пассажира нужно не пуст ить на паром. После этою выполняются инструкции в блоке «else», где 11-й пассажир удаляется из списка и из счетчика пассажиров (ведь ею не пустили на борт) и работа цикла завершается. Ну и в последних строчках программы на печать выводится список пассажиров, которые сели на паром
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема13». а боковой панели - «Листинг 13.4».
После выполнения этой программы будет получен следующий результат (рис. 13.9).
v s Показать результат
Урок 13.4. Цикл while
Использование условия для завершения цикла
Посадка закончена, отдать концы!
Кого взяли на паром:
['Козленок', 'Теленок', 'Корова', 'Бык', 'Конь, 'Свинья, 'Кот', 'Пес',
Ъаран', Гусь']
Всего пассажиров на пароме - ie
Рис. 13.9. Результаты работы программы с инструкцией «while»
Как видно из этих результатов, паром взял на борт 10 пассажиров и не утонет по пули на другой берег, так как нх количество не превысило десяти
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другое значение логическому выражению в инструкции while и снова запустите программу на выполнение.
Урок 13.5. Инструкции break, continue и вложенные циклы
Кроме инструкции «break» (прервать) с циклами можно использовагь и инструкцию «continue» (продолжить). Эти инструкции используются только внутри циклов и выполняют примерно те же функции, что и в друг их языках npoi раммирования:
• break - прерывает цикл и передает управление следующей за циклом инструкции.
• continue - прерывает только текущую итерацию никла и производит переход в начало цикла, то есть в строку заголовка.
Принципиальное отличие инструкций «break» и «continue» представлено на рис. 13.10.
Рис. 13.10. Отличительные признаки инструкций «break» и «continue»
Иt данного рисунка видно, что инструкция «break» полностью завершает цикл и передаст управление блоку инструкций, которые находятся сразу за пределами цикла, а инструкция «continue» прерывает выполнение только следующую за ней инструкцию и передает управление в блок организации цикла.
Обе инструкции (break и continue) могут находиться в любом месте внутри тела цикла, но, как правило, их используют в условных инструкциях «if», вложенных в цикл, чтобы выполнить необходимое действие в ответ на некоторое условие.
Все виды циклов в Python могут иметь другие вложенные циклы и условные инструкции, позволяя нужным образом изменять ход выполнения программы. При этом каждая инструкция «break» или «continue» относится только к одному циклу, в теле которого она находится. Поэтому завершить все циклы из внутреннего (вложенного) цикла не получится, нужно использовать инструкцию «break» во внутренних, и во внешних циклах.
Все дети в школе учат таблицу умножения, а для того, чтобы выучить таблицу умножения ее печатаю в учебниках и на обложках тетрадок. Л мы напишем программу, которая будет формировать и печатает таблицу умножения, А чтобы программы не была слишком длинной, в ней будут использованы вложенные циклы, инструкции break» и «continue». Текст этой программы показан в листинге 13.5.
Листинг 13.5. Пример использования инструкций break, continue
X Редактор кода S
1 # Листинг 13.5
2 у = 1 » Задаем стартовое значение счетчика внутреннего цикла з n.max = 5
4 printf Таблица умножения чисел от 2 до n .тах>
с for х in range;i, 101 # Внешний цикл
if х == 1: # Если х==1, то умножение на 1 пропускаем
continue s Переходим в начали внешнего цикла tor
9
ю while True' s Внутренний цикл
ii if у == 1: к Умножение на 1 пропускаем
ж Увеличиваем счетчик внутреннего цикла на единицу
13 у ♦= 1
14 continue s> Переходим в начало вну треннего цикла ип11е
is
print(x, 'х', у, ' = х * у) с Выводи™ произведение чисел
17
1 f у == n_hiax ж Если у==п_яюх
19 prlnt('----------') # Переходим на новую строку
20 к Новое стартовое значение счетчика внутреннего цикла
21 у = 2
22 break ж Прерываем внутренний цикл (внешний нет)
23
у += 1 ₽ Увеличиваем счетчик внутреннего цикла на единицу
25
2i it х п_тах # Если x==n_mox
27 break # Прерываем внешний цикл
28
29 к Выводим сообщение о завершении циклов и всей просран*. в print(’Программа завершила работу!’)
В этой программе с использованием вложенных циклов, реализован алгоритм формирования таблицы умножения чисел в интервате or I до п тах Здесь где п тах - тто максимальное число, до которого можно создавать таблицу умножения В нашем случае для n max мы можем задавать значения от 2 до 9, Так как любое число, умноженное на 1. будет давать то же число, то произведение всех чисел на 1 в прог рамме выдаваться не будет.
Внешний цикл ор1анизован с использованием инструкции «for х in ranged, 10);», в котором переменная «х» меняет свое значение от 1 до 9. Внутренний (вложенный) цикл организован с использованием инструкции «while Тше» - бесконечный цикл, в котором используется счетчик циклов (переменная «у»). Внутренний цикл прерывается инструкцией «break» тогда, когда счетчик циклов достигает значения n_max, а внешний цикл прерывается инструкцией «break» тогда, когда значение переменной «х» принимает значение п тах. В обоих циклах используется инструкция «if», в которых проверяются следующие условия
• имеют ли переменные «х» или «у» значения, равные 1 (для таких значений элемент таблицы умножения не формируется, и управление передается в заголовки циклов инструкцией «continue»);
• имеет ли переменная «у» значение птах (если да, то прерывается внутренний цикл инструкцией «break»);
• имеет ли переменная «х» значение п max (если да, то прерывается внешний цикл инструкцией «break»).
В лом примере задано значение п ггих=5, то сеть будет получена таблица умножения чисел в интервале от 2 до 5. Практически каждая строчка программы имеет комментарий, из которого понятно, что же выполняется в этой инструкции
©Резулыаты работы этой программы .можно посмотреть в интерактивном разделе книг и. Для этого в главном меню нужно выбрать опцию
«Тема 13», а боковой панели - «Листинг 13.5».
После выполнения этой программы будет получен следующий результат (рис. 13.11).
ifUjhOD
Таблица умножения чисел от 2 до 5
2x2 = 4
2x3-6 2x4 = 8 2 х 5 = 1В
3x2 = 6
3x3 = 9
3 х 4 = 12
3 х 5 = 15
4x2 = 8
4 х 3 = 12
4 х 4 = 16
4 х 5 = 20
5 х 2 = 10
5 х 3 = 15
5 х 4 = 20
5 х 5 = 25
Программа завершила работу!
Рис 13.11 Результаты работы программы с инструкцией инструкций break и continue
Ура"! Программа действительно напечатала таблицу умножения и ни разу не ошиблась.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другое значение переменной птах (в интервале от 2 до 9) и снова запустите программу на выполнение.
Краткие итоги темы 13
Для обхода (перебора) элементов в любых объектах, поддерживающих возможность совершения итераций (циклов), в Python предназначена инструкция «for/in». В ходе выполнения цикла интерпретатор Python один за другим присваивает переменной, которая находится в заголовке цикла, значения элементов итерируемого объекта (например, списка), а в теле цикла выполняет инструкции с использованием значения этой переменной.
Для многократного повторного выполнения кода (не только обхода элементов) служит универсальный цикл общего назначения «while», который выполняет блок инструкций, расположенный в его геле, до тех пор, пока условие цикла остается истинным, то есть имеет значение True.
При необходимости в циклах «for» и «while» можно использовать необязательный блок «else», набор инструкций которого выполняется только после удачного завершения цикла (то есть при отсутствии ошибки или прерывания цикла инструкцией «break»).
При использовании в циклах счетчиков их следует инициализировать вне циклов, чтобы при каждой новой итерации значения счетчиков не сбрасывались циклом в первоначальное состояние.
Для прерывания циклов в Python используется инструкция «break», которая принудительно завершает цикл и передает управление следующей за циклом инструкции. Если нужно прервать только текущую итерацию, необходимо использовать инструкцию «continue», которая после прерывания итерации производит переход в начало цикла, то есть к заголовку. Обе инструкции могут появляться в любом месте внутри тела цикла, но, как правило, их используют во вложенных в цикл условных инструкциях «if», чтобы выполнить необходимое действие в ответ на некоторое условие.
В Python можно использовать многоуровневые вложенные циклы.
Вопросы для самоконтроля к теме 13
1. Для чего в программах используется такая инструкция организации цикла «for । in list:»:
• для последовательного перебора всех элементов списка «list»;
• для присвоения переменной «i» индексов элементов списка «list»;
• для организации цикла, где «iw-значепие счетчика начала цикла (start), «list»-зпачение счетчика конца цикла (stop):
• для поиска значения переменной «Ь> среди элементов списка «list».
2. Для чего используется значение «А» при такой инструкции организации цикла
«for i in range(\, В, С):»:
• для задания начального значения счетчика цикла «i»;
• для задания конечного значения счетчика цикла «i»;
• для задания шага изменения счетчика цикла «i»;
для задания значения первого элемента, коюрый будет обработан в цикле.
3. Для чего используется значение «В» при такой инструкции организации цикла
«for i in range(A, В, С):»:
• для задания конечною значения счез чика цикла «1»;
• для задания начального значения счетчика цикла «1»;
• для задания шага изменения счетчика цикла <й»;
• для задания значения второго элемента, который будет обработан в цикле.
4 Для чего используется значение «С» при такой инструкции организации цикла «for I in range(A, В, С):»:
• для задания шага изменения счетчика цикла «i»;
• для задания конечного значения счетчика цикла «i»:
• для задания начального значения счетчика цикла «i»;
• для задания значения второ] о элемента, который будет обработан в цикле.
5. Для чего в программах используется такая инструкция организации цикла «while i <= len(list) - 1:»:
• для последовательного перебора всех элементов списка «list»;
• для присвоения переменной «Ь> индексов элементов списка «list»;
• для opi анизации цикла, где «-1» указывает на перебор с конца списка;
• для поиска значения переменной «1» среди элементов списка «list».
6. Для чего в программах используется такая инструкция организации цикла «while True»:
• для организации бесконечных циклов;
• для присвоения переменным, расположенным в теле цикла, значения «True»;
• для выхода из никла, если значение одного из параметров в теле цикла равно
«True»;
• для поиска переменных в цикле, значения которых равно «True».
Тема 14. Ввод - вывод данных в Python
Ввод данных в программу и их вывод важны в программировании. Без ввода данных программы не понимали бы. что нужно обрабатывать (исключая случаи, когда в них самих i енерируются какие-либо значения). Вывод позволяет увидеть, использован», передать дальше результат работы программы, Мы уже встречались с функцией pnnt(), которая отвечает за вывод данных. По умолчанию данные выводятся на экран, но можно перенаправить вывод в файл или на принтер. Достаточно часто нужно сохранить информацию в файле, прочитать из файла, или пользователю нужно ввести в программу какие то данные с клавиатуры. В этих случаях без инструкций ввода-вывода не обойт ись. В Python предусмозрены следующие возможности ввода-вывода данных:
• функция ореп() тля создания объектов, взаимодействующих с файлами;
• функция inpunQ - для ввода данных с клавиатуры.
• функция pnnt() - для вывода информации на экран (возможно в файл или на принтер).
Рассмотрим все эти возможности.
Урок 14.1. Функция ореп() для работы с файлами
В компьютерах вся информация хранится в файлах: документы, изображения, числовые данные, видео ролики, аудио записи и т.п. Средства Python позволяют работать с такими файлами: открыть (закрыть) файл, прочитать данные из файла, записать в файл результаты работы программы, Итак, начнем. Прежде, чем работать с файлом, ею надо открыть, С этим замечательно справляется встроенная функция ореп(), которая имеет следующий синтаксис: obj_file - ореп('<нмя файла>', '<режим>', encoding-’<кодировка>’)
Эта функция создает объект objfile, который позволит выполнять манипуляции с файлом, и передает в нее нужно следующие аргументы:
• <имя_файла> это имя файла (с расширением), который будет открыт для чтения, или для записи в него информации;
• <режим> - зто аргумент, в котором задается режим работы с файлом;
• encoding=<KOfliipoBKa> - тип кодировки символов (используется дтя текстовых файлов).
Функция ореп() имеет много параметров, но нам пока важны три аргумента, которые можно передать в данную функцию Первый аргумент - эго имя файла, которое может включать и путь к файлу (путь к файлу может бьпь абсолютным или относительным). Вюрой аргумент, зто режим, в котором файл будет открыт. Мы пока познакомимся только со следующими режимами работы с файлом
• г от крытие на чтение (является значением по умолчанию);
• w - открытие на запись, содержимое файла удаляется (если файла не существует, создается новый).
Объект, который создан на основе функции ореп(), имеет три важных встроенных метода.
• obj_file. write - позволяет сохранить информацию в файле (записать);
• obj file.read позволяет вывести информацию из файла (прочитать).
• obj file.close позволяет закрыть файл.
Напишем программу, в которой в файле сохраним фрагмент поэмы А.С.Пушкина «Руслан и Людмила» (рис. 14.1).
Рис. 14.1. Герои поэмы «Руслан и Людмила»
У лукоморья дуб зеленый;
Златая цепь на дубе том:
П днем и ночью кот ученый
Всё ходит по цепи кругом;
В данной программе будут использованы функции и методы для работы с файлами, а сама программа приведена листинге 14.1. * 1 * * 4
Листинг 14.1. Использование методов для работы с файлами
X Редактор кода /
1 я ЛИСТИНГ 14.1
. я Записать информацию а файл
text - 'У лукоморья дуб эелёный;\п'\
4 'ЗЛЛТЛЯ Ц*ЛЬ rid дуб» тон:\п' \
И днем и ночью кот учёный\п'\
.. 'Все ходит по цепи кругом;'
f11e_txt = opei-i 'my_file.txt1, 'w') f11e.txt write (text) file, .txt close )
11 * тЬочигато информацию из файла with openi'гау_Г1 Те.txt', 'r') as f1le_txt ddta_text = file_txt read()
я Вмести содержимое файл for line in data_text spXitlinesii pr1nt(11ne)
В этой программе была создана текстовая строка text, тде символы «'л» являются признаком перехода к новой строке. Затем с использование функции openQ создан объект tile txt. В функции ореп() задано имя файла, в который будет записываться информация, и режим записи - «w». Затем, с использованием метода write «file_txt.write(text)», текстовая строка была записана в файл. Следующая инструкция выполнила закрытие файла.
При работе с файлами функцию ореп() предпочтительнее использовать с инструкцией «with... as», при использовании которой файл принудительно закрывать не нужно Отметим лишь то. что применение инструкции «with... as» это гарантия того, что программный код, который следует за этой инструкцией, выполнится к любом случае (даже если в этом коде возможно появление ошибок). Эта конструкции чаше всего используется как раз для открытия файлов, она имеет следующий синтаксис:
with ореп('<имя файла>', '<режим> епсоб|п§='<кодпровка>’) as obj file:
'Эта инструкция создает объект obj tile, который позволит выполнять манипуляции с файлом, а передать в нее нужно следующие аргументы:
* <имя_файла> - это имя файла (с расширением), который будет открыт для чтения, или для записи в него информации;
• <режим> - это аргумент, в котором задается режим работы с файлом;
• encoding=<.KOfliipoBKa> - тип кодировки символов (используется для текстовых файлов).
В этой про1рамме наш файл был открыт именно таким способом.
В заключение этою модуля находятся инструкции построчного вывода информации из открытого файла. В этот файл было записано четыре строки, и выводить этот текст так же будем построчно. У объекта «data lxt» есть метод разбивки информации на строки (splitlines).
Здесь используется уже знакомая нам инструкция «tor», которая организует цикл. В этом цикле построчно извлекается информация из объекта «daia text», куда был загружен файл, и эти строки выводятся на печать.
©Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию «Тема14», а боковой панели - «Листинг 14.1».
После выполнения этой проз раммы будет получен следующий результат (рис. 14.2).
s Показать результат
Урок 14.1. Функция ореп() для работы с файлами
Эта функция позволяет открыть файл для чтения данных
У лукоморья дуб зепень-й;
Златая цепь на дубе том:
И днем и ночью кот ученый
Все ходит по цепи кругом;
Рис. 14 2. Резулыаты работы программы соз гания словаря
При выполнении этой программы Питон самостоятельно определил, в каком месте компьютера он сохранит файл и откуда его прочитает. Однако программист сам может задать ту папку, где нужно сохранить файл, или откуда его прочитать Пока мы этою вопроса касаться не будем, но об этом вы можете прочитать в других книжках.
Эта интерактивная книга может не только выполнить программный код. но и показать вам мультфильм про кота ученого. Для много достаточно открыть вкладку «Посмотреть мультфильм» (рис. 14.3).
* * Пхмстретыфътфмьи
Рис. 14.3. Мультфильм «У лукоморья дуб зеленый. .»
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другое значение текстовой переменной и снова запустите программу на выполнение.
Урок 14.2. Функция input() для ввода данных и инструкция «try: ... except»
Получение и обработка информации — один из важнейших элементов любого языка программирования, особенно если речь идет о получении информации от пользователей. За ввод в программу данных с клавиатуры в Python отвечает функция input(). Koi да вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет клавишу Enter, функция input() заберет введенный текст и передаст его программе, которая уже будет обрабатывать его согласно своим алгоритмам.
По умолчанию функция input() конвертирует (превращает) всю получаемую информацию в строку. Даже если вы набираете последовательность цифр, пытаясь ввести число, они тоже изначально являются проками. Если введенное число будет участвовать в арифметических операциях, то такую строку нужно принудительно преобразовывать в число.
Если пользователь ввел некорректные данные (например, нужно было ввести цифру, а пользователь ввел букву), то в момент преобразование буквы в число программа выдаст ошибку. Что бы этого не происходило, нужно функцию input() оборачивать инструкцией «try: ... except». Эта инструкция имеет следующий синтаксис:
try:
<Базовый код>
except.
<Неожиданная ошибка в базовом коде>
else:
^Базовый код выполнился без ошибок>
finally:
<Код, который выполнится в любом случаев
Критическая инструкция, которая может вызвать исключение (ошибку), помещается внутрь блока «try». Инструкции (программный код), при помощи которых это исключение (ошибка) будет обработано, помещается внутрь блока «except». В блоке «else» (не обязательный блок) можно поместить инструкции или сообщения, подтверждающие, что в базовом коде ошибок не произошло. В заключительную инструкцию «finally» (не обязательная инструкция) можно поместить код, который выполнится в любом случае (не зависимо от наличия или отсутствия ошибок).
Программа, которая демонстрирует использование функции input() совместно с инструкцией «try : . . except», приведена в листинге 14.2.
Листинг 14.2. Использование фтнкцнн input() совместно с инструкцией «try:... except»
Редактор кода /
1 ж Листинг J.4.2
2 и Строковое значение
text.l = input('Ведите любой текст:’)
4 printf'Пользователь ввел текст text_l)
5 prints'Тип объекта text_l: , typertext.l))
6 printf*30)
в ж Целое число
a num.l = inputf 6-дите л«йо» целое число:’)
printf'Пользователь ввел строку ->', пия_1)
11 printi'Twn объекта num.l после ввода:', type num.l))
12 try:
13 num.l = 1 nt'’num.l)
printf'num_l после преобразования в число:', num.l, typefnum.l)) except ValueError
16 printf''Это не число! Введен недопустимый символ!")
17 printf'-' *30)
18
19 ж вещественное число
num_2 - inputf'Ведите любое число с десятичной точкой:')
21 try:
printf'Пользователь ввел строку ->', num.2)
num_2 tloat'num_2)
printf'num_2 поел-1 преобразования в число:', num_2 type;num_2)) 25 except ValueError
printf'Это н₽ число! Введен недопустимый символ!')
В этой программе компьютер просит пользователя ввести с клавиатуры сначала текстовую сгроку, потом целое число, и любое число с десятичной точкой. Так как все данные, принятые функций input(), представляют собой текст, то и числа которые введет пользователь, тоже будут представлены в памяти компьютера как текстовые данные. Например, число 55 компьютер поймет как символьную строку ‘55’, а число 3.14 - как символьную строку ‘3.14’. Поэтому в данной программе символьные строки превращаются в целое число с использованием функции нП(^строка>), а в вещественное число с использованием функции Поа1(<-строка->). Кроме того здесь использование еще одна функция - Гуре(<псременная>), которая показывает данные какого типа хранятся в переменной.
Результаты работы этой программы можно посмотреть в интерактивном разделе книги. Для этого в главном меню нужно выбрать опцию « Гема 14», а боковой панели - «Листинг 14.2».
После выполнения этой программы будет получен следующий результат (рис. 14.4).
Покаэат ь результат
Урок 14.2. Функция input() для ввода данных и инструкция «try: except»
Функция input() позволяет водить данные с клавиатуры
Ведите любий тек< т
Ведите любое целое число
1 - +
Пользователь ввел строку-» 1
Гип объекта num, .1 после ввода -'-class 'int’>
num .1 после преобразования в 4ncno:l<class 'int'>
Ведите любое число с десятичной точсои
1,10 - +
Пользователь ввел строку >1.1
num_2 после преобразования в число: 11 «class 'float *
Рис. 14.4. Результаты работы программы создания словаря
Примечание.
В последних строках программного кода при вводе числа сознательно сделана ошибка -вместо десятичной точки введена буква «ю» (Зю14). Это сделано для того, чтобы проверить работу инструкции «try. ... except», которая должна обработать зту ошибку.
Как видно из этих результатов, когда мы вместо чисел ввели с клавиатуры текст, то компьютер не смог преобразовывать его в числа, а выдал сообщение об ошибке. Этот как раз результат работы инструкции «try; ... except».
Перенести зту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте другие значения переменным и снова запустите программу
на выполнение.
Урок 14.3.Функция print() для вывода данных
Обычно требуется, чтобы программа обрабатывала набор входных данных, которые поступают из внешних источников. В свою очередь вывод результатов работы программы возможен в файл, в базу данных или на принтер. Однако нередко информацию просто выводят па экран монитора, в Python это делается с использованием функции pnnt(). Мы уже многократно сталкивались с данной функцией, теперь более подробно рассмотрим ее возможности.
Эта функция выводит все, что ей передано в api ументах при обращении, строки, числа, списки, кортежи, значения из других функций и методов классов. В качестве аргументов могут быть и выражения Кроме информации, которую нужно вывести на печать, данная функция имеет и ряд встроенных параметров, например (рис. 14.5):
• sep указывает на отличный от пробела разделитель строк;
• end- указывает на действия, которые нужно выполнить после вывода строки (по умолчанию происходит переход на новую строку).
pnnt(value. ., sep='end='\n')
! / ♦
Перевтсляеы объесть 'сторые «отми опзбоозич-
С HAMS. гОТОрвЯ MCOOfWOC^U после new л*
По умооянно перека и« косую строку
।
С гроо-раудапттшть
ые*Ду обметав»
По /MOTNXMic пробел
Рис 14 5 Встроенные параметры функции pnnt()
Эти параметры, как правило, указываются после объектов, которые нужно отобразить. Рассмотрим несколько простых примеров использования функции pnnt() для различных типов данных, и с использованием вышеуказанных параметров. Такая программа приведена в листинге 14.3.
Листинг 14.3. Использование параметров флнкцин print()
Редактор кода
1 ? Листинг 14.3
2 print('Строка - Однажды в студеную зимнюю пору...')
3 print('Число , 135.8)
4 print('Список -', ['Лимин', 'Мандарин', 3.14])
5 printf' Картеж ('Лимон', 'Мандарин', 3.14))
5 print('Функция -', int(555.33), str('999'))
7 print('Разделитель 1, 2, 3, sep=" : ")
8
э p Задает дополнительный пропуск одной строки
10 printdll, 111, 111, end="\n\n")
ii
12 # Отменить перевод на новую строку
13 print(222, 222, 222, end="")
14 print(‘ один ', ' Два ', ' Три ')
15
io print() * Печать пустой строки
17 print('3Ta строка после пустой')
Это достаточно простая программа, пояснения всех действий указаны в самой функции print{) и в комментариях.
Результаты работы этой программы .можно посмотреть в интерактивном разделе книги. Для згою в главном меню нужно выбрать опцию «Тема14», а боковой панели - «Листинг 14.3».
После выполнения этой программы будет получен следующий результат (рис. 14.6).
v Ц, Показать результат
УУрок 14.3.Функция pnnt() для вывода данных
Функция print() позволяет вогьидить данные
Строка • Однажды в студеную зимнюю пору,
Число- 135.в
Список-['Лимон', 'Мандарин*, 314]
Картеж- ('Аимои', Мандарин-, 3.14)
Функция - 555 999
Разделитель 1:2:3
in их ш
222 222 222 ОДИНДваТрИ
Эта ст рока после пустой
Рис. 14.6. Результаты работы программы создания словаря
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат Задайте другие значения переменны м и снова запустите программу на выполнение.
Вопросы для самоконтроля к геме 14
1 Что означает режим ‘г" при открытии файла функцией ореп():
• Открыть только на чтение;
• Открыть только на запись;
• Открыть на чтение и на запись;
• Открыть в текстовом режиме.
2. Что означает режим *w' при открытии файла функцией ореп():
• Открыть только на запись;
• Открыть только на чтение;
• Открыть на чтение и на запись;
• Открыть в текстовом режиме.
3. С какой кодировкой символов работает Python по умолчанию:
• UTF-8;
• UTF-16;
• ср1251;
• ASCII.
4. Какую роль играет параметр end в функции pnnt():
• указывает на действия, которые нужно выполнить после вывода строки;
• указывает на прекращение вывода части строки,
• отменяет печать текущей строки;
• от меняет дальнейшую печать всех с>рок.
Тема 15. Функции в Python
В Python, как и в других языках программирования, можно разделить большую программу на небольшие фрагменты, называемые функциями. Функции позволяют создавать эффективный программный код, избегая его повторения. В Python есть два типа функций: встроенные, и определяемые пользователем. К встроенным относятся те, которые предварительно «встроены» в Python, например pnnt(), in((), str(). К пользовательским функциям относятся те функции, которые программист определяет самостоятельно для выполнения конкретных задач.
Функция (от англ, function) это блок программного кода, который определяется один раз и далее может быть использован многократно. В функциях, как правило, программируются действия, которые необходимо будет выполнять в различных частях программы. Сам по себе код функции не выполняется, он как бы спит и ждет, когда его вызовут для исполнения.
Функция в Python является основой при написании программ. С чем можно сравнить функцию? Напрашивается аналогия с «черным ящиком», когда мы знаем, что поступает на вход н что ожидаем получить на выходе, а содержание «черного ящика» от нас скрыто, да и не интересно. Примером черного яшика может являт ься стиральная машина (рис. 15.1).
Рис. 15.1. Стиральная машина, как aua.ioi функции
На вход стиральной машины поступает грязное белье, на выходе получаем чистое белье. Нас в этом случае совершенно не интересует устройство стиральной машины и принцип ее работы, важен результат. Точно так же и функция, она содержит некий сложный алгоритм, который от нас скрыт, но мы точно знаем, что ей нужно передать, и что функция выдаст на выходе.
Различают системные функции и функции пользователя. К системным функциям относятся те, которые уже имеются в структуре языка npoi раммнроваиия В вышеприведенных примерах мы достаточно часто использовали следующие системные функции
• print() - вывода данных на экран (на печать);
• 1еп() - определение количества элементов в объекте;
• inin(s) - минимальное значение элемента из итерируемого объекта;
• max(s) - наибольшее значение элемента итерируемого объекта;
• sum(s) - суммирование элементов последовательности и т.п.
Однако системные функции не могут обеспечить выполнение всех действий, которые могут потребоваться в конкретной программе. Поэтому программисты имеют возможность написать собственные пользовательские функции и затем многократно обращаться к ним из любой точки программного кода.
Каждая пользовательская функция решает какую-то одну конкретную задачу, что дает возможность программистам разбивать сложную программу на достаточно простые и легко читаемые части. Пользовательские функции заменяют объемные копии блоков одного и того же программного кода. Как следствие, при необходимости внесения изменений в код, делать это придется уже не во многих местах программы, а только в одном месте - в теле самой функции
Таким образом, функции можно смело назвать основными программными структурами языка Python, которые позволяют существенно уменьшить время и трудозатраты на разработку приложений, а также их дальнейшее сопровождение.
Ниже приведена структура программного кода, который создает пользовательскую функцию.
def my funfa, b):
с = а 4 b return с
Задается функция с помощью ключевого слова «def». Далее следует название функции (в вышеприведенном примере - «ту fun»), затем следуют скобки и двоеточие. В скобках через запятую можно перечислить параметры, которые будет принимать функция (в нашем случае это «а» и «Ь»). Функция может иметь, а может и не иметь параметры Если принимаемые параметры отсутствуют, го скобки все равно необходимо сохранить. В следующих строках с обязательным отступом следуют строки тела функцшг -программного кода с действиями, которые будут выполнены при вызове функции. Если функция возвращает результат вычислений, то последней ее строкой будет инструкция «return» с указанием возвращаемого результата (в нашем случае это значение переменной «с»). Если функция ничего не возвращает, то инструкция «return» может отсутствовать и интерпретатор не выдаст ошибки. По такой стиль считается «плохим тоном». В простых случаях интерпретатор но наличию отступов сможет отделить тело функцшг от тела программы, но к сложных программных структурах такая программа может выдать непредсказуемые результаты. В связи с этим тело каждой функцшг рекомендуется завершать инструкцией return, что делает программный код более понятным и лучше читаемым
Программный код, который находится в геле функцшг, не будет выполняться до тех пор, ггока одна из инструкций не вызовет эту функцию. Для вызова функции нужно указать ее имя и в скобках перечислять передаваемые в нее аргументы. Для приведенного выше примера вызвагь функцию можно следующей инструкцией: d = my_fun(IO, 20). В этом случае числа 10 и 24 будут переданы в функцию, эти значения будут присвоены параметрам а=10, Ь=20, сумма этих чисел - 30 будет присвоена переменной «с». Последняя строка «return с» вернет это значение в точку вызова функцшг, то есть результатом работы функции будет d=30.
Урок 15.1. Аргументы и параметры функций
При работе с функциями нужно четко различать такие понятия как аргументы и параметры функции (рис. 15.2).
Рис. 15.2. Параметры и аргументы функции
Параметры - это локальные переменные, которым присваиваются значения в момент вызова функции. Параметры объявляются в заголовке функции и отделяются друг от друга запятыми
Аргументы это конкретные значения, которые передаются в функцию при ее вызове. Аргументы находятся в инструкции, которая вызывает функцию, и отделяются друт от друга запятыми.
В заголовке функции параметры перечисляются через запятую. При этом разрешается присваивать параметрам значения, которые в теле функции будут использоваться, как значения по умолчанию. Это значение будет использовано в тех случаях, когда при вызове функции ей будет передано меньшее количество аргументов.
Тело функции представляет собой обычный программный код, который будет выполняться каждый раз при вызове функции. Вызов функции осуществляется при помощи имени функции и круглых скобок с передаваемыми функции значениями аргументов, которые также должны перечисляться через запятую. Если аргументы передаются без имен, их называют позиционными, т.к, интерпретатор сопостав.тяет их с порядком следования параметров в заголовке функции.
Кроме того, имеется возможность передавать функциям аргументы, явно указывая их имена и значения. Такие аргументы называются именованными и могут передаваться функции в любом порядке, но только после позиционных аргументов, если такие присутствуют в вызове функции Необязательная инструкция «return» возвращает результат вызывающей программе в место вызова функции.
Давайте изучим программный код, в котором есть функция it используются разные варианты передачи аргументов в функцию (листинг 15.1).
Листинг 15.1. Пример реализации простейшей функции
X Редактор кода
1 ж Листинг 15.1
2 я Объявление функции
def my_func(x~20, у*10):
rez х - у return rez
7 и Аргументы не заданы res_l = my_func()
print('Аргументы не заданы: res_l =', res_l)
ю
и ~8 функцию передан один аргумент
i: res_2 my_ftjnc(4G)
13 print!'Передан 1 аргумент (20): res. 2 = ', res_2)
14
15 я В функцию передано два аргумента
1( res_3 = my_func(200, 100)
17 print!'Передано 2 аргумента 1200, 100): res_3 =', res_3)
IB
1! res_4 my_func(x 10a, y=500)
20 print!'Переданы именованные аргументы (x=100, y=500): res_4 =', res_4)
21
22 * Явно указываем имена aptументов, поэтому порядок не важен res_5 = my_func(y =500, х=100)
24 print!'Переданы именованные аргументы !у=500, х=100): res_5 =', res_5)
В этой про!рамме в первой строке с помощью инструкции def my_func(x=20, у=10): объявлена (создана) функция с именем «my_func». Эта функция имеет два параметра «х» и «у», для которых заданы значения по умолчанию (х=20, у=10). То есть, если в программе при вызове функции не передавать в нее аргументы, то «х» и «у» будут иметь именно эти значения. Но если при вызове функции явно указать другие значения аргументов, то «х» и «у» будут иметь эти новые значения В следующих строках программы как раз выполнено пять обращений к этой функции с разными значениями ар!ументов.
После выполнения этой npoi раммы будез получен следующий результат (рис. 15.3).
v ч Показать результат
Урок 15.1. Аргументы и параметры функций
Функция может принимать разные параметры
Аргумент ы не заданы: res_l = ю
Передан 1 аргумент (20): res_2= зо
Передано 2 аргумента (200,100); res_3 = ioo
Переданы именованные аргументы (х= 100, у=500) res_4= -аое
Переданы именованные apt умент ы (у-500, х=100): res_5 = -лоо
Аг Смотрите мультфильм: про функцию
Рис. 15.3. Резулыаты работы программы использования функции
Давайте выполним анализ этих результатов
• rezl = 10 при обращении к функции аргументы не заданы - my funci), в выражении тела функции использовались значения параметров по умолчанию х-20, у= 10, получен результат rez = 20 - 10—10;
• rez 2 = 30 - передай 1 аргумент - my func(40). в выражении параметр «х» получил значение х-40. а значение параметра «у» не изменилось у—10, в итоге получился результат 7=40-10=30;
• rez_3 = 100 передано 2 аргумента - my_func(200, 100j, в выражении параметр «х» получил значение х=200, и параметра «у» тоже изменил значение у=100, в итоге получился результат z=200-100=100:
• rez_4 =-400 - передано 2 именованных аргумента my_func(x= 100, у-500), в выражении параметр «х» получил значение х=100, параметра «у» значение у=500, в итоге получился ре зульт ат z= 100-500=-100;
• rez_5 = -40O - передано 2 именованных аргумента my_func(y=5O0, х=100), в выражении параметр «х» получил значение х=Ю0, параметра «у» значение у=500, в итоге получился результат z= 100-500=-100.
Обратите внимание на два последних варианта вызова функции. В них использовались именованные параметры. Не смотря на то, что в процедуре вызова они поменялись местами, результат не изменился.
Эта интерактивная книга может не только выполнить программный код, но и показать ва м мультфильм про использование функций. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 15.4).
* » Посмотреть мультфильм
6*
Рис. 15.4. Мультфильм про функции в Python
Принцип передачи в функцию аргументов и возврата результатов схематично представлен на рис. 15.5.
def my_func(x, у): rez = х - у return rez
z = my_func(200, 100)
Рис. 15.3. Принцип передачи в функцию ар|уменгов и aosapaia результатов
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на результат. Задайте аргументам другие значения и снова запустите программу на выполнение.
Урок 15.2. Решаем задачу с паромом с помощью фл нкпии
Давайте вспомним урок 13.3. Гам паром перевозил пассажиров с одного берега на другой, но так как паром вмещает только 10 пассажиров, а желающих поехать было больше, то парому нужно было делать несколько рейсов. Если посмотреть на код программы урока 13.3, то гам одни и те же инструкции повторяются три раза, а вот с использование функций этих повторений можно избежать.
Итак, перед нами стоит следующая задача. На пристани находится 15 пассажиров, а паром вмещает только 10. Нужно утром всех пассажиров перевезти сначала с одного берега на другой, а вечером вернуть обратно. Текст программы, в которой решена эта задача с использованием функции, приведен в листинге 15.2.
Листинг 15.2. Решение задачи с перевозкой пассажиров на пароме с использованием функции
Редактор кода '
1 .# Листинг 15.2
2 к Создаем список из 15 пассажиров парома 11 st_passag1 г = ["Козленок", "Теленок", "Корова",
4 "Бык", "Конь", "Свинья", "Кот",
"Пес", "Баран", "Гусь", "Индюк", "курица'1, "Болк", "Лиса", "Медведь"]
7
4 Создаем функцию
9 def poexalTin_l, n_2): paгоп = [] № Пустой паром for 1 in range n_l, n_2):
12 s на паром сел один пассажир
parom append ,1т st_passagi г [1 ])
14 return parom is
16 pnnt( 'Утренние рейсы' )
17 printt'Pefic 1:', poexalife, 10))
IB print(,'Pefic 2:', poexali(10, 15))
19 print(' Вечерние рейсы')
20 pnnt('Pefic 3:', poexalifb, 10;)
21 printf'PeMc 4:', poexali(10 15))
В этой программе создан список из 15 пассажиров (list passagir). А затем создана функция с именем poexali. Эта функция имеет два параметра - п_1 и п_2. Эти параметры будут принимать значения индексов (номеров) пассажиров, которые сядут на паром. В теле функции сначала создается пустой список пассажиров парома (рагот[]), а потом в цикле в пот список добавляются пассажиры с индексами or n 1 до п 2. С использованием инструкции return список пассажиров будет возвращен в точку вызовы
В следующих строчках программы функция poexali() вызываются 4 раза и в функцию передаются индексы пассажиров из списка list jiassagir.
После выполнения этой программы будет получен следующий результат (рис. 15.6).
\ Пока зать результат
Урок 15.2. Решаем задачу с паромом с помощью функции
Функция позволяет сократить программный код
Утренние рейсы
Рейс! ['Козленок',Теленок’,'Корова,'Бык','Конь','Свинья','Кот','Пес','Баран','Гусь']
Рейс2 ['Индюк', Курица', 'Волк, 'Лиса', 'Медведь']
Вечерние рейсы
Рейс3 ['Козленок', 'Теленок', 'Корова', 'Бык'. 'Конь', 'Свинья', 'Кот', 'Пес', 'Баран', 'Гусь']
Рейс4: ['Индюк; 'курица', 'Волк, Лиса; 'Медведь ]
Др Смотрите мультфильм: про козленка
Рис 15.6 Результаты работы программы «11ро паром» с использованием функции
Вот так вотс использованием функций можно значительно сократить программный код.
Эта интерактивная книга может не только выполнить програ ммный код, но и показать вам мультфильм про козленка, который умел считать. Для этого достаточно открыть вкладку «Посмотреть in гыпфильм» (рис. 15.7).
- Я Посмотреть мультфильм
Рис. 15.7. Мультфильм про козленка, который умел считать
Перенести эту программу а «Редактор кода, выполните ее и посмотрите на результат. Задайте аргументам другие значения и снова запустите программу на выполнение.
Урок 15.3. Однострочные функции
Если в теле функции всего одна инструкция, то допускается оформление такой функции в одной строке. Простое выражение, которое вычисляется в функции, может располагаться следом за инструкцией «return». Параметры функции принимают тот тип данных, которые переданы в аргументах. Программа с такой функции приведена в листинге 15.3.
* Листинг 15.3. Однострочная функция
X Редактор кода
1 # Листинг 15.3
2 # Определяем функцию
3 del my_funcva, b, с): return а » b ♦ с
4
5 х. у, z = 1, 2, 3
6 pr1nt( 'Аргументы числа, rezl = my_func(x, у, zj)
7
8 х = ['Иванов 'Семен 'Петрович'] rez2 = my_1unc(x[u], х[1], х[2])
л ргтnt('Аргументы символы, rez2 = rez2)
После выполнения этой программы будет получен следующий результат (рис. 15.8).
v \ Показать результат
Урок 15.3. Однострочные функции
Короткий код функции может иметь всего одну строку
Ар|ументы числа, rezl = в
Аргументы символы, rez2= Иванов Семен Петрович
Рис 15.8. Результаты работы программы с однострочной функцией
В этом примере вея функция записана одной строкой. Инструкции в теле функции отсутствуют, а действие сложения параметров находятся после инструкции «return». В этом случае инструкции «return» последовательно выполняет две операции: производит
соложение параметров, возвращает результат в место вызова. При первом обращении к функции ей было передано три аргумента, имеющих тип - целое число. Параметры функции то же стали числами и была получена их сумма rezl-б. При втором обращении к функции ей было передано три аргумента, имеющих тип - символьная строка. Параметры функции то же стали символьными строками и была получена сумма строк- гег2-Иванов Семен Петрович.
Перенести эту программу в «Редактор кода, выполните ее и посмотрите на .I результат Задайте аргументам другие значения и снова запустите программу на выполнение.
Количества передаваемых в функцию аргументов должно соответствовать количеству параметров функции. Если такого совпадения нет, то это приведет к ошибке при работе программы. Однако в подобных ситуациях можно исключить появление ошибок, используя доступные в Python специальные режимы сопоставления аргументов с параметрами функции. Но в данной книжке мы эти режимы рассматривать не будем, при желании вы с ними вы можете познакомиться в специальной литературе по Python
Краткие итоги гемы 15
1 Функция - это блок программного кода, который определяется один раз и далее может быть использован многократно. Функции позволяют существенно уменьшить время и трудозатраты на разработку приложений, а также их дальнейшее сопровождение.
2. Для создания функций в Python предназначена инструкция «def», которая создает объект «функция* и связывает ею с именем В скобках заголовка функции через запятую перечисляются принимаемые параметры, а заголовок завершается обязательным двоеточием. После заголовка с отступом следует тело функции из одной или нескольких инструкций. Завершается функция инструкцией «return». Инструкция «return» не является обязательной. При ее отсутствии функция будет завершать свою работу по достижении потоком управления конца тела функции. При этом она неявно будет возвращать результат в виде объекта «None».
3. При работе с функциями используются такие понятия, как параметры и аргументы. Параметры функции представляют собой локальные переменные, которым присваиваются значения в момент вызова функции. Иногда параметрам задают значения, используемые по умолчанию. Конкретные значения, которые передаются в функцию при ее вызове, называются аргументами.
4. Осуществляются вызовы функций только после их определения при помощи имени функции, за которым следуют скобки. В скобках через запятую перечисляются аргументы, передаваемы в функцию.
Вопросы для самоконтроля к теме 15
I. Какой из представленных вариантов определения функции не содержит ошибок:
• def fun(x, у): return х*у;
• dth funtx, у): return х*у;
• def fun|x, у]: return x*y;
• def fun {х. у}: return х*у,
2.Имеется функция «def myfunfa, b, c): return a + b + с». В какой строке программы выполнено корректное обращение к данной функции'
• rez - my funfa, b, с);
• rez = my_fun(a. b);
• rez - my_fun(b, c);
• rez ' my_fun(a, b, c, d).
Тема 16. Объектно-ориентированное npoi раммирование в Python (классы и объекты)
При разработке программного кода используется два подхода:
• процедурное программирование;
• объект но-ориензированное программирование (ООП).
Процедурное проз раммирование — это подход создания программных модулей, при котором инструкции (строки программы) выполняются последовательно одна за другой. При этом можно создавать подпрограммы, из которых затем собирать более крупные единицы программного кода.
Объект ни-ориентированние программирование (ООП) является методологией разработки программного обеспечения, в основе которой лежит понятие класса и объекта. При этом программный код формируется из совокупности объектов, созданных на основе классов. Каждый объект является экземпляром некоторого класса. При таком подходе есть возможность создать набор классов, а потом из них, как из кирпичиков, формировать программные модули. Если вы овладеете искусством создания программ на основе классов, по будет означать, что вы достигли самой высокой вершины в программировании (рис. 16.1)!
Рис. 16 1 Вершина программирования - исполыованнем классов
Python — это одновременно и процедурно-ориентированный, и объектно-ориентированный язык программирования, поскольку в нем можно использовать оба подхода. При этом абсолютно все, чем манипулирует Python, это объекты. Объектами являются: числа, строки, списки, кортежи, множества, словари, функции, и даже сами классы.
Класс (от англ, class) - это шаблон кода, который используется для описания структуры и создания объектов, то есть экземпляров этого класса.
Все данные в Python то же создаются на основе классов. Например, в инструкциях а = 'abc' и b = 5 переменная «а» становится экземпляром (объектом) встроенного класса «string», а переменная «Ь» экземпляром (объектом) встроенного класса «int».
Если говорить совсем просто, то класс можно сравнить с чертежом, по которому создаются объекты. Достаточно создать всего лишь один класс (чертеж) и далее можно будет порождать любое количество его экземпляров, изменяя и дополняя их по мере необходимости.
Изучение темы, касающееся классов, может вызвать трудности, а материалы темы могут показаться слишком сложными. Но ведь и на горную вершину подняться не просто. Зато для тех, кто сумел подняться, вокруг открывается фантастический вид н широкие просторы Так вперед, двигаемся к вершине!
Урок 16.1. Основные принципы обьекюо-ориентированного программирования
Благодаря использованию классов Python обладает всеми преимуществами абстрактного подхода в программировании В частности ему присущи, абстракция, полиморфизм, инкапсуляция, наследование и композиция (агрегирование).
Абсгракиия (от англ, abstraction) - принцип ООП, согласно которому объект характеризуется свойствами, которые отличают его от всех остальных объектов и при этом четко определяют его концептуальные границы. Абстракция позволяет представить сложную структуру объекта в более простой форме. При абстрагировании отбрасывается все лишне, и выделяются только важные черты группы объектов Например, все дома разные, они имеют разное количество этажей, иную форму крыша, разное количество окоп Но абсолютно все дома имеют такие элементы, как этаж, крыша окно, эти элементы и могут лечь в основу создания класса «ДОМ» (рис. 16 2).
Рис. 16.2. Принцип абстрагирования в ООП
Пи аналогии, все автомобили то же разные, они имеют свой цвет, форму кузова, разную мощность двигателя и максимальную скорость. Но в тоже время все автомобили имеют и общие элементы: кузов, колеса, двигатель и т.п
Полиморфизм (от англ polymorphism) способность функций и методов обрабатывать данные разных типов. Простыми примерами полиморфизма может служить: встроенная функция len(s), которая может работать с разными типами встроенных последовательностей, возвращая количество их элементов.
Полиморфизм позволяет перегружать одноименные методы родительского класса в классы-потомки. Например, программист создал класс, который назвал «Дом». У этого дома есть
дверь, которая может открываться и закрываться. Потом на основе этого класса в программе создал два объекта: «Дом одноэтажный» и «Дом многоэтажный» (рис. 16.3).
Рис 16.3 Полиморфизм в ОПП
Так вот, эти дома «потомки», созданные на основе «родительского» класса, тоже будут иметь дверь, и у них эта дверь тоже будет иметь возможность открываться и закрываться!
Инкапсуляция (от англ, encapsulation) механизм, который позволяет объединять данные и методы, работающие с этими данными, в единый объект, скрывая при этом от пользователя методы обработки данных. Грамотно написанный класс должен взаимодействовать с пользователем только с помощью своего интерфейса.
Инкапсуляция скрывает сложный механизм обработки данных. При этом можно просто использовать этот сложный механизм, не вникая, как он устроен, и как в нем протекают сложные процессы Например, двигатель у автомобиля имеет очень сложную конструкцию, в нем сотни деталей, винтиков, гаечек и грубочек (рис. 16. 4).
Рис 16.4 Инкапсуляция в ОПП
Но когда мы едем на машине нам совершенно неважно знать устройство двигателя, да мы его и не видим, он скрыт под капотом автомобиля. Нам важно знать, как завести двигатель и как можно управлять автомобилем.
Наследонанце (от англ, inheritance) - еще одна концепция объектно-ориентированного программирования, которая позволяет на основе одного суперкласса создавать
множественные подклассы, заимствующие его данные и функциональность с возможностью их изменения и добавления своих данных и новых функций.
Иными словами можно создать новый класс на основе существующею класса, при этом можно к свойствам и методам класса-родителя и добавить собственные свойства и методы. Например, программист создал класс, который назвал «Дом». У этого дома есть фундамент, дверь, окна, крыша. Потом на основе этого класса программе создано два объекта: «Дом одноэтажный» и «Дом многоэтажный» (рис. 16.5).
ЙДом
Класс-родитель
Частный дом
Класс потомок
Рис. 16.5. Наследование в ОПП
t. □ □□ □ ООО EODL □ ООО □ □□□ OClLjO □ ООО □ ОШО ищи
Так вот, эти дома («потомки» «родительского» класса), тоже будут иметь, фундамент, дверь, окна, крышу. Однако эти дома могу иметь и много отличительных признаков, разное количество этажей, разный цвел стен, разную форму крыши и т.п
Композиция (агрегирование) (от англ, composition) возможность создания классов, включающих в себя элемегпы уже существующих классов. В результате при создании объектов такого класса они будут состоять или содержать объекты других классов. Например, программист создал два класса «Дом» и «Автомобиль». А потом на основе этих двух классов создал еще один и назвал его «Автодом». Класс «Дом» имел кухню и спальню, а автомобиль имел возможность ездить. Так вот, теперь класс «Автодом» тоже будет иметь кухню и спальню, и он сможет ездить (рис. 16.6)!
Юна дем
Юна шомобшь
Рис. 16.6 Композиция в ОПП
Благодаря всем этим преимуществам ООП у программистов появляется возможность разработки отдельных независимых модулей в виде классов, способных скрывать детали своего внутреннего устройства. Данный процесс можно наглядно представить на примере автосборочного завода, когда отдельные агрегаты изготавливаются разными производителями, а затем из них собирается готовый продукт. При этом один и тот же двигатель, может быть без всяких переделок устанавливаться на десятки моделей автомобилей. Так и класс, написанный для одной программы, может использоваться в любых других про1раммах.
Урок 16.2. Создание классов и объектов
Для создания классов в Python используется инструкция «class», которая в общем виде может быть представлена в следующем формате:
class Class_name(Superclass name 1, .Superclass_name_n):
'''Строка документирования класса'''
# Данные класса (доступны и в теле класса, и вне класса) class_data = value_all
# Конструктор класса
def init tself, init arg 1, init arg_2, . .., init_arg n): # Данные, доступные только в теле класса self.data_class = data_value class ft Методы класса def class_method(seif, arg_l, arg_2, ..., argn):
# Атрибут данных конкретного метода self.data method = value_ method
Заголовок инструкции начинается co служебного слова «class», затем через пробел указывается имя класса (по принятому в Python соглашению имя класса начинается с заглавной буквы). Далее в скобках перечисляются имена наследуемых классов (их еще называют суперклассами) и завершается заголовок двоеточием. Если создаваемый класс не наследует других классов, то заголовок инструкции можно записать в формате class Class name: (без скобок).
После заголовка с отступом можно написать блок инструкций, в которых можно создать строку «документации класса» и набор данных (переменных). Получить доступ к этим переменным можно через инструкцию «нмя_класса.имя_переменной», как внутри класса, так и за ею пределами.
Далее в классе формируются методы класса. Методы - это набор инструкций, в которых запро!раммированы некие действия Фактически это функции, которые находятся внутри класса и имеют один обязательный параметр «sell» (собственный). 'Этот параметр как бы говорит интерпретатору, что данная функция является собственностью этого класса, и никто другой не имеет права ею пользоваться.
Первой функцией, или методом класса, может быть метод, который называют конструктором класса или методом инициализации класса. Конструктор класса может отсутствовать, но если он есть, он должен быть самым первым среди прочих методов.
Инструкция, которая создает конструктор класса - это функция с зарезервированным именем «_init_»(здесь двойное подчеркивание), которая имеет следующий заголовок:
def__init (self, par I, par 2. par_3, .,.):
В этой инструкции
• init__- зарезервированное имя конструктора класса;
• self - ключевое слово, которое говорит, что этот метод принадлежит только данному классу;
• par 1, par 2, par_3 - параметры данной функции
У этой функции параметры могут быть, а могут и отсутствовать. Параметры данной функций называют еще свойствами класса, так как они являются некими характеристиками объектов, которыми оперирует класс. Эти свойства могут иметь (а могут и не иметь) значения по умолчанию. Если свойства класса не имеют значений по умолчанию, то эти значения должны быть обязательно заданы и переданы в класс тогда, когда на основе класса создается новый объект.
Наконец далее следуют инструкции, которые создают методы класса. В этих методах содержатся инструкции, связанные с обработкой данных. Эти данные содержаться либо в самом классе, либо передаются классу из модулей за пределами класса. Методы представляют собой обычные функции, определенные внутри класса, которые первым параметром имеют ключевое слово «self». Каждый метод, как и любая функция, может иметь свой набор параметров.
Переменные, которые определены в функции (в методе), видны только в теле этой функции Таким образом, переменные с одинаковыми именами, используемые в разных методах никак не пересекаются и не портят друг друга. Когда необходимо в разных методах использовагь значение одной и той же переменной, перед ее именем ставится префикс «self» с последующей точкой, например, sclf.my naine.
После того, как класс будет определен, можно приступать к созданию его отдельных экземпляров (объектов класса), сохраняя их в переменных. Для создания объекта (экземпляра) на основе класса нужно указать имя класса с круглыми скобками, перечислив в скобках начальные данные для инициализации создаваемого экземпляра (свойствам класса передать значения).
Урок 16.3. Наш первый класс «Автомобиль»
После этой вводной части можно от теории перейти к практике и создать свой первый класс. В этом уроке создадим некий абстрактный класс - «Автомобиль». Для начала представим эту задачу в виде схемы.
Если представит автомобиль абстрактно (в общем, как класс), то это некий объект, который имеет набор свойств и действия, которые присущи абсолютно всем автомобилям. В нашем примере такими свойст вами автомобилей будут:
• марка (модель)
• вес:
• мощность двигателя;
цвет.
Так же автомобили могут выполнять какие-то действия, характерные для всего класса. Эти действия и есть методы класса. В нашем классе автомобиль сможет выполнять следующие действия
• двшаться прямо;
повернуть направо;
повернуть налево;
остановиться;
• подать тву ковой сиг нал.
Начинка класса готова. Если подвести итог, го класса в реальности не существует, это всего лишь описание неких общих параметров, которые имеет группа объектов.
Теперь можно переходить к понятию объектов класса. Каждый конкретный автомобиль, который существует в реальности, имеет свой, индивидуальный набор свойств (конкретную марку, вес, мощность двигателя, определенный цвет). При этом абсолютно все автомобили могут выполнять одни и те же действия (двигаться, поворачивать, останавливаться и т.п.). Схематично класс «автомобиль» и объекты, созданные на основе этою класса, представлены на рис. 16.7.
Объекты «ктомобияи
Рис. 16.7. Класс «автомобиль» и объекты «автомобили»
Завод изготовитель, имея описание класса (перечень агрегатов, их чертежи, указания последовательности сборки), может теперь делать конкретные автомобили, или, на основе описания класса, создавать новые объекты При этом каждый такой объект может иметь свой набор свойств (например, цвет).
Итак, перейдем к созданию своего первого класса на примере автомобилей. Для этого напишем программу, текст которой приведен в листинге 16.1.
Листинг 16.1. Создание класса «Автомобиль» (первая часть)
О*. Редактор кода
2
4
7
10
11
12
13
14
15
16
19
20
21
22
23
24
25
26
29
30
а Лис тинг 16. 1 (q
class Car:
"""Автор программы Питоша"""
class_obj = "Автомобили" # Объекты класса
raax.speed =90 # Максимально допустимая скорость на дорогах
def __init__iself, brand 'Ford1, weight-900,
power=15b, colours' Красный’):
self.brand • brand я Марка, модель автомобиля
self weight = weight .4 Вес автомобиля
self power power 4 Мощность двигателя
self colour colour # Мощность двигателя
self, signal = 1 Би-Бип' 4 Имитация звука сигнала
def drive(self): S Метод двигаться прямо
рг1п1("Поехали, двигаемся прямо1")
printC'CKopocTb движения не более Car max.speed)
def righ(self): я Метод повернуть на право огтпССТдеы, псвсрачиваем руль направо!")
def left(self): * Метод повернуть на лево print("EpeM, поворачиваем руль налево!")
def brake(self): » Метод тормозить
printfCron, активируем тормоз")
def beep (self): я Метод подать звуковой сигналь
print("Подан звуковой сигнал”)
print(self signal)
Листинг 16.1. Создание кдасса «Автомобиль» (вторая часть)
1
31
32 pnnt('----Выводим сведения о классе Саг------')
print('Объекты клзсса->1, Car сlass_obj)
34 print(Car.___doc__)
35 print('-' * 55)
36
37 print('Создаем объект МуСаг_1 (значения свойств по умолчанию)') НуСаг_1 = Саг()
39
40 print('Сведения об объекте МуСаг_1 (значения свойств по умолчанию)')
41 print('Бренд-, HyCar_l brand)
4 print('Вес->’, MyCar_l weight, 'кг.')
4. pr1nt('Моцность->', MyCar_l power, 'лс.')
м print!'Цвет->', MyCar_l colour)
45 print('-' * 55)
46
47 рrint('Создаем объект МуСаг_2 и меняем значения свойств') МуСаг_2 = Саг('Мерседес', 1200, 250, 'Черный )
49
56 print('Сведения об объекте МуСаг_2 (с новыми свойствами)')
51 print('Бренд->', HyCar_2 brand)
print('Вес->', HyCar_2 weight, 'кг.')
53 print('Мощность—>', MyCar_2 power, 'лс.')
54 pnnt('Цвет-> ', MyCar_2 colour)
Эта программа достаточно большая и сложная, а мы еше находимся у подпожня горы и не поднялись на вершину. Поэтому начнем подниматься вверх и разбирать строки этого программного кода.
В пой программе создан класс с именем - «Саг». Затем, в строке документирования класса создана строка, в которую внесены сведения об авторе данного программною модуля. Эта строка не являются обязательной, она никак не влияет на работу программы и может отсутствовать. Получить доступ к данной строке вне класса можно с использованием инструкции «Саг.___doc__».
Далее созданы две переменные «class_obj» и «тах_ speeds, в первую переменную внесены сведения об объектах, которые можно создавать на основе данного класса, во вторую -максимально разрешенная скорость движения автомобиля. Доступ к значениям этих переменных можно получить, как внутри класса, так и за его пределами с использованием инструкций «Саг class obj» и «Car.max_speed».
Затем создан метод инициализации класса, который имеет зарезервированное имя (_init_):
def__init_(self, brand-Ford', weight~900. power=150, со1оиг='Красны|'):
В этом методе перечислены параметры, через которые класс принимает внешние данные, и заданы значения этим параметрам (эти значения будут использоваться по умолчанию). Каждый такой параметр является свойством класса. Первым параметром обязательно указывается ключевое слово self. Это говорит интерпретатору о том, что данная функция (метод) является собственностью этого класса, и может использоваться только внутри данного класса. Следующим параметрам данной функции (свойствам класса) присвоены значения, которые будут использоваться по умолчанию. Это делать не обязательно, но желательно. Если все параметры (свойства) имеют значения по умолчанию, то при создании объектов на основе этого класса с пустыми аргументами ошибок не будет. Если в данной функции параметрам не заданы значения по умолчанию, то эти значения нужно обязательно передать в качестве аргумента при создании объекта на основе такого класса (иначе программа выдаст сообщение об ошибке).
В теле метода ____init_ сначала создаются локальные переменные (по факту объекты),
которые могут использоваться в остальных методах класса, и ним переменным присваиваются значения Такие переменные имею префикс self. Это говорит интерпретатору о том, что эти переменные (обьекгы) являются локальными (собственностью этого класса), и могут использоваться только внутри данного класса. Все данные, которые класс получил извне через параметры функции _______init_. должны быть
перенесены в локальные переменным с префиксом self. Это будет таран шей того, что полученные значения не будут изменены в каких либо других инструкциях вне класса, В нашем случае для использования внутри класса были созданы следующие локальные переменные (объемы):
• selfbrand = brand - марка, модель автомобиля:
• self weight = weight - вес автомобиля;
• self.power = power - мощность двигателя;
• sei f.eolour = colour - цве1 кузова:
• self.signal = Ъи-Бил' - имитация звука сигнала.
Это не что иное, как свойства класса.
Ну и наконец, далее следуют методы класса Это уже известные нам обычные функции, которые могут иметь свой перечень параметров Единственным отличительным признаком этих функций (методов) является наличие на первом месте параметра self. Это говорит интерпретатору о том, что эти функции (методы) являются собственностью этого класса, и их нельзя путать с функциями вне класса, которые имеют такие же имена. В этих методах с использованием функции pnnt() выводится текст, имитирующий действия автомобиля. Наш первый класс готов и теперь мы можем на его основе в любых программах создавазь сколько угодно объектов (автомобилей) с разными свойствами и с разным порядком действий.
В данном примере после того, как класс был создан, написано несколько инструкций, демонстрирующих элементарные способы создания объекюв (автомобилей) на основе класса. Сначала мы получили некоторые сведения о классе Саг с использованием везроенных в класс методов, для этого используется синтаксис: <имя класса.свойство_класса>.
Затем на основе класса Саг было создано два объекта:
• MyCar l - объект (автомобиль) со свойствами объекта по умолчанию;
• МуСаг_2 - объект (автомобиль) с пользовательским набором свойств.
В заключение мы получили некоторые сведения о свойствах этих объектов с использованием синтаксиса: <имя объекта.свойсгво_объекта>.
После выполнения этой программы будет получен следующий результат (рис. 10.8).
ЕИяЙйЦ Очигтитс.
--- Выводим сведения о классе Саг ---Объекты класса-* Автомобили Автор программы Питоша Создаем объект МуСаг 1 (значения свойств по умолчанию) Сведения об объекте МуСаг 1 (значения свойств по умолчанию) Бренд-> Ford Вес-> 900 кг. Мощность-* 150 лс. Цвет-* Красный Создаем объект МуСаг 2 и меняем значения свойств Сведения об объекте МуСаг_2 (с новыми свойствами) Бренд-* Мерседес Вес* 1200 кг. Мощность-* 250 лс. Цвет-* Черный
Рис. 16.8. Результаты работы программы формирования класса «Автомобиль»
Как видно из данного примера, было создано два объекта (автомобиля) с совершенно разными характеристиками на основе одного класса. Таких объектов может быть создано сколько угодно, они будут иметь совершенно разные свойства, но обладают способностью выполнять одни и те же действия. А эти действия запрограммированы в методах класса.
Эта интерактивная книга может не только выполнить программный код. но и показать вам мультфильм про объектно-ориентированное программирование. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис. 16.9).
* Посмотреть фильм
Рис. 16.9. Мультфильм про объектно-ориентированное про|раммирование
Урок 16.4* Управляем автомобилями через методы класса
Итак, мы создали свой первый класс и на его основе создали два объекта - два автомобиля Теперь попробуем управлять этими автомобилями с использованием методов класса. При создании класса «Саг» были запрограммированы следующие методы (действия) объектов (автомобилей):
• ехать прямо;
• тормозить;
• поворачивать направо:
• поворачивать налево;
* подавав звуковой сигнал.
Теперь посмотрим, как можно использовать эти методы для управления автомобилями на основе программы, приведенной в листинге 16.4.
. Лисипп 16.2. Использование меголов класса (часть первая)
ч Редактор кода
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
25
26
27
28
29
# Листинг 16.2 class Саг
"’"'Автор программы Питоша"""
class_obj = ''Автомобили" « Объекты класса
r»ax_speed = 90 <7 Максимально допустимая скорость на дорогах
def __init__(self, brand ford', weight 900,
power 150, c<jlour='Красный'):
self brand brand
self weight. = weight self power = power
я Марка, модель автомобиля
Я Вес автомобиля
я Мошаость двигателя
self colour colour * Мощность двигателя self.signal = 'Би-Бил' < Имитация зука сигнала
def drive(self): # Метод двигаться прямо рг1п1("Поехали, двигаемся прямо;")
print("Скорость движения не болен , Car max_speed>
def Hgh'self): Я Метод повернуть на право рг1п1("Едем, поворачиваем руль направо!")
def left(self): я Метод повернуть на лево рг1пТ("Едем, поворачиваем руль налево.'")
def brake(self): я Метод тормозить
рг1пс("Стоп, активируем тормоз")
def beep (self): я Метод подать звуковой сигналь ргпптС'Подан звуковой сигнал") pr1nt(self signal
Листинг 16.2. Использование методов класса (часть вюрая)
31
def drive_car(MyCar): print('--------- Поехал автомобиль', МуСаг brand, '-------')
МуСаг drive() Я Двигается прямо МуСаг.right) * Поворачиваем направо МуСаг dnvef) я Двигается прямо МуСаг.left() я Поворачиваем налево МуСаг .drive() Я Двигается прямо МуСаг.beep() я Подаем звуковой сигнал МуСаг brake() Я Тирмозим
41 printf'I-' * 50)
4? return
43
44 MyCar.l Car()
i printf‘Создан автомобиль , MyCar_l brand 'цвет-', MyCar_l colour) 46 dri ve_car fMyCar_l)
4S MyCar_2 Car('Мерседес 1, 1200 , 250, 'Черный')
printf‘Создан автомобиль , HyCar_2 brand 'цвет-', MyCar_2 colour) drive_car(MyCar_2)
В данном примере создана функция с именем drive car В этой функции выполняются обращения к различным методам класса Саг. Для вызова метода объекта используется синтаксис: <имя объекта.метод_объекта>.
Затем было создано два объекта - автомобиля с совершенно разными свойствами на основе одного класса, а с использованием функции drive car эти автомобили совершали определенные действия.
После выполнения этой программы будет получен следующий результат (рис. 10.10).
Очистить
Создан автомооипь Ford цвет Красный ..... Поехал автомобиль Ford ..... Поехали, двигаемся прямо1 Скорость движения не более - 90 Едем, поворачиваем руль направо! Поехали, двигаемся прямо! Скорость движения не более - 90 Едем, поворачиваем руль налево! Поехали, двигаемся прямо! Скорость движения не более - 90 Подан звуковой сигнал Би Бип Стоп, активируем тормоз
Создан автомобиль Мерседес цвет- Черный ..... Поехал автомобиль Мерседес ..... Поехали, двигаемся прямо1 Скорость движения не более - 90 Едем, поворачиваем руль направо! Поехали, двигаемся прямо' Скорость движения не более 90 Едем, поворачиваем руль налево! Поехали, двигаемся прямо1 Скорость движения не более 90 Подан звуковой сигнал Би Бип Стоп, активируем тормоз
Рис. 16.10. Результаты работы программы использования методов класса «Автомобиль»
Как видно из данного примера, не смотря на то, что объекты имеют абсолютно ратные свойства, они способны совершать одни и те же действия, которые запрограммированы в методах класса.
Эта интерактивная книга может не только выпи шить программный код. но и показать вам фильм про объектно-ориентированное программирование. Для этого достаточно открыть вкладку «Посмотреть мультфильм» (рис 16.11).
Д| Посмотрет ь фильм
Рис. 16.11. Фильм - про объектно-ориентированное программирование
Краткие и rui и темы 1Ь
8. Язык программирование Python поддерживает объектно-ориентированное программирование (ООП), это позволяет создавать классы, а на основе классов объекты Такой подход обеспечивает создание абсолютно изолированных фрагментов программ с возможностью использования функционала этих фрагментов в различных модулях и приложениях.
9. Каждый объект, созданный на основе класса, может иметь абсолютно разный набор свойств, но способен использовать все функциональные возможности, которые реализованы в методах класса,
К).Классы имеют набор атрибутов, доступ к который можно получить из инструкций вне класса. Через эти атрибуты каждому объекту класса можно задать собственный набор свойств.
11. Па основе одного класса родителя можно создавать дочерние классы. Класс потомок наследует свойства и методы класса родителя, при этом может иметь набор собственный свойств и методов
12. Переменные и функции, которые находятся внутри класса, имеют специальный атрибут «self» (собственный), благодаря которому значения этих атрибутов не могут быть испорчены (изменены) в инструкциях, находящихся вне класса.
Вопросы для самоконтроля к теме 16
1 Какая из инструкций, создающих класс, не имеет ошибки:
• «class My_class:»;
• «Class my class:»;
• «clacc my class:»;
• «klass My_class:».
2 .Какая из функций является конструктором класса и не имеет ошибки
• «def init (self, х, у):»;
• «def _init_(self. x, у):»;
• «definiteself, x, y):»;
• «def ( init , self, x, y):».
3 .Какая из функций является методом класса и не имеет ошибки:
• «def mymetodtself, х. у):»;
• «def___init_t my metod. x, y):»;
• «def my_metod(x, y, self):»;
• «def my metodt x, y):».
Л.Какая из инструкций создает объект на основе класса «Саг» и не имеет ошибки:
• «тусаг = Саг()»;
• «ту_саг= Саг »;
• «ту_саг= саг()»;
• «ту_саг= саг(тусаг)».
Послесловие
В данной электронной книге были рассмотрены только базовые элементы, которые используются при программировании на Python. Были сознательно максимально упрошены все примеры. Основная цель книги - познакомиться с типами данных и с базовыми инструкциями, с возможностями создания функций и классов из часто используемых фрагмензов программ Если после знакомства с приведенными материалами, вы почувствовали, что Python прекрасно работают, что программировать на нем не так уж и сложно, го основная цель данной книги достигнута. Значит можно устанавливать на свой компьютер необходимый инструментарий и приступать к практической деятельности.
Следующим шагом в освоении программирования на Python является изучение инструментария для создания привлекательного пользовательского интерфейса. Ведь программы пишутся не столько для себя, сколько для пользователей, которых может быть тысячи, десятки тысяч и более. Для этого в составе Python имеется встроенная библиотека Tkinter, а так же множество библиотек сторонних разработчиков: PyQT, PySide, WxPython и др. Родной для Python является библиотека Tkinter. которая входит в состав дистрибутива, ее нс нужно искать и выполнять действия по дополнительной установке.
На сайте «Академия Python» (apython.ru) и «УМНИК» (rumnik.ru), вы можете найти и другие интерактивные цифровые книги но программированию на Python В них вы сможете более детатьно познакомиться с некоторыми особенностями этою языка, научиться создавай, сайты, настольные и мобильные приложения, программировать игры.
В завершении остается пожелать удачного практического применения тех навыков и знаний, которые вы приобрели при прочтении данного материала.
Список источников и литературы
1. Дмитрий Мусин Самоучитель Python. Изд. СИ, 2017.-154 с
2. Бэрри П. Изучаем программирование на Python. O’Reilly. -М., :Изд. «Э», 2017. -624 с.
3. Копырнн. Л. С. Программирование на Python : учебное пособие / А. С. Копырнн, Т. Л. Салова. - М, ФЛИНТА, 2021. - 48 с. - URL https://znanium.com/catalog/product/1851993.
4 Мэтиз Э. Изучаем Python. Программирование игр, визуализация данных, вэи-прмложения: пер. с анг. -СПб.: Пигер, 2017. -496 с.
5. Самоучитель Python, https://pythonworld.ru/samouihitel-python
6. Топ языков программирования в 2025 году: рейтинг 1FEE и влияние на него языковых моделей. https://hahr.com/ru/conipanies/selecteJ/articles/95I348/.
7. Федоров. Д. Ю. Программирование на языке высокою уровня Python : учеб, пособие. -М.: Издательство Юрайт, 2019.
8. Postolit.A. djangoworldbook https://github.com/ \Postolit/django_world_book.
9. Python для начинающих https://okpythtm.net/.
10. Python. Загрузите последнюю версию для Windows https://www.psthon.org/downloads/.
11. Python. Урок 1. Установка. https://dcvpractice.ru/python-lesson-l-install/.
12. Python. Урок 16. Установка пакетов и Python https://devpractice.ru/python-lesson-16-install-packages/
13 Python’s documentation, tutorials, and guides, https://www.python.org/doc/.
14. T1OBE Index for September 2022. https://www.tiobe.com/tiobe-index/.