if/elif/else#
Конструкция if/elif/else позволяет делать ответвления в ходе программы. Программа уходит в ветку при выполнении определенного условия.
В этой конструкции только if является обязательным, elif и else опциональны:
- Проверка if всегда идет первой.
- После оператора if должно быть какое-то условие: если это условие выполняется (возвращает True), то действия в блоке if выполняются.
- С помощью elif можно сделать несколько разветвлений, то есть, проверять входящие данные на разные условия.
- Блок elif это тот же if, но только следующая проверка. Грубо говоря, это «а если …»
- Блоков elif может быть много.
- Блок else выполняется в том случае, если ни одно из условий if или elif не было истинным.
In [1]: a = 9 In [2]: if a == 10: . : print('a равно 10') . : elif a 10: . : print('a меньше 10') . : else: . : print('a больше 10') . : a меньше 10
Условия#
Конструкция if построена на условиях: после if и elif всегда пишется условие. Блоки if/elif выполняются только когда условие возвращает True, поэтому первое с чем надо разобраться — это что является истинным, а что ложным в Python.
True и False#
В Python, кроме очевидных значений True и False, всем остальным объектам также соответствует ложное или истинное значение:
- истинное значение:
- любое ненулевое число
- любая непустая строка
- любой непустой объект
- 0
- None
- пустая строка
- пустой объект
Например, так как пустой список это ложное значение, проверить, пустой ли список, можно таким образом:
In [12]: list_to_test = [1, 2, 3] In [13]: if list_to_test: . : print("В списке есть объекты") . : В списке есть объекты
Тот же результат можно было бы получить несколько иначе:
In [14]: if len(list_to_test) != 0: . : print("В списке есть объекты") . : В списке есть объекты
Операторы сравнения#
Операторы сравнения, которые могут использоваться в условиях:
In [3]: 5 > 6 Out[3]: False In [4]: 5 > 2 Out[4]: True In [5]: 5 2 Out[5]: False In [6]: 5 == 2 Out[6]: False In [7]: 5 == 5 Out[7]: True In [8]: 5 >= 5 Out[8]: True In [9]: 5 10 Out[9]: True In [10]: 8 != 10 Out[10]: True
Обратите внимание, что равенство проверяется двойным == .
Пример использования операторов сравнения:
In [1]: a = 9 In [2]: if a == 10: . : print('a равно 10') . : elif a 10: . : print('a меньше 10') . : else: . : print('a больше 10') . : a меньше 10
Оператор in#
Оператор in позволяет выполнять проверку на наличие элемента в последовательности (например, элемента в списке или подстроки в строке):
In [8]: 'Fast' in 'FastEthernet' Out[8]: True In [9]: 'Gigabit' in 'FastEthernet' Out[9]: False In [10]: vlan = [10, 20, 30, 40] In [11]: 10 in vlan Out[11]: True In [12]: 50 in vlan Out[12]: False
При использовании со словарями условие in выполняет проверку по ключам словаря:
In [15]: r1 = . : 'IOS': '15.4', . : 'IP': '10.255.0.1', . : 'hostname': 'london_r1', . : 'location': '21 New Globe Walk', . : 'model': '4451', . : 'vendor': 'Cisco'> In [16]: 'IOS' in r1 Out[16]: True In [17]: '4451' in r1 Out[17]: False
Операторы and, or, not#
В условиях могут также использоваться логические операторы and , or , not :
In [15]: r1 = . : 'IOS': '15.4', . : 'IP': '10.255.0.1', . : 'hostname': 'london_r1', . : 'location': '21 New Globe Walk', . : 'model': '4451', . : 'vendor': 'Cisco'> In [18]: vlan = [10, 20, 30, 40] In [19]: 'IOS' in r1 and 10 in vlan Out[19]: True In [20]: '4451' in r1 and 10 in vlan Out[20]: False In [21]: '4451' in r1 or 10 in vlan Out[21]: True In [22]: not '4451' in r1 Out[22]: True In [23]: '4451' not in r1 Out[23]: True
Оператор and#
В Python оператор and возвращает не булево значение, а значение одного из операндов.
Если оба операнда являются истиной, результатом выражения будет последнее значение:
In [24]: 'string1' and 'string2' Out[24]: 'string2' In [25]: 'string1' and 'string2' and 'string3' Out[25]: 'string3'
Если один из операторов является ложью, результатом выражения будет первое ложное значение:
In [26]: '' and 'string1' Out[26]: '' In [27]: '' and [] and 'string1' Out[27]: ''
Оператор or#
Оператор or , как и оператор and, возвращает значение одного из операндов.
При оценке операндов возвращается первый истинный операнд:
In [28]: '' or 'string1' Out[28]: 'string1' In [29]: '' or [] or 'string1' Out[29]: 'string1' In [30]: 'string1' or 'string2' Out[30]: 'string1'
Если все значения являются ложными, возвращается последнее значение:
In [31]: '' or [] or <> Out[31]: <>
Важная особенность работы оператора or — операнды, которые находятся после истинного, не вычисляются:
In [33]: '' or sorted([44, 1, 67]) Out[33]: [1, 44, 67] In [34]: '' or 'string1' or sorted([44, 1, 67]) Out[34]: 'string1'
Пример использования конструкции if/elif/else#
Пример скрипта check_password.py, который проверяет длину пароля и есть ли в пароле имя пользователя:
# -*- coding: utf-8 -*- username = input('Введите имя пользователя: ') password = input('Введите пароль: ') if len(password) 8: print('Пароль слишком короткий') elif username in password: print('Пароль содержит имя пользователя') else: print('Пароль для пользователя <> установлен'.format(username))
$ python check_password.py Введите имя пользователя: nata Введите пароль: nata1234 Пароль содержит имя пользователя $ python check_password.py Введите имя пользователя: nata Введите пароль: 123nata123 Пароль содержит имя пользователя $ python check_password.py Введите имя пользователя: nata Введите пароль: 1234 Пароль слишком короткий $ python check_password.py Введите имя пользователя: nata Введите пароль: 123456789 Пароль для пользователя nata установлен
Тернарное выражение (Ternary expression)#
Иногда удобнее использовать тернарный оператор, нежели развернутую форму:
s = [1, 2, 3, 4] result = True if len(s) > 5 else False
Этим лучше не злоупотреблять, но в простых выражениях такая запись может быть полезной.
Операторы if-else-elif в Python
If, else и elif в Python – ключевые слова для условной логики в программе.
Если нам придется заставить нашу программу вести себя по-разному в разных условиях. Вот где мы будем использовать условную логику. Итак, условная логика — это то, как мы можем принять логическое решение в программе.
Для реализации условной логики есть ключевые слова в Python – if, else и elif.
1. Использование условия if и else
Предположим, мы хотим написать программу, которая будет определять, четное или нечетное число. Если число нечетное, мы хотим напечатать – «нечетное», а если число четное, мы хотим напечатать – «четное». Мы можем написать эту программу, используя ключевое слово if.
n=input() #take a input from user n=int(n) #typecast the raw input into integer #check if n is odd or even #logic for odd/even is- #if we divide an even number by 2, the remainder will be zero #if we divide an odd number by 2, the remainder will be one #we can perform this logic with modulus operator (%) if n%2==0: #(n%2) is the remainder.Check if it's zero print("the number is even") if n%2==1: #Check the remainder is one print("the number is odd")Если мы выполним эту программу и дадим вход 2, результат будет таким, как на изображении ниже:

