Практические задания — 4.9–4.10, Информатика 7 класс, Кадыркулов: разбор и ответы
Ookul.kz · разбор уроков
Қазақша

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

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

Информатика, 7 класс. Учебник: Кадыркулов Р. А., Рыскулбекова А. Д., Нурмуханбетова Г. К. (Алматыкітап баспасы, 2023). Раздел 4: Программирование алгоритмов на языке Python. Страницы 137–139.

Чему научишься

Это практическое занятие: теории не будет, только программы. Ты закрепишь ветвления (if – else) и выбор (if – elif – else, словарь).

Что понадобится:

  • Python и место, где писать код: IDLE, Thonny или любой онлайн-интерпретатор Python. Для задания про файлы нужен именно IDLE или Thonny (программа и файлы лежат в одной папке на компьютере).
  • Блокнот, чтобы создать текстовый файл input.txt.
  • Бумага и карандаш для блок-схем. Ромб в блок-схеме — проверка условия, прямоугольник — действие, овал — начало и конец.

Как решать каждую задачу. Сначала запиши, что подаётся на вход и что должно получиться. Потом придумай 3–5 тестов, включая «граничные» (самые крайние значения). Напиши программу. Прогони её на всех тестах и сравни с ожидаемым результатом.

💡 Совет: сначала решай задачу на бумаге на одном примере. Как только понял, что делаешь руками, переписать это в код уже просто.

Решаем упражнения

Задание

№ 1 · «Задание», задание 1

Простое. Даны стороны треугольника a, b, c. Определи, прямоугольный ли он. Если да, выведи 1, иначе 0. Например, для 5, 4, 3 ответ 1.

Как думать. Треугольник прямоугольный, если квадрат самой длинной стороны равен сумме квадратов двух других (теорема Пифагора). Какая сторона самая длинная, заранее неизвестно. Поэтому сначала расставим стороны по возрастанию.

Решение.

a, b, c = map(int, input().split())   # три стороны в одной строке
x, y, z = sorted([a, b, c])           # x <= y <= z, z - самая длинная
if x * x + y * y == z * z:
    print(1)
else:
    print(0)
Ввод Вывод Почему
5 4 3 1 9 + 16 = 25
6 10 8 1 36 + 64 = 100
13 5 12 1 25 + 144 = 169
3 4 6 0 9 + 16 = 25, а 6 в квадрате 36
1 1 1 0 1 + 1 = 2, а не 1

⚠️ Частая ошибка. Нельзя проверять только a*a + b*b == c*c: тогда для ввода «5 3 4» получится 0, хотя треугольник прямоугольный. Поэтому и сортируем.

Ответ: программа выше; для 5 4 3 выведет 1.

№ 2 · «Задание», задание 2

⭐⭐ средней сложности. Число делится на 4, если на 4 делится число из его двух последних цифр. Текстовый файл input.txt содержит число P. Определи, делится ли P на 4. Если да, запиши в файл output.txt единицу, иначе ноль.

Как думать. Число из двух последних цифр это остаток от деления на 100: P % 100. Дальше проверяем, делится ли оно на 4. Читаем из файла, пишем в другой файл.

Решение.

with open("input.txt") as f:       # открываем файл для чтения
    p = int(f.read())               # читаем весь текст и превращаем в число
last_two = p % 100                  # число из двух последних цифр
with open("output.txt", "w") as f:  # открываем файл для записи
    if last_two % 4 == 0:
        f.write("1")
    else:
        f.write("0")

Что в файлах до и после запуска:

Файл input.txt Файл output.txt после запуска Пояснение
2020 1 20 делится на 4
2018 0 18 не делится на 4
7 0 7 не делится на 4
100 1 00 это 0, и 0 делится на 4

💡 Если Python пишет FileNotFoundError, значит, он не нашёл input.txt. Проверь, что файл лежит в той же папке, что и программа, и что название написано точно, без «.txt.txt».

Ответ: программа выше; 2020 даёт 1, 2018 даёт 0.

№ 3 · «Задание», задание 3

⭐⭐⭐ повышенной сложности. Даны числа A и B. Определи, какое из них целое. Только A целое: выведи 1. Только B целое: 2. Оба целые: 3. Оба дробные: 0. Нарисуй блок-схему. Например, для 6 и 4.25 ответ 1.

Как думать. Число целое, если у него нет дробной части: оно равно самому себе без дробной части, x == int(x). Проверяем каждое число отдельно, а потом разбираем четыре случая.

Решение.

a, b = map(float, input().split())   # читаем как дробные: подойдут и 6, и 4.25
a_int = (a == int(a))                # True, если у A нет дробной части
b_int = (b == int(b))
if a_int and b_int:
    print(3)
elif a_int:
    print(1)
