4.8. Организуем выбор
Информатика, 7 класс. Учебник: Кадыркулов Р. А., Рыскулбекова А. Д., Нурмуханбетова Г. К. (Алматыкітап баспасы, 2023). Раздел 4: Программирование алгоритмов на языке Python. Страницы 133–136.
Чему научишься
- Записывать на Python выбор из нескольких вариантов с помощью
if – elif – else. - Понимать, в каком порядке Python проверяет условия.
- Делать выбор через словарь (
dict): «ключ → значение». - Решать, какой способ удобнее: цепочка условий или словарь.
Разминка
Три вопроса, чтобы настроиться:
- Чем можно описать предмет? Параметрами: цвет, размер, цена, вес, марка. У телефона это, например, объём памяти, диагональ экрана и цена.
- Где выбор зависит от параметров? Магазин показывает только телефоны дешевле 150 000 тенге. Билет в кино стоит по-разному для детей и взрослых. Светофор выбирает цвет по времени.
- Что можно вычислять с помощью ветвлений? Цену билета по возрасту, оценку по баллам, название месяца по номеру, налог по сумме. Везде, где ответ зависит от условия.
Разбираемся
Когда вариантов больше двух
Обычное if – else отвечает «да или нет»: две дороги. А если дорог четыре? Для этого есть третья структура, которая называется if – elif – else. Слово elif — это «иначе, если…».
Python идёт сверху вниз. Как только нашлось первое истинное условие, он выполняет его блок и пропускает всё остальное. Если ни одно условие не сработало, выполняется else.
# Что показать по заряду батареи
level = int(input()) # заряд в процентах
if level >= 80:
print("Отлично")
elif level >= 30:
print("Нормально")
elif level >= 10:
print("Пора заряжать")
else:
print("Срочно к розетке")
Пробуем программу на разных входных данных. Особенно интересны граничные значения: 30 и 10.
| Ввод | Вывод |
|---|---|
| 95 | Отлично |
| 45 | Нормально |
| 30 | Нормально |
| 10 | Пора заряжать |
| 5 | Срочно к розетке |
⚠️ Частая ошибка. Порядок проверок важен. Поставь условие
level >= 10первым, и батарея на 95% тоже окажется «Пора заряжать»: оно верно, и всё остальное будет пропущено. Сначала пиши самые «строгие» условия, потом более мягкие.
💡 А если написать три отдельных
ifподряд, они проверяются независимо, и сработать могут сразу несколько. Для выбора «ровно одного» нужен именноelif.
Другой способ: словарь
Иногда условия не нужны. Надо просто по номеру найти название, как по номеру в телефонной книге. Для этого подходит словарь.
Словарь хранит пары «ключ: значение» в фигурных скобках {}. Ключ — это то, что мы знаем (номер). Значение — то, что хотим найти (название). Ключи не повторяются, а значения могут.
# Планеты по порядку от Солнца
planets = {1: "Меркурий", 2: "Венера", 3: "Земля", 4: "Марс",
5: "Юпитер", 6: "Сатурн", 7: "Уран", 8: "Нептун"}
n = int(input())
print(planets.get(n, "Такой планеты нет")) # второй аргумент: что показать, если ключа нет
| Ввод | Вывод |
|---|---|
| 3 | Земля |
| 8 | Нептун |
| 9 | Такой планеты нет |
⚠️ Частая ошибка. Если написать
planets[9], а ключа 9 в словаре нет, программа упадёт с ошибкойKeyError. Метод.get(ключ, запасной_ответ)не падает: он выдаёт запасной ответ.
🌟 Раньше словарь называли «неупорядоченным». В новых версиях Python (с 3.7) он помнит порядок, в котором ты добавлял пары. Но искать по ключу всё равно быстрее, чем перебирать условия.
📕 В учебнике сказано, что в Python «нет специального оператора выбора». Это устарело: с версии Python 3.10 есть оператор
match – case. Например, такая программа печатает «Выходной» для 6 и 7, «Учебный день» для 1–5 и «В неделе нет такого дня» для остальных чисел:day = int(input()) match day: case 6 | 7: print("Выходной") case 1 | 2 | 3 | 4 | 5: print("Учебный день") case _: print("В неделе нет такого дня")Если у тебя старая версия Python (до 3.10), используй
if – elif – else.
📕 В учебнике сказано, что «оператор проверки условия Raise SystemExit» завершает программу после выбора. На самом деле
raise SystemExit— это не оператор проверки условия, а команда «закончить программу немедленно». В примере на рис. 1 её вообще нет: послеelifиelseпрограмма и так заканчивается сама.
Что когда выбирать
Главный вопрос: как устроены варианты. Диапазоны («от 30 до 79») удобно описывать условиями. Точные соответствия («номер 3 = Земля») удобно хранить в словаре.
👨👩👧 Родителю. Попросите ребёнка придумать выбор из жизни: «Если на улице дождь, берём зонт, если жарко, шорты, иначе куртка». Затем пусть запишет его как
if – elif – else. Так он увидит, что программа ничем не отличается от обычных правил в семье.
Проверь себя
- Чем
elifотличается от нескольких подряд идущихif?elifпроверяется только тогда, когда предыдущие условия не сработали, и выполняется ровно один блок. Отдельныеifпроверяются независимо, и сработать могут несколько. - Почему порядок условий в цепочке важен? Python останавливается на первом истинном. Если поставить «мягкое» условие раньше «строгого», строгое никогда не дождётся своей очереди.
- Может ли в цепочке не быть
else? Да. Тогда при непопавших условиях программа просто ничего не сделает. - Когда словарь удобнее условий? Когда по точному ключу нужно найти значение: номер → название. Диапазоны в словаре неудобны.
Решаем упражнения
Анализ, синтез, оценка
№ 1 · «Анализ»
Сравни if – elif – else и словарь для организации выбора. Какой способ эффективнее? Обоснуй.
Как думать. Вспомни два примера из урока: батарея (диапазоны) и планеты (точные номера).
Решение. Для точных соответствий «номер → название» словарь короче и проще: нет длинной лесенки elif, а новую пару легко дописать. Для диапазонов и сравнений словарь не подходит: значение «45» не найдёшь среди ключей «от 30 до 79». Тут нужны условия.
Ответ: универсально лучшего способа нет. Словарь эффективнее, когда варианты точные, if – elif – else, когда нужно сравнивать и проверять диапазоны.
№ 2 · «Синтез»
Придумай задачу на выбор для Python и покажи пути решения.
Как думать. Возьми задачу с диапазонами из жизни, например цену билета в кино по возрасту. Решение: ввод, цепочка условий, проверка на границах.
Пример ответа. Условие: цена билета зависит от возраста. До 7 лет бесплатно, с 7 до 17 лет включительно 500 тенге, с 18 лет 1000 тенге.
age = int(input()) # возраст
if age < 7:
print(0) # бесплатно
elif age <= 17:
print(500) # детский билет
else:
print(1000) # взрослый билет
| Ввод | Вывод |
|---|---|
| 5 | 0 |
| 7 | 500 |
| 17 | 500 |
| 18 | 1000 |
Второй путь: сначала проверять от старших к младшим (age >= 18, потом age >= 7). Ответ тот же.
Ответ: пример задачи с решением выше; программа проверена на границах 7, 17 и 18.
№ 3 · «Оценка»
Назови сходства и отличия алгоритмов ветвления и алгоритмов выбора. Оцени, насколько они важны в программировании.
Как думать. Ветвление в учебнике — это if и if – else (одна или две дороги), выбор — if – elif – else (много дорог).
Решение.
| Ветвление | Выбор | |
|---|---|---|
| Сколько дорог | одна или две | три и больше |
| Как записывается | if, if – else |
if – elif – else, словарь |
| Что общее | есть условие; выполняется только нужный блок | есть условие; выполняется только нужный блок |
Без них программа делала бы одно и то же при любых данных. С ними она «думает»: реагирует на ввод пользователя, оценки, цены, возраст.
Ответ: общее: условия и выполнение только нужного блока. Отличие: число вариантов. Важность высокая: без выбора программа не умеет реагировать на данные.
Вопросы для размышления
№ 4 · «Вопросы для размышления», вопрос 1
Что такое алгоритм организации выбора?
Как думать. Подумай о слове «выбор»: надо выбрать одну дорогу из нескольких.
Пример ответа. Это алгоритм, где в зависимости от условий или значения выбирается один из нескольких вариантов действий, а остальные пропускаются.
Ответ: алгоритм, в котором из нескольких вариантов выполняется ровно один, подходящий по условию.
№ 5 · «Вопросы для размышления», вопрос 2
Какой пример алгоритма выбора можно привести из повседневной жизни?
Как думать. Найди ситуацию, где от условия зависит одно из трёх и более действий.
Пример ответа. Погода. Если ниже 0 °C, надеваю пуховик. Иначе, если ниже 15 °C, куртку. Иначе, если ниже 25 °C, толстовку. Иначе футболку. Или светофор: красный стоим, жёлтый ждём, зелёный идём.
Ответ: выбор одежды по температуре; сигнал светофора.
№ 6 · «Вопросы для размышления», вопрос 3
Как реализован алгоритм выбора с использованием словаря?
Как думать. Что в словаре играет роль «условия», а что «результата»?
Пример ответа. Создаём словарь {ключ: значение}. Пользователь вводит ключ, программа берёт по нему значение: print(d[ключ]) или безопасно print(d.get(ключ, "нет такого")). Условия писать не надо.
Ответ: программа по введённому ключу достаёт из словаря значение.
№ 7 · «Вопросы для размышления», вопрос 4
Чем структура if – elif – else отличается от других структур проверки условий?
Как думать. Сравни по числу дорог: if — одна, if – else — две, а if – elif – else?
Пример ответа. if выполняет блок или ничего не делает. if – else выбирает из двух. if – elif – else проверяет условия по очереди и выбирает один вариант из многих, а else ловит все оставшиеся случаи.
Ответ: она позволяет выбрать один вариант из нескольких (больше двух) с последовательной проверкой условий.
Задание
№ 8 · «Задание», задача 1
Простая. Составь программу, которая по номеру месяца выводит его название. Нарисуй блок-схему. Например, для 3 выведет «Март».
Как думать. Двенадцать месяцев, двенадцать вариантов. Сравниваем номер с 1, потом с 2, потом с 3 и так далее. Последний else ловит неправильный ввод вроде 13.
Решение. Программа:
m = int(input()) # номер месяца
if m == 1:
print("Январь")
elif m == 2:
print("Февраль")
elif m == 3:
print("Март")
elif m == 4:
print("Апрель")
elif m == 5:
print("Май")
elif m == 6:
print("Июнь")
elif m == 7:
print("Июль")
elif m == 8:
print("Август")
elif m == 9:
print("Сентябрь")
elif m == 10:
print("Октябрь")
elif m == 11:
print("Ноябрь")
elif m == 12:
print("Декабрь")
else:
print("Месяцев всего 12")
Блок-схема (ромб — проверка, прямоугольник — действие):
(Начало)
|
[Ввод m]
|
<m == 1?> --да--> [Вывод «Январь»] ----+
| нет |
<m == 2?> --да--> [Вывод «Февраль»] ---+
| нет |
... (так же для 3, 4, ... 11) |
| |
<m == 12?> --да--> [Вывод «Декабрь»] --+
| нет |
[Вывод «Месяцев всего 12»] ------------+
|
(Конец)
Проверка: 3 даёт «Март», 12 даёт «Декабрь», 1 даёт «Январь», 13 даёт «Месяцев всего 12».
Ответ: программа и блок-схема выше.
№ 9 · «Задание», задача 2
Простая. Сделай проект: пользователь вводит цифру от 0 до 9, а программа выводит её название. Например, для 3 выведет «три».
Как думать. Тут идеально подходит словарь: точное соответствие «цифра → слово». Не надо писать десять elif.
Решение.
names = {0: "ноль", 1: "один", 2: "два", 3: "три", 4: "четыре",
5: "пять", 6: "шесть", 7: "семь", 8: "восемь", 9: "девять"}
d = int(input()) # введённая цифра
print(names.get(d, "Нужна цифра от 0 до 9")) # если цифры нет, подсказка
| Ввод | Вывод |
|---|---|
| 3 | три |
| 0 | ноль |
| 9 | девять |
| 12 | Нужна цифра от 0 до 9 |
Ответ: программа со словарём выше.
№ 10 · «Задание», задача 3
⭐⭐ средняя. Составь программу: по номеру дня месяца определить декаду (десять дней), в которую он входит. Например, для 29 ответ 3.
Как думать. Дни 1–10 первая декада, 11–20 вторая, остальные третья. Тут диапазоны, значит, нужен if – elif – else. Достаточно проверять только верхние границы: раз «не больше 10» не сработало, число уже больше 10.
Решение.
day = int(input()) # день месяца
if day <= 10:
print(1)
elif day <= 20:
print(2)
else:
print(3)
| Ввод | Вывод |
|---|---|
| 1 | 1 |
| 10 | 1 |
| 11 | 2 |
| 20 | 2 |
| 21 | 3 |
| 29 | 3 |
| 31 | 3 |
Ответ: if day <= 10 даёт 1, elif day <= 20 даёт 2, иначе 3.
№ 11 · «Задание», задача 4
⭐ повышенной сложности. Алгоритм выбора удобен для тестов по предметам. Составь код теста из пяти вопросов по информатике на тему «Разветвлённые алгоритмы».
Как думать. Для каждого вопроса: показать вопрос с вариантами 1/2/3, прочитать ответ, при верном ответе прибавить 1 балл. В конце по числу баллов выбрать оценку цепочкой if – elif – else.
Решение.
score = 0 # счётчик верных ответов
print("1. Какое слово начинает проверку условия? 1) for 2) if 3) print")
if int(input()) == 2:
score += 1
print("2. Что выполнится, если ни одно условие не истинно? 1) блок else 2) блок if 3) ничего")
if int(input()) == 1:
score += 1
print("3. Чем заканчивается строка с условием? 1) точкой 2) двоеточием 3) запятой")
if int(input()) == 2:
score += 1
print("4. Сколько блоков elif можно написать? 1) только один 2) не больше трёх 3) сколько нужно")
if int(input()) == 3:
score += 1
print("5. Как проверить равенство? 1) = 2) == 3) =>")
if int(input()) == 2:
score += 1
print("Верных ответов:", score)
if score == 5:
print("Оценка: отлично")
elif score >= 3:
print("Оценка: хорошо")
else:
print("Оценка: повтори тему")
Прогон: ответы 2, 1, 2, 3, 2 дают «Верных ответов: 5» и «Оценка: отлично». Ответы 2, 1, 1, 1, 1 дают «Верных ответов: 2» и «Оценка: повтори тему».
Ответ: программа с пятью вопросами и оценкой выше; правильные ответы: 2, 1, 2, 3, 2.
Домашнее задание
№ 12 · «Домашнее задание», задание 1
Последняя цифра числа 2ⁿ повторяется по закономерности: 2, 4, 8, 6, потом снова 2, 4, 8, 6 и так далее. Число n очень большое (0 < n < 10¹⁰), так что вычислять 2ⁿ целиком нельзя. Используй алгоритм выбора и составь программу, которая находит последнюю цифру 2ⁿ. Например, у 2⁸ последняя цифра 6.
Как думать. Цифры идут по кругу с периодом 4. Значит, достаточно знать остаток от деления n на 4. Остаток 1 даёт 2, остаток 2 даёт 4, остаток 3 даёт 8, остаток 0 даёт 6.
Решение.
n = int(input()) # показатель степени
r = n % 4 # остаток от деления на 4
if r == 1:
print(2)
elif r == 2:
print(4)
elif r == 3:
print(8)
else: # остаток 0
print(6)
| Ввод n | Вывод |
|---|---|
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 6 |
| 8 | 6 |
| 10 | 4 |
| 9999999999 | 8 |
Все ответы сверены с вычислением pow(2, n, 10).
Ответ: программа выше; для 2⁸ получится 6.
Шпаргалка
Термины: алгоритм выбора, ветвление, условие, блок команд, словарь, ключ, значение.