Содержание

Python. Урок 5. Условные операторы и циклы

В этом уроке рассмотрим оператор ветвления if и операторы цикла while и for.  Основная цель – это дать общее представление об этих операторах и на простых примерах показать базовые принципы работы с ними.

Условный оператор ветвления if

Оператор ветвления if  позволяет выполнить определенный набор инструкций в зависимости от некоторого условия. Возможны следующие варианты использования.

1. Конструкция if

Синтаксис оператора if выглядит так.

if выражение:
    инструкция_1
    инструкция_2
    ...
    инструкция_n

После оператора if  записывается выражение. Если это выражение истинно, то выполняются инструкции, определяемые данным оператором. Выражение является истинным, если его результатом является число не равное нулю, непустой объект, либо логическое True. После выражения нужно поставить двоеточие “:”.

ВАЖНО: блок кода, который необходимо выполнить, в случае истинности выражения, отделяется четырьмя пробелами слева!

Примеры:

if 1:
   print("hello 1")

Напечатает: hello 1

a = 3
if a == 3:
    print("hello 2")

Напечатает: hello 2

a = 3
if a > 1:
   print("hello 3")

Напечатает: hello 3

lst = [1, 2, 3]
if lst :
   print("hello 4")

Напечатает: hello 4

2. Конструкция if – else

Бывают случаи, когда необходимо предусмотреть альтернативный вариант выполнения программы. Т.е. при истинном условии нужно выполнить один набор инструкций, при ложном – другой. Для этого используется конструкция if – else.

if выражение:
    инструкция_1
    инструкция_2
    ...
    инструкция_n
else:
    инструкция_a
    инструкция_b
    . ..
    инструкция_x

Примеры.

a = 3
if a > 2:
   print("H")
else:
   print("L")

Напечатает: H

a = 1
if a > 2:
   print("H")
else:
   print("L")

Напечатает: L

Условие такого вида можно записать в строчку, в таком случае оно будет представлять собой тернарное выражение.

a = 17
b = True if a > 10 else False
print(b)

В результате выполнения такого кода будет напечатано: True

3. Конструкция if – elif – else

Для реализации выбора из нескольких альтернатив можно использовать конструкцию if – elif – else.

if выражение_1:
    инструкции_(блок_1)
elif выражение_2:
    инструкции_(блок_2)
elif выражение_3:
    инструкции_(блок_3)
else:
    инструкции_(блок_4)

Пример.

a = int(input("введите число:"))
if a < 0:
   print("Neg")
elif a == 0:
   print("Zero")
else:
   print("Pos")

Если пользователь введет число меньше нуля, то будет напечатано “Neg“, равное нулю – “Zero“, большее нуля – “Pos“.

Оператор цикла while

Оператор цикла while  выполняет указанный набор инструкций до тех пор, пока условие цикла истинно. Истинность условия определяется также как и в операторе if. Синтаксис оператора

while  выглядит так.

while выражение:
    инструкция_1
    инструкция_2
    ...
    инструкция_n

Выполняемый набор инструкций называется телом цикла.

Пример.

a = 0
while a < 7:
   print("A")
   a += 1

Буква “А” будет выведена семь раз в столбик.

Пример бесконечного цикла.

a = 0
while a == 0:
   print("A")

Операторы

break и continue

При работе с циклами используются операторы break  и continue.

Оператор break  предназначен для досрочного прерывания работы цикла while.

Пример.

a = 0
while a >= 0:
   if a == 7:
       break
   a += 1
   print("A")

В приведенном выше коде, выход из цикла произойдет при достижении переменной a  значения 7. Если бы не было этого условия, то цикл выполнялся бы бесконечно.

Оператор continue  запускает цикл заново, при этом код, расположенный после данного оператора, не выполняется.

Пример.

a = -1
while a < 10:
   a += 1
   if a >= 7:
       continue
   print("A")

При запуске данного кода символ “А” будет напечатан 7 раз, несмотря на то, что всего будет выполнено 11 проходов цикла.

Оператор цикла for

Оператор for  выполняет указанный набор инструкций заданное количество раз, которое определяется количеством элементов в наборе.

Пример. 

for i in range(5):
   print("Hello")

В результате “Hello” будет выведено пять раз.

Внутри тела цикла можно использовать операторы break  и continue, принцип работы их точно такой же как и в операторе while.

Если у вас есть заданный список, и вы хотите выполнить над каждым элементом определенную операцию (возвести в квадрат и напечатать получившееся число), то с помощью for  такая задача решается так.

lst = [1, 3, 5, 7, 9]
for i in lst:
   print(i ** 2)

Также можно пройти по всем буквам в строке.

word_str = "Hello, world!"
for l in word_str:
   print(l)

Строка “Hello, world!” будет напечатана в столбик.

На этом закончим краткий обзор операторов ветвления и цикла.

P.S.

Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.

<<< Python. Урок 4. Арифметические операции   Python. Урок 6. Работа с IPython и Jupyter Notebook >>>

2.2. Условный оператор (if)

2.2.1. Базовый синтаксис

В программах часто бывает нужно сделать так, чтобы те или иные действия выполнялись лишь при выполнении определенного условия. Для этого в питоне (ну и в других языках программирования, конечно) есть специальная команда — условный оператор, if.

Пример такой команды:

if a == 137:
    print("Угадал")

Здесь подразумевается, что есть переменная a, и команда тогда работает так: если переменная a равна 137, то вывести на экран слово «Угадал».

Соответственно, общий вид команды следующий:

if условие:
    действия

Вы пишете if, потом условие (чуть ниже поговорим, что именно можно тут писать), потом двоеточие (обязательно), и со следующей строки, причем с дополнительным отступом (пробелами в начале строки), указываются действия.

В качестве действий можно указывать любые команды питона, которые вы знаете или еще узнаете: ввод данных через input, присваивания, вывод данных, другие if’ы и что угодно еще. (Подробные примеры будут ниже.)