elif b_int:
    print(2)
else:
    print(0)

Блок-схема:

(Начало)
   |
[Ввод A, B]
   |
[a_int = A целое?  b_int = B целое?]
   |
<a_int и b_int?> --да--> [Вывод 3] ------+
   | нет                                 |
<a_int?> ---------да--> [Вывод 1] -------+
   | нет                                 |
<b_int?> ---------да--> [Вывод 2] -------+
   | нет                                 |
[Вывод 0] -------------------------------+
                                         |
                                     (Конец)
Ввод Вывод
6 4.25 1
2.5 7 2
3 8 3
1.5 2.5 0
6.0 2.5 1

Ответ: программа и блок-схема выше. Число вроде 6.0 считается целым.

№ 4 · «Задание», задание 4

⭐⭐ средней сложности. Казахский календарь даёт каждому году 12-летнего цикла название животного: 1) мышь, 2) бык, 3) барс, 4) заяц, 5) улитка, 6) змея, 7) лошадь, 8) овца, 9) обезьяна, 10) петух, 11) собака, 12) кабан. Напиши программу, которая по номеру выводит название. Примеры: 4 даёт «заяц», 29 даёт «улитка».

Как думать. Номер 29 больше 12, но по смыслу цикл повторяется. 29 это третий круг (24 + 5), то есть пятое животное. Номер внутри цикла находим формулой (n - 1) % 12 + 1. Потом ищем в словаре.

Решение.

animals = {1: "мышь", 2: "бык", 3: "барс", 4: "заяц", 5: "улитка", 6: "змея",
           7: "лошадь", 8: "овца", 9: "обезьяна", 10: "петух", 11: "собака", 12: "кабан"}
n = int(input())
k = (n - 1) % 12 + 1          # номер внутри цикла: от 1 до 12
print(animals[k])
Ввод k Вывод
4 4 заяц
29 5 улитка
12 12 кабан
13 1 мышь
24 12 кабан

🌟 Если подставить настоящий год y, формула такая: (y - 4) % 12 + 1. Например, 2020 даёт 1 («мышь»), 2024 даёт 5 («улитка»).

Ответ: словарь и формула (n - 1) % 12 + 1; для 4 «заяц», для 29 «улитка».

№ 5 · «Задание», задание 5

⭐⭐ средней сложности. Номерные знаки автомобилей в Казахстане отличаются по регионам. Напиши программу, которая по заданному индексу (две цифры региона) выводит регион. Примеры: 01 даёт «Астана», 13 даёт «Туркестан».

Как думать. Это точное соответствие «индекс → регион»: идеальный случай для словаря. Ключи пишем строками, ведь «01» с нулём впереди как число превратится в 1. zfill(2) добавляет ноль, если ввели «5» вместо «05».

Решение.

regions = {"01": "Астана", "02": "Алматы", "03": "Акмолинская область",
           "04": "Актюбинская область", "05": "Алматинская область",
           "06": "Атырауская область", "07": "Западно-Казахстанская область",
           "08": "Жамбылская область", "09": "Карагандинская область",
           "10": "Костанайская область", "11": "Кызылординская область",
           "12": "Мангистауская область", "13": "Туркестанская область",
           "14": "Павлодарская область", "15": "Северо-Казахстанская область",
           "16": "Восточно-Казахстанская область", "17": "Шымкент"}
code = input().strip().zfill(2)         # убрали пробелы, добавили ведущий ноль
print(regions.get(code, "Такого индекса нет в списке"))
Ввод Вывод
01 Астана
13 Туркестанская область
17 Шымкент
5 Алматинская область
99 Такого индекса нет в списке

⚠️ Частая ошибка. Если сделать ключом число 01, Python может не принять запись (ведущие нули в числах запрещены). Индексы региона храни как строки.

💡 После 2022 года в Казахстане появились новые области, и у них есть свои индексы. Допиши их в словарь сам по актуальному списку с сайта МВД или eGov. Здесь цифры не приведены, чтобы не ошибиться.

Ответ: словарь «индекс → регион» с .get выше; для 01 «Астана», для 13 «Туркестан» (в списке выше это «Туркестанская область»).

№ 6 · «Задание», задание 6

⭐⭐ средней сложности. Даны три числа. Чётные возведи в квадрат, нечётные в куб и выведи результат. Например, для 3 5 6 получится 27 125 36.

Как думать. Чётное число делится на 2 без остатка: x % 2 == 0. Для каждого из трёх чисел делаем один и тот же выбор. Пока что запишем его три раза.

Решение.

a, b, c = map(int, input().split())
if a % 2 == 0:
    a = a ** 2          # чётное в квадрат
else:
    a = a ** 3          # нечётное в куб
