If условие не вызывает ошибку

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

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

Операторы управления бывают следующих типов:

  1. Оператор-выражение if
  2. Оператор-выражение if-else
  3. Оператор-выражение if-elif-else
  4. Цикл while
  5. Цикл for
  6. Оператор-выражение break
  7. Оператор-выражение continue

В этом уроке речь пойдет о первых трех операторах управления.

Синтаксис оператора if следующий:

if condition:
    <indented statement 1>
    <indented statement 2>

<non-indented statement>

Первая строчка оператора, то есть if condition: — это условие if, а condition — это логическое выражение, которое возвращает True или False. В следующей строке блок инструкций. Блок представляет собой одну или больше инструкций. Если он идет следом за условием if, такой блок называют блоком if.

Стоит обратить внимание, что у каждой инструкции в блоке if одинаковый отступ от слова if. Многие языки, такие как C, C++, Java и PHP, используют фигурные скобки ({}), чтобы определять начало и конец блока, но в Python используются отступы.

Каждая инструкция должна содержать одинаковое количество пробелов. В противном случае программа вернет синтаксическую ошибку. В документации Python рекомендуется делать отступ на 4 пробела. Такая рекомендация актуальная для и для этого .

Как это работает:

Когда выполняется инструкция if, проверяется условие. Если условие истинно, тогда все инструкции в блоке if выполняются. Но если условие оказывается неверным, тогда все инструкции внутри этого блока пропускаются.

Инструкции следом за условием if, у которых нет отступов, не относятся к блоку if. Например, — это не часть блока if, поэтому она будет выполнена в любом случае.

Например:

number = int(input("Введите число: "))

if number > 10:
    print("Число больше 10")

Первый вывод:

Введите число: 100
Число больше 10

Второй вывод:

Введите число: 5

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

Рассмотрим следующий код:

number = int(input("Введите число: "))
if number > 10:
    print("первая строка")
    print("вторая строка")
    print("третья строка")

print("Выполняется каждый раз, когда вы запускаете программу")
print("Конец")

Первый вывод:

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

Второй вывод:

Введите число: 4
Выполняется каждый раз, когда вы запускаете программу
Конец

Здесь важно обратить внимание, что только выражения на строках 3, 4 и 5 относятся к блоку if. Следовательно, они будут исполнены только в том случае, когда условие if будет истинно. Но инструкции на строках 7 и 8 выполнятся в любом случае.

Консоль Python реагирует иначе при использовании операторов управления прямо в ней. Стоит напомнить, что для разбития выражения на несколько строк используется оператор продолжение (). Но в этом нет необходимости с операторами управления. Интерпретатор Python автоматически активирует мультистрочный режим, если нажать Enter после условия if. Например:

>>>
>>> n = 100
>>> if n > 10:
...

После нажатия Enter на строке с условием if командная строка преобразуется с >>> на . Консоль Python показывает для многострочных инструкций. Это значит, что начатая инструкция все еще не закончена.

Чтобы закончить инструкцию if, нужно добавить еще одну инструкцию в блок if:

>>>
>>> n = 100
>>> if n > 10:
...     print("n v 10")
...

Python не будет автоматически добавлять отступ. Это нужно сделать самостоятельно. Закончив ввод инструкции, нужно дважды нажать Enter, чтобы исполнить инструкцию. После этого консоль вернется к изначальному состоянию.

>>>
>>> n = 100
>>> if n > 10:
...     print("n больше чем 10")
...
n больше чем 10
>>>

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

Оператор if-else

Оператор if-else исполняет одну порцию инструкций, если условие истинно и другое — если нет. Таким образом этот оператор предлагает два направления действий. Синтаксис оператора if-else следующий:

if  condition:
    # блок if
    statement 1
    statement 2
    and so on
else:
    # блок else
    statement 3
    statement 4
    and so on:

Как это работает:

Когда оператор if-else исполняется, условие проверяется, и если оно возвращает True, когда инструкции в блоке if исполняются. Но если возвращается False, тогда исполняются инструкции из блока else.

Пример 1: программа для расчета площади и длины окружности круга.

radius = int(input("Введите радиус: "))

if radius >= 0:
    print("Длина окружности = ",  2  *  3.14  *  radius)
    print("Площадь = ", 3.14 * radius ** 2)
else:
    print("Пожалуйста, введите положительное число")

Первый вывод:

Введите радиус: 4
Длина окружности = 25.12
Площадь = 50.24

Второй вывод:

Введите радиус: -12
Пожалуйста, введите положительное число

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

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

radius = int(input("Введите радиус: "))

if radius >= 0:
    print("Длина окружности = ",  2  *  3.14  *  radius)
    print("Площадь = ", 3.14 * radius ** 2)

    else:
        print("Пожалуйста, введите положительное число")

Если попробовать запустить эту программу, то появится следующая ошибка:

$ python3 if_and_else_not_aligned.py
  File "if_and_else_not_aligned.py", line 6
    else:
       ^
SyntaxError: invalid syntax
$

Для исправления проблемы нужно вертикально выровнять if и else

Другой пример:

Пример 2: программа для проверки пароля, введенного пользователем.

password = input("Введите пароль: ")
if password == "sshh":
    print("Добро пожаловать")
else:
    print("Доступ запрещен")

Первый вывод:

Введите пароль: sshh
Добро пожаловать

Второй вывод:

Введите пароль: abc
Доступ запрещен

Вложенные операторы if и if-else

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

Оператор if внутри другого if-оператора

Пример 1: программа, проверяющая, имеет ли студент право на кредит.

gre_score = int(input("Введите текущий лимит: "))
per_grad = int(input("Введите кредитный рейтинг: "))

if per_grad > 70:
    # внешний блок if
        if gre_score > 150:
            # внутренний блок if
	    print("Поздравляем, вам выдан кредит")
else:
    print("Извините, вы не имеете права на кредит")

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

Как это работает:

Сначала оценивается внешнее условие if, то есть per_grad > 70. Если оно возвращает True, тогда управление программой происходит внутри внешнего блока if. Там же проверяется условие gre_score > 150. Если оно возвращает True, тогда в консоль выводится "Congratulations you are eligible for loan". Если False, тогда программа выходит из инструкции if-else, чтобы исполнить следующие операции. Ничего при этом не выводится в консоль.

При этом если внешнее условие возвращает False, тогда выполнение инструкций внутри блока if пропускается, и контроль переходит к блоку else (9 строчка).

Первый вывод:

Введите текущий лимит: 160
Введите кредитный рейтинг: 75
Поздравляем, вам выдан кредит

Второй вывод:

Введите текущий лимит: 160
Введите кредитный рейтинг: 60
Извините, вы не имеете права на кредит

У этой программы есть одна маленькая проблема. Запустите ее заново и введите gre_score меньше чем 150, а per_grade — больше 70:

Вывод:

Введите текущий лимит: 140
Введите кредитный рейтинг: 80

Программа не выводит ничего. Причина в том, что у вложенного оператора if нет условия else. Добавим его в следующем примере.

Пример 2: инструкция if-else внутри другого оператора if.

gre_score = int(input("Введите текущий лимит: "))
per_grad = int(input("Введите кредитный рейтинг: "))

if per_grad > 70:
    if gre_score > 150:
        print("Поздравляем, вам выдан кредит")
    else:
        print("У вас низкий кредитный лимит")
else:
    print("Извините, вы не имеете права на кредит")

Вывод:

Введите текущий лимит: 140
Введите кредитный рейтинг: 80
У вас низкий кредитный лимит

Как это работает:

Эта программа работает та же, как и предыдущая. Единственное отличие — у вложенного оператора if теперь есть инструкция else. Теперь если ввести балл GRE меньше, чем 150, программа выведет: “У вас низкий кредитный лимит”

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

Оператор if-else внутри условия else

Пример 3: программа для определения оценки студента на основе введенных баллов.

score = int(input("Введите вашу оценку: "))

if score >= 90:
    print("Отлично! Ваша оценка А")
else:
    if score >= 80:
	print("Здорово! Ваша оценка - B")
    else:
	if score >= 70:
	    print("Хорошо! Ваша оценка - C")
	else:
	    if score >= 60:
		print("Ваша оценка - D. Стоит повторить материал.")
	    else:
		print("Вы не сдали экзамен")

Первый вывод:

Введите вашу оценку: 92
Отлично! Ваша оценка А

Второй вывод:

Введите вашу оценку: 72
Хорошо! Ваша оценка - C

Третий вывод:

Введите вашу оценку: 56
Вы не сдали экзамен

Как это работает:

Когда управление программой переходит к оператору if-else, проверяется условие на строке 3 (score >= 90). Если оно возвращает True, в консоль выводится “Отлично! Ваша оценка А”. Если значение неверное, управление переходит к условию else на 5 строке. Теперь проверяется условие score >= 80 (6 строка). Если оно верное, тогда в консоли выводится “Здорово! Ваша оценка — B”.

В противном случае управление программой переходит к условию else на 8 строке. И здесь снова имеется вложенный оператор if-else. Проверяется условие (score >= 70). Если оно истинно, тогда в консоль выводится “Хорошо! Ваша оценка — C”. В противном случае управление переходит к блоку else на 11 строке. В конце концов, проверяется условие (score >= 60). Если оно возвращает True, тогда в консоль выводится “Ваша оценка — D. Стоит повторить материал.” Если же False, тогда в консоли будет “Вы не сдали экзамен”. На этом этапе управление переходит к следующим инструкциям, написанным после внешнего if-else.

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

Оператор if-elif-else

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

if condition_1:
    # блок if
    statement
    statement
    more statement
elif condition_2:
    # первый блок elif
    statement
    statement
    more statement
elif condition_3:
    # второй блок elif
    statement
    statement
    more statement

...

else
    statement
    statement
    more statement

Примечание: означает, что можно писать сколько угодно условий eilf.

Как это работает:

Когда исполняется инструкция if-elif-else, в первую очередь проверяется condition_1. Если условие истинно, тогда исполняется блок инструкций if. Следующие условия и инструкции пропускаются, и управление переходит к операторам вне if-elif-else.

Если condition_1 оказывается ложным, тогда управление переходит к следующему условию elif, и проверяется condition_2. Если оно истинно, тогда исполняются инструкции внутри первого блока elif. Последующие инструкции внутри этого блока пропускаются.

Этот процесс повторяется, пока не находится условие elif, которое оказывается истинным. Если такого нет, тогда исполняется блок else в самом конце.

Перепишем программу с помощью if-elif-else.

score = int(input("Введите вашу оценку: "))

if score >= 90:
    print("Отлично! Ваша оценка А")
elif score >= 80:
    print("Здорово! Ваша оценка - B")
elif score >= 70:
    print("Хорошо! Ваша оценка - C")
elif score >= 60:
    print("Ваша оценка - D. Стоит повторить материал.")
else:
    print("Вы не сдали экзамен")

Первый вывод:

Введите вашу оценку: 78
Хорошо! Ваша оценка - C

Второй вывод:

Введите вашу оценку: 91
Отлично! Ваша оценка А

Третий вывод:

Введите вашу оценку: 55
Вы не сдали экзамен

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

Условные операторы Python IF, ELSE, ELIF

От автора: условный оператор в Python выполняет различные вычисления или действия в зависимости от того, оценивает ли конкретное логическое ограничение как true или false. Условные операторы обрабатываются в Python операторами IF.

В этом руководстве мы рассмотрим, как в Python применять условные операторы.

Что такое оператор if? Как его использовать?

Что происходит, когда «условие if» не выполняется

Как использовать «условие else»

Профессия Python-разработчик

Освойте наиболее востребованную IT профессию

На Python пишут веб-приложения и нейросети, проводят научные вычисления и автоматизируют процессы. Язык
просто выучить, даже если вы никогда не программировали. На курсе вы создадите Telegram-бота,
полноценный магазин и аналог популярной соцсети для портфолио, а Центр карьеры поможет найти работу
Python-разработчиком.

Узнать подробнее

Командная стажировка под руководством тимлида

80 000 рублей зарплата начинающего Python-разработчика

3 проекта в портфолио для старта карьеры

Когда «условие else» не работает

Как использовать условие «elif»

Как выполнить условный оператор с помощью минимального кода

Вложенное выражение if

Оператор Switch

Что такое оператор if? Как его использовать?

В Python оператор if используется для принятия решений. Он будет выполнять тело кода только тогда, когда условие if выполняется. Если вы хотите задать одно условие, в то время как противоположное условие не выполняется, вы используете выражение «if». Синтаксис:

if expression

Statement

else

Statement

Давайте рассмотрим пример:

#

#Пример файла для работы с условными операторами

#

def main():

    x,y =2,8

    if(x < y):

        st= «x is less than y»

    print(st)

if __name__ == «__main__»:

    main()

Строка кода 5: мы определяем две переменные x, y = 2, 8

Строка кода 7: оператор if проверяет условие x

Строка кода 8: для переменной st установлено «x is less than y».

Строка кода 9: строка print st выведет значение переменной st, которое равно «x is less than y»

Что происходит, когда «условие if» не выполняется

В этом разделе мы рассмотрим, что происходит, когда «условие if» не выполняется.

Строка кода 5: мы определяем две переменные x, y = 8, 4

Строка кода 7: Оператор if проверяет условие x

Строка кода 8: для переменной st НЕ установлено «x is less than y»

Строка кода 9: print st — пытается вывести значение переменной, которая никогда не была объявлена. Следовательно, мы получаем ошибку.

Как использовать «условие else»

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

Строка кода 5: мы определяем две переменные x, y = 8, 4

Строка кода 7: Оператор if проверяет условие x

Строка кода 8: для переменной st НЕ установлено «x is less than y»

Строка кода 9: print st — пытается вывести значение переменной, которая никогда не была объявлена. Следовательно, мы получаем ошибку.

Как использовать «условие else»

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

#

# Пример файла для работы с условными операторами

#

def main():

    x,y =8,4

    if(x < y):

        st= «x is less than y»

    else:

        st= «x is greater than y»

    print (st)

if __name__ == «__main__»:

    main()

Строка кода 5: мы определяем две переменные x, y = 8, 4

Строка кода 7: Оператор if проверяет условие x

Строка кода 9: поток управления программой переходит к другому оператору

Строка кода 10: для переменной st установлено «x is greater than y»

Строка кода 11: print st выведет значение переменной st, которое равно «x is greater than y»

Когда «условие else» не работает

Может быть много случаев, когда «условие» не даст желаемого результата. Оно выведет неверный результат, поскольку в логике программы есть ошибки. В большинстве случаев это происходит, когда вам нужно оценить в программе более двух утверждений или условий. Пример поможет вам лучше понять эту концепцию.

Здесь обе переменные одинаковы (8,8) и вывод программы «x is greater than y» НЕВЕРЕН. Это связано с тем, что она проверяет первое условие (условие if), а если оно не выполняется, то по умолчанию выводит второе условие (условие else). В следующем разделе мы рассмотрим, как можно исправить эту ошибку.

#

# Пример файла для работы с условными операторами

#

def main():

    x,y =8,8

    if(x < y):

        st= «x is less than y»

    else:

        st= «x is greater than y»

    print(st)

if __name__ == «__main__»:

    main()

Как использовать условие «elif»

Чтобы исправить предыдущую ошибку, допущенную условием else, мы можем использовать выражение «elif». С помощью условия «elif», вы указываете программе вывести третий вариант, когда другое условие становится неверным.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#

#Пример файла для работы с условными операторами

#

def main():

    x,y =8,8

    if(x < y):

        st= «x is less than y»

    elif (x == y):

        st= «x is same as y»

    else:

        st=«x is greater than y»

    print(st)

if __name__ == «__main__»:

    main()

Строка кода 5: мы определяем две переменные x, y = 8, 8

Строка кода 7: Оператор if проверяет условие x

Строка кода 10: поток управления программой переходит к другому оператору. Проверяется, верно ли x==y

Строка кода 11: для переменной st установлено «x is same as y»

Строка кода 15: поток управления программой выходит из оператора if (он не переходит к оператору else) и выводится переменная st. Вывод «x is same as y»

Как выполнить условный оператор с помощью минимального кода

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

def main():

    x,y = 10,8

    st = «x is less than y» if (x < y) else «x is greater than or equal to y»

    print(st)

if __name__ == «__main__»:

    main()

Строка кода 2: мы определяем две переменные x, y = 10, 8

Строка кода 3: для переменной st устанавливается «x is less than y», если xy, и для переменной st установлено «x is greater than or equal to y»

Строка кода 4: выводит значение st

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

Вложенное выражение if

Следующий пример демонстрирует вложенный оператор if.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

total = 100

#country = «US»

country = «AU»

if country == «US»:

    if total <= 50:

        print(«Shipping Cost is  $50»)

elif total <= 100:

    print(«Shipping Cost is $25»)

elif total <= 150:

    print(«Shipping Costs $5»)

else:

    print(«FREE»)

if country == «AU»:

    if total <= 50:

        print(«Shipping Cost is  $100»)

else:

    print(«FREE»)

Раскомментируйте строку 2 в приведенном выше коде, закомментируйте строку 3 и снова запустите код.

Оператор switch

Что такое оператор switch? Оператор switch — это многопоточный оператор, который сравнивает значение переменной со значениями, указанными в операторах case. В языке Python нет оператора switch. Для реализации оператора switch Python использует сопоставление словаря.

function(argument){

    switch(argument) {

        case 0:

            return «This is Case Zero»;

        case 1:

            return » This is Case One»;

        case 2:

            return » This is Case Two «;

        default:

            return «nothing»;

    };

};

Альтернатива Python для приведенного выше оператора switch:

def SwitchExample(argument):

    switcher = {

        0: » This is Case Zero «,

        1: » This is Case One «,

        2: » This is Case Two «,

    }

    return switcher.get(argument, «nothing»)

if __name__ == «__main__»:

    argument = 1

    print (SwitchExample(argument))

Примеры Python 2

Приведенные выше коды являются примерами Python 3. Если вы хотите запустить Python 2, рассмотрите следующий код.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

#Оператор If

#Пример файла для работы с условными операторами

#

def main():

    x,y =2,8

    if(x < y):

        st= «x is less than y»

    print st

if __name__ == «__main__»:

    main()

# Как использовать «условие else»

# Пример файла для работы с условными операторами

#

def main():

    x,y =8,4

    if(x < y):

        st= «x is less than y»

    else:

        st= «x is greater than y»

    print st

if __name__ == «__main__»:

    main()

# Когда «условие else» не работает

# Пример файла для работы с условными операторами

#

def main():

    x,y =8,8

    if(x < y):

        st= «x is less than y»

    else:

        st= «x is greater than y»

    print st

if __name__ == «__main__»:

    main()

# Как использовать условие «elif»

# Пример файла для работы с условными операторами

#

def main():

    x,y =8,8

    if(x < y):

        st= «x is less than y»

    elif (x == y):

        st= «x is same as y»

    else:

        st=«x is greater than y»

    print st

if __name__ == «__main__»:

    main()

# Как выполнять условные операторы с помощью минимального кода

def main():

    x,y = 10,8

    st = «x is less than y» if (x < y) else «x is greater than or equal to y»

    print st

if __name__ == «__main__»:

    main()

# Вложенный оператор IF

total = 100

#country = «US»

country = «AU»

if country == «US»:

    if total <= 50:

        print «Shipping Cost is  $50»

elif total <= 100:

    print «Shipping Cost is $25»

elif total <= 150:

    print «Shipping Costs $5»

else:

    print «FREE»

if country == «AU»:

    if total <= 50:

    print «Shipping Cost is  $100»

else:

    print «FREE»

#Оператор Switch

def SwitchExample(argument):

    switcher = {

        0: » This is Case Zero «,

        1: » This is Case One «,

        2: » This is Case Two «,

    }

    return switcher.get(argument, «nothing»)

if __name__ == «__main__»:

    argument = 1

    print SwitchExample(argument)

Заключение

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

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

«Условие else» — используется, когда вам нужно вывести результат, если ваше единственное условие не выполняется

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

Мы можем использовать минимальный код для выполнения условных операторов, объявив все условия в одном операторе

Оператор if может быть вложенным

Источник: //www.guru99.com

Профессия Python-разработчик

Освойте наиболее востребованную IT профессию

На Python пишут веб-приложения и нейросети, проводят научные вычисления и автоматизируют процессы. Язык
просто выучить, даже если вы никогда не программировали. На курсе вы создадите Telegram-бота,
полноценный магазин и аналог популярной соцсети для портфолио, а Центр карьеры поможет найти работу
Python-разработчиком.

Узнать подробнее

Командная стажировка под руководством тимлида

80 000 рублей зарплата начинающего Python-разработчика

3 проекта в портфолио для старта карьеры

Редакция: Команда webformyself.

Содержание:развернуть

  • Как работает if else
  • Синтаксис

  • Отступы

  • Примеры

  • Оператор elif
  • Заглушка pass
  • if else в одну строку
  • Вложенные условия
  • Конструкция switch case

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

Говоря простыми словами, конструкция if else в Python указывает интерпретатору, следует ли выполнять определенный участок кода или нет.

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

Как работает if else

Синтаксис

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

# самый простой пример, где есть всего одно условие
a = 1
if a == 1:
print("It is true")

> It is true

Синтаксически конструкция выглядит следующим образом:

  1. сначала записывается часть if с условным выражением, которое возвращает истину или ложь;
  2. затем может следовать одна или несколько необязательных частей elif (в других языках вы могли встречать else if);
  3. Завершается же запись этого составного оператора также необязательной частью else.

Принцип работы оператора выбора в Python
count = 1
# условное выражение может быть сколь угодно сложным,
# и может быть сколь угодно много elif-частей
if True and count == 1 and count == 2:
print("if")
elif count == 'count':
print("First elif")
elif count == 14.2:
print("Second elif")
elif count == 1:
print("Nth elif")
else:
print("Else")

> Nth elif

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

b = 10
if b == 10:
# любое количество инструкций
print(b)
b = b * 15
b = b - 43
b = b ** 0.5
print(b)
elif b == 20:
print("You will not see me")
else:
print("And me")