Такую конструкцию вы просто пишете внутри основной программы, например:

a = int(input())
if a == 137:
    print("Угадал!")
print("Программа завершена")

Тут с клавиатуры вводится число a, проверяется, равно ли оно 137, если равно, то выводится «Угадал», и независимо от значения a выводится «Программа завершена».

Обратите внимание, что print("Угадал!") написано с отступом от левого края, поэтому эта команда будет выполняться, только если a==137, а вот print("Программа завершена") написано без отступа, поэтому это продолжение основной программы, а не часть if’а. Независимо от значения a после проверки (и, если надо, выполнения) if’а программа продолжит выполняться дальше, и выведет «Программа завершена».

(Конечно, напишите этот код и поэкспериментируйте с ним. Вообще, по всем примерам, которые я привожу тут и буду приводить в других темах, пишите код и экспериментируйте.)

2.2.2. Условия

Сначала подробнее поговорим про то, что можно писать в условии.

Во-первых, можно писать «простейшие» условия. Вы можете взять любые два выражения и так или иначе их сравнить. Для сравнения есть следующие операторы:

  • == проверяет на равенство: запись if a == 137: обозначает «если переменная a равна 137». Обратите внимание, что тут два знака «равно», потому что одиночный знак «равно» имеет совсем другой смысл — это присваивание, и его нельзя (и не имеет смысла) использовать в if.

  • > — больше: if a > 137: обозначает «если переменная

    a больше 137».

  • < — меньше.

  • >= — больше или равно. Обратите внимание, что пишется так же, как читается: «больше или равно», соответственно, >=, а вовсе не =>.

  • <= — меньше или равно. Аналогично, пишется именно <=, а не =<.

  • != — не равно.

По обе стороны от сравнения можно писать любые выражения. Можно просто переменные или числа, а можно и любые сложные выражения, например, можно написать

if sqrt(a*b+10) >= abs(2*(3-c)) + 5:

2.2.3. Логические операторы

Во-вторых, в if можно комбинировать несколько условий.

Например, если вам надо проверить, что a == 10 и b == 20. Это пишется так:

if a == 10 and b == 20:

Такое условие будет выполняться, только если выполняются оба перечисленных простых условия, т.е. только если и a == 10, и b == 20.

Есть следующие такие операторы («логические операторы»):

  • and — И. Проверка ... and ... срабатывает, только если оба условия, замененные на ..., верны.

  • or — ИЛИ. Проверка ... or ... срабатывает, если верно хотя бы одно из двух указанных условий (или оба одновременно).

  • not — НЕ. Оно применяется к одному условию (а не к двум, как выше) и инвертирует его значение: not ... срабатывает, только если условие, замененное на ..., неверно.

Например:

if a == 0 or not (b > 0 and c < 0):

сработает, если a равно нулю, или если не выполняется условие «одновременно b>0 и c<0».

Обратите внимание на скобки для указания порядка действий; если бы вы написали без скобок if a == 0 or not b > 0 and c < 0:, то было бы непонятно, к чему относится not и в каком порядке надо делать действия.

Более конкретный пример про скобки: сравните следующие два выражения:

if a == 0 and (b == 0 or c == 0):
if (a == 0 and b == 0) or c == 0:

Эти выражения имеют разный смысл; например, ситуация a==1, b==1, c==0 подходит под второе выражение, но не под первое. Поймите, почему, и заодно подумайте, какие есть еще случаи, в которых значения этих выражений отличатся.

Поэтому в любых сложных логических выражениях надо обязательно ставить скобки для указания порядка действий. Запись просто if a == 0 and b == 0 or c == 0 обозначает непонятно что. Конечно, компьютер выберет некоторый порядок действий, но лучше всегда указать его явно.

Еще замечу, что выше все примеры для простоты были с разными переменными и с простыми сравнениями. Конечно, с логическими операторами можно использовать любые другие выражения, например

if a + 24 < b * 3 or (sqrt(a + 2) > b + a and a > 3):

И наконец, логические операторы работают только с логическими выражениями — со сравнениями, либо с выражениями, которые уже составлены из сравнений и логических операторов. То есть следующая запись:

if a or b == 0:

вовсе не обозначает «если a или b равны нулю», потому что сравнение ==0 тут относится только к b, а левая часть оператора or, в которой написано просто a, не является сравнением. Запись if a: не имеет смысла (представьте себе, что a==40; что тогда обозначает запись «если 40»? Не «если 40 больше нуля», а просто «если 40»), потому и запись a or b == 0 не имеет смысла. И даже если вы поставите скобки: if (a or b) == 0, это тоже не будет работать, потому что совершенно непонятно, чему равно, например, 40 or 30.

Примечание

На самом деле сказанное в предыдущем абзаце, конечно же, не совсем верно. Запись if a: в питоне обозначает «если a не равно нулю», соответственно запись if a or b == 0 обозначает «если a не равно нулю, или b равно нулю». Но это вовсе не то, чего вы могли ожидать, и вообще, таким наявным сравнением с нулем лучше не пользоваться, за исключением особых случаев. Если вы хотите сравнить переменную с нулем, так явно и пишите: if a == 0 и т.п.

Примечание

Запись if (a or b) == 0 тоже на самом деле имеет некоторый смысл, но тоже не тот, который вы можете подумать. Но поясню эту ситуацию чуть подробнее. Питон, как и любой язык программирования — он достаточно формален и не понимает чистого человеческого языка, пусть даже иногда кажется, что понимает. В частности, любые выражения, что арифметические, что вот такие логические, питон вычисляет по порядку. Вас в школе учили вычислять значение арифметических выражений с учетом порядка действий: например, если есть выражение 10 + 20 * 30, то надо сначала умножить 20 * 30, получить 600, и потом вычислить 10 + 600. Аналогично выражение (a or b) == 0 вычисляется так: надо сначала вычислить a or b, и только полученный результат уже сравнивать с нулем. А вовсе не сравнить с нулем отдельно a и отдельно b, как вы могли бы подумать.

