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 |
Что из перечисленного является логическим выражением?
Значение в двойных кавычках, значит это строка.
Значение этого выражения число.
Выражение 3+4 равно 7. 7 == 7 - логическое выражение.
True и False - логические литералы. Их можно отнести к логическим выражениям.
Результат сравнения с помощью == принимает значение True или False.
Логические операторы
Для комбинирования логических выражений можно использовать логические операторы - 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 одновременно больше 0 и меньше 5.
Как не странно, такой вариант записи условия допустим в Python.
Не хватает x в правой части оператора and.
Приоритет операторов
Арифметические операторы имеют больший приоритет чем операторы сравнения и логические операторы. Затем вычисляется значение выражений с операторами сравнения. Самый низкий приоритет у логических операторов. Например в выражении 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 градусов – «На улице тепло».
Блок-схема решения показана на рисунке:
В алгоритме решения встречается только x сокращённая форма ветвления.
Откройте редактор IDLE и запишите код решения задачи:
Проверьте работу программы. Например, если ввести значение равное 5, то на экран выведется сообщение
x
На улице прохладно..
В строке номер
x
?
пользователь вводит температуру воздуха. В строке номер
x
?
используется логический оператор
x
И. Значение всего логического выражения будет равно True, если значения
x
обоих логических выражений будет равно True.
Исправьте диапазоны температур для каждого из трёх сообщений:
Холодно, оденьтесь теплее.- от 0 и ниже;На улице прохладно.- больше 0, но меньше 15;На улице тепло.- от 15 градусов.
Пример № 2 (ex02.py)
Вывести на экран номер четверти координатной плоскости, которой принадлежит точка с координатами \((х, у)\), при условии, что \(x\ne0\) и \(y\ne0\).
Ознакомьтесь с блок-схемой решения:
В редакторе IDLE запишите код решения задачи:
Проверьте работу программы.
Задания для самостоятельной работы
Решите следующие задачи самостоятельно.
Задание № 1 (sam01.py)
Пользователь вводит число в диапазоне от 1 до 7. Числа обозначают номер дня недели: 1 - Понедельник, 2 - Вторник и т.д. Выведите на экран, относится ли введённый день недели к рабочим или выходным дням. Выходными считайте субботу и воскресенье.
Примеры работы программы:
Номер:<{4}> ++enter++
Рабочий деньНомер:<{7}> ++enter++
Выходной деньНомер:<{14}> ++enter++
Ошибка вводаАлгоритм решения и блок-схема для этой задачи похожи на решение второго примера (Рисунок 4).
Блок-схема решения с пропущенными условиями:
Задание № 2 (sam02.py)
Определить, войдет ли в конверт с внутренними размерами a и b мм прямоугольная открытка размером с и d мм. Для размещения открытки в конверте необходим зазор в 1 мм с каждой стороны. Ширина всегда больше высоты. Вращать конверт и открытку нельзя.
Примеры работы программы:
Ширина конверта:<{162}> ++enter++
Высота конверта:<{114}> ++enter++
Ширина открытки:<{148}> ++enter++
Высота открытки:<{105}> ++enter++
Конверт подходитШирина конверта:<{229}> ++enter++
Высота конверта:<{114}> ++enter++
Ширина открытки:<{210}> ++enter++
Высота открытки:<{113}> ++enter++
Конверт не подходитЗадание № 3 (sam03.py)
Високосным является год, значение которого делится на 4, но при этом не делится на 100, либо делится на 400. Напишите программу, которая определяет, является ли введённый год високосным или нет, и выводит соответствующее сообщение.
Примеры работы программы:
Номер года:<{2004}> ++enter++
2004 - високосныйНомер года:<{2026}> ++enter++
2026 - не високосныйгода на 4 равен 0 И остаток от деления года на 100 не равен 0 ИЛИ остаток от деления года на 400 равен 0.
%.
==, проверка на неравенство - !=.
Задание № 4 (sam04.py)
С клавиатуры вводится номер месяца. Нумерация месяцев начинается с 1. Выведите на экран пору года к которой принадлежит этот месяц - зима, весна, лето или осень.
Примеры работы программы:
Номер месяца:<{12}> ++enter++
ЗимаНомер месяца:<{7}> ++enter++
ЛетоНомер месяца:<{-6}> ++enter++
Ошибка вводаelse для оставшейся последней поры года. Так получится сократить код.
Задание № 5 (sam05.py)
Индекс массы тела – это величина, которая позволяет оценить степень соответствия массы человека и его роста. Индекс рассчитывается по формуле
\[ I=\frac{m}{h^2} \]
где \(m\) – масса тела в килограммах, \(h\) – рост в метрах. Нормой считается значение индекса в отрезке от 18 до 25. Напишите программу рассчитывающую индекс массы тела по введённым данным и выводящую сообщение в трёх случаях: значение индекса в норме, индекс меньше нормы, индекс больше нормы.
Примеры работы программы:
Масса:<{89}> ++enter++
Рост:<{1.86}> ++enter++
ИМТ: 25.725517400855587
Выше нормыМасса:<{65}> ++enter++
Рост:<{2.1}> ++enter++
ИМТ: 14.73922902494331
Ниже нормыЗадание № 6 (sam06.py)
Основные три цвета - красный, зелёный и синий. При смешивании пар цветов получаются следующие комбинации:
- красный и зелёный - желтый;
- зелёный и синий - голубой;
- синий и красный - пурпурный.
Напишите программу, которая по двум введённым цветам выводит результат их смешивания.
Примеры работы программы:
Первый цвет:<{красный}> ++enter++
Второй цвет:<{зелёный}> ++enter++
красный + зелёный = желтыйПервый цвет:<{зелёный}> ++enter++
Второй цвет:<{красный}> ++enter++
зелёный + красный = желтыйПервый цвет:<{синий}> ++enter++
Второй цвет:<{зелёный}> ++enter++
синий + зелёный = голубойЗадание № 7 (sam07.py)
Составьте программу вычисления штрафа за превышение скорости. Базовая сумма штрафа - 50 рублей. За каждый 1 км/ч выше ограничения начисляется ещё 5 рублей. При превышении скорости выше 120 км/ч к штрафу прибавляется ещё 200 рублей. Пользователь вводит допустимый лимит скорости и зафиксированную скорость. Программа выводит размер штрафа если скорость превышена и сообщение “Нет превышения”, если скорость в пределах нормы.
Примеры работы программы:
Скорость:<{57}> ++enter++
Ограничение:<{60}> ++enter++
Нет превышенияСкорость:<{64}> ++enter++
Ограничение:<{60}> ++enter++
Сумма штрафа: 70 рубСкорость:<{124}> ++enter++
Ограничение:<{110}> ++enter++
Сумма штрафа: 320 руб

