Условия в Python: как вручную проследить if, elif и else

Чтобы вручную проследить условие в Python, проверяйте выражения сверху вниз. Выполнится первая ветвь, условие которой истинно; если ни одно условие не подошло, выполнится `else`. Затем найдите значение переменной по выражению внутри выбранной ветви.

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

Что означает запись

`x` и `y` — имена переменных. В начале каждого фрагмента `x` получает число. Знак `=` присваивает значение, а `==` проверяет равенство. Запись `x < 0` проверяет, меньше ли `x` нуля; `*` обозначает умножение. Единиц измерения в задачах нет.

Читайте конструкцию так:

  1. Подставьте заданное значение `x` в условие после `if`.
  2. Если условие истинно, выполните строку с отступом под ним. Остальные ветви этой конструкции пропустите.
  3. Если условие ложно, проверьте `elif`. Если и оно ложно, переходите к `else`.
  4. Вычислите `y` только по строке выбранной ветви.

Ветви не выполняются по очереди: присваивание в одной из них определяет конечное значение `y` для всего фрагмента.

Пример 1. Подходит if

Определите конечное значение `y` в Python 3:

«`python x = -4 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

Значение `x` равно −4. Проверка `x < 0` истинна: −4 меньше нуля. Значит, выбираем первую ветвь и вычисляем `y = -x + 2`. При подстановке получаем −(−4) + 2 = 6.

Ответ: `y = 6`. Ветви `elif` и `else` здесь не выполняются.

Пример 2. Подходит elif

Определите конечное значение `y` в Python 3:

«`python x = 0 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

Ноль не меньше нуля, поэтому первую ветвь пропускаем. Проверка `x == 0` истинна, и выполняется присваивание под `elif`.

Ответ: `y = 10`. До `else` переходить не нужно: подходящая ветвь уже найдена.

Шесть задач

В каждом фрагменте определите выбранную ветвь и конечное значение `y`. Для положительного `x` не пропускайте проверку равенства нулю: она тоже должна оказаться ложной, прежде чем управление перейдёт к `else`.

1

Определите конечное значение `y` в Python 3:

«`python x = 3 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

2

Определите конечное значение `y` в Python 3:

«`python x = 8 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

3

Определите конечное значение `y` в Python 3:

«`python x = -1 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

4

Определите конечное значение `y` в Python 3:

«`python x = 1 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

5

Определите конечное значение `y` в Python 3:

«`python x = 6 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

6

Определите конечное значение `y` в Python 3:

«`python x = 11 if x < 0: y = -x + 2 elif x == 0: y = 10 else: y = 2 * x - 1

«`

Ответы и проверки

  1. `y = 5`, ветвь `else`. Тройка не меньше нуля и не равна нулю; 2 × 3 − 1 = 5.
  2. `y = 15`, ветвь `else`. Оба условия ложны; 2 × 8 − 1 = 15.
  3. `y = 3`, ветвь `if`. Число −1 меньше нуля; −(−1) + 2 = 3.
  4. `y = 1`, ветвь `else`. Единица положительна; 2 × 1 − 1 = 1.
  5. `y = 11`, ветвь `else`. Шестёрка положительна; 2 × 6 − 1 = 11.
  6. `y = 21`, ветвь `else`. Число 11 положительно; 2 × 11 − 1 = 21.

Как найти ошибку в решении

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

В ветви `else` сначала выполните умножение, затем вычитание. Не заменяйте проверку `x == 0` присваиванием: два знака равенства в условии задают сравнение, а один знак в строке с `y` — присваивание.

Для знакомства с тем, как подойти к занятиям с ребёнком, есть отдельная статья «Программирование для детей: с какого возраста и с чего начать».