Примечание

И конечно тут правильнее говорить про логический тип данных — это собственно то, что получается в результате сравнений и логических операций, и то, что можно использовать в if. Это тип данных, который может хранить только два значения, которые в питоне называются True (истина, условие верно) и False (ложь, условие неверно), например, у выражения 10 > 0 результат будет True, а у выражения True and False результат будет False. И, например, если у вас написано:

(10 > 0) and (8 > 10)

то питон поступает так: он сначала вычисляет значение 10 > 0, получает True, потом вычисляет 8 > 10, получает False, потом вычисляет True and False, получает False, т. е. условие не верно.

Но для базового понимания того, как работает if, это пока не нужно.

2.2.4. Тело условного оператора

«Тело» любой составной команды (правда, вы пока знаете только про if) — это другие команды, которые выполняются внутри нее. Там можно писать вообще любые другие команды. Главное — писать с отступом, чтобы питон понял, что это часть if’а, а не продолжение основной программы.

Пример:

...
if a == 0:
    print("Ноль")
    b = int(input())
    if b == 0:
        print("И это тоже ноль!")
    print("-----")

Обратите внимание, что внутри if можно писать еще один if, и его тело будет с дополнительным отступом. Т.е. тут print("И это тоже ноль!") выполнится, только если b тоже оказалось равно нулю, а вот print("-----") выполнится независимо от b (но, конечно, надо, чтобы a было нулем).

Еще раз повторю то, что я писал в предыдущем разделе: питон, как и любой другой язык программирования ­— это конструктор. Все программирование состоит в том, что вы собираете большую программу из маленьких команд — кирпичиков. Соответственно, внутри if’а можно использовать любые другие такие кирпичики.

2.2.5. else и elif

То, что мы писали выше — это, как говорят, краткая форма if. Она указывает только что делать, если условие выполнилось. Есть полная форма if, она указывает, что делать, если условие выполнилось, а что делать, если оно не выполнилось:

if a == 0:
    print("Ноль")
else:
    print("Не ноль")

Часть «что делать, если условие не выполнилось», начинается с команды else: (с двоеточием!), причем она должна быть на том же уровне отступа, что и сам if. Под else, как и под if, можно писать любые команды, тоже с дополнительным отступом.

Пример:

if a == 0:
    if b == 0:
        print("Два нуля")
    else:
        print("Только b не ноль")
else:
    if b == 0:
        print("Только a не ноль")
    else:
        print("Обе переменные не нули")

Естественно, в else нельзя писать никаких еще условий — питон будет выполнять там код всегда, если условие соответствующего if не выполнилось. Иногда бывает нужно, если условие if не выполнилось, то проверить какое-нибудь еще условие. Это, конечно, можно писать так:

if a < 0:
    print("Отрицательное")
else:
    if a == 0:
        print("Ноль")
    else:
        print("Положительное")

Но это длинновато и сложно, плюс если таких вариантов много, то получится очень большой отступ. Поэтому есть еще специальная команда elif, обозначающая else if. Можно писать так:

if a < 0:
    print("Отрицательное")
elif a == 0:
    print("Ноль")
else:
    print("Положительное")

Это полный эквивалент предыдущего кода, только чуть покороче и — главное — без лишних отступов ступенькой. Еще раз: elif — это просто сокращение от else if, позволяющее чуть красивее писать код, ничего больше.

Еще пример:

if d = "North":
    print("Идем на север")
elif d == "South":
    print("Идем на юг")
elif d == "West":
    print("Идем на запад")
elif d == "East":
    print("Идем на восток")
else:
    print("??!!")

То же самое можно было бы написать и через else/if, но были бы очень некрасивые отступы.

2.2.6. Примеры решения задач

Приведу несколько примеров задач, аналогичных тем, которые встречаются на олимпиадах и в моем курсе.

Задача 2.5:

Кондиционер включается, если в комнате температура больше 20 градусов; если же температура 20 градусов или ниже, кондиционер выключается [1]. Напишите программу, которая определит, что будет делать кондиционер.

Входные данные: Вводится одно целое число — текущая температура в комнате.

Входные данные: Выведите строку on, если кондиционер включится, и off, если выключится.

Пример:

Входные данные:

Выходные данные:

Надо считать одно число, дальше написать сравнение с 20 и, в зависимости от результата, вывести одну из двух строк:

n = int(input())
if n > 20:
    print("on")
else:
    print("off")

Задача 2.6:

Новая модель кондиционера учитывает еще и влажность в помещении. Поскольку при охлаждении влажность повышается, то кондиционер ни в коем случае не включается, если влажность в помещении превышает 80%.

Кроме того, на этом кондиционере требуемую температуру можно настраивать с пульта. Таким образом, если пользователь выставил с пульта температуру \(T\) градусов, то кондиционер включается, если температура в комнате строго больше \(T\), а влажность 80% или ниже. Если же хотя бы одно из условий не выполняется, то кондиционер выключается.

Входные данные: На одной строке вводятся три числа — выставленная пользователем температура (\(T\)), текущая температура в комнате и текущая влажность в комнате. Температуры указаны в градусах, влажность — в процентах.

Входные данные: Выведите строку on, если кондиционер включится, и off, если выключится.

Пример:

Входные данные:

20 22 60

Выходные данные:

Тут надо написать чуть более сложное условие: если температура превышает заданную, а влажность не превышает, то кондиционер включается, иначе нет:

t0, t1, h = map(int input(). split())
if t1 > t0 and h <= 80:
    print("on")
else:
    print("off")

Обратите внимание, что надо очень аккуратно писать строгие или нестрогие условия («больше» или «больше или равно»; аналогично «меньше» или «меньше или равно»). В условии сказано, что кондиционер включается, только если температура строго выше заданной (т.е. «больше», а не «больше или равна»), а влажность не превышает 80% (т.е. «меньше или равна», а не «меньше»).

Задача 2.7:

