Организуем выбор — 4.8, Информатика 7 класс, Кадыркулов: разбор и ответы
Ookul.kz · разбор уроков
Қазақша

Разберём любой номер вместе!

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.

Шпаргалка

Термины: алгоритм выбора, ветвление, условие, блок команд, словарь, ключ, значение.

Мини-тест

← 4.7. Практические задания · 4.9–4.10. Практические задания →