Как выглядит общая форма условной инструкции if

Общий формат инструкции if

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

 if <Условие №1>:
    <Блок инструкций №1>
 elif <Условие №2>:
    <Блок инструкций №2>
 ...
 else:
    <Запасной блок инструкций>

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

Простейшая форма инструкции if

Давайте для наглядности начнем с простейшей условной инструкции. Она содержит только основную часть if, в которой вычисляется значение единственного
условного выражения и по результатам вычисления принимается решение – если конечный результат имеет значение True, интерпретатор выполняет указанный
фрагмент кода, а если конечный результат имеет значение False, интерпретатор пропускает данный фрагмент кода и начинает выполнять инструкцию, следующую за
текущей условной инструкцией (см. пример №1).

Код
Результат
pythonCodes

# Определяем польз. функцию.
def my_div(x, y):
      
    # Осуществляем проверку условного выражения.
    if y == 0:
        # Выходим из функции и возвращаем None.
        return None       
    
    # Возвращаем частное.
    return x/y 
    
# Вызываем функцию и публикуем результаты.
print(my_div(2, 4))        
print(my_div(2, 0))
0.5
None












Пример №1. Условная инструкция if и ее синтаксис.

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

Управляющая конструкция if/else

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

Код
Результат
pythonCodes

# Определяем польз. функцию.
def my_func(x, y):
      
    # Проверим равенство чисел.
    if x == y:
        print(x, 'равно', y, end='\n\n')
    else:
        print(x, 'не равно', y,)
    
# Вызываем функцию.
my_func(1.34, 1.43)        
my_func(3, 3.0)
1.34 не равно 1.43
3 равно 3










Пример №2. Расширение инструкции if за счет ключевого слова else.

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

Ключевое слово elif

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

Код
Результат
pythonCodes

# Определяем польз. функцию.
def my_price(f):
    
    # Осуществляем проверку условных выражений.
    if f == 'яблоки':
        m = '1.9 руб/кг.'                 
    elif f == 'апельсины':
        m = '3.4 руб/кг.'            
    elif f == 'бананы':
        m = '2.5 руб/кг.'            
    elif f == 'груши':
        m = '2.8 руб/кг.'            
    else:    
        m = 'Нет в продаже!'
    
    # Возвращаем результат.
    return m                
             
# Вызываем функцию и публикуем результаты.
print(my_price('апельсины'))        
print(my_price('груши'))        		
print(my_price('мандарины'))
3.4 руб/кг.
2.8 руб/кг.
Нет в продаже!



















Пример №3. Расширение инструкции if за счет ключевых слов elif.

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

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

Трехместное выражение if/else

Как и в случае с инструкцией присваивания, использовать условные инструкции в выражениях запрещается. Но иногда ситуации бывают настолько простые, что использование многострочных
условных инструкций становится нецелесообразным. Именно по этим причинам в Python была введена специальная конструкция, называемая
трехместным выражением if/else или тернарным оператором if/else, которая может использоваться непосредственно в
выражениях (см. пример №4).

Код
Результат
pythonCodes

# Инициализируем переменную.
x = 5
       
# Составляем условие.
if x == 0:
    s = False
else:
    s = True
             
# Выводим результат.
print(s)        

# Используем выражение if/else.        
s = True if x != 0 else False
# Получим тот же результат.
print(s)
True
True














Пример №4. Использование трехместного выражения if/else (часть 1).

Таким образом, трехместное выражение if/else дает тот же результат, что и предыдущая четырехстрочная инструкция if,
но выглядит выражение проще. В общем виде его можно представить как A = Y if X else Z. Здесь, как и в предыдущей инструкции, интерпретатор обрабатывает
выражение Y, только если условие X имеет истинное значение, а выражение Z обрабатывается,
только если условие X имеет ложное значение. То есть вычисления здесь также выполняются по сокращенной схеме (см. пример №5).

Код
Результат
pythonCodes

# Инициализируем переменные.
x, y = 0, 3
       
res = True if x > y else False
# Выведет False.
print(res)        
             
res = y/x if x != 0 else 'Division by zero!'
# Выведет 'Division by zero!'.
print(res)         
             
res = True if 'a' in 'abc' else False
# Выведет True.
print(res)
False
Division by zero!
True











Пример №5. Использование трехместного выражения if/else (часть 2).

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

Краткие итоги параграфа

  • Условная инструкция if/elif/else дает нам возможность изменить ход программы за счет выполнения только одного определенного блока инструкций,
    соответствующего первому попавшемуся ключевому слову с истинным условием. Обязательным является только ключевое слово if, остальные ключевые слова
    конструкции могут быть опущены. При этом разрешается использовать любое количество ключевых слов elif, но только одно ключевое слово
    else.
  • Так как в Python использовать инструкции непосредственно в выражениях не разрешается, для проверки условий в них было введено специальное трехместное
    выражение if/else. Его еще называют тернарным оператором if/else. В общем виде конструкцию можно представить как
    A = Y if X else Z. Вычисления здесь выполняются по сокращенной схеме: интерпретатор обрабатывает выражение Y, только
    если условие X истинно, а выражение Z обрабатывается, только если условие X ложно.

Вопросы и задания для самоконтроля

1. Какие из частей условной инструкции if/elif/else не являются обязательными?
Показать решение.

Ответ. Обязательным является только блок if, блоки elif и
else используются по необходимости.

2. Как в языке Python можно оформить множественное ветвление?
Показать решение.

Ответ. Прямым способом оформления множественного ветвления следует считать использование инструкции if с
несколькими блоками elif, т.к. в Python отсутствует инструкция switch, которая
присутствует в некоторых других языках программирования (например, PHP).

3. Какой из представленных форматов соответствует условной инструкции: if/elseif/else,
if/elif/else, A = Y if X else Z?
Показать решение.