У Маши в комнате висит простой кондиционер. Он включается, если в комнате температура больше 20 градусов; если же температура 20 градусов или ниже, кондиционер выключается. Маша хочет охладить комнату, но она умная и понимает, что если температура воздуха на улице ниже, чем в комнате, то надо не включать кондиционер, а открыть окно. Напишите программу, которая определит, что будет делать Маша.

Входные данные: На первой строке вводится одно число — температура в комнате. На второй строке одно число — температура на улице.

Входные данные: Выведите строку ac on, если Маше надо включить кондиционер и он включится, ac off, если Маша попробует включить кондиционер, но он не включится, и open window, если Маше достаточно просто открыть окно.

Пример:

Входные данные:

Выходные данные:

open window

Входные данные:

Выходные данные:

ac off

Сначала, конечно, надо считать два числа:

t_in = int(input())
t_out = int(input())

Тут (как и во многих других задачах) есть несколько способов решения. Можно, например, сначала написать условие, когда стоит включать кондиционер: if t_in <= t_out, и дальше внутри этого if’а разобрать ситуацию с кондиционером. Полный код получится такой:

t_in = int(input())
t_out = int(input())
if t_in <= t_out:
    if t_in > 20:
        print("ac on")
    else:
        print("ac off")
else:
    print("open window")

Но можно и сделать так, чтобы вложенные if’ы не были нужны, сначала проверив, не стоит ли открыть окно:

t_in = int(input())
t_out = int(input())
if t_in > t_out:
    print("open window")
elif t_in > 20:
    print("ac on")
else:
    print("ac off")

Задача 2. 8:

На уроке физкультуры тренер говорит «на первый-второй рассчитайтесь». Вася стоит \(N\)-ым по счету. Что он скажет, «первый» или «второй»?

Входные данные: На первой строке вводится одно число \(N\).

Входные данные: Выведите строку first, если Вася скажет «первый», и second, если «второй».

Пример:

Входные данные:

Выходные данные:

Очевидно, ответ зависит от того, четное число \(N\) или нет. Четность числа можно проверить, взяв остаток от деления на 2:

n = int(input())
if n % 2 == 1:
    print("first")
else:
    print("second")
[1]

Конечно, настоящие кондиционеры работают не совсем так, у них пороги включения и выключения разные (так называемый гистерезис).

Условный оператор Python-if — Русские Блоги

Условный оператор Python-if

Теги:  python  Условные утверждения  python

Условный оператор Python

Условный оператор Python определяет блок кода, который должен быть выполнен в результате выполнения (True или False) одного или нескольких операторов.
Вы можете вкратце понять процесс выполнения условного оператора с помощью следующего рисунка:

 
 

Базовое использование оператора if 1

Язык программирования Python указывает, что любые ненулевые и ненулевые значения являются истинными, а 0 или null — ложными.
Оператор if в программировании на Python используется для управления выполнением программы. Основная форма:

if Условия анализа:
         Выполнить оператор ...
else:
         Выполнить оператор ...	

Когда установлено «условие оценки» (отличное от нуля), выполняется следующая инструкция, и содержимое выполнения может состоять из нескольких строк, и один и тот же диапазон выделяется отступом.
else — это необязательный оператор, когда необходимо выполнить содержимое, когда условие не установлено, может быть выполнен связанный оператор.
Демонстрация Gif:

Конкретный пример выглядит следующим образом:
Пример 1. Базовое использование if
flag = False
name = ‘python’
if name == ‘python’: # Определить, является ли переменная python
flag = True # Установите флаг в истинное значение, если условие истинно
print (‘welcome boss’) # и вывести приветственное сообщение
else:
print (name) # Выводить имя переменной, если условие не выполняется

Базовое использование оператора if 2

Условие оценки оператора if может быть выражено как> (больше чем), <(меньше чем), == (равно),> = (больше или равно) и <= (меньше или равно).
Если условием оценки является несколько значений, можно использовать следующие формы:

if  Условия анализа1:
         Выполнить заявление1……
elif  Условия анализа2:
         Выполнить заявление2……
elif  Условия анализа3:
         Выполнить заявление3……
else:
         Выполнить заявление4……

Конкретные примеры таковы:
Пример 2: использование elif
num = 5
if num == 3: # Определить значение num
print ‘boss’
elif num == 2:
print ‘user’
elif num == 1:
print ‘worker’
elif num <0: # выводить, если значение меньше нуля
print ‘error’
else:
print ‘roadman’ # Выводит, когда ни одно из условий не выполнено

Поскольку python не поддерживает операторы switch, множественные оценки условий могут быть реализованы только с помощью elif. Если несколько условий нужно оценивать одновременно, вы можете использовать или (или), чтобы указать, когда одно из двух условий выполнено, условие считается успешным; при использовании и (и) это означает, что условие считается успешным только тогда, когда два условия удовлетворяются одновременно.
Конкретный пример выглядит следующим образом:
Пример 3. Оператор If с несколькими условиями
num = 9
if num> = 0 and num <= 10: # Определить, находится ли значение в диапазоне от 0 до 10
print ‘hello’
#Output result: hello
num = 10
if num <0 or num> 10: # Определить, является ли значение меньше 0 или больше 10
print ‘hello’
else:
print ‘undefine’
# Выходной результат: undefine
num = 8
# Определить, равно ли значение 05 или 10Между 15
if (num >= 0 and num <= 5) or (num >= 10 and num <= 15):
print ‘hello’
else:
print ‘undefine’
# Выходной результат: undefine

Если в if указано несколько условий, вы можете использовать круглые скобки, чтобы различать порядок суждения. Суждения в скобках выполняются первыми. Кроме того, приоритет и и или ниже чем> (больше чем), <(меньше чем) и другие символы суждения, то есть больше чем и меньше чем в отсутствие скобок, будут оцениваться до и или.


Интеллектуальная рекомендация

Docker Установка Elk экологических шагов