Если мы снова запустим программу и дадим вход 3, результат будет таким, как показано ниже.
Итак, в приведенном выше сценарии мы поставили условие n% 2, которое имеет только два возможных результата. Либо ноль, либо единица. Итак, здесь мы можем использовать else для второго условия.
В этом случае нам не нужно писать второе условие вручную.
Мы можем написать первое условие, используя if, и использовать else для другого случая, как показано ниже:
n=input() #take a input from user n=int(n) #typecast the raw input into integer #check if n is odd or even #logic for odd/even is- #if we divide an even number by 2, the remainder will be zero #if we divide an odd number by 2, the remainder will be one #we can perform this logic with modulus operator (%) if n%2==0: #(n%2) is the remainder.Check if it's zero print("the number is even") else: #this will consider every other case without the above-mentioned condition in if print("the number is odd")2. Обработка нескольких условий с помощью elif
Что, если нам придется написать программу, которая будет обрабатывать три или более условий. Предположим, вам нужно взять у пользователя число и рассмотреть эти три случая:
- Если число от 1 до 10 – выведите «too low».
- Если число от 11 до 20 – печатайте «medium».
- Если число от 21 до 30 – выведите «large».
- Если число больше 30 – выведите «too large».
Итак, в этом сценарии мы должны использовать if для первого условия и else для последнего условия. Мы будем использовать elif, чтобы указать другое условие, например:
n=input() #take a input from user n=int(n) #typecast the raw input into integer #Check If the number is between 1 to 10 if n>=1 and n=11 and n=21 and n

Если мы запустим эту программу для значений 3, 15, 23, 45 соответственно, результат будет таким.
Условия (ветвления if-elif-else) и тернарные операторы
В 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 .
Как работает оператор else if и в чем отличие от if?
Достаточно рассмотреть простой пример, чтобы понять, в чем заключается разница.
int x = 0; if ( x == 0 ) < System.out.printline( "x = " + x ); ++x; >else if ( x == 1 ) < System.out.printline( "x = " + x ); ++x; >else if ( x == 2 ) < System.out.printline( "x x = " + x ); ++x; >if ( x == 1 ) < System.out.printline( "x = " + x ); ++x; >if ( x == 2 ) < System.out.printline( "x mt24">)" data-controller="se-share-sheet" data-se-share-sheet-title="Поделиться ссылкой на ответ" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter " data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Поделиться)" title="">Улучшить ответ)">изменён 8 ноя 2016 в 12:25Nick Volynkin♦33.9k 25 золотых знаков 130 серебряных знаков 222 бронзовых знакаответ дан 8 ноя 2016 в 11:40Vlad from MoscowVlad from Moscow44.8k 3 золотых знака 38 серебряных знаков 89 бронзовых знаков