Ответ. if/elif/else.

4. Исправьте в коде три ошибки.
Показать решение.

Условие
pythonCodes

a = 3547
b = 155
        
if a/b > 25
    print('a/b > 25')           
else if a/b > 15:
    print('a/b > 15')        
else:
    print('a/b <= 15'

Условие
Решение
pythonCodes

a = 3547
b = 155
        
if a/b > 25
    print('a/b > 25')           
else if a/b > 15:
    print('a/b > 15')        
else:
    print('a/b <= 15'
	
	
	
a = 3547
b = 155
        
# Не забываем про двоеточие.
if a/b > 25:
    print('a/b > 25')           
# Правильно elif.
elif a/b > 15:
    print('a/b > 15')        
else:
    # А где закрывающая скобка?
    print('a/b <= 15')

5. Дополнительные тесты по теме расположены в разделе
«Условная инструкция if/elif/else»
нашего сборника тестов.

6. Дополнительные упражнения и задачи по теме расположены в разделе
«Условная инструкция if/elif/else»
нашего сборника задач и упражнений.

Быстрый переход к другим страницам

Программирование требует от пользователя определенных познаний в сфере выбранного языка. Большинство из них поддерживает использование так называемых условных операторов. Они в той или иной форме присутствуют во всех ЯП.

Далее предстоит изучить конструкцию the if else then и условные операторы. Эта информация пригодится как новичкам, так и более опытным разработчикам. Она должна быть усвоена каждым, кто планирует заниматься созданием программного обеспечения и игр. Примеры будут приведены на the Pascal и the JavaScript.

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

Условный оператор – основа любого языка разработки. С его помощью значение некоторого выражения принимается за определение дальнейшего поведения приложения. Через the operator происходит выбор действия из нескольких предложенных.

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

  • истина (the true);
  • ложь (the false).

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

Разновидности

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

  • постфиксными;
  • тернарными;
  • с одной веткой;
  • с двумя ветвями;
  • с поддержкой нескольких ветвей (if elseif else или if else then);
  • множественного выбора – switch.

Отдельно выделяются циклы:

  • while;
  • for;
  • foreach;
  • бесконечные.

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

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

Конструкция «с одной веткой» – элементарный вариант ветвления. Заданная операция будет обрабатываться, если соблюдено то или иное условие. В случае с the JavaScript форма представления ветвления будет следующей:

Сначала здесь задается ключевое слово IF (без else и then). Далее прописывается условие (condition), а в фигурных скобках указывается реализуемый алгоритм. Блок выполняется, если результат condition становится истиной. В противном случае управление переходит к следующему написанному в программном обеспечении фрагменту.

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

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

Две ветви

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

  • If условие else;
  • If условие then.

Соответствующая конструкция поддерживает несколько блоков кода:

  • если условие является the true, выполняется алгоритм1;
  • в противном случае обрабатывается алгоритм2.

В the Pascal if then – это тоже неполное ветвление. Примеры:

Здесь, если введенное значение переменной a = 7, на экране появится приветствие. В противном случае ничего не происходит.

В данном фрагменте на экране при соблюдении указанного условия в консоль будет выведено не только приветствие, но и прощание. Это связано с тем, что writeln(‘До встречи’) не имеет отношения к ветвлению.

Примеры реализации в the JavaScript конструкции if then будут выглядеть несколько иначе. Общая форма записи:

Наглядный пример:

Чтобы увидеть, как работает данный фрагмент, значение переменной рекомендуется сначала установить на нечетное (здесь оно по умолчанию = 5), а затем – поменять на четное. На экране будет появляться запись, характеризующая тип введенного числа.

Операторные скобки

В the Pascal, работая с записями типа if else then необходимо использовать операторные скобки. Они включают в себя:

  • begin;
  • end if.

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

В приведенном выше фрагменте при if a = 10 then… ничего не произойдет. Если указать a = 7, на дисплее появится и приветствие, и прощание.

Составные условия

В the Pascal могут использоваться составные (сложные) условия. Такой подход встречается и в других языках разработки. Чтобы сформировать составное условие, необходимо применять:

  • and – составное условие истинно, когда все его простые составляющие являются true;
  • or – составное условие истинно, когда таким является хотя бы одно его составное условие.

Вот пример:

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

Множественное ветвление

The JavaScript и The Pascal, а также другие ЯП поддерживают множественное ветвление. Такой вариант иногда называется «полным оператором». Он подразумевает создание инструкций с несколькими «ветками». Встречается, когда требуется проверить разнообразные условия.

В the JS форма записи будет такой:

Соответствующий фрагмент if else then работает так:

  1. Сначала проверяется condition1. Если оно истинно, реализовывается первый блок кода.
  2. При the condition1 = false происходит проверка condition2. Присвоенный ему алгоритм работает, когда результат расчетов = true. В противном случае программа переходит к condition3 и так далее.
  3. Если все условия – это ложь, система будет реализовывать последний написанный блок.

В the Pascal if else then выглядит схематично так:

Некоторые разработчики называют соответствующую концепцию двойным ветвлением. Пример:

В соответствующем операторе if then перед записью …else…точка с запятой не ставится. Зато программисту придется использовать операторные скобки.

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

Тернарный оператор – это выражение, возвращающее то или иное значение. Сокращенная форма записи then else. В the JavaScript используется следующий вариант реализации:

В случае с Pascal достаточно использовать сокращенную форму записи условного оператора. В приведенном выше примере поддерживаются три операнда:

  • первое выражение;
  • второе выражение;
  • проверяемое системой условие.

Для разделения условия и выражений необходимо применять символы «?», «:». Если condition = true, выполняется expression1, в противном случае – expression2.

Работа со switch

Оператор if then в большинстве языков разработки очень легко использовать. Кроме обычного ветвления можно задействовать выбор варианта из нескольких предложенных. Для этого используется конструкция switch.

Выбор алгоритма действий базируется на основании полного совпадения результатов расчетов, записанный в case. В случае с JS форма записи будет такой:

Раздел default не является обязательным. Он встречается тогда, когда необходимо указать алгоритм, реализующийся, если ни одно case не обнаружено. Это своеобразная замена if then.

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

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

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus! 

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

  • Как работает 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"

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

Featured image of post Py04. Инструкция if

Курсы

Базовая информация по ветвлениям в Python

Условная инструкция if-elif-else (её ещё иногда называют оператором ветвления) — основной инструмент выбора в Python. Проще говоря, она выбирает, какое действие следует выполнить, в зависимости от значения переменных в момент проверки условия.

Синтаксис if

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

1
2
3
4
5
6
if test1:
    state1
elif test2:
    state2
else:
    state3

Простой пример (напечатает ’true’, так как 1 — истина):

1
2
3
4
5
6
>>> if 1:
...     print('true')
... else:
...     print('false')
...
true

Чуть более сложный пример (его результат будет зависеть от того, что ввёл пользователь):

1
2
3
4
5
6
7
a = int(input())
if a < -5:
    print('Low')
elif -5 <= a <= 5:
    print('Mid')
else:
    print('High')

Проверка истинности в Python

  • Любое число, не равное 0, или непустой объект — истина.
  • Числа, равные 0, пустые объекты и значение None — ложь
  • Операции сравнения применяются к структурам данных рекурсивно
  • Операции сравнения возвращают True или False
  • Логические операторы and и or возвращают истинный или ложный объект-операнд

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

  • X and Y: Истина, если оба значения X и Y истинны.
  • X or Y: Истина, если хотя бы одно из значений X или Y истинно.
  • not X: Истина, если X ложно.
  • X is Y: Истина, если объект X является объектом Y.
  • X is not Y: Истина, если объект X не является объектом Y.
  • X == Y: Истина, если значения X и Y равны.
  • X != Y: Истина, если значения X и Y не равны.
  • X > Y: Истина, если значение X больше значения Y.
  • X >= Y: Истина, если значение X больше или равно значению Y.
  • X < Y: Истина, если значение X меньше значения Y.
  • X <= Y: Истина, если значение X меньше или равно значению Y.

Трехместное выражение if/else

Следующая инструкция:

1
2
3
4
if X:
    A = Y
else:
    A = Z

довольно короткая, но, тем не менее, занимает целых 4 строки. Специально для таких случаев и было придумано выражение if/else:

В данной инструкции интерпретатор выполнит выражение Y, если X истинно, в противном случае выполнится выражение Z.

1
2
3
4
>>>
>>> A = 't' if 'spam' else 'f'
>>> A
't'

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

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

Вот еще несколько примеров задач, которые можно решить с помощью условных конструкций в Python:

  • Проверка, входит ли пользовательское значение в определенный диапазон значений.
  • Выбор правильной формы слова в зависимости от его рода (например, «яблоко» или «яблоки»).
  • Проверка наличия правильных данных в форме входа.
  • Определение, кто является победителем в игре на основе результатов игры.

Содержание

  1. Оператор if
  2. Синтаксис if
  3. Вложенные инструкции и отступы
  4. Тип данных bool, значение True и False
  5. Операторы сравнения
  6. Несколько примеров использования if и операторов сравнения
  7. Использование else
  8. Задания на закрепление if-else и операторов сравнения
  9. Конструкция elif
  10. Задания для закрепления elif
  11. Логические операторы and, or, not
  12. Задания на тренировку использования логических операторов
  13. Вложенные инструкции if
  14. Задание на тренировку
  15. Цепочки сравнений
  16. Тернарный оператор
  17. Оператор is
  18. Оператор in
  19. Пример задания на закрепление оператора in
  20. Заглушки кода. Ключевое слово pass
  21. Видеоурок по условным и логическим операторам
  22. Задания для тренировки

Оператор if

Синтаксис if

Оператор if в Python позволяет проверить, выполняется ли заданное условие, и выполнить определенные действия, если условие истинно.

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

if условие:
    блок кода

Где:

  • условие — это выражение, которое должно быть оценено как истинное или ложное.
  • блок кода — это блок инструкций, который будет выполнен, если условие истинно. Блок кода должен быть с отступом в 4 пробела (или 1 табуляция).

Например, давайте посмотрим на простой пример. Мы хотим проверить, является ли число x положительным, и если это так, мы хотим вывести сообщение «Число положительное». Если число отрицательное или равно нулю, мы не будем выводить никакого сообщения.

x = 5

if x > 0:
    print("Число положительное")

В этом примере, условие x > 0 оценивается как истинное, поэтому блок кода после оператора if будет выполнен, и выведется сообщение «Число положительное».

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

Вложенные инструкции и отступы

Обратите внимание, что в примере выше, инструкция print("Число положительное") смещена вправо относительно инструкции if. Это сделано специально, для того, чтобы показать Python, что вывод сообщения «Число положительное», будет сделан только, если выполнится условие x > 0

В этом случае говорят, что инструкция print("Число положительное") является вложенной для инструкции if.

То есть, она подчинена ей, и будет выполнена только в случае выполнения условия.

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

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

if условие1:
    if условие2:
        инструкция1
        инструкция2
    else:
        инструкция3
else:
    инструкция4

Здесь мы имеем вложенные инструкции: инструкция1 и инструкция2 находятся внутри блока кода, который связан с условие2, и этот блок кода находится внутри блока кода, который связан с условие1.

Важно понимать, что в Python для обозначения вложенных блоков кода используется отступ (4 пробела или 1 табуляция).

Отступы очень важны в Python, и неправильное их использование может привести к ошибкам в вашем коде!

Для корректного задания отступов в Python необходимо следовать определенным правилам:

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

Тип данных bool, значение True и False

Тип данных bool в Python представляет логические значения True (истина) и False (ложь). Он используется для представления результатов логических операций и условий.

Например, при выполнении операции сравнения 2 > 1 мы получим логическое значение True, а при выполнении операции сравнения 2 < 1 — логическое значение False.

Тип данных bool может быть преобразован из других типов данных. В Python любое значение может быть преобразовано в логическое значение bool. Логическое значение True соответствует числу 1, а логическое значение False — числу 0.

Приведем несколько примеров:

bool(0)    # False
bool(1)    # True
bool(2)    # True
bool(-1)   # True
bool("")   # False
bool("hello")  # True
bool([])   # False
bool([1, 2, 3])  # True
bool(None)  # False

Также тип данных bool может быть преобразован в другие типы данных, например, в целое число или строку. Логическое значение True при преобразовании в целое число будет равно 1, а False — 0. При преобразовании в строку логическое значение True будет преобразовано в строку «True», а логическое значение False — в строку «False».

int(True)   # 1
int(False)  # 0
str(True)   # 'True'
str(False)  # 'False'

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

Операторы сравнения

Операторы сравнения — это операторы, которые сравнивают два значения и возвращают значение типа bool (True или False) в зависимости от результата сравнения.

Вот некоторые из наиболее распространенных операторов сравнения в Python:

Оператор Описание
== Проверка на равенство
!= Проверка на неравенство
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно

Вот примеры использования операторов сравнения:

a = 10
b = 5

print(a == b)  # False, потому что a не равно b
print(a != b)  # True, потому что a не равно b
print(a > b)   # True, потому что a больше b
print(a < b)   # False, потому что a меньше b
print(a >= b)  # True, потому что a больше или равно b
print(a <= b)  # False, потому что a меньше или равно b

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

Например:

print("hello" == "hello")  # True, потому что оба значения равны
print("hello" != "world")  # True, потому что значения не равны
print(True == False)       # False, потому что значения не равны

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

Несколько примеров использования if и операторов сравнения

  1. Напишем программу, которая просит пользователя ввести свой возраст и выводит сообщение, является ли он совершеннолетним или нет.
age = int(input("Введите ваш возраст: "))
if age >= 18:
    print("Вы совершеннолетний!")
else:
    print("Вы несовершеннолетний.")
  1. Напишем программу, которая просит пользователя ввести два числа и выводит сообщение о том, какое из них больше или равно другому.
a = float(input("Введите первое число: "))
b = float(input("Введите второе число: "))

if a > b:
    print("Первое число больше второго.")
elif b > a:
    print("Второе число больше первого.")
else:
    print("Оба числа равны.")
  1. Напишем программу, которая запрашивает у пользователя его имя и проверяет, совпадает ли оно с заданным именем (Анна).
name = input("Введите ваше имя: ")
if name == "Анна":
    print("Вы ввели верное имя.")
else:
    print("Вы ввели неверное имя.")

Использование else

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

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

Вот синтаксис использования else вместе с if:

num = int(input("Введите число: "))
if num % 2 == 0:
    print("Число", num, "является четным.")
else:
    print("Число", num, "является нечетным.")
  1. Пример программы, которая запрашивает у пользователя пароль и проверяет, верен ли он:
password = input("Введите пароль: ")
if password == "qwerty":
    print("Добро пожаловать!")
else:
    print("Неверный пароль. Попробуйте еще раз.")

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

Задания на закрепление if-else и операторов сравнения

Задание 1. Напишите программу, которая запрашивает у пользователя его возраст и проверяет, является ли он совершеннолетним (18 лет и старше). Если пользователь совершеннолетний, то программа должна выводить сообщение «Добро пожаловать на сайт!», а если нет, то «Вы не совершеннолетний, доступ запрещен.».

Решение

age = int(input("Введите свой возраст: "))
if age >= 18:
    print("Добро пожаловать на сайт!")
else:
    print("Вы не совершеннолетний, доступ запрещен.")

Задание 2. Напишите программу, которая запрашивает у пользователя год его рождения и определяет, является ли он високосным. Если год високосный, программа должна выводить сообщение «Ваш год рождения — високосный!», а если нет, то «Ваш год рождения не является високосным.»

Решение

year = int(input("Введите год вашего рождения: "))
if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
    print("Ваш год рождения - високосный!")
else:
    print("Ваш год рождения не является високосным.")

Задание 3. Напишите программу, которая запрашивает у пользователя два числа и определяет, какое из них больше. Если первое число больше, программа должна выводить «Первое число больше», если второе — «Второе число больше», а если числа равны, то «Числа равны»

Решение

num1 = float(input("Введите первое число: "))
num2 = float(input("Введите второе число: "))
if num1 > num2:
    print("Первое число больше")
elif num1 < num2:
    print("Второе число больше")
else:
    print("Числа равны")

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

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

Вот синтаксис использования elif:

if условие1:
    # код, который выполняется, если условие1 истинно
elif условие2:
    # код, который выполняется, если условие1 ложно, а условие2 истинно
elif условие3:
    # код, который выполняется, если условие1 и условие2 ложны, а условие3 истинно
...
else:
    # код, который выполняется, если все предыдущие условия ложны

Вот несколько примеров использования elif:

Пример 1: Проверка возраста и определение категории посетителей парка развлечений

age = int(input("Введите свой возраст: "))

if age < 5:
    print("Младенец - вход свободный")
elif age < 18:
    print("Дети - стоимость билета 10 долларов")
elif age < 65:
    print("Взрослые - стоимость билета 20 долларов")
else:
    print("Пожилые - стоимость билета 10 долларов")

В этом примере if используется для проверки возраста посетителя. Если возраст меньше 5 лет, программа напечатает сообщение «Младенец — вход свободный». Если возраст не меньше 5, то проверяется следующее условие в блоке elif. Если возраст меньше 18, то программа напечатает сообщение «Дети — стоимость билета 10 долларов». Если возраст не меньше 18, то проверяется следующее условие в блоке elif. Если возраст меньше 65, то программа напечатает сообщение «Взрослые — стоимость билета 20 долларов». Если ни одно из предыдущих условий не истинно, то выполняется блок else, и программа напечатает сообщение «Пожилые — стоимость билета 10 долларов».

Пример 2: использования elif с else:

age = int(input("Введите возраст: "))
if age < 18:
    print("Вы еще не совершеннолетний")
elif age < 25:
    print("Вы молодой человек")
else:
    print("Вы уже взрослый")

В этом примере мы сначала проверяем, является ли человек несовершеннолетним (меньше 18 лет). Если это не так, то проверяем, является ли он молодым человеком (от 18 до 24 лет). Если и это не так, то выводим, что он уже взрослый.

Пример использования только elif:

x = int(input("Введите число: "))
if x > 0:
    print("Число положительное")
elif x < 0:
    print("Число отрицательное")
else:
    print("Число равно нулю")

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

Задания для закрепления elif

Задание 4. Напишите программу, которая принимает на вход возраст человека и выводит сообщение о его возрастной категории: «ребенок» (до 12 лет), «подросток» (от 12 до 18 лет), «взрослый» (от 18 до 60 лет) или «пенсионер» (старше 60 лет).

Решение

age = int(input("Введите возраст: "))

if age < 12:
    print("Ребенок")
elif age < 18:
    print("Подросток")
elif age < 60:
    print("Взрослый")
else:
    print("Пенсионер")

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

Решение

a = int(input("Введите первое число: "))
b = int(input("Введите второе число: "))
c = int(input("Введите третье число: "))

if a >= b and a >= c:
    print("Первое число наибольшее")
    if b >= c:
        print("Второе число второе по величине")
    else:
        print("Третье число второе по величине")
elif b >= a and b >= c:
    print("Второе число наибольшее")
    if a >= c:
        print("Первое число второе по величине")
    else:
        print("Третье число второе по величине")
else:
    print("Третье число наибольшее")
    if a >= b:
        print("Первое число второе по величине")
    else:
        print("Второе число второе по величине")

Логические операторы and, or, not

Логические операторы — это специальные операторы, которые позволяют соединять логические выражения между собой и строить более сложные условия. В Python есть три логических оператора: and, or и not.

Оператор and возвращает True, если оба операнда равны True, иначе он возвращает False. Например:

x = 5
y = 10
if x < 10 and y > 5:
    print("Оба условия выполнены")

Оператор or возвращает True, если хотя бы один операнд равен True, иначе он возвращает False. Например:

x = 5
y = 3
if x < 10 or y > 5:
    print("Хотя бы одно условие выполнено")

Оператор not инвертирует (делает противоположным) значение операнда. Если операнд равен True, то not возвращает False, и наоборот. Например:

x = True
if not x:
    print("x равно False")
else:
    print("x равно True")

При использовании логических операторов совместно с операторами сравнения, следует помнить о приоритете выполнения операторов. В Python порядок выполнения операций определяется следующим образом: сначала выполняются операции в скобках, затем унарные операции (например, not), затем умножение и деление, затем сложение и вычитание, затем операции сравнения (например, < и >), затем логические операторы and и or.

Примеры использования логических операторов:

x = 5
y = 10
z = 15

if x < y and y < z:
    print("y находится между x и z")

if x == 5 or y == 5:
    print("x или y равны 5")

if not (x > y):
    print("x меньше или равно y")

Задания на тренировку использования логических операторов

Задание 6. Напишите программу, которая проверяет, является ли введенное пользователем число положительным и кратным 3.

Решение

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

if num > 0 and num % 3 == 0:
    print("Число положительное и кратно 3.")
else:
    print("Число не положительное и/или не кратно 3.")

Задание 7. Напишите программу, которая проверяет, является ли введенный пользователем год високосным.

Решение

year = int(input("Введите год: "))

if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
    print("Год является високосным.")
else:
    print("Год не является високосным.")

Задание 9. Напишите программу, которая проверяет, является ли введенное пользователем число отрицательным, или равным нулю, или кратным 7.

Решение

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

if num <= 0 or num % 7 == 0:
    print("Число отрицательное или равно нулю или кратно 7.")
else:
    print("Число не отрицательное и не равно нулю и не кратно 7.")

Вложенные инструкции if

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

Пример использования вложенного if:

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

if num % 2 == 0:
    if num % 3 == 0:
        print("Число делится и на 2, и на 3")
    else:
        print("Число делится только на 2")
else:
    if num % 3 == 0:
        print("Число делится только на 3")
    else:
        print("Число не делится ни на 2, ни на 3")

В данном примере мы проверяем, делится ли введенное число на 2 и/или на 3, и выводим соответствующее сообщение. Если число делится на 2, то мы проверяем, делится ли оно еще и на 3. Если да, то выводим сообщение «Число делится и на 2, и на 3», иначе выводим «Число делится только на 2». Если число не делится на 2, то мы проверяем, делится ли оно на 3. Если да, то выводим «Число делится только на 3», иначе выводим «Число не делится ни на 2, ни на 3».

В данном примере мы использовали две вложенные инструкции if.

Также можно использовать каскадную конструкцию if-elif-else, которая позволяет проводить несколько проверок подряд, пока не будет найдено соответствующее условие. Пример:

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

if num > 0:
    print("Число положительное")
elif num < 0:
    print("Число отрицательное")
else:
    print("Число равно нулю")

В данном примере мы проверяем, является ли введенное число положительным, отрицательным или нулем, и выводим соответствующее сообщение. Если число больше нуля, то выводим «Число положительное», иначе проверяем, меньше ли число нуля. Если да, то выводим «Число отрицательное», иначе выводим «Число равно нулю».

Здесь мы использовали каскадную конструкцию if-elif-else.

Задание на тренировку

Задание 10. Напишите программу, которая запрашивает у пользователя 2 числа и определяет, какое из них больше, и насколько оно отличается от другого. Если числа равны, программа должна вывести сообщение «Числа равны».

Решение

num1 = int(input("Введите первое число: "))
num2 = int(input("Введите второе число: "))

if num1 > num2:
    print(f"Число {num1} больше на {num1 - num2}")
elif num2 > num1:
    print(f"Число {num2} больше на {num2 - num1}")
else:
    print("Числа равны")

Цепочки сравнений

В Python можно использовать несколько операторов сравнения в одном выражении. Такая запись называется цепочкой сравнений (chained comparison) и позволяет проверить, удовлетворяет ли переменная нескольким условиям одновременно.

Например, чтобы проверить, находится ли число x в диапазоне от 5 до 9 включительно, можно написать:

5 <= x <= 9

Такая запись эквивалентна следующей последовательности двух операторов сравнения:

5 <= x and x <= 9

Также можно применять цепочки сравнений с переменными разных типов, например:

'a' <= my_char <= 'z'

В этом случае мы проверяем, является ли символ my_char строчной буквой латинского алфавита.

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

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

Тернарный оператор — это оператор условия в Python, который имеет следующий синтаксис: value_if_true if condition else value_if_false.

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

Вот пример использования тернарного оператора:

x = 5
y = 10
max_value = x if x > y else y
print(max_value)

В этом примере переменной max_value присваивается значение x, если x больше y, и значение y в противном случае. Результатом выполнения программы будет число 10.

Еще один пример использования тернарного оператора:

age = 18
is_adult = True if age >= 18 else False
print(is_adult)

В этом примере переменной is_adult присваивается значение True, если возраст (age) больше или равен 18, и значение False в противном случае. Результатом выполнения программы будет значение True.

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

Оператор is

Оператор is используется для проверки идентичности объектов в Python. Он возвращает значение True, если два объекта имеют одинаковый идентификатор (адрес в памяти) и False, если идентификаторы объектов разные.

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

x is y

где x и y — переменные или объекты.

Примеры использования оператора is:

a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(a is b)  # True, т.к. a и b ссылаются на один и тот же объект
print(a is c)  # False, т.к. a и c имеют разные объекты, даже если они имеют одинаковое значение

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

a = [1, 2, 3]
b = a

if a is b:
    print("a и b ссылаются на один и тот же объект")
else:
    print("a и b ссылаются на разные объекты")

Кроме оператора is, в Python также есть оператор ==, который используется для проверки равенства значений переменных. Разница между is и == в том, что is проверяет идентичность объектов, а == — равенство их значений.

Оператор in

Оператор in используется для проверки наличия элемента в коллекции (например, в списке, кортеже, множестве, строке и др.). Как использовать данный оператор в строках, я подробно описывал на уроке работа со строками.

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

элемент in коллекция

где элемент – значение, которое необходимо проверить на наличие в коллекции.

Результатом выполнения оператора in является булевое значение True, если элемент содержится в коллекции, и False в противном случае.

Рассмотрим примеры использования оператора in:

# проверка наличия элемента в списке
fruits = ['apple', 'banana', 'cherry']
if 'banana' in fruits:
    print('Ура! Мы нашли банан!')

# проверка наличия символа в строке
word = 'hello'
if 'h' in word:
    print('Первая буква слова - "h"')

# проверка наличия ключа в словаре
person = {'name': 'John', 'age': 30, 'city': 'New York'}
if 'age' in person:
    print('Персона имеет возраст')

# проверка наличия элемента в множестве
set1 = {1, 2, 3, 4, 5}
if 3 in set1:
    print('Число 3 содержится в множестве set1')

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

Ура! Мы нашли банан!
Первая буква слова - "h"
Персона имеет возраст
Число 3 содержится в множестве set1

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

# проверка отсутствия элемента в списке
fruits = ['apple', 'banana', 'cherry']
if 'orange' not in fruits:
    print('Апельсина в списке нет :(')

# проверка отсутствия символа в строке
word = 'hello'
if 'z' not in word:
    print('Буквы "z" в слове нет')

Результатом выполнения программы будет:

Апельсина в списке нет :(
Буквы "z" в слове нет

Пример задания на закрепление оператора in

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

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

Вот код решения:

word = input("Введите слово: ")
if word == word[::-1]:
    print("Слово является палиндромом")
else:
    print("Слово не является палиндромом")

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

С использованием оператора in мы могли бы написать это условие так:

if all(word[i] == word[-i-1] for i in range(len(word)//2)):
    print("Слово является палиндромом")
else:
    print("Слово не является палиндромом")

Здесь мы использовали оператор all() для проверки того, что каждый символ в слове равен соответствующему символу в перевернутом слове. Для этого мы проходимся по половине длины слова с помощью range(len(word)//2) и проверяем равенство символов, используя индексы -i-1 для доступа к символам с конца слова.

Заглушки кода. Ключевое слово pass

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

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

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

if x > 0:
    pass
else:
    print("x is negative")

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

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

Задания для тренировки

Задание 11. Известны два расстояния: одно в километрах, другое — в футах ( 1 фут 0,305 м ). Какое из расстояний меньше?

Решение

Для решения этой задачи нужно привести расстояния к одной единице измерения, например, в метры. Для этого расстояние в футах необходимо умножить на коэффициент перевода 0,305. Затем сравнить полученные значения.

Пример решения задачи на Python:

distance_km = 10
distance_ft = 32808.4

distance_m_km = distance_km * 1000
distance_m_ft = distance_ft * 0.305

if distance_m_km < distance_m_ft:
    print("Расстояние в километрах меньше")
else:
    print("Расстояние в футах меньше")

В данном примере известно расстояние в 10 км и 32808,4 футов. Расстояние в километрах переводится в метры умножением на 1000. Расстояние в футах переводится в метры умножением на 0,305. Затем происходит сравнение расстояний в метрах с помощью оператора сравнения if. Выводится сообщение о том, какое расстояние меньше.

Задание 12. Даны радиус круга и сторона квадрата. У какой фигуры площадь больше?

Решение

Для решения задачи нужно использовать формулы для вычисления площади круга и квадрата. Площадь круга вычисляется по формуле S = πr², где r — радиус круга, а π — математическая константа, примерное значение которой равно 3,14. Площадь квадрата вычисляется по формуле S = a², где a — длина стороны квадрата.

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

Вот код решения задачи на Python:

import math

radius = float(input("Введите радиус круга: "))
side = float(input("Введите длину стороны квадрата: "))

area_circle = math.pi * radius ** 2
area_square = side ** 2

if area_circle > area_square:
    print("Площадь круга больше")
else:
    print("Площадь квадрата больше")

В данном коде мы импортировали модуль math, который содержит математические функции, включая константу π и функцию возведения в степень **. Затем мы запросили у пользователя значения радиуса и длины стороны квадрата, вычислили площади фигур и сравнили их с помощью условного оператора if. Если площадь круга больше, то выводится сообщение «Площадь круга больше», иначе выводится сообщение «Площадь квадрата больше».

Задание 13. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8: первое число — номер вертикали (при счете слева направо), второе — номер горизонтали (при счете снизу вверх). Даны натуральные числа a, b, c, d, каждое из которых не превосходит 8. На поле (a, b) расположена ладья. Может ли ладья пойти в клетку с координатами c,d?

Решение

Для решения этой задачи нужно проверить, находятся ли клетки (a, b) и (c, d) на одной горизонтали или вертикали. Если да, то ладья может пойти в клетку (c, d), иначе она не может туда пойти.

Пример кода на Python:

a = int(input("Введите номер вертикали (от 1 до 8) для начальной клетки: "))
b = int(input("Введите номер горизонтали (от 1 до 8) для начальной клетки: "))
c = int(input("Введите номер вертикали (от 1 до 8) для конечной клетки: "))
d = int(input("Введите номер горизонтали (от 1 до 8) для конечной клетки: "))

if a == c or b == d:
    print("Ладья может пойти в клетку ({}, {})".format(c, d))
else:
    print("Ладья не может пойти в клетку ({}, {})".format(c, d))

Пример работы программы:

Введите номер вертикали (от 1 до 8) для начальной клетки: 2
Введите номер горизонтали (от 1 до 8) для начальной клетки: 3
Введите номер вертикали (от 1 до 8) для конечной клетки: 4
Введите номер горизонтали (от 1 до 8) для конечной клетки: 3
Ладья может пойти в клетку (4, 3)

Задание 14. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8: первое число — номер вертикали (при счете слева направо), второе — номер горизонтали (при счете снизу вверх). Даны натуральные числа a, b, c, d, каждое из которых не превосходит 8. На поле (a, b) расположена фигура — слон. Может ли слон пойти в клетку с координатами c,d?

Решение

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

Алгоритм решения:

  1. Найдем разность между номерами вертикалей и горизонталей начальной и конечной клеток, сохраним в переменных dx и dy.
  2. Если значение модуля dx и модуля dy совпадает, то слон может пойти в конечную клетку.
  3. Если значение модуля dx и модуля dy не совпадает, то слон не может пойти в конечную клетку.

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

a, b, c, d = 2, 3, 5, 6

dx = abs(c - a)
dy = abs(d - b)

if dx == dy:
    print("Слон может пойти в клетку ({}, {})".format(c, d))
else:
    print("Слон не может пойти в клетку ({}, {})".format(c, d))

В данном примере начальная клетка имеет координаты (2, 3), а конечная клетка — (5, 6). После выполнения программы мы получим вывод:

Слон может пойти в клетку (5, 6)

Задание 15. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8: первое число — номер вертикали (при счете слева направо), второе — номер горизонтали (при счете снизу вверх). Даны натуральные числа a, b, c, d, каждое из которых не превосходит 8. На поле (a, b) расположена фигура — король. Может ли король пойти в клетку с координатами c,d?

Решение

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

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

if abs(a-c) <= 1 and abs(b-d) <= 1:
    print("Король может пойти в клетку с координатами", c, d)
else:
    print("Король не может пойти в клетку с координатами", c, d)

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

Задание 16. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8: первое число — номер вертикали (при счете слева направо), второе — номер горизонтали (при счете снизу вверх). Даны натуральные числа a, b, c, d, каждое из которых не превосходит 8. На поле (a, b) расположена фигура — ферзь. Может ли ферзь пойти в клетку с координатами c,d?

Решение

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

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

Проверить, находится ли клетка с координатами c,d на той же вертикали или горизонтали, что и ферзь, можно с помощью оператора сравнения ==. Если a == c или b == d, то клетка с координатами c,d находится на той же вертикали или горизонтали, что и ферзь.

Чтобы проверить, находится ли клетка с координатами c,d на той же диагонали, что и ферзь, нужно убедиться в том, что разница между вертикальными координатами клеток равна разнице между горизонтальными координатами. То есть, если abs(a-c) == abs(b-d), то клетка с координатами c,d находится на той же диагонали, что и ферзь.

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

if a == c or b == d or abs(a-c) == abs(b-d):
    print("Ферзь может пойти в клетку (", c, ",", d, ")")
else:
    print("Ферзь не может пойти в клетку (", c, ",", d, ")")

Здесь a, b, c и d – это переменные, содержащие координаты ферзя и целевой клетки. Если ферзь может пойти в клетку с координатами c,d, то на экран будет выведено сообщение «Ферзь может пойти в клетку (c, d)», иначе – «Ферзь не может пойти в клетку (c, d)».

Задание 17. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8: первое число — номер вертикали (при счете слева направо), второе — номер горизонтали (при счете снизу вверх). Даны натуральные числа a, b, c, d, каждое из которых не превосходит 8. На поле (a, b) расположена фигура — конь. Может ли конь пойти в клетку с координатами c,d?

Решение

Для решения задачи необходимо определить, может ли конь переместиться из клетки (a, b) в клетку (c, d) за один ход. Конь ходит буквой «Г», т.е. сначала движется на две клетки по вертикали или горизонтали, а затем на одну клетку в перпендикулярном направлении.

Таким образом, конь может переместиться в клетку (c, d), если разница между номерами вертикалей и горизонталей для клеток (a, b) и (c, d) составляет (1, 2) или (2, 1).

Решение на Python:

# координаты начальной позиции фигуры
a = 2
b = 3

# координаты конечной позиции
c = 4
d = 6
if abs(a-c) == 2 and abs(b-d) == 1 or abs(a-c) == 1 and abs(b-d) == 2:
    print("Фигура может пойти в клетку с координатами", c, d)
else:
    print("Фигура не может пойти в клетку с координатами", c, d)

Задание 18. Если целое число m делится нацело на целое число n, то вывести на экран частное от деления, в противном случае вывести сообщение «m на n нацело не делится».

Решение

Для решения задачи можно использовать оператор условного выражения if-else и оператор целочисленного деления //. Если при делении числа m на n остаток равен нулю, то m делится на n нацело и на экран выводится частное от деления, иначе выводится сообщение об ошибке.

Пример решения:

m = 20
n = 5

if m % n == 0:
    quotient = m // n
    print("Частное от деления:", quotient)
else:
    print("m на n нацело не делится")

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

Частное от деления: 4

В данном примере число m равно 20, число n равно 5, поэтому m нацело делится на n. В результате выполнения программы на экране выводится сообщение «Частное от деления: 4», что соответствует частному от деления m на n.

Задание 19. Дано двузначное число. Определить: а) какая из его цифр больше: первая или вторая; б) одинаковы ли его цифры.

Решение

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

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

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

Пример решения на Python:

num = 56

# определяем первую и вторую цифры
digit1 = num // 10
digit2 = num % 10

# выводим результаты
if digit1 > digit2:
    print("Первая цифра больше второй")
elif digit2 > digit1:
    print("Вторая цифра больше первой")
else:
    print("Цифры равны")

Вывод: первая цифра больше второй.

Задание 20. Дано число. Определить, является ли число палиндромом («перевертышем»), т. е. таким числом, десятичная запись которого читается одинаково слева направо и справа налево.

Решение

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

Вот пример кода на Python, решающего данную задачу:

num = input("Введите число: ")
if num == num[::-1]:
    print("Число является палиндромом")
else:
    print("Число не является палиндромом")

На вход программе необходимо ввести проверяемое число, после чего программа выведет соответствующее сообщение о том, является ли число палиндромом или нет.

Задание 21. Дано трехзначное число. Определить: а) является ли сумма его цифр двузначным числом; б) является ли произведение его цифр трехзначным числом; в) больше ли числа а произведение его цифр; г) кратна ли пяти сумма его цифр; д) кратна ли сумма его цифр числу а.