> 10
> 10.344080432788601

То есть интерпретатор начинает последовательное выполнение программы, доходит до if и вычисляет значение сопутствующего условного выражения. Если условие истинно, то выполняется связанный с if набор инструкций. После этого управление передается следующему участку кода, а все последующие части elif и часть else (если они присутствуют) опускаются.

Отступы

Отступы — важная и показательная часть языка Python. Их смысл интуитивно понятен, а определить их можно, как размер или ширину пустого пространства слева от начала программного кода.

# начало кода
# код
# код
# код
# начало первого отступа
# первый отступ
# первый отступ
# начало второго отступа
# второй отступ
# второй отступ
# конец второго отступа
# конец первого отступа

Благодаря отступам, python-интерпретатор определяет границы блоков. Все последовательно записанные инструкции, чье смещение вправо одинаково, принадлежат к одному и тому же блоку кода. Конец блока совпадает либо с концом всего файла, либо соответствует такой инструкции, которая предшествует следующей строке кода с меньшим отступом.

var_a = 5
var_b = 10
var_c = 20
if var_c**2 > var_a * var_b:
# блок №1
if var_c < 100:
# блок №2
if var_c > 10:
# блок №3
var_a = var_a * var_b * var_c
# блок №2
var_b = var_a + var_c
# блок №1
var_c = var_a - var_b
print(var_a)
print(var_b)
print(var_c)

> 1000
> 1020
> -20

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

Подробнее о табуляции и отступах в Python:

Примеры

Рассмотрим несколько практических примеров использования условного оператора.

Пример №1: создание ежедневного бэкапа (например базы данных):

from datetime import datetime

def daily_backup(last_backup_date):
"""
Передаем дату последнего бэкапа.
Если прошло больше 1 дня, создаем бэкап
"""
if not last_backup_date:
print(f"creating first backup [{datetime.now().date()}] ..")
return

delta = datetime.now() - last_backup_date
if delta.days > 0:
print(f"creating backup [{datetime.now().date()}] ..")
else:
print(f"backup on [{datetime.now().date()}] already exists")

daily_backup("")
> creating first backup [2020-08-15] ..

daily_backup(datetime(2020, 8, 14))
> creating backup [2020-08-15] ..

daily_backup(datetime(2020, 8, 15))
> backup on [2020-08-15] already exists

Пример №2: Проверка доступа пользователя к системе. В данном примере if проверяет наличие элемента в списке:

BLACK_LIST = ['192.34.12.3', '192.34.12.5', '192.34.10.23']
USERS = ['rolli34', 'constantinpetrovv', 'kate901']

def access_available(user_name, ip):
if user_name in USERS:
if ip not in BLACK_LIST:
return True
else:
print(f"write to log: user {user_name} [ip: {ip}] in block list")
else:
print(f"write to log: user {user_name} [ip: {ip}] does not exists")
return False

if access_available("rolli34", "192.34.12.111"):
print(f"Hello!!")
> Hello!!

if access_available("rolli34", "192.34.10.23"):
print(f"Hello!!")
> write to log: user rolli34 [ip: 192.34.10.23] in block list

if access_available("devnull", "192.34.10.11"):
print(f"Hello!!")
> write to log: user devnull [ip: 192.34.10.11] does not exists

Пример №3: Валидация входных данных. В примере к нам приходят данные в формате json. Нам необходимо выбрать все записи определенного формата:

NEED = {
"name": str,
"weight": int,
"age": int,
}

def is_valid(data):
valid = True
for need_key_name, need_type in NEED.items():
# проверяем наличие ключа
if need_key_name in data:
# если ключ есть, проверяем тип значения
data_type = type(data[need_key_name])
if data_type != need_type:
print(f"type error: '{need_key_name}' is {data_type}, need: {need_type}")
valid = False
else:
print(f"key error: '{need_key_name}' does not exists")
valid = False

return valid

if is_valid({"name": "Alex"}):
print("data is valid")
>
key error: 'weight' does not exists
key error: 'age' does not exists

if is_valid({"name": "Alex", "age": "18"}):
print("data is valid")
>
key error: 'weight' does not exists
type error: 'age' is <class 'str'>, need: <class 'int'>

if is_valid({"name": "Alex", "weight": 60, "age": 18}):
print("data is valid")
> data is valid

Оператор elif

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

shinobi = 'Naruto'
if shinobi == 'Orochimaru':
print('fushi tensei')
elif shinobi == 'Naruto':
print('RASENGAN')
elif shinobi == 'Sasuke':
print('chidori')

> RASENGAN

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

Но помните, что первое условие всегда задается с if

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

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

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

Заглушка pass

Оператор-заглушка pass заменяет собой отсутствие какой-либо операции.

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

Наличие тела инструкции в Python обязательно

sum = 100000
account_first = 12000
account_second = 360000

if account_first > sum:
pass
elif account_second > sum:
pass
else:
print(sum)

if else в одну строку

Во многих языках программирования условие может быть записано в одну строку. Например, в JavaScript используется тернарный оператор:

# так выглядит условие в одну строку в JavaScript
const accessAllowed = (age > 21) ? true : false;

Читается это выражение так: если age больше 21, accessAllowed равен true, иначе — accessAllowed равен false.

В Python отсутствует тернарный оператор

Вместо тернарного оператора, в Питоне используют инструкцию if else, записанную в виде выражения (в одно строку):

<expression if True> if <predicate> else <expression if False>

Пример:

number = -10
abs_number = number if number >= 0 else -number

print(abs_number)

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

Для простоты восприятия if-else, записанного одной строкой, разделите выражение на 3 блока

Стоит ли использовать такой синтаксис? Если пример простой, то однозначно да:

# полная версия
count = 3
if count < 100:
my_number = count
else:
my_number = 100

# сокращенная версия
count = 3
my_number = count if count < 100 else 100

Вполне читаемо смотрятся и следующие 2 примера:

x = "Kate" if "Alex" in "My name is Alex" else "Mary"
print(x)
> Kate

y = 43 if 42 in range(100) else 21
print(y)
> 43

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

x = 10
result = 100 if x > 42 else 42 if x == 42 else 0

print(result)
> 0

Вложенные условия

Ограничений для уровней вложенности в Python не предусмотрено, а регулируются они все теми же отступами:

# делать код менее читаемым можно до бесконечности
def run(action):
if action:
print(some_func())
else:
if some_func():
num = one_func()
if num:
if 0 < num < 100:
print(num)
else:
print('-')

Стоит ли использовать такие вложенности? Скорее нет, чем да. Одно из положений Python Zen гласит:

Flat is better than nested (развернутое лучше вложенного).

Большая вложенность имеет следующие недостатки:

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

Но что делать, если в скрипте не получается уйти от большой вложенности if-else? 🤷‍♂️

Чтобы уйти от большой вложенности, попробуйте не использовать оператор else

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

def run(action):
if action:
print(some_func())
return

if not some_func():
return

num = one_func()
if not num:
return

if 0 < num < 100:
print(num)
return

print('-')

Конструкция switch case

В Python отсутствует инструкция switch case

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

# пример на C++
int main() {
int n = 5;
# сравниваем значение n поочередно со значениями case-ов
switch (n) {
case 1:
cout << n;
break;
case 2:
cout << n;
break;
# так как 5 не равняется ни 1-у, ни 2-м, то выполняется блок default
default:
cout << "There is not your number";
break;
}
return 0;
}

> There is not your number

Свято место пусто не бывает, поэтому в питоне такое множественное ветвление, в обычном случае, выглядит как последовательность проверок if-elif:

n = 5
if n == 1:
print(n)
elif n == 2:
print(n)
else:
print("There is not your number")

> "There is not your number"

Однако есть и более экзотический вариант реализации этой конструкции, задействующий в основе своей python-словари:

switch_dict = {
1: 1,
2: 2,
3: 3,
}
print(switch_dict.get(5, "There is not your number"))

> "There is not your number"

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

На чтение 9 мин Просмотров 9.8к. Опубликовано 06.08.2021

Содержание

  1. Введение в тему
  2. Зачем нужны условные инструкции
  3. Как работает if else
  4. Синтаксис
  5. Отступы
  6. Примеры
  7. Оператор elif
  8. Заглушка pass
  9. if else в одну строку
  10. Конструкция switch case

Введение в тему

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

Зачем нужны условные инструкции

Сила и важность условных операторов в том, что большая часть логики описывается именно с их помощью. Они делают одну простую, но очень важную вещь: говорят интерпретатору Питона какую часть кода выполнять (какую не выполнять) в зависимости от какого-либо условия. Эти конструкции можно вкладывать друг в друга. Это называется логическим ветвлением. Однако, стоит проявлять особую осторожность с вложенностью: каждый новый уровень вложенности увеличивает сложность кода. Сложнее читать (понимать), выше вероятность допустить ошибку.

Как работает if else

Синтаксис

Условный оператор в Python следует широко распространённому в других языках программирования синтаксису: if else. Самый простой пример:


if True:
    print("Всё правильно")
# Вывод:

Всё правильно

Давайте рассмотрим, что же здесь произошло:
1. Сперва указывается if с которого начинается оператор.
2. После if указывается условие. Если значение истинно, то выполняется код, следующий в «теле» оператора. В данном случае мы, вместо условия, указали сразу True (истина).
3. Двоеточие после условия обязательно.
4. Тело оператора – инструкции, которые будут выполнены в случае истинности условия.
У этого оператора есть и расширенные возможности. Если вам нужно выполнить другой код, но только если условие ложно, используйте else:


if 1 == 2:
    print("Всё правильно")
else:
    print("Да нет же!")
# Вывод:

Да нет же!

В теле оператора может быть сколько угодно строк:


i = 0
if i == 0:
    print("Число равно нулю")
    print("И на него нельзя делить")
else:
    print("На такое число делить можно")
    print("Так как оно не равно нулю")
# Вывод:

Число равно нулю

И на него нельзя делить

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

Отступы

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


# начало кода
# код
# код
# код
    # первый блок кода
    # код
    # код
        # второй блок кода
        # код
        # код
        # конец второго блока
    # конец первого блока
# продолжение основного кода

Если отступы одинакового размера и следуют строка за строкой, интерпретатор языка идентифицирует их как единый программный блок.


# Начало основного потока
# выполнения программы
яблоки = 5
груши = 10
if яблоки < груши:
   # Входим в первый блок
   print('Яблок меньше чем груш')
   if груши > 7:
      # Входим во второй блок
      print('И груш больше семи')
      print('Варим компот из груш')
   else:
      # Входим в третий блок
      print('Но груш меньше семи')
      print('Варим компот из яблок и груш')
else:
   # Входим в четвёртый блок
   print('Груш меньше чем яблок')
   print('Варим компот из яблок')
# Вывод:

Яблок меньше чем груш

И груш больше семи

Варим компот из груш

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

Примеры

Давайте рассмотрим несколько примеров из реального, «боевого» кода:
Пример №1: класс для парсинга интернет-страниц:


# coding=utf-8
from pathlib import Path

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait


class ObjSel:

    def __init__(self):
        pass

    def __enter__(self):
        return self

    def init(self, adress, headless=True):
        options = Options()
        setattr(options, 'headless', headless)
        caps = DesiredCapabilities().FIREFOX
        caps["pageLoadStrategy"] = 'normal'  # Ждём полной загрузки страницы. Если не хотим ждать- > "eager"
        self.driver = webdriver.Firefox(capabilities=caps,
        firefox_options=options,
        executable_path=Path('geckodriver.exe'), )
        self.vars = {}
        self.driver.implicitly_wait(10)
        self.driver.get(adress)

    def web_manager(self, name, manager_type='element'):
        if name is None:
            print('Wrong name')
        if manager_type == 'element':
            if name.get('By.XPATH'):
                return self.driver.find_element(By.XPATH, name['By.XPATH'])
            elif name.get('By.CSS_SELECTOR'):
                return self.driver.find_element(By.CSS_SELECTOR, name['By.CSS_SELECTOR'])
        elif manager_type == 'clickable':
            if name.get('By.XPATH'):
                return WebDriverWait(self.driver, 3).until(
                ec.element_to_be_clickable((By.XPATH, name['By.XPATH'])))
            elif name.get('By.CSS_SELECTOR'):
                return WebDriverWait(self.driver, 3).until(
                ec.element_to_be_clickable((By.CSS_SELECTOR, name['By.CSS_SELECTOR'])))
        elif manager_type == 'elements':
            if name.get('By.XPATH'):
                return self.driver.find_elements(By.XPATH, name['By.XPATH'])
            elif name.get('By.CSS_SELECTOR'):
                return self.driver.find_elements(By.CSS_SELECTOR, name['By.CSS_SELECTOR'])

    def __exit__(self, exc_type, exc_val, exc_tb):
        if 'driver' in self.__dict__.keys():
            print("Удаление экземпляра Selenium")
            self.driver.quit()

Здесь Вы можете увидеть несколько примеров использования условных операторов.
Пример №2: ниже приведена функция модуля queue из стандартной библиотеки. Эта функция получает значение из очереди:


def get(self, block=True, timeout=None):

    with self.not_empty:
         if not block:
             if not self._qsize():
                 raise Empty
         elif timeout is None:
             while not self._qsize():
                 self.not_empty.wait()
         elif timeout < 0:
             raise ValueError("'timeout' must be a non-negative number")
         else:
             endtime = time() + timeout
             while not self._qsize():
                 remaining = endtime - time()
                 if remaining <= 0.0:
                     raise Empty
                 self.not_empty.wait(remaining)
         item = self._get()
         self.not_full.notify()
         return item

Оператор elif

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


i = 4
if i == 1:
    print("Один")
else:
    if i == 2:
        print("Два")
    else:
        if i == 3:
            print("Три")
        else:
            if i == 4:
                print("Четыре")
# Вывод:

Четыре

Но, такой код, как мы уже говорили, создаёт сложности в дальнейшем сопровождении из-за глубоких уровней вложенности. К счастью, Пайтон предоставляет более совершенный инструмент: elif. Перепишем предыдущий код:


i = 4
if i == 1:
    print("Один")
elif i == 2:
    print("Два")
elif i == 3:
    print("Три")
elif i == 4:
    print("Четыре")
# Вывод:

Четыре

Так получается нагляднее, не так ли?

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

Заглушка pass

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

Такой подход чаще всего используют при разработке на стадии прототипирования.


глаза = "голубые"
характер = "мягкий"
if глаза == "карие":
    print('Познакомлюсь')
elif глаза == "голубые":
    if характер == "мягкий":
        print('Женюсь!')
    else:
        pass
else:
    pass
# Вывод:

Женюсь!

if else в одну строку

В Python предусмотрена возможность записывать условный оператор в одну строку:


Что делать если Да if Условие else Что делать если Нет

Пример:


стакан = 1
print("Быть") if стакан / 2 >= 0.5 else print("Не быть")
# Вывод:

Быть

Но эту конструкцию стоит использовать только для простых условий и действий. Почему? Если её использовать для более сложных вещей, читаемость кода очень сильно падает. Как Вы думаете, что выведет следующий код:


