Тернарный оператор питон elif

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' 

    Если все значения являются ложными, возвращается последнее значение:

    Важная особенность работы оператора 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-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 заявления проверяет состояние. Если он имеет значение 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 .

    Источник

    Читайте также:  Питон завершить выполнение программы
Оцените статью