Эта версия установки elasticsearch-6.2.4 kibana7.6.2 logstash-6.3.0 kafka_2.10-0.10.2.1 Описан Environment Скачать адрес: https: //pan.baidu.com/s/1lnjuf0kexkg2fyzbbzgi3G код извлечения: IZHG Во-первы…

Фибоначчи (dfs) зсту 4245 KI

————————————————— — Портал ———————————————- —— Description К. очень нравится красивая и элегантная последовательность Фибоначчи, а не…

AxtocControl Dreath Clicks

 …

Способ внедрения библиотек NCurses в библиотеки NCurses

Способ внедрения библиотек NCurses в библиотеки NCurses После загрузки соответствующей библиотеки, компилируйте…

Пример статической страницы Spring

https://www.w3cschool.cn/wkspring/zlmb1mmo.html Пример статической страницы Spring В следующем примере показано, как использовать среду Spring MVC для написания простого веб-приложения, которое может . ..

Вам также может понравиться

Вспышка D8 2018-06-13

один, Level3-Unit1-Part2*Learning- 1、Winter sports (incude) skiing and ice skating. 2、Autumn is when trees (turn) many colors and leaves (fall) to the ground. 3、For many animals,new life begins in the…

Как стать архитектором Java

Многие люди занимаются разработкой Java в течение 2 или 3 лет, они почувствуют, что у них есть узкие места. Все не будет, как изменить дилемму, почему многие люди писали 7 или 8 лет или кодовый фермер…

Перевод документов Masonry (Github)

Masonry инкапсулирует AutoLayout с более красивым синтаксисом, который представляет собой легкую структуру макета. Masonry имеет собственный DSL макета (предметно-ориентированный язык), который предос…

