Перейти к содержанию

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

Условный оператор используется, когда некая часть программы должна быть выполнена, только если верно какое-либо условие. Для записи условного оператора используются ключевые слова if и else («если», «иначе»), двоеточие и отступ в четыре пробела.

1
2
3
4
if условие:
    # Действия, если условие верно
else:
    # Действия, если условие неверно

Отступ в четыре пробела принят в сообществе Python (PEP 8). При этом программа может работать и при других вариантах, но читать её будет неудобно. Пробелы — самый предпочтительный метод отступов. Табуляция должна использоваться только для поддержки кода, написанного с отступами с помощью табуляции. Python 3 запрещает смешивание табуляции и пробелов в отступах.

Сравнение ≠ Присваивание

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

1
2
3
4
5
6
print('Введите пароль:')
password = input()
if password == 'qwerty':
    print('Доступ открыт.')
else:
    print('Ошибка, доступ закрыт!')

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

  • < меньше
  • > больше
  • <= меньше или равно
  • >= больше или равно
  • == равно
  • != не равно
1
2
3
4
5
6
print('Представься, о незнакомец!')
name = input()
if name == 'Цезарь':
    print('Аве, Цезарь!')
else:
    print('Приветик.')

Все операции отношения оформляются с помощью симметричных пробелов.

Сложное условие. Логические операции

Иногда в условном операторе нужно задать сложное условие. Для этого можно использовать логические операции and («и»), or («или») и not («не»). Чтобы задать одновременное выполнение двух условий, используем and («и»), если достаточно выполнения одного из двух вариантов (или обоих сразу) — используем or («или»), а если нужно убрать какой-то вариант — not («не»).

Приоритет выполнения операций:

  1. not
  2. and
  3. or

Если нужно изменить приоритет операций или вы забыли правила, используйте скобки.

1
2
3
4
5
6
7
print('Как называются первая и последняя буквы греческого алфавита?')
greek_letter_1 = input()
greek_letter_2 = input()
if greek_letter_1 == 'альфа' and greek_letter_2 == 'омега':
    print('Верно.')
else:
    print('Неверно.')
1
2
3
4
5
6
print('Как греки или римляне называли главу своего пантеона - бога грома?')
ancient_god = input()
if ancient_god == 'Зевс' or ancient_god == 'Юпитер':
    print('Верно.')
else:
    print('Неверно.')
1
2
3
4
5
6
7
8
print('Введите имена двух братьев из античных мифов и легенд.')
brother1 = input()
brother2 = input()
if brother1 == 'Ромул' and brother2 == 'Рем' or brother1 == 'Кастор' and \
        (brother2 == 'Поллукс' or brother2 == 'Полидевк'):
    print('Верно.')
else:
    print('Неверно.')

По стандарту PEP 8 длина строки должна быть ограничена максимум 79 символами. Длинные строки можно переносить с помощью символа \ (бэкслеш) или заключая выражение в скобки.

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

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

1
2
3
4
5
6
7
8
9
print('Представься, о незнакомец!')
name = input()
if name == 'Цезарь' or name == 'Caesar':
    print('Аве, Цезарь!')
    print('Слава императору!')
else:
    print('Приветик.')
print('Погода сегодня хорошая.')
print('Засим - заканчиваем.')

Перед последней строчкой нет отступа — она будет выполнена в конце работы программы в любом случае. Блоки кода в Python очень гибко устроены: внутри них можно писать любой другой код, в том числе условные операторы.

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

print('Представься, о незнакомец!')
name = input()
if name == 'Цезарь' or name == 'Caesar':
    print('Аве, Цезарь!')
    print('В честь какого бога устроим сегодня празднество?')
    god = input()
    if god == 'Юпитер':
        print('Ура Громовержцу!')
    elif god == 'Минерва':
        print('Ура мудрой воительнице!')
    else:
        print('Бога по имени', god, 'мы не знаем, но слово Цезаря - закон.')
    print('Слава императору!')
else:
    print('Приветик.')
print('Погода сегодня хорошая.')
print('Засим - заканчиваем.')

Операции над строками

Кроме уже описанных действий, строки ещё можно складывать.

1
2
3
4
x = '10'
y = '20'
z = x + y
print(z)

По рекомендации PEP 8: ставьте пробелы вокруг знаков операций (*, +, - и т.д.):

  • Правильно: z = x + y
  • Неправильно: z = x+y

Конкатенация

Операция сложения для строк выполняет конкатенацию — склеивает содержимое строк. Например: 'При' + 'вет' даст строку 'Привет'.

1
2
3
4
x = '10'
y = '20'
print(x + y)        # 1020
print('10' + '20')  # 1020

Дублирование

Для строк также можно выполнять умножение — дублирование. Строка будет повторена заданное количество раз.

Например: 3 * '20' — то же, что и '20' * 3, результат — '202020'.

Команда in

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

1
2
3
4
5
6
7
text = input()
if 'хорош' in text and 'плох' not in text:
    print('Текст имеет положительную эмоциональную окраску.')
elif 'плох' in text and 'хорош' not in text:
    print('Текст имеет отрицательную эмоциональную окраску.')
else:
    print('Текст имеет нейтральную или смешанную эмоциональную окраску.')

Задачи

Задача 1

Напишите программу, которая считывает слово и выводит фразу по шаблону:

[слово] ? Конечно, помню, ведь мы проходили это на прошлом занятии!

Тест 1:

Ввод:

print
Вывод:
print ? Конечно, помню, ведь мы проходили это на прошлом занятии!

Тест 2:

Ввод:

input
Вывод:
input ? Конечно, помню, ведь мы проходили это на прошлом занятии!


Задача 2

Напишите программу, которая считывает слово и проверяет, равно ли оно Python. Выведите ДА или НЕТ.

Тест 1:

Ввод:

Python
Вывод:
ДА

Тест 2:

Ввод:

Ruby
Вывод:
НЕТ


Задача 3

Напишите программу, которая считывает слово и выводит его четыре раза подряд без пробелов.

Тест 1:

Ввод:

Ха
Вывод:
ХаХаХаХа

Тест 2:

Ввод:

Hello
Вывод:
HelloHelloHelloHello


Задача 4

Напишите программу, которая считывает строку и выводит МЯУ, если она содержит слово кот, иначе — ГАВ.

Тест 1:

Ввод:

у меня есть кот
Вывод:
МЯУ

Тест 2:

Ввод:

у меня есть собака
Вывод:
ГАВ


Задача 5

Напишите программу, которая считывает три строки и выводит ГОРИ, если это раз, два, три (по одному на строке). Иначе — НЕ ГОРИ.

Тест 1:

Ввод:

раз
два
три
Вывод:
ГОРИ

Тест 2:

Ввод:

1
два
3
Вывод:
НЕ ГОРИ


Задача 6

Улучшите задачу 5: программа должна выводить ГОРИ также при вводе 1, 2, 3.

Тест 1:

Ввод:

1
2
3
Вывод:
ГОРИ

Тест 2:

Ввод:

раз
два
три
Вывод:
ГОРИ

Тест 3:

Ввод:

1
два
три
Вывод:
НЕ ГОРИ


Задача 7

Напишите программу-тест с двумя вопросами. Программа задаёт вопросы и считывает ответы да или нет. В зависимости от комбинации ответов выводит один из четырёх уникальных результатов.

Придумайте вопросы и результаты самостоятельно.

Тест 1:

Ввод:

да
да
Вывод:
[ваш результат для да+да]

Тест 2:

Ввод:

да
нет
Вывод:
[ваш результат для да+нет]


Задача 8

Напишите программу, которая считывает оценку (5, 4, 3 или другое) и выводит соответствующий комментарий:

  • 5 → Отлично!
  • 4 → Хорошо.
  • 3 → Удовлетворительно.
  • всё остальное → Неудовлетворительно.

Тест 1:

Ввод:

5
Вывод:
Отлично!

Тест 2:

Ввод:

2
Вывод:
Неудовлетворительно.


Задача 9

Напишите программу, которая считывает логин и email. Выведите OK, если email содержит @, а логин — нет. Иначе выведите ОШИБКА.

Тест 1:

Ввод:

Вывод:
OK

Тест 2:

Ввод:

Вывод:
ОШИБКА


Задача 10

Напишите текстовый квест с минимум тремя шагами. На каждом шаге программа задаёт вопрос и считывает ответ. В зависимости от выборов игрока история заканчивается по-разному — придумайте не менее трёх уникальных концовок.