if b % 2 == 0:
    b = b ** 2
else:
    b = b ** 3
if c % 2 == 0:
    c = c ** 2
else:
    c = c ** 3
print(a, b, c)
Ввод Вывод
3 5 6 27 125 36
2 4 7 4 16 343
0 1 -3 0 1 -27

В последнем тесте 0 чётное (0 в квадрате 0), а -3 нечётное: -3 % 2 в Python равно 1, поэтому это нечётное число, куб -27.

Ответ: программа выше; для 3 5 6 выведет 27 125 36.

№ 7 · «Задание», задание 7

⭐⭐ средней сложности. Даны два разных действительных числа K и P. Если ввели равные, замени оба нулями. Наименьшее из чисел замени средним арифметическим, а наибольшее удвоенным произведением. Примеры: 8 12 даёт 10 и 192; 9 9 даёт 0 и 0.

Как думать. Три случая: равны, K меньше P, K больше P. Среднее арифметическое равно (k + p) / 2, удвоенное произведение 2 * k * p. Важно: в записи k, p = ..., ... справа всё считается по старым значениям, поэтому обе новые величины получатся верными.

Решение.

k, p = map(float, input().split())
if k == p:
    k = 0
    p = 0
elif k < p:
    k, p = (k + p) / 2, 2 * k * p     # K меньше: среднее; P больше: удвоенное произведение
else:
    k, p = 2 * k * p, (k + p) / 2     # K больше: удвоенное произведение; P меньше: среднее
print(k, p)
Ввод Вывод
8 12 10.0 192.0
9 9 0 0
12 8 192.0 10.0
-2 4 1.0 -16.0
1.5 2.5 2.0 7.5

Числа выводятся с «.0», потому что мы читаем их как float. Это то же число: 10.0 равно 10.

Ответ: программа выше; для 8 12 выведет 10.0 192.0, для 9 9 выведет 0 0.

№ 8 · «Задание», задание 8

⭐⭐ средней сложности. Угол задан в градусах. Выведи 1, если угол тупой, 2 если острый, 3 если прямой. Нарисуй блок-схему. Примеры: 25 даёт 2 (острый), 90 даёт 3 (прямой).

Как думать. Острый угол меньше 90°, прямой равен 90°, тупой больше 90° (но меньше 180°). Три варианта, значит, if – elif – else.

Решение.

g = int(input())        # угол в градусах
if g < 90:
    print(2)            # острый
elif g == 90:
    print(3)            # прямой
else:
    print(1)            # тупой

Блок-схема:

(Начало)
   |
[Ввод g]
   |
<g < 90?> ----да----> [Вывод 2] --+
   | нет                          |
<g == 90?> ---да----> [Вывод 3] --+
   | нет                          |
[Вывод 1] ------------------------+
                                  |
                              (Конец)
Ввод Вывод Какой угол
25 2 острый
90 3 прямой
120 1 тупой
1 2 острый
179 1 тупой

💡 Программа считает, что угол от 1° до 179°. Для 180° и больше нужны отдельные условия (развёрнутый угол и так далее). Это можно добавить как усложнение.

Ответ: программа и блок-схема выше.

№ 9 · «Задание», задание 9

⭐⭐ средней сложности. Есть два высказывания: A = «День холодный» и B = «Снег негустой». Найди значения восьми логических выражений: 1) not A; 2) not B; 3) A and B; 4) not A and not B; 5) A or B; 6) not (not B); 7) A and not B; 8) not (A or B).

Как думать. Что истинно и что ложно, зависит от погоды: значения A и B в учебнике не даны. Значит, надо разобрать все четыре возможных пары значений. not меняет истину на ложь. and истинно, только когда истинны оба. or ложно, только когда ложны оба. И — Истина, Л — Ложь.

Решение.

№ Выражение A=И, B=И A=И, B=Л A=Л, B=И A=Л, B=Л
1 not A Л Л И И
2 not B Л И Л И
3 A and B И Л Л Л
4 not A and not B Л Л Л И
5 A or B И И И Л
6 not (not B) И Л И Л
7 A and not B Л И Л Л
8 not (A or B) Л Л Л И

Два наблюдения. Выражение 6 всегда равно B (двойное «не» сокращается). Выражения 4 и 8 всегда равны: «ни холодно, ни негусто» это то же, что «не (холодно или негусто)».

Конкретный случай: на улице холодно (A истинно), а снег густой (B ложно). Проверим на компьютере:

A = True     # день холодный
B = False    # снег негустой? Нет, он густой
print(not A, not B, A and B, not A and not B, A or B, not (not B), A and not B, not (A or B))

Выведет: False True False False True False True False. Это третий столбец таблицы (A=И, B=Л): Л, И, Л, Л, И, Л, И, Л.

