Part 2

Более сложные условные операторы

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

number = int(input("Please type in a number: "))

if number < 0:
    print("The number is negative")

if number >= 0:
    print("The number is positive or zero")

Это выглядит немного неуклюже и повторяется. Мы всегда хотим выполнить только один из блоков if, потому что ввод всегда будет либо меньше нуля, либо равен нулю или больше. То есть либо number < 0, либо number >= 0 истинно, но никогда не оба одновременно. Значит, первый условный оператор на самом деле уже содержит все, что нам нужно. Если он истинен, число отрицательное. Если он ложен, число равно нулю или положительное.

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

Предыдущий пример, переписанный заново:

number = int(input("Please type in a number: "))

if number < 0:
    print("The number is negative")
else:
    print("The number is positive or zero")

При использовании конструкции if-else всегда выполняется одна и ровно одна из ветвей. Следующая картинка иллюстрирует структуру:

2 2 1

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

Следующий пример проверяет, является ли число, введенное пользователем, четным. Четность можно проверить оператором остатка от деления %, который дает остаток от целочисленного деления. При делении на два, если остаток равен нулю, число четное. Иначе число нечетное.

number = int(input("Please type in a number: "))

if number % 2 == 0:
    print("The number is even")
else:
    print("The number is odd")
Пример вывода

Please type in a number: 5 The number is odd

Другой пример со сравнением строк:

correct = "kittycat"
password = input("Please type in the password: ")

if password == correct:
    print("Welcome")
else:
    print("No admittance")

С двумя разными вводами это должно вывести:

Пример вывода

Please type in the password: kittycat Welcome

Пример вывода

Please type in the password: monkey No admittance

Альтернативные ветви с оператором elif

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

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

2 2 2

Посмотрим на программу, которая определяет победителя матча:

goals_home = int(input("Home goals scored: "))
goals_away = int(input("Away goals scored: "))

if goals_home > goals_away:
    print("The home team won!")
elif goals_away > goals_home:
    print("The away team won!")
else:
    print("It's a tie!")

Эта программа может вывести три разных сообщения при разных вводах:

Пример вывода

Home goals scored: 4 Away goals scored: 2 The home team won!

Пример вывода

Home goals scored: 0 Away goals scored: 6 The away team won!

Пример вывода

Home goals scored: 3 Away goals scored: 3 It's a tie!

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

Это тоже корректный условный оператор:

print("Holiday calendar")
date = input("What is the date today? ")

if date == "Dec 26":
    print("It's Boxing Day")
elif date == "Dec 31":
    print("It's Hogmanay")
elif date == "Jan 1":
    print("It's New Year's Day")

print("Thanks and bye.")
Пример вывода

Holiday calendar What is the date today? Dec 31 It's Hogmanay Thanks and bye.

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

Пример вывода

Holiday calendar What is the date today? Dec 25 Thanks and bye.

Вы дошли до конца этого раздела! Перейти к следующему разделу:

Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.