Условные операторы
vkrysanov320@gmail.com
Условные операторы — важная часть любого языка программирования. Они позволяют выполнять команды (или наборы команд) только при наличии определённых условий.
При помощи условных операторов программа может определить, выполняются ли определенные условия, а затем решить, что делать дальше.
На улице температура
ниже 0°?
Надеть шубу
Надеть куртку
Yes
No
Начало
Конец
Но сначала поговорим про логический тип данных...
В программировании и математике если результатом вычисления выражения может быть лишь истина или ложь, то такое выражение называется логическим (булевским).
Например:
Логический тип (булевский тип) данных может принимать одно из двух значений: истина или ложь. В Python такой тип данных называется bool.
В Python имеются две константы с понятными именами True (от англ. true — истина) и False (от англ. false — ложь), которые можно использовать для непосредственного присвоения логических значений.
Например, переменные a и b, хранящие True и False, соответсвенно:
a = True
b = False
print(a, b)
Результатом вычисления выражений также может быть логическое значение. Обычно, тип данных bool, как мы уже обусловили ранее, используется в операторах сравнения. В Pyhon есть следующие часто используемые операторы сравнения:
< — Меньше — условие верно, если первый операнд меньше второго.
> — Больше — условие верно, если первый операнд больше второго.
<= — Меньше или равно.
>= — Больше или равно.
== — Равенство. Условие верно, если два операнда равны. Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение — разные операции.
!= — Неравенство. Условие верно, если два операнда неравны.
print(7 == 7) # Результатом будет True, очевидно это равенство
# а можно положить в переменную значение логического выражения:
a = 7 != 7
print(a) # Определенно будет False
b = 7 >= 10 # Сравним: 7 больше либо равно 10?
c = 1 <= 1 # 1 меньше либо равно 1?
d = 12.3 > 11 # а тут сравнение строгим знаком
e = 12.3 < 11 # так же, только в другую сторону
print(a, b, c, d)
# а вот выражения посложнее:
print((10/2)**3 == (2/10)**10)
#так же можно объединять в целые цепочки:
x = 10
print(10 < x <= 12)
Логические выражения типа k >= 1023 являются простыми, так как в них выполняется только одна логическая операция.
Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобиться получить ответа «Да» или «Нет» в зависимости от результата выполнения двух простых выражений. Например, «на улице идет снег или дождь», «переменная news больше 12 и меньше 20».
В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения: и (and) и или (or), а так же унарный оператор — не (not).
Чтобы получить True при использовании оператора and, необходимо, чтобы результаты обоих простых выражений, которые связывает данный оператор, были истинными. Если хотя бы в одном случае результатом будет False, то и все сложное выражение будет ложным.
Пример:
a = 10
b = 10
print(a >= 10 and b == 10)
Чтобы получить True при использовании оператора or, необходимо, чтобы результат хотя бы одного простого выражения, входящего в состав сложного, был истинным.
Пример:
a = 10
b = 10
print(a >= 10 or b == 0)
not — это унарный логический оператор — отрицание. Он превращает правду в ложь, а ложь в правду.
Пример:
a = 10
print(not(a >= 10))
1. Узнайте, является ли выражение ниже отрицательным:
2. А является ли больше 100?
1. Узнайте, является ли выражение ниже отрицательным:
2. А является ли больше 100?
a = ((-2) ** (5 ** (math.sqrt(10 * log2(172))))) / math.sin(10)
# проверяем отрицательно ли:
print(a < 0)
# проверяем больше ли ста:
print(a > 100)
Ход выполнения программы может быть линейным, то есть таким, когда выражения выполняются друг за другом, начиная с первого и заканчивая последним. Ни одна строка кода программы не пропускается:
Однако чаще в программах бывает не так. При выполнении кода, в зависимости от тех или иных условий, некоторые его участки могут быть опущены, в то время как другие — выполнены.
a = 10 + 6
print(a)
b = a - 10
print(b)
Оценивая условия и запуская команды в зависимости от соблюдения этих условий, вы можете написать условный код.
if condition:
instruction_1
instruction_2
...
instruction_n
После оператора if записывается логическое выражение (condition) — условие. Если это выражение истинно, то выполняются инструкции (instruction), определяемые данным оператором. Выражение является истинным, если его результатом является число не равное нулю, непустой объект, либо логическое True
if True:
print("hello") # "hello" напечатается всегда
a = 3
if a == 3:
print("qq1") # a равно 3, --- значит напечатается
if a < 1: # а как тут?
print("qq2")
a = 3
if a > 10:
print("больше")
print("вне if")
Обратите внимание на отступы!
if condition:
instruction_a1
instruction_a2
...
instruction_an
else:
instruction_b1
instruction_b2
...
instruction_bm
Бывают случаи, когда необходимо предусмотреть альтернативный вариант выполнения программы. Т.е. при истинном условии нужно выполнить один набор инструкций, при ложном — другой. Для этого используется конструкция if-else:
a = 3
if a > 2:
print("H")
else:
print("L")
Если a > 2, то печатаем «H», в противном случае — «L».
В данном случае a = 3, а
следовательно напечатается «H».
if condition_1:
instruction_a1
instruction_a2
...
elif condition_2:
instruction_b1
instruction_b2
...
...
elif condition_l:
instruction_h1
instruction_h2
...
else:
instruction_j1
instruction_j2
...
Для реализации выбора из нескольких альтернатив можно использовать конструкцию if-elif-else:
Следует учитывать, что блок else не является обязательным! Его можно пусть при необходимости.
Вычислим значение данного выражения, при различных x:
x = float(input())
if x > 0:
print(1)
elif x == 0:
print(0)
elif x < 0:
print(-1)
Все elif будут проверяться последовательно: от первого к последнему. Если условие написано плохо, например как тут:
x = 11
if x > 10:
print(10)
elif x == 11:
print(11)
Видно, что программа будет «проваливаться» только в первое условие, когда x > 10, второе условие тоже истинно, но программа минует его, так как уже выполнила инструкции первого условия. Поэтому при составлении условных выражений следует учитывать это.
Приведение к логическому типу данных в Python осуществляется с помощью функции bool():
a = 1
bool(a)
Другие моменты:
1. Написать программу, которая определяет попадает ли заданная точка в промежуток [3;15) (необходимые данные должны вводиться с клавиатуры с помощью input()).
2. Написать программу, которая определяет попадает ли точка в об- ласть, ограниченную функциями 𝑓(𝑥) = и 𝑔(𝑥) = 𝑥 (необходимые данные должны вводиться с клавиатуры с помощью input()).
3. Вычислить значение логического выражения (необходимые данные должны вводиться с клавиатуры с помощью input()):
Написать программу, которая определяет попадает ли заданная точка в промежуток [3;15) (необходимые данные должны вводиться с клавиатуры с помощью input()).
Вот как это выглядит на числовой прямой:
Код программы:
x = int(input("Введите x -> "))
if x >= 3 and x < 15: # можно и так: 3 <= x < 15
print(x, "попадает в [3; 15)")
else:
print(x, "не попадает в [3; 15)")
Написать программу, которая определяет попадает ли точка в область, ограниченную функциями 𝑓(𝑥) = и 𝑔(𝑥) = 𝑥 (необходимые данные должны вводиться с клавиатуры с помощью input()).
Код программы:
x = float(input("Введите координату x -> "))
y = float(input("Введите координату y -> "))
if y >= x**2 and y <= x:
print("Попадает")
else:
print("Не попадает")
Справа — графики данных функций и искомая область (для наглядности).
Вычислить значение логического выражения (необходимые данные должны вводиться с клавиатуры с помощью input()):
Код программы:
a = bool(input())
b = bool(input())
c = bool(input())
f = not(not a or b and c)
print(f)