Ответ: таблица выше. Для случая «A истинно, B ложно» истинны выражения 2, 5 и 7.

№ 10 · «Задание», задание 10

⭐⭐⭐ повышенной сложности. Нарисуй блок-схемы для двух программ из книги: код 1 (читает a, b, c; ветвление по c) и код 2 (читает a, b; проверяет a // b == 2 и остаток).

Как думать. Сначала переведи код в слова: что вводится, какие проверки идут по очереди, что выводится на каждой ветке. Потом каждую проверку рисуй ромбом, каждый вывод прямоугольником.

Решение. Код 1 читает три целых числа и по значению c выбирает действие. Этот код восстановлен так:

a = int(input())
b = int(input())
c = int(input())
if c == 1:
    print(a + b)
elif c == 2:
    print(a - b)
elif c == 3:
    print(a % b)
else:
    print(a // b)

Блок-схема кода 1:

(Начало)
   |
[Ввод a, b, c]
   |
<c == 1?> --да--> [Вывод a + b] ---+
   | нет                           |
<c == 2?> --да--> [Вывод a - b] ---+
   | нет                           |
<c == 3?> --да--> [Вывод a % b] ---+
   | нет                           |
[Вывод a // b] --------------------+
                                   |
                               (Конец)

Проверка на числах a = 17, b = 5:

c Что печатается Вывод
1 a + b 22
2 a - b 12
3 a % b (остаток) 2
4 (любое другое) a // b (целая часть) 3

Код 2 читает a и b. Сначала проверяет целую часть от деления, а внутри (вложенный if) остаток:

a = int(input())
b = int(input())
if a // b == 2:
    if a % b == 0:
        print(a * b)
    else:
        print(a + b)
else:
    print(a % b)

Блок-схема кода 2:

(Начало)
   |
[Ввод a, b]
   |
<a // b == 2?> --нет--------------------> [Вывод a % b] ---+
   | да                                                     |
<a % b == 0?> --да--> [Вывод a * b] -----------------------+
   | нет                                                    |
[Вывод a + b] ----------------------------------------------+
                                                            |
                                                        (Конец)

Проверка:

a b a // b Что печатается Вывод
10 5 2 a % b = 0, значит a * b 50
11 5 2 a % b = 1, значит a + b 16
20 5 4 не 2, значит a % b 0
7 5 1 не 2, значит a % b 2

Ветка else относится к внешнему if, а вложенный if стоит на отступ правее. Блок-схема это хорошо показывает.

Ответ: две блок-схемы выше; программы запускались на всех перечисленных тестах.

№ 11 · «Задание», задание 11

⭐⭐⭐ повышенной сложности. Что выведет каждый из трёх программных фрагментов? Фрагмент 1: a = 10, b = 7; если a >= 4 and b == 7 печатаем a * b, иначе a + b. Фрагмент 2: p = True, k = False, c = True и цепочка if (p and k) and c / elif p / elif p / else с вызовами print. Фрагмент 3: те же p, k, c; if p or k, внутри if not (c), с печатью 5, 10 или 20.

Как думать. Для каждого фрагмента подставь значения и иди сверху вниз до первого истинного условия. Все остальные ветки игнорируй.

Решение.

Фрагмент 1:

a = 10; b = 7
if a >= 4 and b == 7:
    print(a * b)
else:
    print(a + b)

a >= 4 истинно (10 больше 4), b == 7 тоже истинно. Значит, and истинно, выполняется print(a * b): 10 · 7 = 70.

Фрагмент 2:

p = True; k = False; c = True
if (p and k) and c:
    print(c)
elif p:
    print(not k)
elif p:
    print(not p)
else:
    print(p or k)

p and k это True and False, то есть False. Значит, (p and k) and c ложно, первый блок пропускаем. Дальше elif p: p истинно, выполняем print(not k). not k это not False, то есть True. Остальные ветки пропущены, даже второй elif p, который тоже истинен: до него очередь не дошла.

Фрагмент 3:

p = True; k = False; c = True
if p or k:
    if not (c):
        print(5)
    else:
        print(10)
else:
    print(20)

p or k это True or False, то есть истина. Заходим внутрь. not (c) это not True, то есть False, поэтому берём else внутреннего if: печатается 10. Внешний else (20) не выполняется.

Все три фрагмента запускались вместе и вывели по порядку: 70, True, 10.

Ответ: фрагмент 1 выведет 70, фрагмент 2 выведет True, фрагмент 3 выведет 10.

Шпаргалка

Термины: ветвление, алгоритм выбора, словарь, логическое выражение, блок-схема, вложенное условие, файл ввода и вывода.

Мини-тест

← 4.8. Организуем выбор · 5.1. Постановка проблемы →