Четвёртая пара углублённого курса: лестница elif и порядок веток, сложные условия и приоритет операций, цикл с условием, break и continue, исполнитель из задания 13 ЕГЭ — уроки 9–10 плана
В лестнице if / elif / else выполняется первая подошедшая ветка, остальные не проверяются. Узкое условие ставят раньше широкого: если сначала написать x > 10, то ветка x > 100 недостижима. Несколько отдельных if — другая конструкция: там сработает каждый подошедший. Ветка может не печатать, а менять переменную. Вложенный else относится к ближайшему if — по отступу.
| операция | истинна, когда | приоритет |
|---|---|---|
| not A | A ложно | 1 — раньше всех |
| A and B | истинны обе | 2 |
| A or B | истинна хотя бы одна | 3 — позже всех |
x > 0 or x < −5 and x % 2 == 0 читается как x > 0 or (x < −5 and x % 2 == 0). Двойное неравенство пишется как в математике: 1 < x < 10. Короткое замыкание: and не смотрит правую часть при ложной левой, or — при истинной; поэтому защитную проверку (x != 0) ставят первой. Де Морган: not (A and B) = not A or not B; not (A or B) = not A and not B.
Две ошибки: if x = 5 — присваивание вместо сравнения (SyntaxError); if x == 1 or 2 — синтаксис верный, а смысл нет: or вернёт 2, условие истинно всегда. Правильно: x == 1 or x == 2.
while проверяет условие ПЕРЕД каждым проходом, поэтому тело может не выполниться ни разу. Переменную двигает сам программист — иначе вечный цикл (в IDLE прерывается Ctrl+C). for берут, когда число шагов известно заранее, while — когда его определяет сама задача.
| приём | как выглядит |
|---|---|
| счётчик | k = k + 1 в теле цикла |
| накопитель | s = s + n % 10 |
| перебор цифр | while n > 0: … n = n // 10 |
| максимум | if d > m: m = d внутри цикла |
break прекращает весь цикл, continue — только текущий проход. После выхода переменная хранит уже НЕподошедшее значение: while i * i < 50 закончится при i = 8.
leap = (y % 4 == 0 and y % 100 != 0) or y % 400 == 0. Одной делимости на 4
мало: 1900 и 2100 — обычные годы, 1600 и 2000 — високосные. В феврале 29
дней, если год високосный, иначе 28; по 30 дней в апреле, июне, сентябре и
ноябре, в остальных месяцах 31.
Команда A прибавляет 1. Команда B меняет местами цифры десятков и единиц и применима, только если десятки строго меньше единиц; меняются лишь два младших разряда: 104 → 140. Цифры: n % 10 — единицы, n // 10 % 10 — десятки. Для команд A, B, A и числа 13 траектория 14, 41, 42. Неприменимая команда пропускается, а не останавливает программу.
Четвёртая пара углублённого курса: лестница elif и порядок веток, сложные условия и приоритет операций, цикл с условием, break и continue, исполнитель из задания 13 ЕГЭ — уроки 9–10 плана
В лестнице if / elif / else выполняется первая подошедшая ветка, остальные не проверяются. Узкое условие ставят раньше широкого: если сначала написать x > 10, то ветка x > 100 недостижима. Несколько отдельных if — другая конструкция: там сработает каждый подошедший. Ветка может не печатать, а менять переменную. Вложенный else относится к ближайшему if — по отступу.
| операция | истинна, когда | приоритет |
|---|---|---|
| not A | A ложно | 1 — раньше всех |
| A and B | истинны обе | 2 |
| A or B | истинна хотя бы одна | 3 — позже всех |
x > 0 or x < −5 and x % 2 == 0 читается как x > 0 or (x < −5 and x % 2 == 0). Двойное неравенство пишется как в математике: 1 < x < 10. Короткое замыкание: and не смотрит правую часть при ложной левой, or — при истинной; поэтому защитную проверку (x != 0) ставят первой. Де Морган: not (A and B) = not A or not B; not (A or B) = not A and not B.
Две ошибки: if x = 5 — присваивание вместо сравнения (SyntaxError); if x == 1 or 2 — синтаксис верный, а смысл нет: or вернёт 2, условие истинно всегда. Правильно: x == 1 or x == 2.
while проверяет условие ПЕРЕД каждым проходом, поэтому тело может не выполниться ни разу. Переменную двигает сам программист — иначе вечный цикл (в IDLE прерывается Ctrl+C). for берут, когда число шагов известно заранее, while — когда его определяет сама задача.
| приём | как выглядит |
|---|---|
| счётчик | k = k + 1 в теле цикла |
| накопитель | s = s + n % 10 |
| перебор цифр | while n > 0: … n = n // 10 |
| максимум | if d > m: m = d внутри цикла |
break прекращает весь цикл, continue — только текущий проход. После выхода переменная хранит уже НЕподошедшее значение: while i * i < 50 закончится при i = 8.
leap = (y % 4 == 0 and y % 100 != 0) or y % 400 == 0. Одной делимости на 4
мало: 1900 и 2100 — обычные годы, 1600 и 2000 — високосные. В феврале 29
дней, если год високосный, иначе 28; по 30 дней в апреле, июне, сентябре и
ноябре, в остальных месяцах 31.
Команда A прибавляет 1. Команда B меняет местами цифры десятков и единиц и применима, только если десятки строго меньше единиц; меняются лишь два младших разряда: 104 → 140. Цифры: n % 10 — единицы, n // 10 % 10 — десятки. Для команд A, B, A и числа 13 траектория 14, 41, 42. Неприменимая команда пропускается, а не останавливает программу.