x = 15
print(x // 7) if x % 3 >= 5 else print(x) if x % 4 < 2 else print(x * -1)
# Вывод:

?

Конструкция switch case

На момент написания этого урока, всё сообщество питонистов ждёт выход релиза Python 3.10. В этой версии, кроме прочего, появится, хорошо знакомое программистам из других языков, структурное сопоставление с шаблоном или switch/case. В Питоне же эта конструкция будет выглядеть как match/case. Сопоставление подразумевает определение при операторе match искомого значения, после которого можно перечислить несколько потенциальных кейсов, каждый с оператором case. В месте обнаружения совпадения между match и case выполняется соответствующий код. Пример из документации:


match x:

case host, port:

    mode = "http"

case host, port, mode:

    pass

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Условные конструкции

Основы Java

Условная конструкция if

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

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

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

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

public static String getTypeOfSentence(String sentence) {
    if (sentence.endsWith("?")) {
        return "question";
    }

    return "general";
}

App.getTypeOfSentence("Hodor");  // "general"
App.getTypeOfSentence("Hodor?"); // "question"

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

Если условие не выполняется, то блок кода в фигурных скобках пропускается, и метод продолжает свое выполнение дальше. В нашем случае следующая строчка кода — return "general"; — заставит метод вернуть строку и завершиться.

Конструкция if-else

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

if (x > 5) {
    // Если условие true
} else {
    // Если условие false
}

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

// Здесь приходит email

if (email.equals("")) { // Если email пустой, то ставим дефолт
    email = "support@hexlet.io";
} else { // Иначе выполняем нормализацию
    email = email.trim().toLowerCase();
}

// Здесь используем эту почту

Если ветка if содержит return, то else становится не нужен — его можно просто опустить:

if (/* условие */) {
    return /* какое-то значение */;
}

// Продолжаем что-то делать, потому что else не нужен

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

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

if (/* что-то */) {

} else if (/* другая проверка */) {

} else if (/* другая проверка */) {

} else {

}

Здесь стоит обратить внимание на два момента:

  • Ветка else может отсутствовать
  • Количество else if условий может быть любым

Напишем для примера расширенный метод определяющий тип предложения. Он распознает три вида предложений:

App.getTypeOfSentence("Who?"); // "Sentence is question"
App.getTypeOfSentence("No");   // "Sentence is general"
App.getTypeOfSentence("No!");  // "Sentence is exclamation"

public static String getTypeOfSentence(String sentence)
{
    var sentenceType = "";

    if (sentence.endsWith("?")) {
        sentenceType = "question";
    } else if (sentence.endsWith("!")) {
        sentenceType = "exclamation";
    } else {
        sentenceType = "general";
    }

    return "Sentence is " + sentenceType;
}

Теперь все условия выстроены в единую конструкцию. Оператор else if — это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:

  • Если последний символ ?, то «question»
  • Иначе, если последний символ !, то «exclamation»
  • Иначе «general»

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

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

Посмотрите на определение метода, который возвращает модуль переданного числа:

// Если больше нуля, то выдаем само число. Если меньше, то убираем знак
public static int abs(int number) {
    if (number >= 0) {
        return number;
    }

    return -number;
}

App.abs(10);  // 10
App.abs(-10); // 10

В Java существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор.

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

public static int abs(int number) {
    return number >= 0 ? number : -number;
}

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

<predicate> ? <expression on true> : <expression on false>

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

  1. Если условие истинно, выполняет вариант до двоеточия
  2. Если условие ложно, выполняет вариант после двоеточия

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Вызови функцию: math(5, «+», 3). В консоль выведется 8.

А теперь вызови: math(5, «-«, 3). В консоль выведется 2.

Функция math принимает 3 параметра: a, b, как и раньше, но между ними добавился operation. В зависимости от значения operation функция либо сложит a + b, либо вычтет a — b.

Условная конструкция начинается со слова if (если).

Условие пишется в круглых скобках. Условие отвечает на вопрос «‎да»‎ или «‎нет» (истина или ложь).

Если ответ «‎да» (истина), то выполняется первый сценарий в фигурных скобках. А если «‎нет» (ложь), то пропускаем этот блок.

Обрати внимание, чтобы передать оператор в параметр, его необходимо писать, как строку, в кавычках «-«. JS не поймёт, почему мы используем оператор вне математического выражения, и выдаст ошибку.

Итак, в функции выше у нас написано:

Условия в php имеют ключевое слово if. И логические операторы OR или ||, AND или &&.

Конструкция условия if следующая:

if (условие) тогда действие;

Рассмотрим пример использования or and в операторе if

<?php
$x = 1;
if (isset($x)) echo «переменная x существует»;

////////////////////////////////////////////////

if (isset($x) && $x == 1 ) echo «<br>x = 1»;

////////////////////////////////////////////////

$x = $x+1;
if (isset($x) and $x == 2 ) echo «<br>x = 2»;

////////////////////////////////////////////////

$x++;
if (isset($x) and $x == 3 && $x != 0) echo «<br>x = 3 and x != 0»;
?>

Итак, мы видим, что в первом случае, есть только одно условие if (isset($x)), другими словами: если переменная $x существует, тогда выводится сообщение echo «переменная x существует»;

Второе условие более сложнее: if (isset($x) && $x == 1 ) — если переменная существует и равна 1, тогда выводим echo «<br>x = 1»; <br> — это перевод строки.

Логический оператор AND выполняет условие только в том случае, если все условия истинные. Если хотя бы одно условие ложно, то все условие ложно. Вот почему оператор AND иногда сравнивается с математическим умножением. 451*6845*655*0 = 0. Какие бы не были числа, но если в выражении есть ноль, то все выражение нулевое.

Третье условие аналогично второму, только вместо логического оператора && используем оператор and. Этим я хотел показать, что логические операторы && и and имеют тот же смысл.

Четвертое условие показывает сложные условия, которые вы можете использовать в своих программах.

$x = $x+1;
$x++;

Две строки выше имеют один и тот же смысл. Они увеличивают переменную на единицу.

Результат работы данного кода будет следующим:

результат работы

Логический оператор OR отличается от оператора AND тем, что если в условии есть хоть одно истинное условие, то все условие истинно. Вот почему оператор OR иногда сравнивается с математическим сложением. 0+0+0+1 = 1. Если в выражении много нулей, но есть хотя бы одна единица, то все выражение ненулевое.

Пример:

<?php

$x = 1;
$y = 5;

if ($x == 1 or $y ==2) echo «x = 1 or y = 2 хотя на самом деле x = $x,а y = $y»;

if ($x == 1 || $y ==2) echo «<br>x = 1 or y = 2 хотя на самом деле x = $x,а y = $y»;

?>

Мы видим, что на самом деле выполняется только одно условие, второе условие ложно, но благодаря оператору OR все выражение истинно. Также мы видим, что операторы OR и || идентичны.

Результат работы данного кода будет следующим:

результат работы

life-prog.ru

Первый пример

Давайте сразу перейдем к первому примеру.

class User {
  public function fullname() {
   if($this->first_name && $this->last_name) {
    return $this->first_name.' '.$this->last_name;
   }

   return null;
  }
}

Здесь у нас есть класс User, где мы написали метод, который проверяет, существуют ли имя и фамилия, и, если да, то возвращает их. Если же условие не выполняется, то возвращается null.

Давайте перепишем этот код следующим образом:

class User {
  public function fullname() {
   if(!$this->first_name || !$this->last_name) {
    return null;
   }

   // 2-е условие
   // 3-е условие
   // 4-е условие

   return $this->first_name.' '.$this->last_name;
  }
}

Теперь мы проверяем имя и фамилию на отсутствие значений и возвращаем null, если условие выполняется. Если же условия не выполняются, возвращаем наше значение имени и фамилии.

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

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

Второй пример

Давайте перейдем к более сложному примеру: рассмотрим конструкцию if-else.

if() {
  if() {
   if() {

   }
  }
} else {

}

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

if(isset($_POST['file'])) {
  if(in_array($file_extension, $allowed_file_extensions)) {
   // загружаем файл
  } else {
   return; // ошибка
  }
} else {
  return; // ошибка
}

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

Это всего лишь простой пример, в реальном проекте этих проверок будет очень много, соответственно, вы можете представить, что будет твориться в коде. Редактировать код, где куча вложенностей и ответвлений очень даже трудно. Как же его можно улучшить? Давайте посмотрим:

if(!isset($_POST['file'])) {
  return; // ошибка
}

if(!in_array($file_extension, $allowed_file_extensions)) {
  return; // ошибка
}

// загружаем файл

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

Заключение

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

А на этом у меня все. Спасибо за внимание!

myrusakov.ru

Здравствуйте! Не подскажите где здесь дописать такое условие, чтобы когда нет купонов выводилось — купонов нет

if (!empty($_POST[‘post_id’])) { $post_id = $_POST[‘post_id’]; }

// если мы получили id posta, то продолжаем
if($post_id) {
$offers_id = get_post_meta($post_id, ‘wpcf-offers_id’, true);

$dostavka = get_post_meta($post_id, ‘wpcf-dostavka’, true);

$cat_id = get_post_meta($post_id, ‘wpcf-cat_id’, true); // получаем id нужного оффера для нужного поста и подставляем значение в URL
$excl = get_post_meta($post_id, ‘wpcf-excl’, true);

$file = file_get_contents(‘./wp-content/themes/Bonitochka/functions/xmls/main.xml’); // получили URL адрес для скачивания RSS фида с промокодами для нужного арендодателя

$xml = simplexml_load_string($file); // проверяем существование этого фида

// если RSS feed существует, то продолжаем
if($xml) {

// разбираем фид и извлекаем промокоды
foreach ($xml->xpath(‘coupons/coupon’) as $coupon) {
if($coupon) {
// если удалось извлечь купоны, то записываем полученные данные в строку

if($coupon->advcampaign_id == $offers_id ) {
$coupon_str .= ‘<div class=»coupon»>’;
$coupon_str .= ‘<div class=»coupon_list»>’;
$coupon_str .= ‘<div class=»picter»><img src=»’.$coupon->logo.’» alt=»»></div>’;
$coupon_str .= ‘<div class=»coupon_list2″>’;
$coupon_str .= ‘<div class=»coupon_date»>Срок действия до ‘.get_date($coupon->date_end).'<i class=»icon-bell»></i><div class=»coupon_date2″>’.diff_days($coupon-.

gt;</a>’;
$coupon_str .= ‘<div class=»coupon_display» style=»display:none»>Промокод: ‘.$coupon->promocode.'</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<div class=»yslovie» onClick=»expandit(this)»><i class=»grew icon-download»></i>Условие промокода</div>
<div class=»description_yslovie» style=»display:none»>’.$coupon->description.’
</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<hr class=»list-module-seperator»>’;
}

if($coupon->types->type_id == $dostavka ) {
$coupon_str .= ‘<div class=»coupon»>’;
$coupon_str .= ‘<div .

date2″>’.diff_days($coupon->date_end).'</div></div>’;
$coupon_str .= ‘<div class=»coupon_title»><h3>’.$coupon->name.'</h3></div>’;
$coupon_str .= ‘<a target=»_blanck» rel=»nofollow» class=»get-price» href=»http://likeskidka.ru/couponi.php?coupon_id=’.$coupon[‘id’].’»>Использовать промокод <i class=»font-fontello icon-tag»></i></a>’;
$coupon_str .= ‘<div class=»coupon_display» style=»display:none»>Промокод: ‘.$coupon->promocode.'</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<div class=»yslovie» onClick=»expandit(this)»><i class=»grew icon-download»></i>Условие промокода</div>
<div class=»description_yslovie» style=»display:none»>’.$coupon->description.’
</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<hr class=»list-module-seperator»>’;

}
if($excl == «true») {

if($coupon->exclusive == «true») {
$coupon_str .= ‘<div class=»couponexcl»>’;
$coupon_str .= ‘<div class=»coupon_list»>’;
$coupon_str .= ‘<div class=»picter»><img src=»’.$coupon->logo.’» alt=»»></div>’;
$coupon_str .= ‘<div class=»coupon_list2″>’;
$coupon_str .= ‘<div class=»coupon_date»>Срок действия до ‘.get_date($coupon->date_end).'<i class=»icon-bell»></i><div class=»coupon_date2″>’.diff_days($coupon->date_end).'</div></div>’;
$coupon_str .= ‘<div class=»coupon_title»><h3>’.$coupon->name.'</h3></div>’;
$coupon_str .= ‘<a target=»_blanck» rel=»nofollow» class=»get-price» href=»http://likeskidka.ru/couponi.php?coupon_id=’.$coupon[̵.

s)»><i class=»grew icon-download»></i>Условие промокода</div>
<div class=»description_yslovie» style=»display:none»>’.$coupon->description.’
</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<hr class=»list-module-seperator»>’;
}

} else {

foreach($coupon->categories->category_id as $cat) {

if($excl == «true») {

if($coupon->exclusive == «true») {

$coupon_str .= ‘<div class=»coupon»>’;
$coupon_str .= ‘<div class=»coupon_list»>’;
$coupon_str .= ‘<div class=»picter»><img src=»’.$coupon->logo.’» alt=»»></div>’;
$coupon_str .= ‘<div class=»coupon_list2″>’;
$coupon_str .= ‘<div class=»coupon_date»>Срок действия до ‘.get_date($coupon->date_end).'<i class=»icon-bell»></i><div class=»coupon_date2″>’.diff_days($coupon->date_end).'</div></div>’;
$coupon_str .= ‘<div class=»coupon_title»><h3>’.$coupon->name.'</h3></div>’;
$coupon_str .= ‘<a target=»_blanck» rel=»nofollow» class=»get-price» href=»http://likeskidka.ru/couponi.php?coupon_id=’.$coupon[‘id’].’»>Использовать промокод <i class=»font-fontello icon-tag»></i></a>’;
$coupon_str .= ‘<div class=»coupon_display» style=»display:none»>Промокод: ‘.$coupon->promocode.'</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<div class=»yslovie» onClick=»expandit(this)»><i class=»grew icon-download»></i>Условие промокода</div>
<div class=»description_yslovie» style=»display:none»>’.$coupon->description.’
</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<hr class=»list-module-seperator»>’;
}

} else {

if($cat == $cat_id) {

$coupon_str .= ‘<div class=»coupon»>’;
$coupon_str .= ‘<div class=»coupon_list»>’;
$coupon_str .= ‘<div class=»picter»><img src=»’.$coupon->logo.’» alt=»»></div>’;
$coupon_str .= ‘<div class=»coupon_list2″>’;
$coupon_str .= ‘<div class=»coupon_date»>Срок действия до ‘.get_date($coupon->date_end).'<i class=»icon-bell»></i><div class=»coupon_date2″>’.diff_days($coupon->date_end).'</div></div>’;
$coupon_str .= ‘<div class=»coupon_title»><h3>’.$coupon->name.'</h3></div>’;
$coupon_str .= ‘<a target=»_blanck» rel=»nofollow» class=»get-price» href=»http://likeskidka.ru/couponi.php?coupon_id=’.$coupon[‘id’].’»>Использовать промокод <i class=»font-fontello icon-tag»></i></a>’;
$coupon_str .= ‘<div class=»coupon_display» style=»display:none»>Промокод: ‘.$coupon->promocode.'</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<div class=»yslovie» onClick=»expandit(this)»><i class=»grew icon-download»></i>Условие промокода</div>
<div class=»description_yslovie» style=»display:none»>’.$coupon->description.’
</div>’;
$coupon_str .= ‘</div>’;
$coupon_str .= ‘<hr class=»list-module-seperator»>’;
}

}

}

}

}

}

} else { $error = ‘XML не получен’;}
echo $coupon_str;
} else { echo ‘POST_ID не получен’;}

ajaxs.ru

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

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

if (условие){  условие выполнено, делаем так  }  else  {  условие не выполнено, делаем иначе  }

Надеюсь логика условной операции понятна. Теперь давайте рассмотрим пример.

<?php   $a = 5;  $b = 25;    // Теперь внимание! Условие: Если $b больше $a  // Знаки > и < , как и в математике, обозначают больше и меньше  if($b > $a)  {      // если условие выполнено, то выполняем это действие      echo "$b больше $a";  }  else   {      // если не выполнено, то это         echo "$a больше или равно $b";  }  ?> 

Демонстрация Скачать исходники

В итоге скрипт выведет

25 больше 5

. Пример довольно прост. Надеюсь всё понятно. Теперь предлагаю рассмотреть ситуацию сложнее, где нужно соблюсти несколько условий. Каждое новое условие будет содержать после основного условия if() — вспомогательное, которое записывается как else if(). В конце как обычно будет else.

Задача: В школе проводят тестирование. Скрипту нужно высчитать балл, зная условия получения каждой оценки и сам балл школьника. Давайте посмотрим как это записать, и не забудьте прочитать комментарий.

<?php   $test = 82; // допустим школьник написал тест на 82 балла    // первое условие напишем для пятёрки  if($test > 90)  {      // если условие соблюдено, то выполняем это действие.      echo "Оценка 5";  }  // Знак && обозначает "и, объединение", что условие соблюдено если и то, и то верно  // то есть балл меньше 91 и больше 80, тогда 4. Иначе условия считываются дальше  else if ($test < 91 && $test > 80)   {      echo "Оценка 4";  }  else if ($test < 81 && $test > 70)   {      echo "Оценка 3";  }  else  {      echo "Надо бы ещё раз написать тест...";  }  ?>

Демонстрация Скачать исходники

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

оценку 4

! А принцип работы надеюсь понятен.

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

$age = 19; // переменная с возрастом    if ($age > 17){    echo "Всё! Мне можно делать всё что угодно! Мне уже $age!";  }

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

Дальше встаёт другой вопрос: а есть же, наверное, какие-либо другие операторы сравнения?

Принцип работы условной операции понятен. Но, как Вы понимаете, способов сравнить намного больше. Давайте посмотрим ниже на таблицу с операторами сравнения.