Решение

number = input("Введите трехзначное число: ")
a = int(number[0]) # первая цифра
b = int(number[1]) # вторая цифра
c = int(number[2]) # третья цифра

# а) проверка суммы цифр на двузначность
if (a + b + c) > 9 and (a + b + c) < 100:
    print("Сумма цифр является двузначным числом")
else:
    print("Сумма цифр не является двузначным числом")

# б) проверка произведения цифр на трехзначность
if a * b * c > 99 and a * b * c < 1000:
    print("Произведение цифр является трехзначным числом")
else:
    print("Произведение цифр не является трехзначным числом")

# в) сравнение числа а и произведения цифр
if a > (b * c):
    print("Число а больше произведения цифр")
else:
    print("Произведение цифр больше числа а")

# г) проверка кратности пяти суммы цифр
if (a + b + c) % 5 == 0:
    print("Сумма цифр кратна пяти")
else:
    print("Сумма цифр не кратна пяти")

# д) проверка кратности суммы цифр числу а
if (a + b + c) % int(number) == 0:
    print("Сумма цифр кратна числу а")
else:
    print("Сумма цифр не кратна числу а")

Пример работы:

Введите трехзначное число: 456
Сумма цифр является двузначным числом
Произведение цифр не является трехзначным числом
Произведение цифр больше числа а
Сумма цифр не кратна пяти
Сумма цифр не кратна числу а

Идеи для задач взяты из Сборника задач по программированию Д.М. Златопольского

Понравилась статья? Поделить с друзьями:
  • Руководство по реабилитации боголюбова
  • Руководство по эксплуатации эдс 30
  • D link dns 323 инструкция на русском
  • Как наносить жидкие обои на потолок своими руками пошаговая инструкция
  • Skoda octavia руководство пользователя