Изучите программирование с помощью Python - управление потоком выполнения

В этой статье мы узнаем, как контролировать, какие части вашей программы выполняются.

Что такое «поток управления выполнением»

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

Если… Элиф… Иначе

Python легко читать даже новичкам и непрограммистам. Этот код Python вполне читаем:

За исключением, возможно, строки 2. Строка 1 извлекает текстовый ввод, называемый строкой, из приглашения терминала. В строке 2 мы используем встроенную функцию int(), чтобы попытаться преобразовать аргумент в целое число. Нам нужен возраст в годах как целое число (целое число), потому что позже, в строке 4, мы выполняем целочисленное сравнение меньше чем (‹).

Конструкция if… else встречается в большинстве языков программирования. Python добавляет еще один поворот и позволяет использовать оператор elif - else if или иначе. В следующем примере показана воображаемая ситуация, в которой возраст клиента, желающего взять напрокат автомобиль, обрабатывается компьютерной программой:

В этом примере мы рассмотрели все возможные возрасты, поэтому нет необходимости в окончательном else выражении. Это не всегда нужно, elif тоже не всегда нужно.

За ключевыми словами if и elif всегда следует условие проверки. Условием проверки в строке 4 является age < 21 - оно проверяет, является ли условие Истинно или Неверно. А символ двоеточия : используется для закрытия оператора условия.

Теперь нам действительно стоит поговорить о логических операциях.

Логическая логика

Не стесняйтесь читать про Джорджа Буля, который сделал мир более богатым благодаря своей булевой логике. Почти все современные компьютеры работают на принципах, разработанных Джорджем. Правда или ложь. 1 или 0. Вкл. Или Выкл. Это наименьшая единица информации, которая в информатике буквально называется бит. Если вы хотите прочитать о квантовых компьютерах и о том, как они используют квантовый бит или кубит, заходите сюда или вернитесь к этому позже.

Вклад Джорджа заключался не столько в том, что он писал о существовании 0 и 1, а в том, как их можно сочетать друг с другом. Он дал нам следующие логические операции: И, НЕ, ИЛИ, каждая из которых дает Истина или Ложь, 1 или 0.

Время анекдота: бедный старый Джордж однажды в холодную и дождливую погоду заболел тяжелой пневмонией. К сожалению, медицина была тем, чем она была в то время, и лечение было направлено на то, чтобы он получил больше того, от чего он заболел! Джорджа завернули в холодные влажные одеяла, пока он, наконец, не скончался несколько дней спустя. Вот и все, как можно неправильно применить логику!

И возвращает Истина, только если оба входных аргумента эквивалентны Истине. 1 and 0 = False, но 1 and 1 = True.

NOT возвращает True, если ввод эквивалентен False, и возвращает False, если ввод эквивалентен True. Возвращает отрицание. not 0 = True, а также not 1 = False.

ИЛИ возвращает Истина, если любой из двух аргументов эквивалентен истине. 1 or 0 = True но 0 or 0 = False.

В Python эти логические операторы встроены в язык. Вот код для проверки того, что я написал выше. Этот код вводит логические операторы и повторно использует F-строки и функцию print(), представленную ранее. Я решил преобразовать вывод в True или False с помощью функции преобразования bool() - аналогично тому, как я использовал int(), чтобы строка стала целым числом в верхней части эта статья.

Так зачем понадобился этот экскурс в глубины булевой логики? Он возвращается к управлению потоком выполнения программы с помощью конструкций If… Elif… Else. Мы постоянно тестируем условия, чтобы увидеть, оцениваются ли они как истинные или ложные, и на основе этого результата выбирать, какой код выполнять. Результатом этих оценок всегда является Верно или Неверно. Это возвращает нас прямо к Джорджу Буля и его булевой логике!

Повторение частей программы

Часто управление потоком выполнения компьютерной программы заставляет нас хотеть повторить операцию несколько раз. Обычно это немного сложнее, и мы хотим повторить ту же операцию для всех членов набора. Допустим, у нас есть список всех учеников класса, и мы хотим напечатать каждому индивидуальное письмо. Это действительно распространенный пример того, как одна функция (функция, которая печатает письмо) будет вызываться много раз, по одному разу для каждого уникального получателя письма.

Множества - это особая конструкция в математике, см. Введение. Считается, что первым их описал Георг Кантор.

«Набор» - это набор уникальных связанных элементов.

Набор - это неупорядоченный набор объектов, которые имеют что-то общее. Каждый элемент набора может встречаться только один раз. Например, студенты в классе образуют набор, каждый студент является элементом набора. Порядок элементов в наборе обычно не имеет значения. В Python мы можем создать набор адресов электронной почты студентов в классе, используя фигурные скобки, например:

students = {"[email protected]", "[email protected]", "[email protected]", "[email protected]"}

Если мы попытаемся добавить имя дважды, мы не получим ошибки, но это тоже не сработает. Наборы молча предотвращают любые дубликаты:

Повторение функции для всех элементов в наборе с помощью цикла For

Наконец-то мы вернулись к сути! Мы хотели написать программу, которая использует выполнение потока управления для многократного выполнения одной и той же функции с множеством разных вещей. Давайте пока воспользуемся конструкцией for цикла для print() каждого элемента в наборе:

Строка 3 - это то место, где происходит for магия цикла.

  • Мы используем для каждого элемента в коллекции, начиная с for
  • Как бы то ни было, мы сначала даем имя каждому элементу при его передаче. В этом случае student
  • Затем мы указываем, какую коллекцию мы хотим перебрать по каждому элементу, в нашем случае это set с именем students, созданный в строке 1.
  • В строке 4 мы выполняем одну операцию с каждым элементом набора, передавая его в цикле. Мы стараемся упростить задачу и пока просто выводим адрес электронной почты на терминал.

И вот что мы получаем при выполнении программы:

Комбинирование циклов For с условиями if

Скажем, по какой-то причине, если ученица зовут Эмили, мы хотим сделать что-то другое. Мы можем добиться этого, используя цикл for для проверки каждого элемента набора, а также проверить каждый элемент, чтобы увидеть, является ли он Эмили с условным выражением If.

Чего мы достигли?

В этом выпуске мы рассмотрели много вопросов! В первую очередь мы обсудили, как управлять потоком выполнения с помощью операторов If для управления ветвями и циклов For для выполнения повторений. Но и еще:

  • If операторы для выполнения ветвей кода на основе логических условий
  • Преобразование строк в целые числа
  • Основы булевой логики
  • Преобразование значений в логические значения True или False
  • For циклов для выполнения повторений каждого элемента в коллекции
  • Принципы теории множеств, неупорядоченный набор уникальных элементов
  • Как создавать и перебирать наборы в Python

В следующей части, я думаю, мы должны рассмотреть больше типов данных. Мы видели целые числа, строки, логические значения, кортежи и множества, но не обсуждали, что их лежит в основе, поэтому мы рассмотрим эту тему дальше!

На данный момент статьи из этой серии: