Вы находитесь на странице: 1из 14

Урок № 5

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

СОДЕРЖАНИЕ
Логические операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Каскадная условная инструкция if-elif. . . . . . . . . . . . . . 5
Проектирование простого компьютерного
ассистента . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Условная инструкция

Логические операторы
Вы познакомились со всеми видами условий, ко-
торые есть в языке Python, однако есть еще одна кон-
струкция, которая упрощает процесс написания про-
грамм – это команды and и or.
Перед их рассмотрением давайте поговорим об ус-
ловиях. Условия, которые мы рассматривали ранее,
были простыми. К примеру, если играя в игру, вы наби-
раете достаточное количество очков, то переходите на
следующий уровень. Это простое условие.
Если же для того, чтобы перейти на новый уровень,
вам нужно построить здание, захватить лагерь против-
ника и добыть 150 единиц золотой руды, это будет уже
сложное условие.
Для использования сложных условий существуют
специальные команды – and, or, not. Эти команды ис-
пользуются для объединения нескольких условий:
■■ Команда and (и) – для выполнения действия нужно,
чтобы все условия были правдивыми. Иначе говоря,
оба выражения должны быть true:
a = 5
b = 5
if (a>0) and (b>0):
выражение
...

3
Урок № 5

■■ Команда or (или) – для выполнения действия нужно,


чтобы одно из условий было правдивым. Команда
выполнится, если хотя бы одно из условий будет true.
a = 0
b = 5
if (a>0) or (b>0):
выражение
...

■■ Команда not (не) – для выполнения действия нужно,


чтобы условие было false.
a = 5
if (not a==0):
выражение

Приведенная ниже таблица наглядно демонстриру-


ет принцип работы логических операторов.

A B A AND B A OR B NOT A

false false false false true


false true false true true
true false false true false
true true true true false

Стоит обратить внимание на то, что условий может


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

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

Каскадная условная
инструкция if-elif
Условия  –  важные и часто используемые компо-
ненты любой программы. Однако не всегда можно
оформить условие в виде if-else, поэтому такую кон-
струкцию можно немного улучшить, добавив команду
elif. На рисунке 1 показана схема работы такой кон-
струкции.

Рисунок 1

5
Урок № 5

Теперь разберемся, что происходит на данной схеме


(см. рис. 1 на стр. 5):
1. Проверяем условия при if:
■■ если оно правдиво, выполняем код в блоке 1;
■■ если оно неправдиво, переходим к шагу 2.
2. Проверяем условия при elif:
■■ если оно правдиво, выполняем код в блоке 2;
■■ если оно неправдиво, переходим к шагу 3.

n. Заключающее в этой цепочке условие else. Код в этом
блоке выполнится в том случае, если до этого ни одно
условие не выполнилось.

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

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

Рисунок 2

Взгляните на код:
import datetime

print("n---------------------------------------")
print("Enter 1 if you want to know about the year
(365 or 366 days).")

7
Урок № 5

print("Enter 2 if you want to know about


the age group.")
print("Enter 3 if you want to know about the age
in seconds.")
print("-------------------------------------\n")

birth_day = int(input("Your birth day is xx: "))


birth_month = int(input("Your birth month is xx:
"))
birth_year = int(input("Your birth year is xxxx:
"))
day = int(datetime.date.today().day)
month = int(datetime.date.today().month)
year = int(datetime.date.today().year)
number = int(input("Select what you want: "))

if month > birth_month:


age = year - birth_year
else:
age = (year - birth_year) - 1

if (number > 0) and (number < 4) and (age >= 0)


and (age < 130):
if number == 1:
if birth_year % 4 != 0:
print("It is a common year (365 days)")

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

else:
print("It is a leap year (366 days)")
elif number == 2:
print("Your group is ", end="")
if age < 1:
print("Baby")
elif (age >= 1) and (age < 3):
print("Toddler")
elif (age >= 3) and (age < 5):
print("Preschool")
elif (age >= 5) and (age < 12):
print("Gradeschooler")
elif (age >= 12) and (age < 19):
print("Teen")
elif age >= 19:
print("Adult")
elif number == 3:
print("Your age: {} year, {} month,
{} day" .format(age,
abs(month-birth_month),
abs(day-birth_day)))
seconds = ((age * 31536000) + ((month-1) *
2592000) + ((day-1) * 86400))
print("Your age is {} seconds"
.format(seconds))

else:
print("Error! Try again.")

9
Урок № 5

Разберемся подробнее, что происходит в данной


программе.
Мы уже работали с библиотекой datetime, и в этой
программе она оказалась как нельзя кстати. Исполь-
зуя данные о текущем годе datetime.date.today().
year, месяце datetime.date.today().month и дате
datetime.date.today().day, мы можем рассчитать
точный возраст человека, зная дату его рождения.
Сначала нужно предложить ввести данные пользо-
вателя (день, месяц и год рождения):
birth_day = int(input("Your birth day is xx: "))
birth_month = int(input("Your birth month is xx:
"))
birth_year = int(input("Your birth year is xxxx:
"))

А затем в переменные day, month и year записыва-


ем текущую дату:
day = int(datetime.date.today().day)
month = int(datetime.date.today().month)
year = int(datetime.date.today().year)

Далее в нашей программе используется конструк-


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

расчетах. Чтобы избежать таких ошибок, нам и нужно


знать текущий возраст:
if month > birth_month:
age = year - birth_year
else:
age = (year - birth_year) - 1

В программе использовано несколько вложенных


условий и логический оператор and. Это необходимо
для того, чтобы проверить такие условия: правильный
ли введен номер действия (есть 3 команды на выбор) и
реальный ли был указан возраст:
if (number > 0) and (number < 4) and (age >= 0)
and (age < 130):

В первом if мы сравниваем число, которое ввел


пользователь (1, 2 или 3) с единицей. Если результат
true, то программа вычисляет, был ли это високосный
год. Если результат деления не кратен 4, т. е. не делится
на 4 без остатка, то в году было 365 дней:
if number == 1:
if birth_year % 4 != 0:
print("It is a common year (365 days)")
else:
print("It is a leap year (366 days)")

Самое необычное в данном коде – это определение


возраста, вплоть до количества месяцев и дней, а также
11
Урок № 5

расчет возраста в секундах. Тут нам понадобятся базо-


вые знания математики.
Поскольку в секундах 1 год равен 31536000 с, ме-
сяц – 2592000 с, а день – 86400 с, следует использовать
такой код:
elif number == 3:
print("Your age: {} year, {} month,
{} day" .format(age,
abs(month-birth_month),
abs(day-birth_day)))
seconds = ((age * 31536000) + ((month-1) *
2592000) + ((day-1) * 86400))
print("Your age is {} seconds"
.format(seconds))

Написание данной программы позволит не только


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

12
Урок № 5
Условная инструкция

© Компьютерная Академия ШАГ


www.itstep.org

Все права на охраняемые авторским правом фото-, аудио- и видеопроизведения,


фрагменты которых использованы в материале, принадлежат их законным владель-
цам. Фрагменты произведений используются в иллюстративных целях в объёме,
оправданном поставленной задачей, в рамках учебного процесса и в учебных целях,
в соответствии со ст. 1274 ч. 4 ГК РФ и ст. 21 и 23 Закона Украины «Про авторське
право і суміжні права». Объём и способ цитируемых произведений соответствует
принятым нормам, не наносит ущерба нормальному использованию объектов
авторского права и не ущемляет законные интересы автора и правообладателей.
Цитируемые фрагменты произведений на момент использования не могут быть
заменены альтернативными, не охраняемыми авторским правом аналогами, и
как таковые соответствуют критериям добросовестного использования и честного
использования.
Все права защищены. Полное или частичное копирование материалов запрещено.
Согласование использования произведений или их фрагментов производится
с авторами и правообладателями. Согласованное использование материалов
возможно только при указании источника.
Ответственность за несанкционированное копирование и коммерческое исполь-
зование материалов определяется действующим законодательством Украины.