Программирование на языке Python (Учебное пособие, 2022) PDF

Document Details

LaudableNaïveArt

Uploaded by LaudableNaïveArt

Московский Автомобильный-Дорожный Государственный Технический Университет (МАДИ)

2022

Л.Ф. Макаренко, И.С. Шувалова

Tags

программирование python учебник информатика

Summary

Это учебное пособие по программированию на языке Python. В нем рассматриваются основы языка, типы данных, операции, инструкции, функции и модули. Пособие содержит примеры практических задач и алгоритмы решения задач, а также задания для самостоятельного решения. Предназначено для студентов направления подготовки "Информатика и вычислительная техника".

Full Transcript

МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (МАДИ) Л.Ф. МАКАРЕНКО, И.С. ШУВАЛОВА ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PYTHON В печать Проректор по учебной работе...

МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (МАДИ) Л.Ф. МАКАРЕНКО, И.С. ШУВАЛОВА ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PYTHON В печать Проректор по учебной работе Татаринов В.В. Цена 450 руб. МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (МАДИ)» Л.Ф. МАКАРЕНКО, И.С. ШУВАЛОВА ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PYTHON УЧЕБНОЕ ПОСОБИЕ Утверждено в качестве учебного пособия редсоветом МАДИ МОСКВА МАДИ 2022 УДК 004.438 ББК 32.973.26-018.1 Ш 952 Рецензенты: доц. каф. «Автоматизированные системы управления» МАДИ, канд. техн. наук К.Н. Мезенцев; зав. каф. «Информатика и информационные таможенные технологии» доц. Российской таможенной академии, канд. техн. наук И.И. Никитченко Макаренко, Л.Ф. Ш 952 Программирование на языке Python: учеб. пособие / Л.Ф. Макаренко, И.С. Шувалова. – М.: МАДИ, 2022. – 88 с. В учебном пособии рассматриваются синтаксис и основные конструкции, методы языка Python и приёмы реализации алгоритмов решения прикладных задач на Python, что позволяет приобрести практические навыки решения разнообразных информационных за- дач в профессиональной инженерной деятельности и применять по- лученные знания и приёмы для комплексного решения прикладных вычислительных задач. Даются примеры применения к конкретным практическим задачам. Учебное пособие предназначено для студентов, обучающихся по направлению подготовки бакалавриата 09.03.01 – «Информатика и вычислительная техника», и специалитета 23.05.01 – «Наземные транспортно-технологические средства», а также всех форм обуче- ния, изучающих эти дисциплины. УДК 004.438 ББК 32.973.26-018.1 © Макаренко Л.Ф., 2022 © Шувалова И.С., 2022 © МАДИ, 2022 3 Введение Данное учебное пособие предназначено для приобретения практических навыков подготовки, отладки и решения разнообразных информационных задач на современных компьютерах с использова- нием популярного языка высокого уровня Python. В пособии по- дробно рассмотрены основные конструкции и методы языка Python, сопровождающиеся многочисленными примерами написания про- граммного кода. Учебное пособие структурно разделено на две главы в соответ- ствии с необходимостью первоначального ознакомления с основами языка Python, а затем с примерами его использования в решении ряда практических задач, в реализации алгоритмов их решения. Первая глава учебного пособия разделена, в свою очередь, на три раздела:  Раздел 1. Общие сведения о языках программирования В этом разделе дается классификация языков программирова- ния, сведения о синтаксисе языка программирования Python, об ос- новных его реализациях (версиях Python) и режимах работы. Особое внимание уделено также обзору парадигм программирования.  Раздел 2. Данные, типы данных и операции языка Python Здесь рассматриваются типы данных и операции языка Python, управляющие последовательности символов, методы работы со строками, списками, кортежами, словарями и множествами. По- дробно изложены методы работы со строковым типом данных. При- ведены многочисленные примеры обработки данных различных ти- пов.  Раздел 3. Инструкции, функции и модули в языке Python В рамках третьего раздела описаны инструкции языка Python по вводу и выводу данных, по организации ветвлений и циклов при реа- лизации соответствующих алгоритмических конструкций, по приме- нению пользовательских функций, модулей и файлов. 4 Материал, изложенный во второй главе языка Python учеб- ного пособия, содержит примеры решения практических задач с по- мощью реализации их алгоритмических конструкций на языке Python. Приводимые примеры задач объединены в группы в зависимости от того, какие типовые алгоритмы положены в основу их решения. Так, если первая группа задач касается обработки числовых последова- тельностей, состоящих из простых переменных, то в последующих группах задач данные хранятся в одномерных массивах, матрицах или являются строками символов. Фрагменты программ на языке Python, реализующие предварительно разработанный и приве- денный в виде графической схемы алгоритм решения задачи, снаб- жены подробными комментариями и пояснениями. В отдельном раз- деле приводятся общие требования, предъявляемые к оформлению текста программ, а также задачи для самостоятельного решения в порядке возрастания сложности алгоритма решения каждой из них. В заданиях для самостоятельного решения отражены следую- щие учебные аспекты:  работа с числовыми последовательностями: вычисление суммы, произведения, среднего арифметического, максимума, мини- мума;  обработка одномерных массивов и матриц: сортировка, про- верка соответствия элементов массива некоторому условию, опера- ции с элементами массива, отобранными по некоторому условию. Пособие содержит большое количество иллюстрационных при- меров, задач с решениями, а также задач для самостоятельного ре- шения. Во всех рассматриваемых задачах особое внимание уделяется контролю исходных данных перед началом проведения каких-либо вычислений. Входной контроль позволяет оптимизировать про- грамму за счет проведения только эффективных вычислений и ис- ключения «тупиковых» вариантов развертывания алгоритма. 5 Глава 1. ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ PYTHON 1.1. Общие сведения о языках программирования 1.1.1. Понятие и классификация языков программирования Язык – совокупность символов, соглашений и правил, используемых для общения. Языком программирования называется фиксированная си- стема обозначений и правил для описания алгоритмов и структур данных. Языки программирования делятся на языки низкого и высокого уровня. Языки низкого уровня – это средство записи инструкций компь- ютеру простыми приказами-командами на аппаратном уровне. Такой язык отражает структуру данного класса ЭВМ и поэтому иногда назы- вается машинно-ориентированным языком. Языки высокого уровня – это языки, средства которых допус- кают описание задачи программистом в легко воспринимаемом виде. Отличительной особенностью этих языков является их ориентация не на систему команд той или иной ЭВМ, а на систему операторов, характерных для записи определенного класса алгоритмов. К языкам программирования этого типа относятся: BASIC, FORTRAN, ALGOL, COBOL, PASCAL, C, C++, C#, JAVA. Программа на языках высокого уровня записывается системой обозначений, близкой человеку (например, фиксированным набором слов английского языка, имею- щих строго определенное значение). Программа – это набор инструкций для определенного испол- нителя. Большинство программ создаются для решения какой-либо за- дачи на компьютере. В процессе ее решения необходимо: ввести данные, указать способ их обработки, задать способ вывода получен- ных результатов. Поэтому нужно уметь использовать основные эле- менты программирования: ввод и вывод данных, условное выполне- ние, циклы, функции, подпрограммы, файлы и модули, и на их основе строить программы. 6 1.1.2. Синтаксис языка программирования Python Язык программирования Python был создан примерно в 1991 году голландцем Гвидо ван Россумом. После того, как Россум разработал язык, он выложил его в Ин- тернет, где уже целое сообщество программистов присоединилось к его улучшению. Python активно совершенствуется и в настоящее время. Часто выходят его новые версии. Официальный сайт http://python.org. Python – высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Python характеризуется ясным син- таксисом. Читать код на этом языке программирования достаточно легко, т.к. в нем мало вспомогательных элементов, а правила языка заставляют программистов делать отступы (четыре пробела). По- нятно, что хорошо оформленный текст с малым количеством отвле- кающих элементов читать и понимать легче. В то же время стандарт- ная библиотека включает большой объём полезных функций. Основой любого языка является алфавит (набор знаков, состо- ящий из букв, десятичных и шестнадцатеричных цифр, специальных символов). Группа слов, имеющая смысл, называется словосочетанием. В языке программирования словосочетание, состоящее из слов и сим- волов, и формирующее правило вычисления некоторого значения, называется выражением. Минимальная конструкция языка, пред- ставляющая законченную мысль, – это предложение. Если предло- жение языка программирования задает полное описание действия, которое необходимо выполнить, то оно называется оператором. 1.1.3. Парадигмы программирования и основные реализации языка Python Python поддерживает несколько парадигм программирования:  Структурное программирование – методология разра- ботки программного обеспечения, в основе которой лежит представ- ление программы в виде иерархической структуры блоков. В соответ- 7 ствии с данной методологией любая программа строится без исполь- зования оператора goto из трёх базовых управляющих структур: по- следовательность, ветвление, цикл; кроме того, используются под- программы. При этом разработка программы ведётся пошагово, ме- тодом «сверху вниз».  Объектно-ориентированное программирование (ООП) – парадигма программирования, в которой основными концепциями являются понятия объектов и классов.  Функциональное программирование – парадигма про- граммирования, в которой процесс вычисления трактуется как вычис- ление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программирова- нии).  Императивное программирование – это парадигма про- граммирования, которая описывает процесс вычисления в виде ин- струкций, изменяющих состояние программы. Императивная про- грамма очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер.  Аспектно-ориентированное программирование (АОП) – парадигма программирования, основанная на идее разделения функ- циональности для улучшения разбиения программы на модули. Python портирован и работает почти на всех известных плат- формах — от КПК до мейнфреймов. Существуют порты под Microsoft Windows, практически все варианты UNIX (включая FreeBSD и Linux), Plan 9, Mac OS и Mac OS X, iPhone OS 2.0 и выше, Palm OS, OS/2, Amiga, HaikuOS, AS/400 и даже OS/390, Windows Mobile, Symbian и Android. Python используют для:  улучшения качества программ;  уменьшения затрат на разработку программ;  переноса программ на различные платформы;  работы с xml/html файлами; 8  работы с http запросами;  создания веб-сценариев;  работы с GUI (графический интерфейс);  работы с FTP;  работы с изображениями, аудио- и видеофайлами;  робототехники;  программирования математических и научных вычислений и т.д. Основные реализации CPython – реализация Python на портируемом ANSI C. Jython: Python для Java – состоит из классов Java, которые ком- пилируют код Python в байт-код Java для последующего выполнения на Java Virtual Machine. IronPython: Python для.NET – аналогичная Jython реализация, только для среды.NET и Mono. Stackless – оптимизация стандартного CPython для паралле- лизма. PyPy: Быстрый Python – альтернативная реализация CPython для производительности с использованием динамической трансля- ции. 1.1.4. Режимы работы языка Python Для преобразования кода с одного языка программирования, например, языка высокого уровня, на другой, например, машинный язык, требуется специальная программа – транслятор. Существует два основных способа трансляции – компиляция программы или ее интерпретация. Компилятор сразу переводит весь программный код на машин- ный язык и создает исполняемый файл. Интерпретатор переводит программный код построчно. Напрямую взаимодействует с операционной системой. Python – это интерпретируемый язык программирования. Суще- ствует два режима работы: интерактивный и сценарный. 9 а б Рис. 1. Режимы работы языка программирования Python: интерактивный (а), сценарный (б) В интерактивном режиме команды вводятся и выполняются по- строчно. Среда программирования IDLE позволяет реализовать ин- терактивный режим работы. Символ “>>>” обозначает приглашение интерпретатора для ввода операторов. 1.2. Данные, типы данных и операции языка Python Как упоминалось ранее в , базовыми объектами алгоритма в практике программирования являются константы, переменные, мас- сивы и др. Они различаются по способам адресации данных в памяти компьютера. Константа – способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается. Переменная – область памяти, способная менять значение, адресо- ванное ей. В языке программирования Python реализована технология ди- намической типизации объектов, основным свойством которой явля- ется то, что каждый созданный объект – это ссылка. Все данные в языке Python являются объектами, и объект меняет свой тип при изменении ссылки. Поэтому в отличие от других языков программи- рования в Python не нужно заранее объявлять тип переменных. 10 В языке Python реализована возможность работать со следую- щими типами данных:  числовые типы;  строки;  списки;  кортежи;  словари;  множества;  логический тип Boolean;  модульные типы (векторы, библиотеки). 1.2.1. Числовые типы Язык Python поддерживает следующие базовые числовые типы: – целые числа (int) – положительные и отрицательные це- лые числа, а также 0 (например, 4, 687, -45, 0); – числа с плавающей точкой (float) – вещественные числа (например, 1.45, -3.789654, 0.00453). Разделителем целой и дробной части вещественного числа служит точка, а не запятая. Для определения типа данных в программе можно использо- вать инструкцию type(). Пример кода: >>> a = 4 #присваивание числа >>> print (type(a)) >>> #целое число >>> a = 4.5 >>> print (type(a)) >>> #вещественное число Знак # в строках кода обозначает комментарии, т.е. неисполня- емые и не учитываемые интерпретатором выражения. 11 Для преобразования данных к необходимому типу использу- ются следующие инструкции языка Python: int() – преобразует аргумент в целое число; str() – преобразует аргумент в строку; float() – преобразует аргумент в число с плавающей точкой. Примеры применения вышеперечисленных инструкций в выра- жениях представлены в табл. 1. Таблица 1 Примеры преобразования типов данных Вид преобразования Пример выражения Результат выполнения int ('56') 56 в целое число int (4.03) 4 int ("comp O ш и б к а 486") str (56) '56' в строку str (4.03) '4.03' float (56) 56.0 в вещественное число (с плавающей точкой) float ("56") 56.0 Операции над данными структурно могут быть представлены в следующем виде (рис. 2): Рис. 2. Структура операции над данными Примеры использования операций в выражениях приведены в табл. 2. 12 Математические операторы, используемые в языке Python, представлены в табл. 3. Таблица 2 Примеры использования операций в выражениях Пример выражения Результат выполнения 34.907 + 320.65 355.55699999999996 'Hi, ' + 'world :) ' 'Hi, world :) ' 'Hi, ' * 5 'Hi, Hi, Hi, Hi, Hi,' 'Hi, ' + 15 O ш и б к а Таблица 3 Математические операторы языка Python Оператор Описание Пример Результат + Сложение 7 + 3 10 - Вычитание 7 - 3 4 * Умножение 7 * 3 21 / Деление 7 / 3 2.3333333333333335 Возведение ** 7**3 343 в степень Целочислен- // 7 // 3 2 ное деление Остаток от % 7 % 3 1 деления 1.2.2. Строки и строковые методы Строка — это неизменяемая последовательность символов. Строки могут заключаться как в одиночные ('Game Over'), так и двойные кавычки ("Game Over"). Однако начало и конец строки должны обрамляться одинаковым типом кавычек. 13 Ниже приведен пример кода с использованием различных символов обрамления строк. print("Программа 'Game Over' 2.0") print("Программа", " 'Game Over' 2.0 ") print("Программа", " 'Game Over' 2.0 ") print("Программа", end=" ") print("'Game Over' 2.0 ") Вывод результата: Программа 'Game Over' 2.0 Программа 'Game Over' 2.0 Программа 'Game Over' 2.0 Программа 'Game Over' 2.0 Для вывода символов псевдографики используются тройные кавычки. Функция len() определяет длину строки. Для строк существуют операции конкатенации (+) и дублиро- вания (*). Оператор in определяет, является ли какой-либо символ эле- ментом строки. Пример кода: >>> len ('It is a long string') 19 >>> '!!!' + ' Hello World ' + '!!!' '!!! Hello World !!!' >>> '#' * 20 '####################' >>> if 'e' in ' Hello World ': print ('встречается в тексте') else: print ('не встречается в тексте') встречается в тексте 14 Индекс – уникальный порядковый номер символов в строке, а также в других структурах данных: списках, кортежах. Пример строки с указанием порядка индексации символов приведен на рис. 3. Рис. 3. Строка (над строкой индексация слева направо, под строкой индекса- ция справа налево) Примеры кода: 1. 2. >>> 'индекс' >>> tday = 'morning, after- 'и' noon, night' >>> 'индекс' [-1] >>> tday 'с' 'i' >>> 'индекс' [-3] >>> a = tday 'е' >>> a 'o' >>> >>> Срезы (slices) – извлечение из данной строки одного символа или некоторого фрагмента (подстроки). Рис. 4. Строка (над строкой индексация слева направо, под строкой ин- дексация справа налево) Оператор извлечения среза из строки выглядит так: :. Здесь – индекс начала среза, – индекс окончания среза, при этом символ с номером в срез не входит. Строка, для которой про- демонстрировано извлечение среза в нижеприведенном примере кода, представлена на рис. 4. 15 Пример кода: >>> s = 'hello' >>> s = 'hello' >>> s[1:4] ИЛИ >>> s[-4:-1] 'ell' 'ell' >>> >>> Если в операторе извлечения среза отсутствует первый индекс, то срез берется от начала строки до второго индекса, что продемон- стрировано в следующем фрагменте программного кода: >>> a = 'very big string' >>> a [: 4] 'very' >>> Аналогично, при отсутствии второго индекса, срез берется от первого индекса до конца строки. Пример кода: >>> a = 'very big string' >>> a [9 :] 'string’ >>> Если оператор извлечения среза из строки выглядит так: : : , где – шаг, через который выбираются элементы строки. Пример кода: >>> a = 'very big string' >>> a [: : 3] 'vyisi' >>> Существующие в языке Python управляющие последовательно- сти (escape-последовательности) позволяют вставлять в строки спе- циальные символы. Типичную escape-последовательность образуют два символа: обратный слеш и еще какой-либо символ. Например, '\n' – это новая строка, '\t' – это табуляция. Управляющие после- довательности языка Python приведены в табл. 4. 16 Таблица 4 Управляющие (escape-) последовательности в Python Еscape-последователь- Описание ность Обратный слеш. Выводит один знак \\ обратного слеша Апостроф, или одиночная кавычка. Вы- \' водит один апостроф Двойные кавычки. Выводит одну такую \" кавычку Пустая строка. Перемещает курсор в \n начало следующей строки Горизонтальный отступ – символ табу- \t ляции. Перемещает курсор вправо на один отступ Метод – это функция, применяемая к объекту. В данном слу- чае объектом является строка. Вызов метода: имя_объекта. имя_метода (параметры) Метод find() находит в данной строке данную подстроку, ко- торая передается в качестве параметра. Метод возвращает индекс первого вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение -1. Пример кода: >>> s = 'Hello' >>> print(s.find('e')) 1 >>> print(s.find('ll')) 2 >>> print(s.find('L')) -1 Метод rfind() возвращает индекс последнего вхождения данной строки, ''поиск справа'' (пункт 1 в примере кода). 17 При вызове метода find() с указанием трех параметров s.find(T, a, b) поиск будет осуществляться в срезе s[a:b]. Если указать только два параметра s.find(T, a), то поиск будет осу- ществляться в срезе S[a:], т. е. начиная с символа с индексом a и до конца строки (пункт 2 в примере кода). Пример кода: 1. 2. >>> s = 'Hello' >>> s='Hello' >>> print(s.find('l')) >>> print(s.find('l',1,4)) 2 2 >>> print(s.rfind('l')) >>> print(s.find('H',1)) 3 -1 >>> >>> Метод replace() – s.replace(old, new) – заменяет в строке s все вхождения подстроки old на подстроку new. Пример кода: >>> 'Hello'.replace('l', 'L') 'HeLLo' Если метод имеет три параметра s.replace(old, new, count) – то заменены будут не все вхождения, а только не больше, чем пер- вые count из них. Пример кода: >>> 'Abrakadabra'.replace('a', 'A', 2) 'AbrAkAdabra' Метод count() – s.count(T) возвращает число вхождений подстроки внутри строки. Пример кода: >>> 'Abracadabra'.count('a') 4 При указании трех параметров s.count(T, a, b) будет выполнен подсчет числа вхождений подстроки в срез S[a:b]. В табл. 5 приведены другие методы работы со строками. 18 Таблица 5 Методы работы со строками в Python Метод Описание Возвращает строку, символы которой приве- upper() дены к верхнему регистру Возвращает строку, символы которой приве- lower() дены к нижнему регистру Возвращает новую строку, в которой регистр swapcase() всех символов обращен: верхний становится нижним и наоборот Возвращает новую строку, в которой первая capitalize() буква прописная, а остальные – строчные Возвращает новую строку, в которой первая title() буква каждого слова прописная, а остальные – строчные Возвращает строку, из которой убраны все ин- strip() тервалы (табуляция, пробелы, символы пу- стых строк) в начале и в конце 1.2.3. Списки и кортежи Список – это сложный тип данных, представляющих собой из- меняемую упорядоченную последовательность различных объектов. Список заключается в квадратные скобки. Примеры списков: [23, 656, -20, 67, -45] # список целых чисел; [4.15, 5.93, 6.45, 9.3, 10.0, 11.6] # список из дробных чисел; ["Katy", "Sergei", "Oleg", "Dasha"] # список из строк; ["Москва", "Титова", 12.5, 148] # смешанный список; [[0, 0, 0], [0, 0, 1], [0, 1, 0]] # список, состоящий из списков. Кортеж – это неизменяемый список. С момента создания кор- теж не может быть изменен никакими способами. Кортеж заключа- ется в круглые скобки. 19 1.2.3.1. Создание списков и кортежей Создать список можно несколькими способами. Например, можно обработать любой итерируемый объект (например, строку) встроенной функцией list(): >>> list('spisok') ['s', 'p', 'i', 's', 'o', 'k'] Также список можно создать и при помощи литерала: >>> mylist = [] # пустой список >>> mylist_1 = ['s', 'p',['isok'],2] >>> mylist [] >>> mylist_1 ['s', 'p',['isok'],2] Список может содержать любое количество любых объектов (в том числе и вложенные списки), или не содержать ничего. Еще один способ создания списка – с помощью генератора. Ге- нератор списков – способ построить новый список, применяя выра- жение к каждому элементу последовательности. >>> lst = [5 * lst for lst in range(0,5)] >>> lst [0,5,10,15,20] Кортеж может быть преобразован в список и наоборот. Встро- енная функция tuple воспринимает список в качестве аргумента и возвращает кортеж с теми же самыми элементами. В то же время функция list воспринимает кортеж в качестве аргумента и возвра- щает список. В результате tuple «замораживает» список, а list его «размораживает». 20 1.2.3.2. Операции над списками Списки можно объединять: >>> [45, -12] + [21, -50, 33] [45, -12, 21, -50, 33] и повторять: >>> [[0,0], [0,1], [1,1]] * 2 [[0,0], [0,1], [1,1], [0,0], [0,1], [1,1]] С помощью функции l e n ( ) можно определять длину списка >>> li = [2, 3, 5, 7, 11, 13] К элементу списка можно При обращении к фраг- обращаться по его номеру (или менту списка используют срезы индексу). Индексация списков в (slices): языке Python начинается с нуля. >>> li[0:3] >>> li [2, 3, 5] 2 >>> li[3:] >>> li[-2] 11 [7, 11, 13] Если символ в строке изменить нельзя, то элемент списка – можно: >>> mylist = ['ab', 'ra', 'ka', 'da', 'bra'] >>> mylist = 'ro' >>> mylist ['ab', 'ro', 'ka', 'da', 'bra'] >>> mylist[0:2] = [10, 20] >>> mylist [10, 20, 'ka', 'da', 'bra'] 21 К спискам можно применять следующие методы. m y l i s t. a p p e n d ( x ) – добавляет значение x в конец списка m y l i s t : >>> mylist.append(-5) >>> mylist ['ab', 'ro', 'ka', 'da', 'bra', -5] m y l i s t. i n s e r t ( i , x ) – вставляет на i-ю позицию списка m y l i s t значение x: >>> mylist.insert(0,1) >>> mylist [1, 'ab', 'ro', 'ka', 'da', 'bra', -5] m y l i s t. e x t e n d ( l s t ) – расширяет список m y l i s t , до- бавляя в конец все элементы списка l s t : >>> lst = [2 * lst for lst in 'test'] >>> lst ['tt', 'ee', 'ss', 'tt'] >>> mylist.extend(lst) [1, 'ab', 'ro', 'ka', 'da', 'bra', -5, 'tt', 'ee', 'ss', 'tt'] m y l i s t. r e m o v e ( x ) – удаляет первое вхождение данного значения x в список m y l i s t : >>> mylist.remove('tt') >>> mylist [1, 'ab', 'ro', 'ka', 'da', 'bra', -5, 'ee', 'ss', 'tt'] m y l i s t. p o p ( [ i ] ) – возвращает значение в позиции номер i и удаляет этот элемент из списка m y l i s t ( если индекс не указан, удаляется последний элемент) : >>> mylist.pop() 1 >>> mylist ['ab', 'ro', 'ka', 'da', 'bra', -5, 'ee', 'ss', 'tt'] >>> mylist.pop() 'tt' >>> mylist ['ab', 'ro', 'ka', 'da', 'bra', -5, 'ee', 'ss'] 22 m y l i s t. i n d e x ( x ) – возвращает номер первой из позиций списка m y l i s t , которые заполнены данным значением x : >>> mylist.index('da') 3 m y l i s t. c o u n t ( x ) – возвращает количество элементов в списке m y l i s t со значением x : >>> mylist.count('da') 1 m y l i s t. s o r t ( ) – сортирует элементы списка по возраста- нию: >>> students = ['Sasha', 'Ivan', 'Masha'] >>> students.sort() # изменяет сам список >>> students ['Ivan', 'Masha', 'Sasha'] >>> >>> students = ['Sasha', 'Ivan', 'Masha'] >>> sorted(students) # НЕ изменяет сам список ['Ivan', 'Masha', 'Sasha'] >>> students ['Sasha', 'Ivan', 'Masha'] mylist.reverse() – обращает порядок элементов списка: >>> students = ['Sasha', 'Ivan', 'Masha'] > > > s t u d e n t s. r e v e r s e ( ) # изменяет сам список >>> students ['Masha', 'Ivan', 'Sasha'] 1.2.3.3. Операции над кортежами Элементы кортежа имеют определенный порядок, как и в спис- ках, индексация начинается с нуля. Отрицательные значения ин- декса позволяют вести отсчет с конца кортежа. К кортежам можно применить операцию среза, но необходимо помнить, что результатом среза списка является список, а срезом кортежа – кортеж. 23 К кортежам нельзя применять методы, изменяющие сам кортеж, например, append() и extend(). При попытке использования этих методов всегда будет выдаваться ошибка. Для поиска элемента можно использовать метод index(), или проверять наличие эле- мента с помощью оператора in. Словарь – это изменяемый (как список) неупорядоченный (в отличие от строк и списков) набор пар «ключ : значение». В сло- варе не может быть двух одинаковых ключей, тогда как на значения таких ограничений не накладывается. Словарь заключается в фигур- ные скобки. Например, {1 : 'кошка', 2 : 'собака', 3 : 'птица', 4 : 'мышь'}. Создание словарей аналогично созданию строк, списков и кор- тежей. Существует несколько способов создания словарей:  с помощью литерала >>> d = {1:'a', 2:'b'} >>> d {1:'a', 2:'b'} Или >>> d = {} >>> d = 'a' >>> d = 'b' >>> d {1:'a', 2:'b'}  используя функцию dict() >>> d1 = dict(id = 1948, name = 'Washer', size = 3) >>> d1 { ' size' : 3, ' name' : 'Washer', ' id' : 1 9 4 8 } или >>> d2 = dict('id':1948,'name':'Wash- er','size':3) >>> d2 { ' size' :3, ' name' : 'Washer', ' id' : 1 9 4 8 } 24 или >>> d3 = dict([('id',1948),('name','Wasрer'),('size',3)]) >>> d3 { ' size' :3, 'name': 'Washer', ' id' : 1 9 4 8 } или >>> d 4 = dict(zip(('id','name','size'),(1948,'Wash- er',3))) >>> d4 { ' size' :3, 'name': 'Washer', ' id' : 1 9 4 8 }  с помощью метода fromkeys() > > > d = d. fromkeys([' a ' , ' b ' ] ) >>> d {'a':None,'b':None} или > > > d = d. fromkeys([' a ' , ' b ' ] , 1 0 0 ) >>> d {'a':100, 'b':100} Операции над словарями Элементы словаря можно добавлять и удалять. >>> dic = {'cat':'кошка','dog':'собака','bird':'птица'} >>> dic['fox'] = 'слон' >>> dic {'cat':'кошка','bird':'птица','dog':'соба- ка','fox':'слон'} >>> dic['fox'] = 'лиса' # Изменение >>> del dic['bird'] # Удаление >>> dic {'cat':'кошка', 'fox':'лиса', 'dog':'собака'} Возможность обращения к значению словаря по его ключу. > > > dic = {'cat':'кошка','bird':'пти- ца','mouse':'мышь'} > > > dic['cat'] 'кошка' >>> dic['bird'] 'птица' 25 Словари можно объединять с помощью метода update(). > > > dic1 = {1:'Google',2:'Mail',3:'Yandex',4: 'Yahoo'} >>> dic2 = {5:'Instagram',6:'Facebook',7:'Vk',8:'Tele- gram'} >>> dic1.update(dic2) >>> dic1 {1:'Google',2:'Mail',3:'Yandex',4:'Yahoo',{5:'Insta- gram',6:'Facebook',7:'Vk',8:'Telegram'} Метод clear()удаляет все элементы в словаре, оставляя сло- варь пустым. > > > dic = {'cat':'кошка','bird':'птица','mouse':'мышь'} > > > dic.clear() {} Метод get() получает значение, связанное с заданным клю- чом. Если ключ не найден, то этот метод не вызывает исключение. Вместо этого он возвращает значение по умолчанию. > > > book = {'Иван':1990, 'Петр':1995} > > > value = book.get('Иван', 'Запись не найдена') >>> value 1990 > > > value = book.get('Илья', 'Запись не найдена') >>> value 'Запись не найдена' Метод pop() возвращает значение, связанное с заданным ключом, и удаляет эту пару ключ/значение из словаря. Если ключ не найден, то метод возвращает значение по умолчанию. > > > book = {'Иван':1990, 'Петр':1995, 'Илья':2000} > > > year = book.pop('Иван', 'Запись не найдена') >>> year 1990 > > > book {'Илья': 2000, 'Петр': 1995} > > > year = book.pop('Иван', 'Запись не найдена') 'Запись не найдена' >>> book {'Илья': 2000, 'Петр': 1995} 26 Метод popitem() возвращает произвольно выбранную пару ключ/значение и удаляет эту пару из словаря. Пара ключ/значение возвращается в виде кортежа. > > > book = {'Иван':1990, 'Петр':1995, 'Илья':2000} > > > k,v = book.popitem() >>> k,v ('Илья', 2000) >>> book {'Иван':1990, 'Петр':1995} Метод items() возвращает все ключи в словаре и связанные с ними значения в виде последовательности кортежей. > > > book = {'Иван':1990, 'Петр':1995, 'Илья':2000} > > > book.items() dict_items([('Илья',2000), ('Иван',1990), ('Петр',1995)]) Метод keys() возвращает все ключи в словаре в виде после- довательности кортежей. > > > book = {'Иван':1990, 'Петр':1995, 'Илья':2000} > > > book.keys() dict_keys(['Илья', 'Иван', 'Петр']) Метод values() возвращает все значения из словаря в виде последовательности кортежей. > > > book = {'Иван':1990, 'Петр':1995, 'Илья':2000} > > > book.values() dict_values([2000, 1990, 1995]) Метод copy() копирует словарь. >>> d = {'a':100, 'b':200} >>> dic_1 = d.copy() >>> dic_1 {'a':100, 'b':200} Множество – это совокупность неповторяющихся элементов, расположенных в случайном порядке, которая работает как матема- тическое множество. Хранящиеся в множестве элементы могут иметь разные типы данных. Для обозначения этого типа данных используют фигурные скобки. Пустое множество обозначается set(). 27 Множества можно создавать с помощью литерала или, с помо- щью встроенной функции set(), преобразуя такие типы, как строки, списки и кортежи. >>> myset = set() #пустое множество >>> myset = set(['a','b','c','a']) >>> myset {'a', 'c', 'b'} Над множествами можно выполнять следующие операции: объединение; пересечение; разность; методы (add(), update(), remove(), clear()); встроенные функции (len, min, max); оператор in, not in. Примеры применения методов объединения, пересечения и разности для работы с множествами. >>> even_numbers = {0, 2, 4, 6, 8} >>> odd_numbers = {1, 3, 5, 7, 9} Объединение множеств – union() >>> numbers = even_numbers.union(odd_numbers) или >>> numbers = even_numbers | odd_numbers >>> numbers {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Пересечение множеств – intersection() >>> numbers_1 = even_numbers.intersec- tion(odd_numbers) или >>> numbers_1 = even_numbers & odd_numbers >>> numbers_1 set() >>> numbers_1 = numbers.intersection(odd_numbers) >>> numbers_1 {1, 3, 5, 9, 7} Разность множеств – difference() >>> numbers_2 = numbers.difference(odd_numbers) 28 или >>> numbers_2 = numbers - odd_numbers >>> numbers_2 {0, 8, 2, 4, 6} Кроме того, множества можно сравнивать. Для этого предусмот- рены методы issubset() и issuperset(). Метод issub- set(x)возвращает истину, если x является надмножеством мно- жества, а метод issuperset(x) возвращает истину, если x явля- ется подмножеством множества. >>> numbers_1 = set(' 0 1 2 3 4 5 6 7 8 9 ' ) >>> numbers_2 = set(' 0 2 4 6 8 ' ) >>> numbers_1.issubset(numbers_2) False >>> numbers_1.issuperset(numbers_2) True При выводе данных необходимо указать формат вывода, т.е. в каком виде данные будут представлены для пользователя. Суще- ствует два типа стилей форматирования данных: старый и новый. Старый стиль форматирования имеет следующую форму: ' % спецификатор' % данные. Виды спецификаторов приведены в табл. 6. Новый стиль форматирования заключается в использовании стандартной инструкции.format(). Пример нового стиля форматирования: >>> '{} {} {}'.format(n, f, s) '42 7.03 string cheese' 29 Таблица 6 Спецификаторы форматирования в Python Вид спецификатора Тип данных %s Строка %d Целое число в десятичной системе счисления Число с плавающей точкой в десятичной си- %f стеме счисления %% Символ % Примеры старого стиля форматирования: >>> '%s' % 42 '42' >>> '%d' % 42 >>> cat = 'Chester' '42' >>> weight = 13 >>> '%f' % 7.03 >>> "Наш кот %s весит %s фунтов" '7.030000' % (cat, weight) >>> '%d%%' % 100 'Наш кот Chester весит 28 фунтов' '100%' >>> n = 42 >>> f = 7.03 >>> s = 'string cheese ' >>> '%d %f %s' % (n, f, s) # ширина по умолчанию '42 7.030000 string cheese ' # ширина равна 10 символам, выравнивание их по правому краю >>> '%10d %10f %10s' % (n, f, s) ' 42 7.030000 string cheese ' # выравнивание символов по левому краю >>> '%-10d %-10f %-10s' % (n, f, s) '42 7.030000 string cheese' >>> '%10.4f ' % f # 4f обозначает 4 знака после точки ' 7.0300 ' 30 1.3. Инструкции, функции, модули в языке Python 1.3.1. Ввод и вывод данных При решении любой задачи необходимо ввести исходные дан- ные. Для того, чтобы увидеть результат выполненной задачи, его необходимо вывести. Для этого используются такие инструкции как input() и print(), т.е. ввод и вывод. В скобках указываются па- раметры. Примеры ввода данных: >>> input() #при вводе параметр может отсутствовать. 1234 '1234' >>> input() Hello World! 'Hello World!' или >>> input('Введите число:') Введите число:10 '10' >>> int(input('Введите число:')) Введите число:10 10 >>> float(input('Введите число:')) Введите число:10 10.0 или name = input ('Введите Ваше имя: ') Введите Ваше имя: Мария >>> name 'Мария' 31 Примеры вывода данных: #вывод строковых данных >>> print("Программа \"Game Over\" 2.0") Программа 'Game Over' 2.0 >>> print("Тоже", "самое", "сообщение") Тоже самое сообщение >>> print("Только", "чуть-чуть", "побольше") Только чуть-чуть побольше #вывод значений переменных >>> a = 1 >>> b = 2 >>> print(a, '+', b, '=', a + b) 1 + 2 = 3 #sep – параметр, используемый в качестве разделителя >>> c=a+b >>> print(a, b, c, sep = ':') 1:2:3 #end – параметр, который указывает на то, что будет выводиться после вывода всех значений, перечисленных в функции print() print(a, b, sep = ':', end = ' ') print('c =',c) 1:2 c = 3 >>> 1.3.2. Операции сравнения и логические операторы Для сравнения данных в языке Python используются операторы сравнения, представленные в табл. 7. Если результатом вычисления выражения может быть лишь ис- тина (True) или ложь (False), то такое выражение называется логи- ческим. Логические операторы, используемые в языке Python, пред- ставлены в табл. 8. 32 Таблица 7 Операторы сравнения в Python Оператор Описание Выражение == Равно А==В != Не равно А!=B > Больше A>B < Меньше A= Больше или равно A>=B > x, y = 5, 10 >>> y>x*x or y>=2*x and x>> i = 1 >>> while i >> 1.3.5. Инструкция цикла for. Функция range Цикл for используется: для повторения какой-либо последовательности действий за- данное число раз (совместно с функцией range). Синтаксис этой инструкции: for i in range(n): # n!= 0, n > 0 Тело цикла Пример кода: >>> for i in range(10): print(i, end = ' ') 0 1 2 3 4 5 6 7 8 9 >>> для изменения значения переменной в цикле от некоторого начального значения до некоторого конечного. 35 Синтаксис этой инструкции: а) # переменная i будет принимать значения от a до b – 1, a 10: break if count == 5: # пропустить 5 continue print (count) Инструкция pass ничего не выполняет, подразумевается, что впоследствии в тело цикла может быть вставлен программный блок. >>> for i in range(1,11): pass >>> 1.3.7. Функции Функция – сгруппированный блок выражений, выполняющийся при обращении к нему из основной программы по имени. Функции могут выполняться многократно. Функции необходимы для сокращения исходного кода за счет многократного использования его частей и улучшения структурности исходного кода за счет разделения его на смысловые части. Струк- турная схема функции представлена на рис. 5. В языке Python существуют встроенные (или стандартные) функции, например, min(), max(), sum(). Также можно создавать и пользовательские функции. 37 Создание и вызов функции При создании функции важно понимать, что аргумент – это часть данных, которая передается в функцию, когда функция вызы- вается., а параметр – это переменная, которая получает аргумент, переданный в функцию. def ФУНКЦИЯ(параметр1, параметр2,…): Тело функции ФУНКЦИЯ(аргумент1, аргумент2,…): Рис. 5. Схема функции Синтаксис функции: def имя_функции([переменные-параметры]): Тело функции return возвращаемый результат def – это инструкция (команда), позволяющая создавать функцию. После имени функции в скобках перечисляются параметры функции. Если их нет, то скобки остаются пустыми. return – инструкция (может и не быть), которая возвращает значение(я) в основную ветку программы. Вызвать функцию можно, указав ее имя и значения параметров, если они существуют. Пример кода: def schet(): m = int(input('Введите 1-е число: ')) n = int(input('Введите 2-е число: ')) if m > n: print(m-n) else: print(n-m) return m,n a, b = schet() c, d = schet() e, f = schet() 38 Примеры кода: #Функция, выводящая резуль- #Функция, возвращающая ре- тат зультат def sum1(a,b): def sum2(a,b): result = a+b result = a+b print (result) return (result) В функцию можно передавать разное количество параметров, используя символ *. Пример кода: >>> def min(*a): Вызовы данной функции: m = a >>> min(5) for x in a: 5 if m>x: >>> min(5,3) m = x 3 return m >>> min(5,3,6,10) 3 >>> min([5,3,6,10]) [5, 3, 6, 10] При вызове функции существует два способа присваивания зна- чений аргументам: 1. позиционное присваивание; 2. присваивание по ключу. Пример кода (1 способ): def search4letters (phrase, letters): """Возвращает множество букв из 'letters', найденных в указанной фразе.""" return set(letters).intersection(set(phrase)) search4letters(('galaxy', 'glx') Пример кода (2 способ): def search4letters (phrase, letters): """Возвращает множество букв из 'letters', найденных в указанной фразе.""" return set(letters).intersection(set(phrase)) search4letters(letters='glx', phrase='galaxy') 39 В первом случае значения аргументов должны следовать в том же порядке, в котором переданы параметры. Во втором – это не имеет значения. Переменные, объявленные вне функции, но доступные как внутри функции, так и во всем тексте программы, называются гло- бальными. Переменные, объявленные внутри определенной функ- ции, называются локальными. Инструкции, которые находятся за пределами функции, к ней доступа не имеют. Разные функции могут иметь локальные переменные с одинаковыми именами, потому что функции не видят локальные переменные друг друга. Пример кода функции: напишите функцию f(x), которая воз- вращает значение следующей функции, определённой на всей чис- ловой прямой: 1 2 , при 2 , при 2 2 2 2 1, при 2 Создание функции: >>> def f(x): if x-2) and (x>> f(4.5) f=-x/2 7.25 else: >>> f(-4.5) f=(x-2)**2+1 -5.25 return f >>> f(1) 1.3.8. Модули, файлы и исключения В языке Python модуль – это файл, содержащий программный код, который можно использовать в любом создаваемом приложе- нии. Каждый модуль должен содержать функции, выполняющие вза- имосвязанные задачи. Использование модулей позволяет:  повторно задействовать код, это экономит время; 40  разбить программу на логические модули, легче работать;  поделиться своим трудом и вдохновением. Имя файла, который впоследствии станет модулем, должно за- канчиваться на.py и не должно совпадать с ключевыми словами языка. Чтобы подключить модуль, необходимо воспользоваться ин- струкцией import или from import. Существует библиотека стандартных модулей языка Python, о которой более подробно можно прочитать на официальном сайте docs.python.org/3/library/. Пример кода с использованием стандартного модуля math. Даны a, b, k, m. Определить: C  (a  b)2 ; |k m| C(a  b) A  sin( π 6) · C2 . a·b·k a = int(input("Введите a = ")) b = int(input("Введите b = ")) k = int(input("Введите k = ")) m = int(input("Введите m = ")) from math import * while k-m == 0 or a*b*k == 0: print("\nЗнаменатель равен НУЛЮ!!! \nВведите другие значения.") a = int(input("Введите a = ")) b = int(input("Введите b = ")) k = int(input("Введите k = ")) m = int(input("Введите m = ")) else: C = sqrt((a-b)**2/abs(k-m)) print("C = ",C) A = sin(pi/6)*C**2-C*(a-b)/(a*b*k) print("A = ",A) 41 или import math a = int(input("Введите a = ")) b = int(input("Введите b = ")) k = int(input("Введите k = ")) m = int(input("Введите m = ")) while k-m == 0 or a*b*k == 0: print("\nЗнаменатель равен НУЛЮ!!! \nВведите другие значения.") a = int(input("Введите a = ")) b = int(input("Введите b = ")) k = int(input("Введите k = ")) m = int(input("Введите m = ")) else: C = math.sqrt((a-b)**2/abs(k-m)) print("C = ",C) A =math.sin(math.pi/6)*C**2-C*(a- b)/(a*b*k) print("A = ",A) 1.3.9. Файлы и исключения Данные, которые вводятся при каждом запуске программы, по- сле выполнения той или обработки над ними не сохраняются. Если необходимо сохранять данные, их нужно записывать, например, в файл. Тогда данные можно будет использовать многократно, прочи- тав из файла. Существует два типа файлов: текстовые и двоичные. В этом по- собии будет рассмотрена возможность работы с текстовыми фай- лами. Чтобы использовать текстовые файлы, необходимо выполнить следующие действия:  открыть файл, т.е. установить связь между файлом и програм- мой;  обработать файл, т.е. прочитать данные из файла (если это файл ввода) или записать данные в файл (если это файл вывода); 42  закрыть файл, т.е. связь между файлом и программой прерыва- ется. В языке Python для открытия файла используется инструкция open, для закрытия – close. Синтаксис этих инструкции: имя_переменной = open(имя_файла, режим)......... имя_переменной.close() Рассмотрим три режима работы с файлом:  ' r ' – режим открытия для чтения;  ' w ' – режим открытия для записи;  ' a ' – режим открытия для изменения, т.е. данные будут добав- лены в конец файла. Пример кода чтения из файла: inf = open('file.txt', 'r') s1 = inf.readline() # readline() – чтение одной строки s2 = inf.readline() inf.close() или с помощью функции with можно сразу открыть файл, прочитать его и закрыть. Пример кода чтения из файла с функцией with: with open('text.txt') as inf: s1 = inf.readline() s2 = inf.readline() # здесь файл уже закрыт Пример кода записи в файл: ouf = open('file.txt','w') ouf.write('some.text\n') ouf.write(str(25)) ouf.close() В функции write принужденный перевод строки \n и, если вы- водим число, необходимо изменить тип на str (строковый тип). 43 Пример кода записи в файл с функцией with: with open('text.txt','w') as ouf: ouf.write('some.text\n') ouf.write(str(25)) # здесь файл уже закрыт 1.3.10. Исключения Исключения (exceptions) – особый тип данных. Исключения необходимы для того, чтобы сообщать программисту об ошибках. Основные исключения:  Exception – базовое исключение;  Attribute Error – невозможно присвоить значение или создать ссылку на атрибут;  IO Error – ошибка ввода/вывода;  Import Error – не найден модуль;  Index Error – выход индекса элемента последовательности за пределы диапазона;  Key Error – отсутствие ключа в словаре;  Name Error – не найдено запрашиваемое имя;  Sintax Error – ошибка синтаксиса;  Value Error – тип переменной правильный, но передаваемое значение – нет;  Type Error – несоответствие типа;  Zero Division Error – деление на ноль. Обработка исключений – это замена вывода ошибки своим со- общением, чтобы программа «не вылетала», т.е. не прекращала ра- боту, при появлении исключения. Синтаксис инструкции: try: инструкция инструкция... except ИмяИсключения: инструкция инструкция... 44 Пример кода: ints = [] >>> try: for i in range(5): el = int(input('Vvod:')) ints.append(el) except ValueError: print('Это не число. Выходим.') except Exception: print('Это что ещё такое?') else: print('Всё хорошо.') >>> Vvod:t Это не число. Выходим. 45 Глава 2. АЛГОРИТМЫ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ С ПРОГРАММНОЙ РЕАЛИЗАЦИЕЙ НА PYTHON 2.1. Табулирование функций Часто при решении практических задач приходится многократно вычислять значения по одним и тем же математическим зависимо- стям для различных значений, входящих в них величин. Эти повторя- емые участки вычислительного процесса называются циклами и бы- вают с заданным и неизвестным числом повторений. К послед- ним относятся итерационные циклы, характеризующиеся приближе- нием к искомому значению с заданной точностью. В одном цикле может быть несколько изменяющихся парамет- ров. В представленных ниже примерах параметром цикла является простая переменная, либо, в случае переменной с индексом (эле- мента массива) – ее индекс. Пример 1. Вычислить и вывести на экран значения функции при значении аргумента , изменяющемся от н 0 до к 3 с шагом 0,1. Это цикл с одним параметром и с предварительно проверяе- мым условием. Перед первым выполнением цикла задано начальное значение аргумента , равное 0, затем 31 раз выполняется вычисле- ние и вывод значений функции. При каждом повторении цикла ар- гумент изменяется на величину шага 0,1. Схема алгоритма пред- ставлена на рис. 6, а. Программный код на языке Python: 46 Интерфейс программы и полученных значений функции и аргу- мента : Введите число:2 Введите начальное значение аргумента:0 Введите конечное значение аргумента:3 Введите шаг изменения аргумента:0.1 1.9950 0.1 1.9802 0.2 1.9560 0.3 1.9231 0.4 1.8824 0.5 1.8349 0.6 1.7817 0.7 1.7241 0.8 1.6632 0.9 1.6000 1.0 1.5355 1.1 1.4706 1.2 1.4060 1.3 1.3423 1.4 1.2800 1.5 1.2195 1.6 1.1611 1.7 1.1050 1.8 1.0512 1.9 1.0000 2.0 0.9512 2.1 0.9050 2.2 0.8611 2.3 0.8197 2.4 0.7805 2.5 0.7435 2.6 0.7086 2.7 0.6757 2.8 0.6446 2.9 0.6154 3.0 y = 0.6154 47 а б Рис. 6. Схема организации вычислений значений функции в цикле с одним параметром (а) и с несколькими изменяющимися параметрами (б) 48 Цикл с несколькими одновременно изменяющимися парамет- рами организуется по схеме, аналогичной схеме организации цикла с одним параметром. Для остальных параметров необходимо перед циклом задавать начальные значения, а внутри цикла вычислять те- кущие значения. Подобный алгоритм рассмотрен в примере 2. ∙ Пример 2. Вычислить значения функции , если аргу- мент изменяется одновременно с от начального значения с шагом , значения переменной являются элементами массива ( , ,….,. Схема алгоритма представлена на рис. 6, б. Здесь в цикле, ко- торый выполняется 20 раз, изменяются два параметра: простая переменная и индекс переменной – элемента массива. Блок 5 задает закон изменения параметра от 1 до с шагом 1. Блок 3 за- дает перед циклом начальное значение параметра , блок 8 вычис- ляет новое значение параметра. Программный код на языке Python: Интерфейс программы с выводом исходного массива и зна- чений функции , полученных на его основе: Введите число:2 Введите шаг изменения аргумента:0.1 49 Введите список:9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 1 2 3 [9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 1.0, 2.0, 3.0] 1.6364 1.6634 1.6739 1.6627 1.6216 1.5385 1.3929 1.1489 0.7368 1.1837 1.5000 1.7465 1.9512 2.1290 2.2885 2.4348 2.5714 0.7872 1.3103 1.6957 2.2. Обработка одномерных массивов Пример 3. Переписать элементы целочисленного массива , ,…., , кратные пяти, подряд в массив. Если такие элементы отсутствуют, то выдать соответствующее сообщение. Особенностью этого примера является то, что индексы элемен- тов массивов и не совпадают. Следовательно, в цикле изменя- ются два параметра и необходимо использовать приём организации цикла с несколькими одновременно изменяющимися параметрами. Схема алгоритма решения задачи приведена на рис. 7. Блок 3 задает начальное значение индекса 0 для записи элементов в массив. Блок 6 вычисляет текущее значение этого индекса, а блок 7 записывает элемент, кратный пяти, в массив. Код на языке Python: 50 1 Начало 2 n(40) 3 k=0 4 i = 1, 40 нет 5 да ]ni/5[*5≠ni 6 k=k+1 7 mk=ni 8 i=i+1 нет 9 да k=0 10 11 Вывод Вывод массива m сообщения: ( k элементов) «Кратных 5 нет» 12 Конец Рис. 7. Схема организации цикла с несколькими одновременно изменяющимися параметрами при формировании нового массива на основе исходного 51 Интерфейс и полученные результаты по двум вариантам те- стирования программного кода: 1. Введите список:9 85 7 6 5 4 3 20 10 2 3 4 15 60 7 8 9 1 2 30 Массив N [9, 85, 7, 6, 5, 4, 3, 20, 10, 2, 3, 4, 15, 60, 7, 8, 9, 1, 2, 30] Массив m [85, 5, 20, 10, 15, 60, 30] 2. Введите список:9 8 7 6 1 4 3 2 1 2 3 4 1 6 7 8 9 1 2 3 Массив N [9, 8, 7, 6, 1, 4, 3, 2, 1, 2, 3, 4, 1, 6, 7, 8, 9, 1, 2, 3] Кратных 5 нет Пример 4. Вычислить , где – элемент массива , ,….,. Схема алгоритма решения представлена на рис. 8, а. Блок 4, задающий начальное значение суммы, стоит перед циклом, в котором она накапливается. Блок 6 вычисляет значение слагаемого и накапливает сумму. Так как результат решения пред- ставляет собой одно число, то блок печати (блок 8) стоит за циклом и результаты печатаются один раз. Программный код на языке Python: Интерфейс и результат накопления суммы: Введите список:9 8 7 6 1 4 3 2 1 2 3 4 1 6 7 8 9 1 2 3 Массив X [9, 8, 7, 6, 1, 4, 3, 2, 1, 2, 3, 4, 1, 6, 7, 8, 9, 1, 2, 3] Сумма Z = 161.0441 52 Пример 5. Вычислить произведение положительных элементов массива , ,….,. Схема алгоритма решения представ- лена на рис. 8, б. Прежде чем накапливать произведение, надо про- верить, является ли сомножитель положительным (блок 6). Блок 4 задает начальное значение произведения, равное единице. В одной из ветвей разветвляющегося процесса стоит блок 7, накапливающий произведение. При невыполнении условия 0 никаких действий не выполняется и осуществляется переход к проверке конца цикла. Программный код на языке Python: Интерфейс и результат расчета произведения положительных элементов массива: Введите список:9 -8 7 -6 1 -4 -3 2 1 -2 -3 4 1 -6 -7 8 -9 10 -2 0 Массив X [9, -8, 7, -6, 1, -4, -3, 2, 1, -2, -3, 4, 1, -6, -7, 8, -9, 10, -2, 0] 9 63 63 126 126 504 504 4032 40320 Произведение положительных эл.P = 40320 53 1 Начало 2 N = 20 1 Начало 3 2 Массив x N = 20 4 3 p=1 Массив x 5 4 i = 1, N z=0 5 нет 6 xi>0 i = 1, N да 7 6 p=p*xi z = z + (x i)2 / i 7 8 i=i+1 i=i+1 8 9 Вывод z Вывод p 9 10 Конец Конец а б Рис. 8. Схема организации цикла вычисления суммы (а) и произведения (б) при обработке элементов массива 54 2.3. Анализ числовых последовательностей Задачи на анализ числовых последовательностей всегда реша- ются с использованием циклов (циклических алгоритмических кон- струкций). К ним относятся задачи на сравнение чисел последова- тельности между собой или с каким-либо заданным значением, за- дачи на работу с целыми числами, подробно рассмотренные в. Одна из подобных задач – подсчёт ограниченной по кратности суммы в числовой последовательности, состоящей из пар целых положи- тельных чисел, при выборе максимального числа из пары – рассмот- рена ниже в примере 6. Не менее важной составляющей задач анализа числовых по- следовательностей являются задачи на ряды, в частности на вычис- ление суммы членов бесконечного ряда с заданной точностью. Ре- шение этой типичной задачи, использующей итерационный цикл, приведено в примере 7. Пример 6. Имеется набор данных, состоящих из пар положи- тельных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не была крат- ной пяти и при этом была максимально возможной. Если получить требуемую сумму невозможно, выдать нуль. Анализ условия и описание алгоритма решения задачи. Чтобы получить максимально возможную сумму, следует брать из каждой пары , самое большое число. Если получаемая при этом сумма будет делиться на 5, ее необходимо уменьшить. Для этого до- статочно в одной из пар, где числа имеют разные остатки при деле- нии на 5, заменить ранее выбранное число на другое число из той же пары. При этом модуль разности между числами в паре должен быть минимально возможным. Если во всех парах исходных чисел , оба числа имеют одинаковый остаток при делении на 5, получить нужную сумму невозможно. Схема алгоритма решения задачи представлена на рис. 9. Фрагмент программного кода на языке Python, реализующий данный алгоритм, представлен на рис. 10. 55 Начало amax =10000 s=0 N – количество пар a, b – пара чисел N mx – максимальное в паре mn – минимальное в паре Dmin = amax + 1 s – сумма выбранных чисел Dmin – минимальная разница (mx-mn), не кратная 5 i=1,N a,b нет да a>b mx = b mx = a mn = a mn = b s = s + mx (mx – mn) не кратна 5 И (mx –

Use Quizgecko on...
Browser
Browser