Чтобы вручную проследить условие в Python, проверяйте выражения сверху вниз. Выполнится первая ветвь, условие которой истинно; если ни одно условие не подошло, выполнится `else`. Затем найдите значение переменной по выражению внутри выбранной ветви.
В этих задачах нужно определить конечное значение `y` без запуска программы. Отступы показывают, какие строки принадлежат каждой ветви; порядок выбора описан в документации Python.
Что означает запись
`x` и `y` — имена переменных. В начале каждого фрагмента `x` получает число. Знак `=` присваивает значение, а `==` проверяет равенство. Запись `x < 0` проверяет, меньше ли `x` нуля; `*` обозначает умножение. Единиц измерения в задачах нет.
Читайте конструкцию так:
- Подставьте заданное значение `x` в условие после `if`.
- Если условие истинно, выполните строку с отступом под ним. Остальные ветви этой конструкции пропустите.
- Если условие ложно, проверьте `elif`. Если и оно ложно, переходите к `else`.
- Вычислите `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
«`
Ответы и проверки
- `y = 5`, ветвь `else`. Тройка не меньше нуля и не равна нулю; 2 × 3 − 1 = 5.
- `y = 15`, ветвь `else`. Оба условия ложны; 2 × 8 − 1 = 15.
- `y = 3`, ветвь `if`. Число −1 меньше нуля; −(−1) + 2 = 3.
- `y = 1`, ветвь `else`. Единица положительна; 2 × 1 − 1 = 1.
- `y = 11`, ветвь `else`. Шестёрка положительна; 2 × 6 − 1 = 11.
- `y = 21`, ветвь `else`. Число 11 положительно; 2 × 11 − 1 = 21.
Как найти ошибку в решении
Если ответ отличается от ключа, сначала проверьте выбранную ветвь, а уже затем арифметику. Для отрицательного `x` важно сохранить скобки при подстановке в `-x`: минус перед отрицательным числом меняет его знак.
В ветви `else` сначала выполните умножение, затем вычитание. Не заменяйте проверку `x == 0` присваиванием: два знака равенства в условии задают сравнение, а один знак в строке с `y` — присваивание.
Для знакомства с тем, как подойти к занятиям с ребёнком, есть отдельная статья «Программирование для детей: с какого возраста и с чего начать».