В Python можно определить ряд условных , используя , if для первого, elif для отдыха, вплоть до окончательного (опционально) else для чего — нибудь не пойманного других условных.
number = 5 if number > 2: print(«Number is bigger than 2.») elif number < 2: # Optional clause (you can have multiple elifs) print(«Number is smaller than 2.») else: # Optional clause (you can only have one else) print(«Number is 2.»)
Выходы Number is bigger than 2 , Number is bigger than 2
Использование else if , elif else if вместо elif вызовет синтаксическую ошибку и не допускается.
Условное выражение (или «Тернарный оператор»)
Тернарный оператор используется для встроенных условных выражений. Лучше всего использовать его в простых, кратких операциях, которые легко читаются.
- Порядок аргументов отличается от многих других языков (таких как C, Ruby, Java и т. Д.), Что может привести к ошибкам, когда люди, незнакомые с «удивительным» поведением Python, используют его (они могут изменить порядок).
- Некоторые считают его «громоздким», поскольку он идет вразрез с нормальным потоком мысли (сначала думая о состоянии, а затем о последствиях).
n = 5 «Greater than 2» if n > 2 else «Smaller than or equal to 2» # Out: ‘Greater than 2’
Результат этого выражения будет таким, как он читается на английском языке — если условное выражение имеет значение True, то оно будет вычисляться как выражение с левой стороны, в противном случае — с правой стороны.
Тенарные операции также могут быть вложенными, как здесь:
n = 5 «Hello» if n > 10 else «Goodbye» if n > 5 else «Good day»
Они также обеспечивают способ включения условных в функции лямбды .
Если заявление
if condition: body
В if заявления проверяет состояние. Если он имеет значение True , она выполняет тело , if заявление. Если он имеет значение False , он пропускает тело.
if True: print «It is true!» >> It is true! if False: print «This won’t get printed..»
Условием может быть любое допустимое выражение:
if 2 + 2 == 4: print «I know math!» >> I know math!
Остальное заявление
if condition: body else: body
Оператор else будет выполнять свое тело только в том случае, если все предыдущие условные операторы будут иметь значение False.
if True: print «It is true!» else: print «This won’t get printed..» # Output: It is true! if False: print «This won’t get printed..» else: print «It is false!» # Output: It is false!
Логические выражения
Булевы логические выражения, в дополнение к оценке в True или False , возвращает значение , которое было истолковано как True или False .Это Pythonic способ представить логику, которая в противном случае может потребовать теста if-else.
И оператор
and оператор вычисляет все выражения и возвращает последнее выражение , если все вычисления выражений True .В противном случае она возвращает первое значение , которое вычисляется значение False :
>>> 1 and 2 2 >>> 1 and 0 0 >>> 1 and «Hello World» «Hello World» >>> «» and «Pancakes» «»
Или оператор
or оператор вычисляет выражения слева направо и возвращает первое значение , которое вычисляет True или последнее значение (если ни один не True ).
>>> 1 or 2 1 >>> None or 1 1 >>> 0 or [] []
Ленивая оценка
Когда вы используете этот подход, помните, что оценка ленива. Выражения, которые не требуется оценивать для определения результата, не оцениваются. Например:
>>> def print_me(): print(‘I am here!’) >>> 0 and print_me() 0
В приведенном выше примере, print_me никогда не выполняются , потому что Python может определить все выражение False , когда он встречает 0 ( False ). Имейте это в виду , если print_me нужно выполнить , чтобы служить вашей логике программы.
Тестирование на множественные условия
Распространенной ошибкой при проверке нескольких условий является неправильное применение логики.
Этот пример пытается проверить , если две переменные имеют больше 2. Заявление оценивается как — if (a) and (b > 2) .Это дает неожиданный результат , так как bool(a) вычисляется как True , когда не равен нулю. a
>>> a = 1 >>> b = 6 >>> if a and b > 2: . print(‘yes’) . else: . print(‘no’) yes
Каждую переменную нужно сравнивать отдельно.
>>> if a > 2 and b > 2: . print(‘yes’) . else: . print(‘no’) no
Другая, аналогичная ошибка допущена при проверке, является ли переменная одним из нескольких значений. Утверждение в этом примере оценивается как — if (a == 3) or (4) or (6) .Это дает неожиданный результат , так как bool(4) и bool(6) каждый вычисляться значение True
>>> a = 1 >>> if a == 3 or 4 or 6: . print(‘yes’) . else: . print(‘no’) yes
Опять каждое сравнение должно быть сделано отдельно
>>> if a == 3 or a == 4 or a == 6: . print(‘yes’) . else: . print(‘no’) no
Использование оператора in является каноническим способом написать это.
>>> if a in (3, 4, 6): . print(‘yes’) . else: . print(‘no’) no
Истинные ценности
Следующие значения считаются falsey, в том , что они оценивают в False при применении к логическому оператору.
- Никто
- Ложь
- 0 , или любое цифровое значение эквивалентно нулю, например , 0L , 0.0 , 0j
- Пустые последовательности: » , «» , () , []
- Пустые отображения: <>
- Определяемые пользователем типы где __bool__ или __len__ возвращающие методы 0 или False
Все остальные значения в Python вычисляться True .
Примечание: Распространенная ошибка является просто проверить на фальшивость операции , которая возвращает различные значения Falsey где разница имеет значение. Например, при использовании , if foo() , а не более явным , if foo() is None
Использование функции cmp для получения результата сравнения двух объектов
Python 2 включает в себя cmp функцию , которая позволяет определить , является ли один объект меньше, равен или больше другого объекта. Эта функция может быть использована для выбора из списка на основе одного из этих трех вариантов.
Предположим , вам нужно напечатать ‘greater than’ , если x > y , ‘less than’ , если x < y и ‘equal’ , если x == y .
[‘equal’, ‘greater than’, ‘less than’, ][cmp(x,y)] # x,y = 1,1 output: ‘equal’ # x,y = 1,2 output: ‘less than’ # x,y = 2,1 output: ‘greater than’
cmp(x,y) возвращает следующие значения
сравнение Результат х у 1
Эта функция удалена на Python 3. Вы можете использовать cmp_to_key(func) вспомогательные функции , расположенные в functools в Python 3 , чтобы преобразовать старые функции сравнения ключевых функций.
Тестирование объекта на None и присвоение ему
Вы часто хотите назначить что — то объект , если он не является None , указав , что он не был назначен. Мы будем использовать aDate .
Самый простой способ сделать это состоит в использовании is None тест.
if aDate is None: aDate=datetime.date.today()
(Обратите внимание , что это не более Pythonic сказать is None вместо == None ) .
Но это может быть немного оптимизирована за счет использования понятия , что not None не оценит , чтобы True в логическое выражение. Следующий код эквивалентен:
if not aDate: aDate=datetime.date.today()
Но есть и более питонский способ. Следующий код также эквивалентен:
aDate=aDate or datetime.date.today()
Это делает оценку короткого замыкания.Если aDate инициализируется и не является not None , то он получает назначение в себе, без чистого эффекта. Если это is None , то datetime.date.today() получает назначение в aDate .
Источник: www.codecamp.ru
Как выйти из условия if
Какие существуют методы для преждевременного выхода из предложения if ? Иногда я пишу код и хочу поставить оператор break внутри предложения if , только чтобы помнить, что они могут использоваться только для циклов. Давайте рассмотрим следующий код:
if some_condition: . if condition_a: # do something # and then exit the outer if block . if condition_b: # do something # and then exit the outer if block # more code here
Я могу подумать об одном способе сделать это: предполагая, что случаи выхода выполняются внутри вложенных операторов if, заверните оставшийся код в блоке большего размера. Пример:
if some_condition: . if condition_a: # do something # and then exit the outer if block else: . if condition_b: # do something # and then exit the outer if block else: # more code here
Проблема заключается в том, что больше мест выхода означает более вложенные/отступы. В качестве альтернативы, я мог бы написать свой код, чтобы предложения if были как можно меньше и не требовали каких-либо выходов. Кто-нибудь знает о хорошем/лучшем способе выхода из предложения if ? Если есть какие-либо связанные else-if и else, я полагаю, что выход будет пропустить их.
Источник: overcoder.net
Условные операторы
Программа может выполняться постепенно: строка за строкой, выражение за выражением от начала и до конца, не пропуская ни единой строки кода. Но такое в реальности происходит редко. Зачастую необходимо ввести вариативность, чтобы при выполнении определенного условия, происходило одно, а при его невыполнении – другое. Так применяются условные операторы.
Определение
Заметим, что пользоваться клавишей Tab для создания отступа крайне нежелательно.
Ситуаций, в которых можно было бы применить условный оператор, великое множество. К ним, например, относится:
- Определение, сдал ли студент экзамен. При количестве верных ответов 10 из 15 – сдал, если меньше – не сдал;
- Выяснение размера скидки. Если купил 10 товаров – скидка 10%, если меньше – скидка не предоставляется.
Оператор if
С английского название этого оператора переводится, как «если». То есть он задает условие. После данного оператора записывается само выражение. Если оно оказывается истинным, то программа переходит к выполнению инструкции, заданной в указанном операторе. Выражение считается истинным, когда оно:
- не равно нулю;
- не является пустым;
- является логическим
Для ясности рассмотрим пример использования if — условия в Python 3:
if 3: print(«Привет 3»)
На экране перед пользователем появится запись: Привет 3.
a = 6 if a == 6: print(«Привет 2»)
На дисплее компьютера отобразится: Привет 2.
Также можно задать условие формулой или условным выражением:
a = 5 if a > 2: print(«Привет 3»)
Переменная равна 5, условие, чтобы она была больше 2. Оно истинное, поэтому перед нами появится: Привет 3.
Еще более сложный вариант с несколькими переменными:
a = 0 b = 34 c = 10 if c < 100: a = b + c print(a)
Поскольку с действительно меньше 100, а станет равным 44, и именно это число появится на дисплее при выполнении данного кода. Если бы с изначально было большее 100, например, 110, то на экране бы отобразился 0, переменная а просто не изменилась бы вообще.
Оператор else
Иногда программе нужно указать, что делать, если условие оказывается ложным. Для этого задается новый набор инструкций и используется конструкция if – else. Кстати, стоит запомнить, что в else не может быть никакого логического выражения. Также невозможна и ситуация, при которой выполнятся обе ветви (и if, и else).
a = 7 if a > 5: print(«Да») else: print(«Нет»)
При выполнении данного кода на компьютере появится: Да. Это происходит, потому что 7 действительно больше заданной в условии цифры 5.
Посмотрим, что же случится, если условие станет ложным. Возьмем тот же код, но изменим переменную а.
a = 3 if a > 5: print(«Да») else: print(«Нет»)
Очевидно, что перед пользователем появится слово «Нет», поскольку 3 не больше 5, а меньше.
product1 = 30 product2 = 23 if product1+ product2 > 70 : print(«70 рублей не хватит») else: print(«Денег хватает, все оплачено»)
В данном случае программист увидит запись: Денег хватает, все оплачено, поскольку 30 + 23 = 53, а это меньше чем 70.
Оператор elif и конструкция if – elif – else
Вообще elif примерно расшифровывается, как else + if. Чтобы можно было реализовать программу, которая выбирала бы из нескольких альтернативных вариантов, используется указанная конструкция.
Рассмотрим код, в котором имеется несколько условий:
if balance < 0: print(«Баланс ниже нуля, положите деньги на счет, чтобы Вам не выписали штраф») elif balance == 0: print(«Баланс равен нулю, скорее внесите деньги на счет») else: print(«Ваш баланс выше нуля, все хорошо»)
Так, программа может рассмотреть варианты с тремя условиями. И если переменная balance будет равна 150, то перед пользователем появится надпись: Ваш баланс выше нуля, все хорошо.
Оператор elif позволяет упростить код. Сделать его легче читаемым. Позволяет избежать написание несколько условий if в Python.
Тернарный оператор
Иногда для сокращения записи используется так называемый тернарный оператор, благодаря ему код набирается в одну строку. Посмотрим на пример того, как можно записать условие Python в одну строку:
is_happy = True state = «happy» if is_happy else «not happy»
Чтобы не расписывать в несколько строк оператор if, просто используем сжатый вариант.
Конструкция switch – case
Данная инструкция в Python не используется. Вместо этого можно применять конструкции с несколькими elif. Например, программист хочет написать код, чтобы программа ставила оценку за пройденный студентами тест. При этом оценок может быть несколько. Тогда можно оформить так:
if grade >= 50: print(«Оценка 5 с плюсом») elif grade >= 45: print(«Оценка 5») elif grade >= 35: print(«Оценка 4») elif grade >= 25: print(«Оценка 3») else: print(«Тест провален»)
В этом случае значение переменной grade будет сравниваться со всеми условиями подряд. Однако когда условие станет истинным, выполнение кода остановится и на экране появится сообщение об оценке. Например, если grade равен 30, то на дисплей будет выведена надпись: Оценка 3; если же переменная будет ниже 25, то пользователь увидит: Тест провален.
Если начинающий программист успешно владеет условными конструкциями, это существенно облегчает написание программ и позволяет точнее обозначать их действия. Для усложнения можно создавать целые комбинации операторов, а также объединять их с помощью циклов.
Источник: all-python.ru