Введение в программирование алгоритмов на Python в этой глаВе Числовые и логические вычисления
Скачать 1.22 Mb.
|
Глава 4 Введение в программирование алгоритмов на Python В этой глаВе… Числовые и логические вычисления » Работа со строками » Работа с датами » Упаковка кода с помощью функций » Принятие решений и повторение действий » Управление данными в памяти » Чтение данных в объекты хранения » Быстрый поиск данных с помощью словарей » Л юбой рецепт приготовления блюда является своего рода алгоритмом, по- тому что помогает приготовить вкусную еду с помощью ряда действий (и тем самым избавиться от голода). Можно разработать много способов создания последовательности шагов, которые решают задачу. Имеется множес тво различных процедур и описаний, которые указывают последовательность шагов для решения поставленной задачи. Не всякая последовательность шагов 03_Part01.indd 91 18.04.2018 17:25:29 Часть I Начала 92 конкретна. Ряд шагов решения математической задачи может записываться с помощью математических обозначений, но многие люди считают их тайным языком, который мало кто может понять. Компьютерный язык может превра- тить этот тайный язык в конкретную форму инструкций на языке программи- рования с использованием английских слов, понятную куда большему количес тву людей. Из главы 3, “Использование Python для работы с алгоритмами”, этой книги вы узнали, как установить на компьютер копию Python для работы с примера- ми из книги. Во всей этой книге Python используется для решения численных задач с использованием алгоритмов, которые можно выразить и с помощью математических формул. Здесь язык программирования используется для того, чтобы превратить эти необычные абстрактные символы в текст, понятный большему количеству людей, которые смогут использовать его для решения своих реальных задач. Прежде чем можно будет использовать Python для решения задач с помо- щью алгоритмов, следует по крайней мере узнать о работе Python и с Python. Эта глава не предназначена для того, чтобы сделать из вас эксперта по Python. Однако она предоставит вам достаточно информации, чтобы вы понимали смысл примеров кода с комментариями. Различные разделы помогут понять, как Python выполняет те или иные задачи. Например, знать, как Python работа- ет с различными видами данных, нужно для того, чтобы определить, что имен- но некоторый пример кода с ними делает. В первых трех разделах вы озна- комитесь с азами работы с числовыми, логическими, строковыми данными и данными, представляющими даты. Представьте себе поваренную или любую иную книгу, в которой шаги для выполнения различных задач представлены в виде одного длинного расска- за без какихлибо перерывов. Найти в такой книге конкретный рецепт (или описание некоторой процедуры) будет невозможно, и книга будет совершенно бесполезной. На самом деле никто и не попытался бы написать такую книгу. Поэтому в четвертом разделе главы рассматриваются функции, которые сродни отдельным рецептам в поваренной книге. Вы можете комбинировать функции при создании программы, как сочетали бы рецепты различных блюд для при- готовления обеда. В следующих четырех разделах рассматриваются способы управления данными, включая чтение, запись, изменение и удаление. Вам также нужно знать, как принимать решения и выполнять одни и те же наборы действий бо- лее одного раза. Данные представляют собой ресурс, так же, как мука, сахар и другие ингредиенты являются ресурсами, которые используются при рабо- те с рецептом. Различные виды данных требуют различных методов работы с ними, чтобы использовать их в приложении, решающем ту или иную задачу, 03_Part01.indd 92 18.04.2018 17:25:29 Глава 4 Введение в программирование алгоритмов на Python 93 для которой предназначен рассматриваемый алгоритм. В этих разделах речь идет о способах работы с данными для решения задач. Работа с числовыми и логическими данными Работа с алгоритмами включает работу с данными различных видов, но большая часть работы предусматривает работу с числами. Кроме того, для принятия решений об использовании данных применяются логические значе- ния. Например, может потребоваться узнать, равны ли два числовых значения или одно из них больше другого. Python поддерживает как числовые, так и логичес кие значения. Любое число без дробной части является » целочисленным (integer) значением. Например, таким значением является число 1. С дру- гой стороны, 1.0 целочисленным не является, так как имеет дробную часть (пусть и нулевую). Целочисленные значения пред- ставимы типом данных int. На большинстве платформ значение типа int может хранить значения от ‑9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 (предельные значения, которые могут хра- ниться в 65-битной переменной). Любые числа, включающие десятичную дробную часть, являют- » ся значениями с плавающей точкой. Например, число 1.0 имеет дробную часть, а потому является значением с плавающей точ- кой. Многие путают целые числа и числа с плавающей точкой, но простейшую разницу между ними легко запомнить: если вы ви- дите в числе десятичную точку, значит, это значение с плаваю- щей точкой. Python хранит значения с плавающей точкой в пере- менных с типом данных float. На большинстве платформ мак- симальное значение, которое может содержаться в такой пере- менной, равно ±1.7976931348623157×10 308 , а минимальное значение, которое может содержаться в такой переменной, равно ±2.2250738585072014×10 ‑308 Комплексное число » состоит из пары чисел — действительной и мнимой частей. Если вы совершенно забыли или и вовсе не зна- ли, что такое комплексные числа, можете почитать о них по адресу http://go.dialektika.com/alg04_01. Мнимая часть комплекс- ного числа всегда указывается с помощью символа j после нее. Так что комплексное число с действительной частью 3 и мнимой частью 4 можно присвоить с помощью выражения наподобие myComplex = 3+4j. 03_Part01.indd 93 18.04.2018 17:25:30 Часть I Начала 94 Логические аргументы требуют булевых значений, названных так » в честь Джорджа Буля (George Bool). Для использования булевых значений в Python имеется тип bool. Переменная этого типа может содержать только два значения: True и False. Можно присвоить булевой переменной значение, используя ключевые слова True и False, а можно создать выражение, которое определяет истинную или ложную логическую концепцию. Например, можно написать myBool = 1>2, что равносильно присваиванию значения False, по- тому что 1, определенно, не превышает 2. Теперь, когда вы познакомились с азами, пришло время увидеть типы дан- ных в действии. Ниже вы найдете краткий обзор о работе с числовыми и логи- ческими данными в Python. Присваивание переменных Работая с приложениями, вы храните информацию в переменных. Перемен- ная — это своего рода коробка для хранения. Всякий раз, планируя работу с ин- формацией, вы обращаетесь к ней с помощью переменной. Если у вас есть новая информация, которую вы хотите сохранить, вы помещаете ее в переменную. Из- менение информации означает доступ к переменной с последующим сохранени- ем нового значения в той же переменной. Так же, как в реальном мире вы храните вещи в коробках, при работе с приложениями вы храните информацию в пере- менных (своего рода ящиках для хранения). Для сохранения данных в перемен- ной они присваиваются с помощью любого из множества операторов присваива- ния (специальных символов, которые указывают, как следует сохранять данные). В табл. 4.1 показаны поддерживаемые Python операторы присваивания. Таблица 4.1. Операторы присваивания Python Оператор Описание Пример = Присваивает значение правого операнда левому MyVar = 5 сохраняет в MyVar значение 5 += Добавляет значение правого операнда к значению левого и помещает результат в левый операнд MyVar += 2 сохраняет в MyVar значение 7 ‑= Вычитает значение правого операнда из значения левого и помещает результат в левый операнд MyVar ‑= 2 сохраняет в MyVar значение 3 *= Умножает значение правого операнда на значение левого и помещает результат в левый операнд MyVar *= 2 сохраняет в MyVar значение 10 03_Part01.indd 94 18.04.2018 17:25:30 Глава 4 Введение в программирование алгоритмов на Python 95 Оператор Описание Пример /= Делит значение левого операнда на значение правого и помещает результат в левый операнд MyVar /= 2 сохраняет в MyVar значение 2,5 %= Делит значение левого операнда на значение правого и помещает остаток от деления в левый операнд MyVar %= 2 сохраняет в MyVar значение 1 **= Возводит значение левого операнда в степень, указанную значением правого операнда, и помещает результат в левый операнд MyVar **= 2 сохраняет в MyVar значение 25 //= Делит значение левого операнда на значение правого и помещает целую часть результата деления в левый операнд MyVar //= 2 сохраняет в MyVar значение 2 Арифметические действия Сохранение информации в переменных делает ее легко доступной. Однако, чтобы от информации была какаято польза, над ней обычно выполняют не- которые действия, чаще всего — арифметические операции. Python поддер- живает распространенные арифметические операторы, используемые и при решении задач вручную. Они показаны в табл. 4.2. Таблица 4.2. Арифметические операторы Python Оператор Описание Пример + Суммирует два значения 5 + 2 = 7 ‑ Вычитает правый операнд из левого 5 – 2 = 3 * Умножает правый операнд на левый 5 * 2 = 10 / Делит левый операнд на правый 5 / 2 = 2.5 % Делит левый операнд на правый и возвращает остаток 5 % 2 = 1 ** Вычисляет значение левого операнда, возведенное в степень, указываемую значением правого операнда 5 ** 2 = 25 // Делит левый операнд на правый нацело, т.е. возвращает только целую часть результата 5 // 2 = 2 Окончание табл. 4.1 03_Part01.indd 95 18.04.2018 17:25:30 Часть I Начала 96 Иногда требуется выполнять действия с одной переменной — для этого Python поддерживает несколько унарных операторов, показанных в табл. 4.3. Таблица 4.3. Унарные операторы Python Оператор Описание Пример Инвертирует биты числа, так что бит 0 становится битом 1, и наоборот 4 дает –5 ‑ Меняет знак числа, так что положительное значение становится отрицательным, и наоборот –(–4) дает 4; –4 дает –4 + Предоставляется исключительно для полноты; дает значение, совпадающее с исходным +4 дает 4 Компьютеры могут выполнять и другие виды математических вычислений, связанные с тем, как работает процессор. Важно помнить, что компьютеры хранят данные в виде ряда отдельных битов. Python позволяет получить до- ступ к этим отдельным битам с помощью побитовых операторов, показанных в табл. 4.4. Таблица 4.4. Побитовые операторы Python Оператор Описание Пример & (И) Проверяет, имеют ли соответствующие биты в обоих операндах значения true, и, если имеют, соответствующий бит результата тоже получает значение true, в противном случае — false 0b1100&0b0110 = 0b0100 | (ИЛИ) Проверяет, имеют ли соответствующие биты в обоих операндах значения false, и, если имеют, соответствующий бит результата тоже получает значение false, в противном случае — true 0b1100|0b0110 = 0b1110 ^ (Исключающее ИЛИ) Проверяет, имеют ли соответствующие биты в обоих операндах разные значения, и, если имеют, соответствующий бит результата получает значение true, в противном случае — false 0b1100^0b0110 = 0b1010 03_Part01.indd 96 18.04.2018 17:25:30 Глава 4 Введение в программирование алгоритмов на Python 97 Оператор Описание Пример (Дополнение до 1) Вычисляет значение, являющееся дополнением данного значения до единицы 0b1100 = –0b1101 0b0110 = –0b0111 << (Сдвиг влево) Сдвигает биты левого операнда влево на количество позиций, указанное правым операндом. Все новые биты — нулевые; биты, выходящие за пределы представления числа, теряются 0b00110011<<2 = 0b11001100 >> (Сдвиг вправо) Сдвигает биты левого операнда вправо на количество позиций, указанное правым операндом. Все новые биты — нулевые; биты, выходящие за пределы представления числа, теряются 0b00110011>>2 = 0b00001100 Сравнение данных с помощью булевых выражений Использование арифметических операций для изменения содержимого пе- ременных является одним из видов манипуляции данными. Чтобы определить результат такой манипуляции, компьютер должен сравнить текущее состояние переменной с ее первоначальным состоянием или с заранее известным значе- нием. В некоторых случаях необходимо сопоставление одних входных данных с другими. Все эти операции проверяют отношения между двумя переменны- ми, поэтому такие операторы (показанные в табл. 4.5) называются реляцион- ными или операторами отношения. Таблица 4.5. Реляционные операторы Python Оператор Описание Пример == Определяет, равны ли два значения. Обратите внимание, что данный оператор использует два знака равенства. Часто допускаемая ошибка состоит в использовании только одного знака равенства, что приводит к присваиванию значения переменной 1 == 2 равно False != Определяет, различаются ли два значения. В некоторых старых версиях Python нужно использовать оператор <> вместо !=. В текущей версии применение оператора <> является ошибкой 1 != 2 равно True Окончание табл. 4.4 03_Part01.indd 97 18.04.2018 17:25:31 Часть I Начала 98 Оператор Описание Пример > Проверяет, является ли значение левого операнда больше значения правого 1 > 2 равно False < Проверяет, является ли значение левого операнда меньше значения правого 1 < 2 равно True >= Проверяет, является ли значение левого операнда больше или равно значению правого 1 >= 2 равно False <= Проверяет, является ли значение левого операнда меньше или равно значению правого 1 <= 2 равно True Иногда одного реляционного оператора недостаточно для выполнения требуемого сравнения. Например, может потребоваться проверить усло- вие, в котором необходимы два отдельных сравнения, например MyAge>40 и MyHeight<174 . Необходимость сравнений из нескольких условий требует при- менения логичес ких операторов, показанных в табл. 4.6. Таблица 4.6. Логические операторы Python Оператор Описание Пример and Определяет, истинны ли одновременно оба операнда True and True == True True and False == False False and True == False False and False == False or Определяет, истинен ли хотя бы один операнд True or True == True True or False == True False or True == True False or False == False not Обращает истинность операнда — значение True становится значением False, и наоборот not True == False not False = True Компьютеры упорядочивают сравнения, делая одни операторы более важ- ными, чем другие. Упорядочение операторов определяется приоритетами опе- раторов. В табл. 4.7 показаны приоритеты всех распространенных операторов Python, включая и такие, с которыми вы еще не сталкивались. При выполнении сравнений всегда учитывайте приоритет операторов, потому что в противном Окончание табл. 4.5 03_Part01.indd 98 18.04.2018 17:25:31 Глава 4 Введение в программирование алгоритмов на Python 99 случае предположения, которые вы делаете о результатах сравнения, скорее всего, будут неправильными. Таблица 4.7. Приоритеты операторов в Python Оператор Описание () Используйте скобки для группирования выражений и переопределения приоритета по умолчанию. Так вы можете заставить операцию с более низким приоритетом (например, сложение) иметь приоритет перед операцией с более высоким приоритетом (например, умножением) ** Возведение левого операнда в степень, определяемую правым операндом + ‑ Унарные операторы взаимодействуют с единственным значением или выражением * / % // Умножение, деление, остаток при делении, деление нацело + ‑ Сложение и вычитание >> << Побитовые сдвиги вправо и влево & Побитовое И ^ | Побитовые исключающее и стандартное ИЛИ <= < > >= Операторы сравнения == != Операторы равенства = %= /= //= ‑= += *= **= Операторы присваивания is is not Операторы тождества in not in Операторы членства not or and Логические операторы Создание и использование строк Среди всех типов данных строки являются наиболее понятными для людей (и непонятными для компьютеров). Строка — это просто группа символов, заключенная в двойные кавычки. Например, выражение myString = "Python is a great language." выполняет присваивание строки переменной myString 03_Part01.indd 99 18.04.2018 17:25:31 Часть I Начала 100 Основная причина использования строк при работе с алгоритма- ми — обеспечение взаимодействия с пользователем, например, для запросов входных данных или для облегчения понимания выво- димых данных. В рамках работы с алгоритмами можно также вы- полнить анализ строковых данных, но фактически компьютер не требует использования строк в качестве части последовательности шагов для решения задачи. На самом деле компьютер вообще не видит букв. Каждая используемая буква представляет собой число в памяти. Например, буква A — это в действительности число 65. Чтобы убедиться в этом, введите ord("A") в приглашении Python и нажмите клавишу |