Пример        Название            Результат  $a == $b    Равно             True, если $a равно $b  $a === $b   Идентично         True, если $a равно $b и обе переменных принадлежат одному типу  $a != $b    Не равно          True, если $a не равно $b  $a === $b   Не идентично      True, если $a не равно $b и оба их типа не совпадают  $a > $b     Больше чем        True, если $a больше, чем $b  $a < $b     Меньше чем        True, если $a меньше, чем $b  $a >= $b    Больше или равно  True, если $a больше или равно $b  $a <= $b    Меньше или равно  True, если $a меньше или равно $b

Теперь рассмотрим операторы на примерах:

$a = 5;    // вопреки привычке = значит присваивание значение переменной, а == как равно  if ($a == 5){    echo "$a равно 5"; // выведет "5 равно 5"  } else {    echo "$a не равно 5";  }    if ($a != 6){    echo "$a не равно 6"; // выведет "5 не равно 6". Нужно в случае отрицания  } else {    echo "$a каким-то образом равно 6";  }    // с больше и меньше думаю всё понятно. Поэтому пример сложнее  if ($a <= 6){    echo "$a меньше или равно 6"; // выведет "5 меньше или равно 6"  } else {    echo "$a больше 6";  }

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

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

Пример       Название          Результат  $a and $b    Логическое 'и'     TRUE если и $a, и $b TRUE.  $a or $b     Логическое 'или'   TRUE если или $a, или $b TRUE.  $a xor $b    Исключающее 'или'  TRUE если $a, или $b TRUE, но не оба.  ! $a         Отрицание          TRUE если $a не TRUE.  $a && $b     Логическое 'и'     TRUE если и $a, и $b TRUE.  $a || $b     Логическое 'или'   TRUE если или $a, или $b TRUE.

Уже обратили внимание, что для операций и и или есть дополнительные операторы? Так сделано для того, чтобы расставить приоритеты в сложных операциях сравнения. В таблице логические операторы приведены в порядке приоритета: от меньшего к большему, то есть, например, || имеет больший приоритет, чем or.

Переходим к примерам

$a = 5;  $b = 6;  $c = 7;    // условие: Если 5 не равно 6 (ВЕРНО)  И  6 не равно 7 (ВЕРНО)  if ($a < 6 && $b != $c){    echo "Действительно так!"; // выведет "Действительно так!" т.к. ОБА условия ВЕРНЫ  } else {    echo "Одно из условий не верно";  }    // условие: Если 6 не равно 6 (НЕВЕРНО)  ИЛИ  6 не равно 7 (ВЕРНО)  if ($b != 6 || $b != $c){    echo "Всё так!"; // выведет "Всё так!", т.к. хотя бы ОДНО из условий ВЕРНО  } else {    echo "Оба условия не верны";  }

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

К вопросу тернарного кода я предлагаю Вам вернуться позже. Вовсе не упомянуть его я не мог, так как это важная конструкция, которая существенно сокращает размер кода. Предлагаю сразу рассмотреть код.

Суть кода: (условие) ? значение a если true : значение a если false

Таким образом, мы сокращаем запись оператора if. Однако, данная операция действительна только с присваиванием значений переменной. Теперь давайте рассмотрим готовый пример.

<?php  // Пример использования тернарного оператора  $settings = (empty($_POST['settings'])) ? 'По умолчанию' : $_POST['settings'];    // Приведенный выше код аналогичен следующему блоку с использованием if/else  if (empty($_POST['settings'])) {      $settings = 'По умолчанию'; // Если ничего не передано, то оставляем "По умолчанию"  } else {      $settings = $_POST['settings']; // Если передано, то $settings присваивается переданное значение.  }  ?>

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

Спасибо за внимание!

tradebenefit.ru

В Уроке №5 у нас получился простой калькулятор, умеющий выполнять только одно арифметическое действие с двумя числами. Если Вы выполнили задание №4 из урока №5, то определенно разобрались как настроить калькулятор на любое из нужных вам действий, будь то сложение, вычитание, умножение и деление. Однако, хорошо если у пользователя калькулятора будет возможность выбора действия производимого с числами. т.е., прямо на форме можно будет реализовать выбор действия, например так:

Php условия

HTML-код файла calc.html изменится следующим образом:

Что тут изменилось? Мы добавили новый тег select, реализующий на странице выпадающий список выбора арифметического действия, всё остальное осталось неизменным. Обратите внимание, у тега select мы задали name=»action» и так как у тега form атрибут method=»post», то получить выбранное действие в скрипте result.php мы сможем из параметра: $_POST[‘action’].

Как же теперь научить скрипт result.php правильно реагировать на значение параметра $_POST[‘action’] и производить нужные арифметические действия? В этом нам поможет конструкция if — реализующая возможность выполнять PHP-код по определенному условию.

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

на языке PHP тоже самое будет выглядеть следующим образом:

cловесно эту PHP-конструкцию if можно описать так:

в качестве условия у нас в круглых скобках написано: $_POST[‘action’] == ‘+’, что буквально означает если значение параметра $_POST[‘action’] равно символу плюс (+). Обратите внимание, вместо одного символа равно, здесь используются сразу два друг за другом идущих равно (==) — это оператор проверки равенства, т.е. если вам нужно в PHP-коде проверить что что-нибудь равно чему-нибудь, вам необходимо использовать именно двойное равно == — т.е. оператор проверки равенства (между этими знаками равно нельзя ставить пробелов!).

Также, Вы заметили, что символ плюса заключен в одинарные кавычки? И это не спроста, потому что отдельно стоящий символ плюса в PHP — это оператор сложения, а нам в условии не нужно ничего складывать, нам надо проверить факт равенства значения из $_POST[‘action’]  символу плюса. Таким образом, символ плюса — это оператор сложения, а символ плюса в кавычках — это просто символ плюса!

Внутри фигурных скобок у нас находится код сложения и вывода результата в браузер:

и этот код выполниться, только если в $_POST[‘action’] будет записан символ плюса, а плюс там окажется только если пользователь на форме страницы calc.html в select-элементе выпадающего списка с name=»action» выберет значение +.

Мы составили только одну if-конструкцию проверки выбора плюса, по такому же формату можно составить проверки и для остальных действий:

Так как пользователь на форме калькулятора сможет выбрать только одно из действий, то в result.php сработает только одно из четырех условий — в зависимости от выбора пользователя (значения в $_POST[‘action’]).

Приведем полный код файла result.php:

При выполнении result.php, PHP работает примерно так:

  1. Выводит в браузер строку Результат:
  2. Проверяет выбрал ли пользователь плюс (+) и если да, то выводит результат сложения
  3. Проверяет выбрал ли пользователь минус (-) и если да, то выводит результат вычитания
  4. Проверяет выбрал ли пользователь символ звездочки (*) и если да, то выводит результат умножения
  5. Проверяет выбрал ли пользователь символ слэша (/) и если да, то выводит результат деления
  6. Выводит HTML-код ссылка для перехода обратно на форму калькулятора: <br><br><a href=»calc.html»>< Назад</a>

Однако, если учесть, что пользователь может выбрать только одно из действий на форме калькулятора, получается мы имеем лишние проверки. Например пользователь выбрал плюс, скрипт result.php выполнил код:

и выведет результат сложения, а затем начнет проверять выбор остальных арифметических действий — что не очень разумно, ведь зачем нам проверять что-либо потом, если мы уже выполнили нужное действие?

Мы можем исправить данный подход с помощью такой разновидности if-конструкции

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

Еще раз пробежимся по этому коду и посмотрим как его будет обрабатывать PHP-программа:

  1. Проверяется первое условие ($_POST[‘action’] == ‘+’) и если оно верно, т.е. на форме выбрано действие сложения (+), то код условия echo $_POST[‘v1’] + $_POST[‘v2’]; и дальнейшие проверки условий elseif не выполняются, т.е. PHP-программа переходит к выполнению кода, идущего после последней фигурной скобки конструкции elseif () { … }
  2. Если первое условие не верно, проверяется второе условие: elseif ($_POST[‘action’] == ‘-‘) и если оно верно, т.е. на форме калькулятора выбрано действие вычитания (-), то выполняется код: echo $_POST[‘v1’] — $_POST[‘v2’]; и дальнейшие проверки условий elseif не выполняются, PHP-программа снова переходит к выполнению кода после текущей конструкции if.
  3. С проверкой остальных условий действует такой же принцип — как и в пункте выше.
  4. Если каким-то образом в  $_POST[‘action’]  окажется значение не равное ни одному из действий (+, -, *, /) — то ни одно условие не выполнится, и мы не увидим никакого результата арифметической операции.

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

здесь else — буквально значит «иначе», т.е. код внутри фигурных скобок после else будет выполнен только в том случае, если ни одно из выше перечисленных if и elseif условий не выполнится, а именно в $_POST[‘action’] ни окажется действий вида: +, -, *, /.

comments powered by HyperComments

Теги: php, калькулятор на php, конструкция if, условия в PHP

Понравилась статья? Поделитесь с другими:

pishikod.ru

Оператор if

Оператор if является наиболее простым из операторов ветвлений.

Синтаксис оператора if:

синтаксис оператора if в php

Оператор if сначала вычисляет условное выражение указанное в круглых скобках, результатом этого выражения является булево значение. Если полученный результат является истинным (true), то инструкция выполняется. Если выражение возвращает ложное значение (false), то инструкция не выполняется. В качестве условия может применяться выражение любой сложности.

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

Следующий код демонстрирует применение оператора if:

  <?php    $a1 = 5;    // Если значение переменной меньше 100, выполнить инструкцию, следующую за оператором if  if ($a1 < 100)   echo "Число $a1 меньше, чем 100";     // переменная $username никак не инициализирована: по умолчанию значение null  // с помощью оператора (Логическое НЕ) инвертируем значение в TRUE  if (!$username) {   $username = "User";   // и выводим имя пользователя на экран   echo $username;  }    ?>  

Операторы if могут быть вложенными в другие операторы if:

  <?php      $a = 0;   $b = 50;   $i = 10;   $j = 15;      // Если выражение "i == 10" возвращает true   if($i == 10)   // то выполняется проверка условного выражения вложенного оператора if   if ($j < 20) $a = $b;     ?>  

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

Оператор if else

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

Синтаксис оператора if else:

синтаксис оператора if-else в php

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

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

  <?php     $username = 'Holly';     if ($username == 'Admin') {   echo 'Добро пожаловать на страницу администратора.';   }   else {   echo 'Добро пожаловать в гостевую страницу';   }    ?>  

