graph TD
A([Начало]) --> B{Логическое<br>выражение<br>истино?}:::diamond
B --> F(( ))
F --> |Да| C[блок инструкций 1]
F --> |Нет| D[блок инструкций 2]
C --> E([Конец])
D --> E
Занятие № 2. Решение задач с использованием условного оператора
Цель: изучить синтаксис условного оператора; научиться применять оператор if-elif-else; уметь применять простые и составные условия.
Теория
Логические значения и выражения
В Python для хранения логических значений используется тип bool. Существует только два литерала для логических значений - True (истина) и False (ложь). Результатом вычисления логического выражения является одно из двух логических значений.
Операторы сравнения используются, чтобы узнать равны или не равны два логических выражения, какое из них больше или меньше.
| Оператор | Название | Пример |
|---|---|---|
< |
Меньше | 6 < 10 – True; 52 < 5 – False. |
> |
Больше | 2 > 9 – False |
<= |
Меньше или равно | 5 <= 5– True; 5 <= 6– True. |
>= |
Больше или равно | 2 >= 3– False; 2 >= 2 – True. |
== |
Равно | "python" == "ruby" – False |
!= |
Не равно | 42 != 1 - True |
Что из перечисленного является логическим выражением?
Результат сравнения с помощью == принимает значение True или False.
True и False - логические литералы. Их можно отнести к логическим выражениям.
Выражение 3+4 равно 7. 7 == 7 - логическое выражение.
Значение этого выражения число.
Значение в двойных кавычках, значит это строка.
Логические операторы
Для комбинирования логических выражений можно использовать логические операторы - not, and и or.
Значение следующего выражения True, если x больше 0 и меньше 10:
x = 5 print(x > 0 and x < 10)
Следующие выражение истинно, если x делится на 2 или делится на 3:
x = 6 print(x % 2 == 0 or x % 3 == 0)
Результат следующего логического выражения будет не истиной, если x > y и не ложью в обратном случае. Иными словами результат логического выражения инвертируется:
x = 10 y = 4 print(not x > y)
Попробуйте поменять значения переменных x и y в примерах, чтобы получить разные значения логических выражений.
Какие из логических выражений помогут определить, что значение переменной x лежит между 0 и 5?
Значение этого логического выражения всегда будет равно True, так как любое число больше 0 или меньше 5.
Не хватает x в правой части оператора and.
Правильный вариант. Значение x одновременно больше 0 и меньше 5.
Как не странно, такой вариант записи условия допустим в Python.
Приоритет операторов
Арифметические операторы имеют больший приоритет чем операторы сравнения и логические операторы. Затем вычисляется значение выражений с операторами сравнения. Самый низкий приоритет у логических операторов. Например в выражении x * 5 >= 10 and y - 6 <= 20 в первую очередь выполнятся операторы * и -, потом произойдёт сравнение (операторы >= и <=) и в самом конце выполниться логический оператор and. В этом примере, если x = 1 a y = 7, то значение всего выражения будет равно
x
?
.
| Приоритет | Операторы |
|---|---|
| 7(высокий) | ** |
| 6 | *, /, //, % |
| 5 | +, - |
| 4 | ==, !=, <=, >=, >, < |
| 3 | not |
| 2 | and |
| 1(низкий) | or |
Какой из вариантов расстановки скобок в следующем выражении отражает последовательность выполнения операторов:
Обратитесь к Таблица 2.
* и + выполняться в первую очередь, затем операторы сравнения и в конце логический оператор and.
У арифметических операторов приоритет выше чем у операторов сравнения.
Операторы не выполняются слева-направо, а выполняются согласно их приоритету.
and не обладает большим приоритетом, чем ==.
Инструкция “Ветвление”
Полная форма
Общая форма записи полной формы инструкции ветвления:
Обратите внимание, что после : набор инструкций записывается с отступом. С помощью отступа в Python обозначаются блоки инструкций. Конец строки считается концом инструкции, конец отступа считается концом блока инструкций. Рисунок 1 содержит диаграмму работы полной формы ветвления.
Обратите внимание на правила оформления блоков инструкций. Это важно, так как в Python вложенность инструкций определяется именно отступами.
- Блок связанных инструкций должен иметь одинаковый отступ.
- Размер отступа может быть произвольным (рекомендовано 4 пробела).
- Для создания отступов можно использовать пробелы или табуляцию.
- Нельзя смешивать пробелы и символы табуляции при оформлении одного блока.
В следующем примере определим чётность или нечётность значения в переменной x:
x = 15
if x % 2 == 0:
print(x, "чётное")
else:
print(x, "нечётное")
Сокращённая форма
Ветвление можно записать в сокращённой форме без оператора else:
x = 10
if x < 0:
print(x, "отрицательное число")
print("Конец программы")
Попробуйте поменять значение x на отрицательное число и запустить программу ещё раз.
Есть ли синтаксические ошибки в следующем коде:
Последний блок else не привязан ни к одному if. В коде есть ошибка.
У каждого блока else должен быть соответствующий ему блок if. В коде есть ошибка.
Иногда бывает необходимо обозначить пустой блок инструкций, чтобы реализовать его позже. В таком случае пригодится инструкция pass (пропустить):
Запись без инструкции pass вызовет синтаксическую ошибку:
Каскадное ветвление
Инструкции ветвления могут быть вложены друг в друга.
x = 1.6
y = 3.1
if x < y:
print("x меньше y")
else:
if x > y:
print("x больше y")
else:
print("x равно y")
Рисунок 2 содержит диаграмму с ходом выполнения алгоритма.
graph TD
A([Начало]) --> B[x = 1.6<br>y = 3.1]
B --> C{x < y?}
C --> D(( ))
D -->|Да| E[/x меньше y/]
D -->|Нет| F{x > y?}
F --> G(( ))
G -->|Да| H[/x больше y/]
G -->|Нет| I[/x равно y/]
E --> J(( ))
H --> J
I --> J
J --> K([Конец])
В Python такую последовательность условий можно записать иначе с помощью инструкции elif:
x = 1.6
y = 3.1
if x < y:
print("x меньше y")
elif x > y:
print("x больше y")
else:
print("x равно y")
В обоих случаях будет выполнена только одна из ветвей алгоритма.
К примеру следующий код:
При x = 3, y = 5 и z = 2 выведет на экран цифру
x .
Примеры
Познакомьтесь с готовыми решениями задач. Ответьте на вопросы после кода решения каждой задачи.
Пример № 1 (ex01.py)
Напишите программу, которая бы получала на вход температуру воздуха из прогноза погоды и выводила на экран краткую характеристику. Если температура меньше 5 градусов вывести сообщение «Холодно, оденьтесь теплее»; если температура больше либо равна 5, но меньше 20 градусов вывести сообщение «На улице прохладно»; если температура больше либо равна 20 градусов – «На улице тепло».
print("Погода на сегодня")
t = float(input("Введите температуру в градусах Цельсия: "))
#не забывайте про отступы в условном операторе
if t < 5:
print("Холодно, оденьтесь теплее.")
if t >= 5 and t < 20:
print("На улице прохладно.")
if t >= 20:
print("На улице тепло.")
В строке номер
x
?
пользователь вводит сегодняшнюю температуру воздуха. В строке номер
x
?
используется логический оператор
x
and. Значение всего логического выражения будет равно True, если значения
x
обоих логических выражений будет равно True.
В программе встречается только
x
сокращённая форма инструкции if.
Пример № 2 (ex02.py)
Напишите программу вычисляющую корни квадратного уравнения по заданным коэффициентам a, b и c. В случае если корень один – вывести на экран один корень. Если корней нет – вывести соответствующее сообщение.
#загрузка модуля содержащего математические функции
import math
print("Вычисление корней квадратного уравнения")
a = float(input("введите коэффициент a "))
b = float(input("введите коэффициент b "))
c = float(input("введите коэффициент c "))
D = b ** 2 - 4 * a * c
print("дискриминант: ", D)
if D > 0:
root1 = (-b + math.sqrt(D)) / (2 * a)
root2 = (-b - math.sqrt(D)) / (2 * a)
print("Корни уравнения: ", root1, root2)
elif D == 0:
root = (-b + math.sqrt(D)) / (2 * a)
print("Корень уравнения: ", root)
else:
print("Корней нет")
В программе используется
x
каскадная форма записи инструкции if.
В строке
x
?
проверяется, равен ли дискриминант нулю. В этом случае значение корня уравнения сохраняется в переменную с именем
x
. Инструкции после оператора
x
else выполнятся, если уравнение не имеет корней.
Задания для самостоятельной работы
Задание № 1 (sam01.py)
Дано целое число. Если оно является положительным, то прибавьте к нему 1; в противном случае оставьте значение числа без изменений. Выведите полученное число на экран.
Задание № 2 (sam02.py)
Даны две переменные A и B. Если их значения равны, то присвоить каждой переменной сумму этих значений, а если не равны, то присвоить переменным нулевые значения. Значения переменных A и B вводятся с клавиатуры. Выведите новые значения переменных на экран.
Задание № 3 (sam03.py)
С клавиатуры вводится номер месяца. Нумерация месяцев начинается с 1. Выведите на экран пору года к которой принадлежит этот месяц - зима, весна, лето или осень.
else для оставшейся последней поры года. Так получится сократить код.
Задание № 4 (sam04.py)
Индекс массы тела – это величина, которая позволяет оценить степень соответствия массы человека и его роста и рассчитывается по формуле
\[ I=\frac{m}{h^2} \]
где m – масса тела в килограммах, h – рост в метрах. Нормой считается значение индекса в диапазоне от 18 до 25. Напишите программу рассчитывающую индекс массы тела по введённым данным и выводящее сообщение в трёх случаях: значение индекса в норме, индекс меньше нормы, индекс больше нормы.
Задание № 5 (sam05.py)
Високосным является год, значение которого делится на 4, но при этом не делится на 100, либо делится на 400. Напишите программу, которая определяет, является ли введённый год високосным или нет, и выводит соответствующее сообщение.