[Алгоритм] элементарный класс сетевого алгоритма Niuke (три структуры, связанные с хэш-функцией и набором проверки слияния)

  Три структуры, связанные с хэш-функцией и набором проверок каталог Хеш-функции и хеш-таблицы Детальный фильтр Блума Согласованная структура хэша И проверить структуру и применение (проблема ост. ..

Говоря о Git

Говоря о Git Напиши спереди Git обучения Git введение Контроль версий Локальная система контроля версий 2. Централизованная система контроля версий 3. Распределенная система контроля версий Git основн…

Оператор If-Else Python в одной строке — объяснение тернарного оператора

Однострочные условные операторы в Python? Вот когда их использовать, а когда НЕ использовать.

Python — не самый быстрый язык программирования, но, черт возьми, он удобочитаем и эффективен для написания. Все знают, что такое условные операторы, но знаете ли вы, что вы можете написать , если операторов в одной строке кода Python? Как оказалось, вы можете, и вы узнаете все об этом сегодня.

После прочтения вы узнаете все об операторах Python If Else в одной строке. Вы поймете, когда их использовать, а когда лучше избегать их и придерживаться обычных условных операторов.

Не хотите читать? Вместо этого посмотрите мое видео:

Хотите стать специалистом по данным? Может помочь ведение блога по науке о данных:

Может ли блог о науке о данных действительно помочь вам нанять специалиста по данным?

Внимание, спойлер — да, блог о науке о данных действительно может помочь вам получить работу в отрасли. Помните об этих уловах, прежде чем начать.

Better Data ScienceДарио Радечич


Абсолютно ничего. Разделение условных операторов на несколько строк кода было традицией на протяжении веков. Большинство языков программирования требуют использования фигурных скобок и, следовательно, единственной строки 9.0007, если операторы не являются опцией. Другие языки позволяют записывать только простые условные операторы в одну строку.

А еще есть Python. Прежде чем углубиться в операторы If Else в одной строке, давайте сначала сделаем краткий обзор обычных условных выражений.

Например, вы можете проверить истинность условия, используя следующий синтаксис:

 age = 16
если возраст < 18:
    print('Go home.') 

Переменная age в данном случае меньше 18, поэтому Go home. выводится на консоль. Вы можете оживить ситуацию, добавив условие else , которое оценивается, если первое условие равно False :

 age = 19
если возраст < 18:
    print('Иди домой.')
еще:
    print('Добро пожаловать!') 

На этот раз age больше 18, поэтому Добро пожаловать! выводится на консоль. Наконец, вы можете добавить одно или несколько условий elif . Они используются для захвата промежуточных случаев. Например, вы можете напечатать что-то совершенно другое, если возраст от 16 (включительно) до 18 (исключено):

 возраст = 17
если возраст < 16:
    print('Иди домой.')
Элиф 16 <= возраст < 18:
    print('Не уверен...')
еще:
    print('Добро пожаловать!') 

Переменная age равна 17, что означает, что условие под elif равно True , следовательно, Not sure. .. выводится на консоль.

Довольно простой материал, поэтому мы, естественно, не хотим тратить столько строк кода на его написание. Как оказалось, вы можете использовать тернарный оператор в Python для оценки условий в одной строке.

Тернарный оператор в Python

Тернарный оператор существует в некоторых языках программирования и позволяет сократить простой блок If-Else. Он принимает 3 или более операндов:

  1. Значение, если оно истинно — значение, которое возвращается, если условие оценивается как Истинно .
  2. Условие — логическое условие, которое должно быть выполнено, чтобы вернуть значение , если оно истинно .
  3. Значение, если ложь — значение, которое возвращается, если условие оценивается как Ложь .

В коде это будет выглядеть так:

 a if условие else b 

Вы даже можете написать логику else-if в тернарном операторе Python. В этом случае синтаксис немного меняется:

 a если условие1 else b если условие2 else c 

Должен признать, в таком написании это выглядит немного абстрактно. Вы увидите множество практических примеров, начиная со следующего раздела.

Однострочный оператор if просто означает, что вы удаляете новую строку и отступ. Вы по-прежнему пишете тот же код, с той лишь разницей, что он занимает одну строку вместо двух.

Примечание : Однострочный оператор if возможен только в том случае, если за условием следует одна строка кода. В любом другом случае оберните код, который будет выполняться, внутри функции.

Вот как преобразовать наш двухстрочный оператор if в однострочный условный оператор:

 возраст = 17
если age < 18: print('Go home.') 

Как и раньше, age меньше 18 лет, поэтому Go home. печатается.

Что делать, если вы хотите напечатать три строки вместо одной? Как было сказано ранее, лучше всего поместить код внутри функции:

 def print_stuff():
    print('Иди домой. ')
    Распечатать('.......')
    печать('Сейчас!')
    
возраст = 17
    
если возраст < 18 лет: print_stuff() 

Однострочные операторы if в Python довольно скучны. Реальное преимущество экономии времени и места происходит, когда вы добавляете иначе условие.

💡

Вы получите максимальную пользу от однострочных операторов if , если добавите одно или несколько условий else .

Теперь мы можем в полной мере использовать возможности тернарного оператора Python. Фрагмент кода ниже хранит Go home. в новую переменную результат если возраст меньше 18 или Добро пожаловать! иначе:

 возраст = 19
результат = 'Иди домой.' если возраст < 18 еще 'Добро пожаловать!'
печать(результат) 

Как вы уже догадались, Добро пожаловать! выводится на консоль, поскольку age имеет значение 19. Если вы хотите напечатать несколько строк или обработать более сложную логику, оберните все, что вы хотите выполнить, в функцию - как и раньше.

Теперь у вас есть четкое представление о том, как тернарный оператор работает с простым однострочным оператором if-else. Мы можем добавить сложности, добавив дополнительные условия к оператору.

Всегда будьте осторожны при написании нескольких условий в одной строке кода. Логика по-прежнему будет работать, если длина строки составляет 500 символов, но ее почти невозможно прочитать и поддерживать.

Вам должно хватить двух условий в одной строке, так как код по-прежнему легко читается. В следующем примере выводится Go home. , если возраст меньше 16 лет, Not Sure... , если возраст от 16 (включительно) до 18 (исключено), и Добро пожаловать в противном случае:

 возраст = 17
результат = 'Иди домой.' если возраст < 16, иначе «Не уверен...», если 16 <= возраст < 18, иначе «Добро пожаловать»
результат 

Вы увидите Не уверен. .. выведено на консоль, так как age установлен на 17. То, что раньше занимало шесть строк кода, теперь занимает только одну. Аккуратное улучшение, и код по-прежнему легко читать и поддерживать.

Что еще можно сделать с однострочными операторами if? Ну, много. Далее мы рассмотрим однострочные условные операторы для операций со списками.

Пример: однострочные условия для операций со списками

Применение некоторой логики к списку включает в себя применение логики к каждому элементу списка и, следовательно, повторение по всему списку. Прежде чем даже думать о реальном примере, давайте посмотрим, как вы можете написать условный оператор для каждого элемента списка в одной строке кода.

Как написать IF и FOR в одну строку

Вам нужно будет внести два изменения в тернарный оператор:

  • Заключить всю строку кода в квадратные скобки []
  • Добавить код итерации списка ( для элемента в массиве ) после последнего else

Вот как выглядит общий синтаксис:

 [a if условие else b для элемента в массиве] 

пример. Следующий фрагмент кода выводит + , если текущий номер диапазона больше 5, и - в противном случае. Числа варьируются от 1 до 10 (включительно):

 ['+', если i > 5, иначе '-' для i в диапазоне (1, 11)] 
Изображение 1 - If и For в одной строке в Python (изображение автор)

Давайте теперь рассмотрим дополнительный пример из реальной жизни.

Пример: Ученик сдал экзамен?

Для начала объявим список студентов. Каждый студент представляет собой объект словаря Python с двумя ключами: имя и результат теста:

 учащихся = [
    {'имя': 'Боб', 'счет': 42},
    {'имя': 'Келли', 'оценка': 58},
    {'имя': 'Остин', 'оценка': 99},
    {'имя': 'Кайл', 'счет': 31}
] 

Мы хотим вывести, что студент сдал экзамен, если он набрал 50 баллов и выше. Если оценка была ниже 50 баллов, мы хотим вывести, что студент провалил экзамен.

В традиционном синтаксисе Python мы вручную перебираем каждого ученика в списке и проверяем, превышает ли его оценка 50:

 результатов = []
для студента в студентах:
    если студент['оценка'] > 50:
        results. append(f"{студент['имя']} сдал экзамен!")
    еще:
        results.append(f"{студент['имя']} не сдал экзамен!")
        
print(outcomes) 
Изображение 2. Итерация списка с традиционным синтаксисом Python (изображение автора)

Код работает, но нам нужно 5 строк, чтобы сделать простую проверку и сохранить результаты. Вы можете использовать свои новые знания, чтобы сократить объем кода до одной строки:

 результатов = [f"{студент['имя']} сдал экзамен!" if student['score'] > 50 else f"{student['name']} не сдал экзамен!" для студента в студентах]
print(outcomes) 
Изображение 3 — Однострочное условное выражение и цикл с Python (изображение автора)

Результаты идентичны, но у нас гораздо более короткий и аккуратный код. Это просто на грани нечитаемости, что часто является компромиссом с тернарными операторами и однострочными циклами. Часто у вас не может быть одновременно и читаемого кода, и коротких скриптов Python.

💡

То, что вы можете написать условие в одной строке, не означает, что вы должны это делать. Читабельность является приоритетом.

Давайте посмотрим, в каких случаях лучше использовать традиционные операторы , если .

Будьте осторожны с однострочными условиями

Заключение

Тот факт, что код занимает меньше места по вертикали, не означает, что его легче читать. Теперь вы увидите прекрасный пример этого утверждения.

В приведенном ниже фрагменте проверяется условие для каждой возможной степени (1-5) с конечной иначе условие захвата недопустимого ввода. Для написания условий требуется 12 строк кода, но весь фрагмент чрезвычайно удобочитаем:

 оценка = 1
если класс == 1:
    print('Оценка = 1')
Элиф класс == 2:
    print('Оценка = 2')
Элиф класс == 3:
    print('Оценка = 3')
Элиф класс == 4:
    print('Оценка = 4')
Элиф класс == 5:
    print('Оценка = 5')
еще:
    print('Impossible Grade!') 

Как и ожидалось, вы увидите Grade = 1 , напечатанное на консоли, но это не то, что нас интересует. Мы хотим перевести приведенный выше фрагмент в одну строку, если оператор -else с тернарным оператором.

Возможно, но конечный результат беспорядочный и нечитаемый:

 оценка = 1
результат = «Оценка = 1», если оценка == 1, иначе «Оценка = 2», если оценка == 2, иначе «Оценка = 3», если оценка == 3, иначе «Оценка = 4», если оценка == 4, иначе «Оценка = 5». 'если оценка == 5 иначе 'Невозможная оценка'
print(outcome) 

Это пример крайнего случая, когда необходимо оценить несколько условий. Лучше придерживаться традиционных операторов , если , хотя они занимают больше места по вертикали.

Запомните пункт : тернарный оператор с более чем двумя условиями — это просто кошмар для написания и отладки.

Заключение

Вот и все, что вам нужно знать об однострочных операторах if-else в Python. Вы узнали все о тернарном операторе и о том, как писать условные операторы, начиная с одного , если , и заканчивая пятью промежуточными условиями.

Помните, что ваш код должен быть простым. Код, который легче читать и поддерживать, в конце концов лучше написан. То, что вы можете втиснуть все в одну строку, не означает, что вы должны это делать. Вы пожалеете об этом, как только вам нужно будет внести некоторые изменения.

Более понятный способ написания длинных условных выражений — использование структурного сопоставления с образцом — новая функция, представленная в Python 3.10. Он привносит любимый оператор switch в Python для дополнительной удобочитаемости и скорости разработки.

Ребята, что вы думаете об однострочных операторах if-else в Python? Используете ли вы их регулярно или перешли на структурное сопоставление с образцом? Дайте мне знать в разделе комментариев ниже.

Оставайтесь на связи

  • Подпишитесь на мою рассылку
  • Подпишитесь на YouTube
  • Подключиться к LinkedIn

Список для чтения

  • Экспорт и загрузка сред Anaconda для проектов по науке о данных
  • Установка Apache Easy Kafka с помощью Docker
  • MacBook M1 против M1 Pro для Data Science — новый чип радикально лучше?

Условные выражения в Python | note.

nkmk.me

В Python есть условные выражения (иногда называемые «тернарными операторами»). Вы можете написать операцию вроде если оператор в одну строку с условными выражениями.

  • 6. Выражения — Документация по Python 3.9.0

В этой статье описывается следующее содержимое.

  • Основы условных выражений
  • if... elif... else... условными выражениями
  • Понимание списков и условные выражения
  • Лямбда-выражения и условные выражения

9 см. в следующей статье0007, если оператор .

  • оператор if в Python (if, elif, else)

Основы условных выражений

В Python условное выражение записывается следующим образом.

 X если условие еще Y
 

Сначала оценивается условие . Если условие равно True , вычисляется X и возвращается его значение, а если условие равно False , оценивается Y и возвращается его значение.

Если вы хотите переключить значение по условию, просто опишите каждое значение как оно есть.

 а = 1
результат = 'четный', если % 2 == 0 иначе 'нечетный'
печать (результат)
# странный
а = 2
результат = 'четный', если % 2 == 0 иначе 'нечетный'
печать (результат)
# даже
 

источник: conditional_expressions.py

Если вы хотите переключить операцию по условиям, опишите каждое выражение.

 а = 1
результат = a * 2, если % 2 == 0 иначе a * 3
печать (результат)
№ 3
а = 2
результат = a * 2, если % 2 == 0 иначе a * 3
печать (результат)
№ 4
 

источник: conditional_expressions.py

Выражение, которое не возвращает значение (выражение, возвращающее None ), также допустимо. Любое выражение оценивается и выполняется в зависимости от условия.

 а = 1
print('четный') if % 2 == 0 else print('нечетный')
# странный
 

источник: conditional_expressions.py

Приведенный выше пример эквивалентен следующему коду, написанному в операторе if .

 а = 1
если % 2 == 0:
    распечатать ('даже')
еще:
    печать ('нечетный')
# странный
 

источник: conditional_expressions.py

Вы также можете объединить несколько условных выражений с и и или .

  • Булевы операторы в Python (или нет)
 а = -2
результат = 'отрицательный и четный', если < 0 и % 2 == 0, иначе 'положительный или нечетный'
печать (результат)
# отрицательное и четное
а = -1
результат = 'отрицательный и четный', если < 0 и % 2 == 0, иначе 'положительный или нечетный'
печать (результат)
# положительный или нечетный
 

источник: conditional_expressions.py

if ... elif ... else ... с помощью условных выражений

Комбинируя условные выражения, вы можете написать операцию вида if ... elif ... else ... в одну строку.

 X, если условие1, иначе Y, если условие2, иначе Z
 

Однако его сложно понять, поэтому лучше не использовать его часто.

 а = 2
результат = «отрицательный», если a < 0, иначе «положительный», если a > 0, иначе «ноль»
печать (результат)
# положительный
а = 0
результат = «отрицательный», если a < 0, иначе «положительный», если a > 0, иначе «ноль»
печать (результат)
# нуль
а = -2
результат = «отрицательный», если a < 0, иначе «положительный», если a > 0, иначе «ноль»
печать (результат)
# минус
 

источник: conditional_expressions.py

Возможны следующие две интерпретации, но они обрабатываются как первая (1).

 1. X, если условие1 иначе (Y, если условие2 иначе Z)
2. (X, если условие1, иначе Y) если условие2, иначе Z
 

В приведенном ниже примере кода первое выражение считается вторым выражением, а не третьим.

 а = -2
результат = «отрицательный», если a < 0, иначе «положительный», если a > 0, иначе «ноль»
печать (результат)
# минус
результат = «отрицательный», если a < 0, иначе («положительный», если a > 0, иначе «ноль»)
печать (результат)
# минус
результат = («отрицательный», если a < 0, иначе «положительный»), если a > 0, иначе «ноль»
печать (результат)
# нуль
 

источник: conditional_expressions. py

Списковые включения и условные выражения

При использовании условных выражений в списковых включениях операция может быть применена к элементам списка по условию.

 l = ['четный', если i % 2 == 0 иначе i для i в диапазоне (10)]
печать (л)
# ['четный', 1, 'четный', 3, 'четный', 5, 'четный', 7, 'четный', 9]
 

источник: conditional_expressions.py

 l = [i * 10, если i % 2 == 0 иначе i для i в диапазоне (10)]
печать (л)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
 

источник: conditional_expressions.py

Дополнительные сведения о включении списков см. в следующей статье.

  • Списковые включения в Python

Лямбда-выражения и условные выражения

Условные выражения также полезны, когда вы хотите применить такую ​​операцию, как оператор if в лямбда-выражениях.

 get_odd_even = лямбда x: «четный», если x % 2 == 0 иначе «нечетный»
печать (get_odd_even (1))
# странный
печать (get_odd_even (2))
# даже
 

источник: conditional_expressions. py

В приведенном выше примере имя присвоено лямбда-выражению для удобства, но это не рекомендуется в PEP8.

Дополнительные сведения о лямбда-выражениях см. в следующей статье.

  • Лямбда-выражения в Python

Python If-Else в одной строке

В Python операторы if-else могут располагаться в одной строке.

Чтобы написать оператор if-else в одной строке, следуйте синтаксису условного выражения:

 some_expression if condition else other_expression 

Например:

 age = 20
# Однострочный оператор if-else
age_group = "Несовершеннолетний", если возраст < 18, иначе "Взрослый"
print(age_group) 

Это удобно с короткими операторами if-else, поскольку позволяет экономить строки кода, сохраняя качество кода.

Но не злоупотребляйте.

Преобразование более длинных операторов if-else в однострочники может сделать ваш код нечитаемым.

В этом руководстве вы узнаете, как превратить операторы if-else в однострочные выражения в Python. Что еще более важно, вы научитесь делать это с умом.

Если вам интересно узнать о других советах и ​​«хитростях» Python, не стесняйтесь читать эту статью.

Написание однострочного оператора if-else в Python возможно с использованием тернарного оператора, также известного как условное выражение.

Вот синтаксис однострочного тернарного оператора:

 некоторое_выражение if условие else другое_выражение 

Например, предположим, что у вас есть оператор if-else, который проверяет, является ли человек взрослым, основываясь на его возрасте:

 возраст = 20
если возраст < 18:
    age_group = "Несовершеннолетний"
еще:
    age_group = "Взрослый"
print(age_group) 

Вывод:

 Взрослый 

Это прекрасно работает. Но вы можете выполнить эту работу, написав оператор if-else в виде аккуратного однострочного выражения.

Например:

 возраст = 20
age_group = "Несовершеннолетний", если возраст < 18, иначе "Взрослый"
print(age_group) 

Вывод:

 Взрослый 

Как видите, вы смогли сохранить три строки кода без ущерба для читаемости кода.

Одна строка If-Elif-Else в Python

Умещать все в одну строку не рекомендуется. Что еще более важно, строка кода Python в целом не должна превышать 80 символов.

Вот почему Python не поддерживает операторы if-elif-else как однострочные выражения.

Если вы действительно хотите это сделать, вы можете связать тернарные условные операторы для достижения поведения if-elif-else:

 n = 10
a = 1, если n < 10, иначе 2, если n > 10, иначе 0 

Но, пожалуйста, не делайте этого. Как видно из вышеизложенного, это только делает код менее читаемым.

Гораздо чище записать приведенное выше выражение следующим образом:

 n = 10
если n < 10:
    а = 1
Элис п > 10:
    а = 2
еще:
    a = 0 

Некоторые люди вообще не используют однострочные операторы if-else. Это связано с тем, что ведутся споры о том, улучшает ли это качество кода или нет.

Будьте осторожны с If-Else в одной строке

Однострочные операторы if-else следует использовать только с простыми выражениями (идентификаторами, литералами и операторами). Их не следует использовать с более длинными заявления .

Это необходимо для сохранения удобочитаемости и выразительности кода. Так что подумайте дважды, прежде чем разбить ваш Python if-else на одну строку.

В предыдущем разделе вы уже видели плохой пример длинного однострочного оператора if-elif-else. Давайте также посмотрим на плохой пример однострочного оператора if-else.

Во-первых, давайте воспользуемся обычным подходом if-else:

 x = 1
если х% 2 == 0:
    результат = х * 2 + 10
еще:
    результат = х / 2 - 10 

Это выглядит ясно. Если x четное, умножьте его на 2 и прибавьте к нему 10. Если число нечетное, разделите его на 2 и вычтите 10.

Но давайте тогда посмотрим, что произойдет, если вы превратите его в однострочное выражение:

 результат = x * 2 + 10, если x % 2 = = 0 else x / 2 - 10 

Полный хаос. Никто не хочет читать такой код.

Это прекрасный пример того, как использование одной строки if-else может привести к беспорядку. Так что будь умницей!

Заключение

В Python операторы if-else можно превратить в однострочные выражения, используя тернарный оператор (условное выражение).

Использование тернарного условного оператора в Python имеет следующий синтаксис:

 некоторое_выражение if условие else другое_выражение 

Например, вы можете выполнить простую проверку возраста с помощью сокращенного оператора if-else:

 age = 12
age_group = "Minor", если возраст < 18, else "Adult" 

Использование однострочного оператора if-else имеет смысл, если оно улучшает качество кода.