Оператор if else может быть вложенным. Такие вложенные условные операторы встречаются на практике достаточно часто. Оператор if является вложенным, если он расположен внутри другого блока if или else. Если в коде используется несколько операторов if подряд, то else всегда относится к ближайшему if:

  <?php     if($i) { // внутренний блок if($i)   if($a) инструкция;   if($b) инструкция;    else инструкция; // этот else относится к if($b) - так как он ближе    }   else инструкция; // этот else относится к if($i)    ?>  

Последний else не относится к if($a), так как он находится не во внутреннем блоке, поэтому ближайший к нему получается if($i). Оператор else расположенный внутри блока относится к if($b), потому что этот if — является ближайшим к нему.

Конструкция elseif/else if

Оператор if/else вычисляет значение условного выражения и выполняет тот или иной фрагмент программного кода. Но что, если требуется выполнить один из многих фрагментов? Если вам нужно проверить несколько условий подряд, то для этого подойдет конструкция elseif или else if (это одна и та же конструкция, просто по разному записана). Формально она не является самостоятельной конструкцией PHP — это лишь распространенный стиль программирования, заключающийся в применении повторяющихся операторов if/else. Она позволяет проверять дополнительные условия, пока не будет найдено истинное или достигнут блок else. Конструкция elseif/else if должна располагаться после оператора if и перед оператором else, если такой имеется.

  <?php     $username = 'Арни';     if ($username == 'Админ') {   echo 'Добро пожаловать на страницу администратора.';   }   elseif ($username == 'Гость') {   echo 'Доступ запрещен!';   }   else if ($username == 'Арни') {   echo "Добро пожаловать $username!";   }   else {   echo ('Добро пожаловать в гостевую страницу');   }    ?>  

Здесь проверяется три условия, и, в зависимости от значения переменной $username, выполняются разные действия.

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

  <?php     $username = 'Арни';     if ($username == 'Админ') {   echo 'Добро пожаловать на страницу администратора.';   }   else {   if ($username == 'Гость') {   echo 'Доступ запрещен!';   }   else {   	 if ($username == 'Арни') {   echo "Добро пожаловать $username!";   }   else {   echo ('Добро пожаловать в гостевую страницу');  	 }  	}   }    ?>  

puzzleweb.ru

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

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

<?php  if (условие) {  код, который нужно выполнить, если условие выполнено; }

А в реальной жизни использование оператора if выглядит следующим образом:

<?php  if (true) {  echo 'Условие выполнено'; }

Здесь мы явно передали оператору значение true. Разумеется, это абсолютно бессмысленно. Давайте с помощью условия будем определять числа больше 10. Это довольно просто:

<?php  $x = 15;  if ($x > 10) {  echo 'Число больше 10'; }

И после запуска мы увидим результат:

Число больше 10

Конструкция if-else

А можно ли сделать так, чтобы, когда условие не выполнилось, выполнился другой код? Конечно можно! Для этого вместе с оператором if используют оператор else (по-русски — иначе). Он пишется после фигурных скобок, в которые заключается код, выполняющийся при выполненном условии. И выглядит конструкция следующим образом:

<?php  $x = 15;  if ($x > 10) {  echo 'Число больше 10'; } else {  echo 'Число меньше либо равно 10'; }

Здесь опять же на экран будет выведено сообщение:

Число больше 10

Однако если мы изменим входные данные, и переменной $x в самом начале присвоим значение 8, то выведется сообщение:

Число меньше либо равно 10

Попробуйте сделать это прямо сейчас.

Конструкция if-elseif-else: несколько условий

В случае, если вам нужно проверить несколько условий, после оператора if добавляется ещё и оператор elseif. Он проверит условие, только если не выполнится первое условие. Например:

<?php  $x = 10;  if ($x > 10) {  echo 'Число больше 10'; } elseif ($x == 10) {  echo 'Число равно 10'; }

В данном случае, на экран будет выведено:

Число равно 10

И да, после этого оператора можно добавить else. Код внутри него будет выполнен, если не выполнилось ни одно из условий:

<?php  $x = 9;  if ($x > 10) {  echo 'Число больше 10'; } elseif ($x == 10) {  echo 'Число равно 10'; } else {  echo 'Число меньше 10'; }

Результат этого кода, я полагаю, объяснять не нужно. Да, кстати, возможен целый список из elseif-ов. Например, такой:

<?php  $x = 3;  if ($x <= 0) {  echo 'Число меньше либо равно 0'; } elseif ($x == 1) {  echo 'Число равно 1'; } elseif ($x == 2) {  echo 'Число равно 2'; } else {  echo 'Число не подошло ни под одно из условий'; }

Приведение к boolean

Помните, в уроке про типы данных в PHP мы с вами научились явно приводить значения к какому-либо типу. Например:

<?php  $x = (boolean)3;  var_dump($x);

Результатом будет true.
Работающее так же, только неявное преобразование, всегда происходит в условии. Например, следующее условие:

<?php  if (3) {  echo 'Условие выполнено'; }

Выполнится успешно, так как число 3 будет преобразовано к true. К false будут приводиться следующие значения:

  • » (пустая строка)
  • 0 (число 0)

Таким образом, любое ненулевое число и ненулевая строка будут преобразованы в true и условие выполнится. Исключение – строка, состоящая из одного нуля:

'0'

Она также будет преобразована к false.

Я затронул эту тему с приведением к boolean в домашнем задании к этому уроку. Обязательно его выполните. А сейчас давайте перейдём к следующему условному оператору.

Оператор switch

Помимо конструкции if-else есть ещё один оператор условия. Это – switch. Это очень интересный оператор, требующий запоминания нескольких правил. Давайте для начала посмотрим, как он выглядит на следующем примере:

<?php  $x = 1;  switch ($x) {  case 1:  echo 'Число равно 1';  break;  case 2:  echo 'Число равно 2';  break;  default:  echo 'Число не равно ни 1, ни 2'; }

Сначала может показаться, что этот оператор довольно сложный. Однако, если разобраться, то всё становится понятно. В операнде switch указывается некоторое выражение. В нашем случае, это переменная $x, а точнее её значение — 1.

В фигурных скобках мы перечисляем операторы case, после которых указываем значение, с которым сравнивается значение операнда switch. Сравнение происходит нестрогое, то есть как будто используем оператор ==. И если условие выполнилось, то выполняется код, указанный после двоеточия. Если же ни одно из условий не выполнилось, то выполняется код из секции default, которой в общем-то может и не быть, и тогда ничего выполняться не будет. Обратите внимание, внутри каждой секции case, в конце мы прописали оператор break. Это делается для того, чтобы после выполнения кода в случае выполнения условия не продолжилась проверка условий. То есть, если бы не было break в конце секции case 1, то после того, как вывелся бы текст

Число равно 1

продолжило бы выполняться условие сравнения с 2, а затем бы выполнился и код в секции default. Не забывайте писать break!

Сравнение switch с if

Вообще, этот код можно было бы записать и с помощью конструкции if-elseif-else:

<?php  $x = 1;  if ($x == 1) {  echo 'Число равно 1'; } elseif ($x == 2) {  echo 'Число равно 2'; } else {  echo 'Число не равно ни 1, ни 2'; }

Но в виде конструкции switch-case код в конкретно этом случае выглядит проще. И вот почему:

  1. мы сразу видим, что конкретно мы сравниваем (переменную $x) и понимаем, что сравниваем в каждом условии именно это значение, а не какое-либо ещё;
  2. глазу удобнее воспринимать то, с чем сравниваем – секции case 1, case 2 визуально воспринимаются легче, сравниваемое значение заметнее.

И снова про switch

И я ещё не всё сказал про switch — можно писать несколько case-ов подряд, тогда код выполнится при условии, что выполнен хотя бы один из них. Например:

<?php  $x = 2;  switch ($x) {  case 1:  case 2:  echo 'Число равно 1 или 2';  break;  case 5:  echo 'Число равно 5';  break;  default:  echo 'Число не равно ни 1, ни 2, ни 5'; }

Согласитесь, это может быть удобно.

Хорошо, давайте пройдёмся по особенностям оператора switch, о которых нужно помнить всегда.

  1. break прерывает набор условий, не забывайте указывать его;
  2. секция default будет выполнена, если не выполнилось ни одно из условий. Она может и вовсе отсутствовать;
  3. несколько case-ов могуть быть записаны подряд, тогда код в секции выыполнится при выполнении хотя бы одного из условий.

Немного практики

Ну что, запомнили операторы условий? Давайте закрепим на практике более реальными примерами.

Чётное или нечётное

Вот один из примеров – нужно определить, чётное ли число или нет. Для этого нам нужно проверить, что остаток от деления на 2 будет равен 0. Подробнее об операторах читайте тут. Давайте сделаем это:

<?php  $x = 2;  if ($x % 2 == 0) {  echo 'Число чётное'; } else {  echo 'Число нечётное'; }

Попробуйте самостоятельно изменить значение переменной $x. Круто, да? Оно работает!

Модуль

Давайте теперь научимся вычислять модуль числа. Если число больше или равно нулю, то нужно вывести само это число, если меньше – заменить знак с минуса на плюс.

<?php  $x = -2;  if ($x >= 0) {  echo 'Модуль числа: ' . $x; } else {  echo 'Модуль числа: ' . -$x; }

Результат:

Модуль числа: 2

Как мы видим, всё успешно отработало.

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

Помимо этого, в PHP есть ещё один оператор, который представляет собой сокращённую форму конструкции if-else. Это тернарный оператор. При этом он возвращает разные результаты, в зависимости от того, выполнено ли условие или нет. В общем виде его использование выглядит следующим образом:

условие ? результат_если_true : результат_если_false

Или на примере того же нахождения модуля:

<?php  $x = -2;  $mod = $x >= 0 ? $x : -$x;  echo 'Модуль: ' . $mod;

Результат:

Модуль: 2

Круто, да? Тернарный оператор – очень элегантно вписывается при решении таких вот простеньких задачек.

И ещё немного практики

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

<?php  $x = 105;  if ($x > 0) {  if ($x >= 100) {  echo 'Число больше либо равно 100';  } else {  echo 'Число больше 0 но меньше 100';  } } else {  echo 'Число меньше либо равно 0'; }

Итог

Друзья, надеюсь вам понравился урок. Если это так – буду рад, если вы поделитесь им в социальных сетях или расскажете друзьям. Это лучшая поддержка проекта. Спасибо тем, кто это делает. Если у вас возникли какие-то вопросы или замечания – напишите об этом в комментариях. А сейчас – все быстренько делаем домашнее задание, там ещё больше интересных примеров с условиями. Всем пока!

webshake.ru

Логические операции

Логические операции позволяют комбинировать логические значения (называемые также истинностными) для получения новых логических значений. Как показано в таблице ниже, в языке PHP поддерживаются стандартные логические операции (and, or, not и xor), причем первые две имеют альтернативные версии.

Логические операции PHP

Операция Описание
and Операция, результат которой принимает истинное значение тогда и только тогда, когда оба ее операнда имеют истинное значение
or Операция, результат которой принимает истинное значение, если один из ее операндов (или оба операнда) имеет истинное значение
! Операция, результат которой принимает истинное значение, если ее единственный операнд (задаваемый справа от знака операции) имеет ложное значение, и ложное значение, если операнд имеет истинное значение
xor Операция, результат которой принимает истинное значение, если любой из ее операндов (но не оба одновременно) имеет истинное значение
&& То же, что и операция and, но связывает свои операнды сильнее по сравнению с этой операцией
|| То же, что и операция or, но связывает свои операнды сильнее по сравнению с этой операцией

Операции && и || должны быть знакомы программистам, работающим с языком C. Операцию ! обычно называют not, поскольку она становится отрицанием для того операнда, к которому применяется.

Чтобы проверить, имеют ли оба операнда значение TRUE, следует использовать оператор AND, который можно записать и как двойной амперсанд (&&). Оба оператора, AND и &&, являются логическими, их единственное отличие в том, что оператор && имеет более высокий приоритет, чем оператор AND. То же самое относится к операторам OR и ||. Оператор AND возвращает TRUE, только если оба операнда имеют значение TRUE; в противном случае возвращается значение FALSE.

Чтобы проверить, имеет ли хотя бы один операнд значение TRUE, следует использовать оператор OR, который можно записать и как двойную вертикальную линию (||). Этот оператор возвращает TRUE, если хотя бы один из операндов имеет значение TRUE.

При использовании оператора OR в программе могут появиться трудноуловимые логические ошибки. Если PHP обнаружит, что первый операнд имеет значение TRUE, он не станет вычислять значение второго операнда. Это позволяет экономить время исполнения, но вы должны внимательно следить за тем, чтобы код, от которого зависит корректная работа программы, не был помещен во второй операнд.

Проверить, имеет ли значение TRUE только один из операндов (но не оба сразу), позволяет оператор XOR. Этот оператор возвращает значение TRUE, если один и только один из операндов имеет значение TRUE. Если оба операнда имеют значение TRUE, оператор вернет значение FALSE.

Инвертировать логическое значение можно с помощью оператора NOT, который часто записывается и в виде восклицательного знака (!). Он возвращает значение TRUE, если операнд имеет значение FALSE, и значение FALSE, если операнд имеет значение TRUE.

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

Логические выражения и их результаты

Пример логического выражения Результат
TRUE AND TRUE TRUE
FALSE AND TRUE FALSE
TRUE OR FALSE TRUE
FALSE OR FALSE FALSE
TRUE XOR TRUE FALSE
TRUE XOR FALSE TRUE
!TRUE FALSE
!FALSE TRUE

Операции сравнения

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

Операции сравнения

Операция Наименование Описание
== Равно Операция, результат которой принимает истинное значение, если ее операнды равны друг другу, в противном случае принимает ложное значение
!= Не равно Операция, результат которой принимает ложное значение, если ее операнды равны друг другу, в противном случае принимает истинное значение
< Меньше Операция, результат которой принимает истинное значение, если левый операнд меньше правого, в противном случае принимает ложное значение
> Больше Операция, результат которой принимает истинное значение, если левый операнд больше правого, в противном случае принимает ложное значение
<= Меньше или равно Операция, результат которой принимает истинное значение, если левый операнд меньше или равен правому, в противном случае принимает ложное значение
>= Больше или равно Операция, результат которой принимает истинное значение, если левый операнд больше или равен правому, в противном случае принимает ложное значение
=== Идентично Операция, результат которой принимает истинное значение, если оба операнда равны друг другу и относятся к одному и тому же типу, в противном случае принимает ложное значение

Необходимо следить за тем, чтобы не допустить одну весьма распространенную ошибку — не путать операцию присваивания (=) с операцией сравнения (==).

Приоритет операций

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

Код PHP

$var1 = 14; $var2 = 15;    if (($var1 < $var2) && ($var2 < 20))   echo '$var2 больше $var1 но меньше 20';

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

Код PHP

...    if ($var1 < $var2 && $var2 < 20)   ...

Инструкция if — else

Инструкция if позволяет исполнить блок кода, если условное выражение в этой инструкции имеет значение TRUE; в противном случае блок кода не исполняется. В качестве условия может применяться любое выражение, включающее проверки на ненулевое значение, равенство, NULL с участием переменных и значений, возвращаемых функциями.

Не важно, какие отдельные условные выражения составляют условное предложение. Если условие истинно, исполняется программный код, заключенный в фигурные скобки ({}). В противном случае PHP игнорирует его и переходит к проверке второго условия, проверяя все условные предложения, которые вы записали, пока не наткнется на инструкцию else, после чего автоматически выполнит этот блок. Инструкция else не является обязательной.

Синтаксис инструкции if:

if (условное выражение)  {   блок программного кода;  }

Если в результате вычисления условного выражения получается значение TRUE, то блок программного кода, расположенный после него, будет исполнен. В следующем примере если переменная $username имеет значение ‘Admin’, будет выведено приветственное сообщение. В противном случае ничего не произойдет:

Код PHP

$username = "Admin";    if ($username == "Admin")   {  	echo 'Добро пожаловать на страницу администратора.';  }

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

Необязательная инструкция else – это блок программного кода, исполняемый по умолчанию, когда условное выражение возвращает значение FALSE. Инструкцию else нельзя использовать отдельно от инструкции if, поскольку у else нет собственного условного выражения. То есть else и if в вашем коде всегда должны быть вместе:

Инструкции if и else

$username = "no admin";    if ($username == "Admin")   {  	echo 'Добро пожаловать на страницу администратора.';  }  else  {  	echo 'Добро пожаловать на страницу пользователя.';  }

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

Все это хорошо, кроме случаев, когда вам требуется проверить несколько условий подряд. Для этого подойдет инструкция elseif. Она позволяет проверять дополнительные условия, пока не будет найдено истинное или достигнут блок else. У каждой инструкции elseif есть собственный блок кода, размещаемый непосредственно после условного выражения инструкции elseif. Инструкция elseif идет после инструкции if и перед инструкцией else, если таковая имеется.

Синтаксис инструкции elseif немного сложнее, но следующий пример поможет вам разобраться в нем:

Проверка нескольких условий

$username = "Guest";    if ($username == "Admin")  {  	echo 'Добро пожаловать на страницу администратора.';  }  elseif ($username == "Guest")   {  	echo 'Просмотр не доступен.';  }  else   {  	echo 'Добро пожаловать на страницу пользователя.';  }

Здесь проверяется два условия, и, в зависимости от значения переменной $username, выполняются разные действия. И еще есть возможность что-то сделать, если значение переменной отличается от первых двух.

Тернарный оператор ?:

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

(условие) ? вычислить_если_условие_истинно : вычислить_если_условие_ложно;

В примере ниже проверяется значение, и в зависимости от его значения (TRUE или FALSE) возвращаются разные строки:

Создание сообщения с помощью оператора ?:

$logged_in = TRUE;  $user = "Игорь";    $banner = (!$logged_in) ? "Зарегистрируйтесь!" : "С возвращением, $user!";  echo $banner;

Вполне очевидно, что приведенный выше оператор эквивалентен следующему оператору:

Код PHP

$logged_in = TRUE;  $user = "Игорь";    if (!$logged_in)  {  	$banner = "Зарегистрируйтесь!";  }  else  {  	$banner = "С возвращением, $user!";  }  echo $banner;

Инструкция switch

Инструкция switch сравнивает выражение с несколькими значениями. Как правило, в качестве выражения используется переменная, в зависимости от значения которой должен быть исполнен тот или иной блок кода. Например, представим себе переменную $action, которая может иметь значения «ADD» (добавить), «MODIFY» (изменить) и «DELETE» (удалить). Инструкция switch позволяет легко определить блок кода, который должен исполняться для каждого из этих значений.

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

Проверка на соответствие одному из нескольких значений (инструкция if)

if ($action == "ADD") {  	echo "Выполнить добавление.";  	echo "Количество инструкций в каждом блоке не ограничено.";  }  elseif ($action == "MODIFY") {  	echo "Выполнить изменение.";  }  elseif ($action == "DELETE") {  	echo "Выполнить удаление.";  }

Проверка на соответствие одному из нескольких значений (инструкция switch)

switch ($action) {  	case "ADD":  		echo "Выполнить добавление.";  		echo "Количество инструкций в каждом блоке не ограничено.";  		break;  	case "MODIFY":  		echo "Выполнить изменение.";  		break;  	case "DELETE":  		echo "Выполнить удаление.";  		break;  }

Инструкция switch берет значение, стоящее рядом с ключевым словом switch, и начинает сравнивать его со всеми значениями, стоящими рядом с ключевыми словами case, в порядке их расположения в программе. Если соответствие не найдено, не исполняется ни один из блоков. Как только совпадение обнаружено, выполняется соответствующий блок кода. Расположенные ниже блоки кода также исполняются – до конца инструкции switch или до ключевого слова break. Это удобно для организации процесса, состоящего из нескольких последовательных шагов. Если пользователь уже проделал некоторые шаги, он сможет продолжить процесс с того места, на котором прервался.

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

Выбор по умолчанию

Если значение условного выражения не совпало ни с одним из предложенных в инструкциях case вариантов, инструкция switch и в этом случае позволяет что-то сделать, примерно как инструкция else конструкции if, elseif, else. Для этого нужно последним вариантом в списке выбора сделать инструкцию default:

Создание сообщения об ошибке с помощью инструкции default

$action = "REMOVE";    switch ($action) {  	case "ADD":  		echo "Выполнить добавление.";  		echo "Количество инструкций в каждом блоке не ограничено.";  		break;  	case "MODIFY":  		echo "Выполнить изменение.";  		break;  	case "DELETE":  		echo "Выполнить удаление.";  		break;  	default:  	 echo "Ошибка: команда $action не допустима, ".  		 "можно использовать только команды ADD, MODIFY и DELETE.";  }

Кроме обычного, инструкция switch поддерживает альтернативный синтаксис – конструкцию из ключевых слов switch/endswitch, определяющих начало и конец инструкции вместо фигурных скобок:

Инструкция switch завершается ключевым словом endswitch

switch ($action):  	case "ADD":  		echo "Выполнить добавление.";  		echo "Количество инструкций в каждом блоке не ограничено.";  		break;  	case "MODIFY":  		echo "Выполнить изменение.";  		break;  	case "DELETE":  		echo "Выполнить удаление.";  		break;  	default:  	 echo "Ошибка: команда $action не допустима, ".  		 "можно использовать только команды ADD, MODIFY и DELETE.";  endswitch;

Прерывание исполнения

Если должен быть исполнен только блок кода, соответствующий определенному значению, то в конце этого блока следует вставить ключевое слово break. Интерпретатор PHP, встретив ключевое слово break, перейдет к исполнению строки, расположенной после закрывающей фигурной скобки инструкции switch (или ключевого слова endswitch). Но если не использовать инструкцию break то проверка продолжается в последующих ветвях case конструкции switch. Ниже показан пример:

Что происходит при отсутствии операторов break

$action="ASSEMBLE ORDER";    switch ($action) {  	case "ASSEMBLE ORDER":  		echo "Собрать заказ.<br>";  	case "PACKAGE":  		echo "Упаковать.<br>";  	case "SHIP":  		echo "Доставить заказчику.<br>";  }

Если переменная $action будет иметь значение «ASSEMBLE ORDER», результат работы этого фрагмента будет следующим:

Собрать заказ.  Упаковать.  Доставить заказчику.

Если предположить, что стадия сборки уже была пройдена, и переменная $action имеет значение «PACKAGE», то будет получен следующий результат:

Упаковать.  Доставить заказчику.

Иногда, отсутствие операторов break бывает полезным, как в приведенном примере, где формируются стадии заказа, но в большинстве случаев следует использовать этот оператор.

Типы данных
Циклы
Оценить статью:

Понравилась статья? Поделить с друзьями:
  • If i were a boy ошибка
  • If command executenonquery 1 ошибка
  • Iernonce dll ошибка при запуске
  • Ieframe dll ошибка internet explorer
  • Idone dll ошибка в распаковке