Лекция №2. Алгоритмическая конструкция «Ветвление»

Хорошевич Павел Александрович

Алгоритмические конструкции

Определение

Структурное программирование основывается на использовании базовых алгоритмических конструкций:

  • следование;
  • ветвление;
  • цикл;

Из комбинации базовых алгоритмических конструкций можно составить алгоритм решения задачи.

У каждой алгоритмической конструкции есть один вход и один выход.

Логические выражения. Тип данных bool

Тип данных bool

В Python для хранения логических значений используется тип bool.

Существует два литерала, поддерживаемых типом bool - True (истина) и False (ложь).

Для сравнения значений используются операторы сравнения:

  • < (Меньше)
  • > (Больше)
  • <= (Меньше или равно)
  • >= (Больше или равно)
  • == (Равно)
  • != (Не равно)

Результатом вычисления логического выражения становится значение типа bool:

>>> 6 < 10
True
>>> 52 < 5
False
>>> 2 > 9
False
>>> 42 != 1
True

Сравнение строковых значений

Строки в Python сравниваются в алфавитном (лексикографическом) порядке.

>>> "слон" > "хомяк"

Коды символов

Коды символов

Инструкция ветвления

Сокращённая форма ветвления

Ветвление в Python записывается следующим образом:

if <логическое выражение>:
    <блок инструкций 1>

Пример:

x = 10
if x < 0:
    print(x, "отрицательное число")
print("Конец программы")

Оформление блоков

В Python вложенность инструкций определяется отступами. Блок инструкций начинается после двоеточия :

  • Блок связанных инструкций должен иметь одинаковый отступ.
  • Размер отступа может быть произвольным (рекомендовано 4 пробела).
  • Для создания отступов можно использовать пробелы или табуляцию.
  • Нельзя смешивать пробелы и символы табуляции при оформлении одного блока.

Дополнительная информация по оформлению кода - PEP8

Пример задачи

Посчитайте средний балл за три контрольные работы. Если результат превышает 7 баллов, выведите сообщение “Зачтено!”.

test1 = int(input("Первая отметка:"))
test2 = int(input("Вторая отметка:"))
test3 = int(input("Третья отметка:"))

avg = (test1 + test2 + test3) / 3

print(f"Средний балл: {avg}")

if avg >= 7:
    print("Зачтено!")
print("Программа завершена")

Тест 1:

Первая отметка:9 ++enter++
Вторая отметка:8 ++enter++
Третья отметка:8 ++enter++
Средний балл: 8.333333333333334
Зачтено!
Программа завершена

Тест 2:

Первая отметка:5 ++enter++
Вторая отметка:7 ++enter++
Третья отметка:6 ++enter++
Средний балл: 6.0
Программа завершена

Полная форма ветвления

Полная форма инструкции ветвления:

if <логическое выражение>:
    <блок инструкций 1>        
else:
    <блок инструкций 2>

Пример:

grade = int(input("Отметка:"))

if grade >= 4:
    print("Тест пройден!")
else:
    print("Повторите попытку.")

Пример задачи

Рассчитайте оплату труда репетитора. Пользователь вводит количество отработанных часов и почасовую оплату. Если часы работы превышают 20, оплата за переработки умножается на 1.5.

BASE = 20
MULT = 1.5
hours = int(input("Часы работы:"))
rate = int(input("Почасовая оплата:"))

if hours > BASE:
    overtime = hours - BASE
    print(f"Переработка: {overtime} ч")
    overtime_pay = overtime * rate * MULT
    gross_pay = BASE * rate + overtime_pay
else:
    gross_pay = hours * rate
print(f"Оплата труда: {gross_pay} руб.")

Тест 1

Часы работы:24 ++enter++
Почасовая оплата:3 ++enter++
Переработка: 4 ч
Оплата труда: 78.0 руб.

Тест 2

Часы работы:15 ++enter++
Почасовая оплата:3 ++enter++
Оплата труда: 45 руб.

Вложенные инструкции ветвления

Одна инструкция ветвления может располагаться внутри другой.

Множественное ветвление

Множественное ветвление

Пример задачи

Программа выводит сообщение-отзыв исходя из полученной отметки. Для отметки от 7 и выше - “Отлично!”, для отметки от 4 до 6 - “Нормально”, ниже 4 - “Попробуйте ещё раз”.

Блок-схема

Блок-схема
HIGH = 7
LOW = 4

grade = int(input("Ведите отметку:"))

if grade >= HIGH:
    print("Отлично!")
else:
    if grade >= LOW:
        print("Нормально")
    else:
        print("Попробуйте ещё раз")

Блоки кода

Блоки кода

Каскадное ветвление

Вложенные инструкции if можно записать с помощью инструкции elif:

HIGH = 7
LOW = 4

grade = int(input("Ведите отметку:"))

if grade >= HIGH:
    print("Отлично!")
elif grade >= LOW:
    print("Нормально.")
else:
    print("Попробуйте ещё раз.")

Блоки кода

Блоки кода

Логические операторы “И”, “ИЛИ”, “НЕ”

Составные условия

Для комбинирования логических выражений можно использовать логические операторы - not, and и or.

И:

x = 5
print(x > 0 and x < 10)

ИЛИ:

x = 6
print(x % 2 == 0 or x % 3 == 0)

НЕ:

x = 10
y = 4
print(not x > y)

Таблицы истинности

Результат работы логических операторов можно представить в форме таблиц истинности.

Оператор НЕ:

A not A
False ❌ True ✅
True ✅ False ❌

Оператор И:

A B A and B
False ❌ False ❌ False ❌
False ❌ True ✅ False ❌
True ✅ False ❌ False ❌
True ✅ True ✅ True ✅

Оператор ИЛИ:

A B A or B
False ❌ False ❌ False ❌
False ❌ True ✅ True ✅
True ✅ False ❌ True ✅
True ✅ True ✅ True ✅

Приоритет логических операторов

Приоритетность логических операторов:

  • not
  • and
  • or

Пример:

a or not b and c
a or ((not b) and c)

Общий приоритет операторов

Приоритет Операторы
7(высокий) **
6 *, /, //, %
5 +, -
4 ==, !=, <=, >=, >, <
3 not
2 and
1(низкий) or

Задача

Найдите среди трёх чисел максимальное. Сохраните результат в переменной под именем maxval:

x1 = int(input("Введите первое число "))
x2 = int(input("Введите второе число "))
x3 = int(input("Введите третье число "))

# поиск максимального числа

print(maxval)

Вариант 1. Сравним каждое число с каждым

if x1 >= x2 and x1 >= x3:
    maxval = x1
elif x2 >= x1 and x2 >= x3:
    maxval = x2
else:
    maxval = x3

Вариант 2. Дерево решений

if x1 >= x2:
    if x1 >= x3:
        maxval = x1
    else:
        maxval = x3
else:
    if x2 >= x3:
        maxval = x2
    else:
        maxval = x3

Вариант 3. Последовательная обработка

maxval = x1

if x2 > maxval:
    maxval = x2

if x3 > maxval:
    maxval = x3

Вариант 4. Использовать возможности Python

maxval = max(x1, x2, x3)
  • У одной задачи может быть множество решений. Возможно первое решение пришедшее в голову не будет самым простым.

  • Поставьте себя на место компьютера: один из способов составить алгоритм – спросить себя, как бы вы решали эту задачу.

  • Универсальность – это хорошо. Старайтесь делать решение задачи максимально общим.

  • Не изобретайте велосипед. Самые распространённые задачи, скорее всего, уже имеют алгоритм решения. Но самостоятельный поиск решения – это хороший способ прокачать свои навыки.