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

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

4.7. Практические задания

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

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

Это практический урок: теории нет, только задачи. Все они на условия в Python: простые, вложенные и составные (if, elif, else, and, or, not).

Что нужно под рукой:

  • Python: IDLE, Thonny или любой онлайн-интерпретатор. Создай файл, вставь код, запусти, введи тестовые числа.
  • Шпаргалка по составным условиям:
    • and верно, только если верны оба условия;
    • or верно, если верно хотя бы одно;
    • not переворачивает результат;
    • == значит «равно», != значит «не равно».
  • Привычка проверять каждую программу на нескольких входных данных, особенно на граничных: равные числа, нули, отрицательные.

Вопросы из учебника «Подумай»:

  • Как описать одно из своих ежедневных действий составным условием? «Если сделал уроки И на улице не дождь, иду гулять». Или: «Если проголодался ИЛИ пришло время обеда, иду на кухню».
  • Какие бывают вложенные условия в жизни? «Если есть билет, то: если нет очереди, захожу сразу, иначе жду». Одно условие спрятано внутри другого.

Во всех задачах входные числа вводятся в одной строке через пробел, поэтому читаем их так: a, b = map(int, input().split()).

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

Практическая работа

№ 1 · «Практическая работа», задание 1

Базовый уровень. Даны числа a и b. Напиши программу, которая находит меньшее из них. Пример: ввод 15 87, результат 15.

Как думать. Сравни числа: если a меньше b, ответ a, иначе b. Если числа равны, подойдёт любое.

Решение.

a, b = map(int, input().split())

# выводим то из чисел, которое меньше
if a < b:
    print(a)
else:
    print(b)
Ввод Вывод
15 87 15
87 15 15
40 40 40 (числа равны, любое подходит)
-3 -8 -8 (из отрицательных меньше то, что дальше от нуля)

Ответ: if a < b: print(a), иначе print(b). Для 15 87 выведет 15.

№ 2 · «Практическая работа», задание 2

Базовый уровень. Даны числа a, b, c и d. Напиши программу поиска наибольшего из них. Пример: ввод 14 26 98 52, результат 98.

Как думать. Число a наибольшее, если оно не меньше каждого из остальных. Это три условия сразу: a >= b and a >= c and a >= d. Если a не наибольшее, ищем среди b, c, d. Тогда b наибольшее, если оно не меньше c и d. Дальше остаются c и d.

Решение.

a, b, c, d = map(int, input().split())

# a наибольшее, если не меньше всех остальных
if a >= b and a >= c and a >= d:
    print(a)
elif b >= c and b >= d:      # a уже не наибольшее, сравниваем b с c и d
    print(b)
elif c >= d:                 # остались c и d
    print(c)
else:
    print(d)
Ввод Вывод Какая ветка
14 26 98 52 98 третья (c >= d)
5 7 6 1 7 вторая
9 3 4 5 9 первая
5 3 4 9 9 последняя (else)
1 1 1 1 1 первая (знак >= учитывает равные)

💡 В Python есть готовая функция max(a, b, c, d), но в этой задаче нужно показать, как найти наибольшее условиями.

Ответ: программа выше. Для 14 26 98 52 выведет 98.

№ 3 · «Практическая работа», задание 3

«Погоня в поле» (средней сложности. Волк и лиса одновременно увидели зайца и погнались за ним. Скорость зайца v м/с, волка m м/с, лисы k м/с. 1) Запиши условия, при которых ни волк, ни лиса не догонят зайца. 2) Напиши программу: выведи 0, если зайца не догонит никто; 1, если первым догонит волк; 2, если первой догонит лиса. Порядок ввода: v, m, k. Пример: ввод 15 12 14, результат 0.

Как думать. Хищник догонит зайца, только если бежит быстрее него. Если скорость такая же или меньше, расстояние не сокращается. Если быстрее зайца бегут оба, первым добежит тот, у кого скорость больше.

Допущения: хищники начинают с одинакового расстояния до зайца и бегут с постоянной скоростью (на рисунке этого не видно, поэтому берём простейший случай).

Решение.

  1. Зайца не догонят, если волк не быстрее зайца и лиса не быстрее зайца: m <= v and k <= v.

  2. Программа:

v, m, k = map(int, input().split())    # скорости: заяц, волк, лиса

if m <= v and k <= v:     # никто не быстрее зайца
    print(0)
elif m >= k:              # кто-то догоняет, и волк быстрее лисы (или равен ей)
    print(1)
else:                     # быстрее лиса
    print(2)

Почему вторая ветка верна. Сюда мы попадаем, только если хотя бы один хищник быстрее зайца. Из двух хищников догонит первым тот, кто быстрее. Если быстрее зайца только лиса, то k > v >= m, и m >= k неверно, мы уйдём в else. Если быстрее зайца только волк, то m > v >= k, и m >= k верно.

Ввод (v m k) Что происходит Вывод
15 12 14 оба медленнее зайца 0
10 14 12 оба быстрее, волк быстрее лисы 1
10 12 14 оба быстрее, лиса быстрее волка 2
10 14 9 быстрее зайца только волк 1
10 9 14 быстрее зайца только лиса 2
10 10 10 скорости равны, никто не догоняет 0

⚠️ Частая ошибка. Если написать m < v and k < v (строго меньше), то при равных скоростях программа решит, что кто-то догонит. Но при равной скорости расстояние не меняется, значит заяц убегает. Нужно <=.

Ответ: 1) m <= v and k <= v; 2) программа выше. Для 15 12 14 выведет 0.

№ 4 · «Практическая работа», задание 4

Средней сложности. Даны два высказывания: A = «Аудиоколонки предназначены для прослушивания звука», B = «Аудиоколонки предназначены для прослушивания и записывания звука». Определи значения восьми логических выражений: 1) не A; 2) не B; 3) A и B; 4) не A и (не B); 5) A или B; 6) или (не B); 7) A или не B; 8) не (A и B).

Как думать. Сначала решаем, верны ли A и B. Колонки звук воспроизводят, но не записывают. Значит, A верно, а B нет (записывает микрофон). Дальше всё считаем по таблице истинности.

📕 В выражении 6 напечатано «или (не B)» без первой части. Скорее всего, потерялась буква A, и должно быть «A или (не B)». Так мы и считаем.

Решение. A = True, B = False.

№ Выражение Расчёт Значение
1 не A not True False
2 не B not False True
3 A и B True and False False
4 не A и (не B) False and True False
5 A или B True or False True
6 A или (не B) True or True True
7 A или не B True or True True
8 не (A и B) not False True

Ответ: 1) False; 2) True; 3) False; 4) False; 5) True; 6) True; 7) True; 8) True.

№ 5 · «Практическая работа», задание 5

Базовый уровень. На числовой оси даны целые числа x1 и x2 и точка A. Определи, лежит ли точка A между этими числами. Если да, выведи «да», иначе «нет». Пример: ввод -5 7 2, результат «да».

Как думать. Порядок ввода: x1, x2, A (так сходится пример: A = 2 между −5 и 7). Заранее не известно, какое из чисел x1 и x2 левее. Поэтому нужны два случая: «x1 левее A, а x2 правее» или «x2 левее A, а x1 правее».

Решение.

x1, x2, A = map(int, input().split())

# A между числами, какое бы из них ни стояло левее
if (x1 < A and A < x2) or (x2 < A and A < x1):
    print('да')
else:
    print('нет')
Ввод Вывод Почему
-5 7 2 да -5 < 2 < 7
7 -5 2 да числа в другом порядке, тот же результат
-5 7 9 нет A правее обоих
-5 7 7 нет A совпала с концом, строго между не лежит
3 3 3 нет все совпали, между ними ничего нет

Ответ: (x1 < A and A < x2) or (x2 < A and A < x1). Для -5 7 2 выведет «да».

№ 6 · «Практическая работа», задание 6

⭐ повышенной сложности. Определи, является ли пятизначное число палиндромом. Если да, выведи 1, иначе 0. Примеры: 15853 даёт 0, 25652 даёт 1.

Как думать. У пятизначного числа abcde палиндром получается, если первая цифра равна пятой и вторая равна четвёртой. Средняя (третья) цифра ни с чем не сравнивается, она стоит ровно посередине. Цифры достаём делением: n // 10000, n // 1000 % 10, n // 10 % 10, n % 10.

Решение.

n = int(input())

a = n // 10000        # первая цифра
b = n // 1000 % 10    # вторая
d = n // 10 % 10      # четвёртая
e = n % 10            # пятая

# палиндром: первая = пятая И вторая = четвёртая
if a == e and b == d:
    print(1)
else:
    print(0)
Ввод Цифры Вывод
15853 1 и 3 разные 0
25652 2 = 2 и 5 = 5 1
12321 1 = 1 и 2 = 2 1
10001 1 = 1 и 0 = 0 1
12345 все разные 0

Ответ: if a == e and b == d: выводим 1, иначе 0.

№ 7 · «Практическая работа», задание 7

«О погоде» (средней сложности. На карте показана однодневная зимняя погода в северных, восточных, южных, западных и центральных областях Казахстана (рис. 3). Напиши программу, которая находит модуль разницы между самой высокой и самой низкой температурой. Пример: температуры −16, −12, 11, 5, −8.

Как думать. Из пяти температур нужны наибольшая и наименьшая. Их разность и есть размах температур. Модуль нужен, чтобы ответ был без минуса, хотя наибольшее минус наименьшее и так не меньше нуля.

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

t1 = int(input())
t2 = int(input())
t3 = int(input())
t4 = int(input())
t5 = int(input())

hi = max(t1, t2, t3, t4, t5)     # самая высокая
lo = min(t1, t2, t3, t4, t5)     # самая низкая
print(abs(hi - lo))              # модуль разности

Проверка на примере: самая высокая 11, самая низкая −16. Разность 11 − (−16) = 27. Ответ 27.

Ввод (по одному числу в строке) Вывод
−16, −12, 11, 5, −8 27
0, 0, 0, 0, 0 0
−5, −3, −9, −4, −6 6

📕 В учебнике в пояснении напечатано «|−16 −11| = 25» и ответ 25. Правильно «|−16 − 11| = 27», и ответ 27: самая высокая температура 11 (не −11), а 16 + 11 = 27.

Ответ: abs(max(...) - min(...)). Для примера выведет 27.

№ 8 · «Практическая работа», задание 8

Средней сложности. Найди значения логических выражений (0 — ложь, 1 — истина): а) (0 или 1) и (0 или 1); б) (0 или 1) и (0 и 1); в) (0 или 1) и (не (0 или 1)); г) не (1 или 1); д) (1 или 0) и (1 и 1); е) (1 и 1) или (1 и 0); ж) (1 или 1) или не (0 и 1).

Как думать. Считаем изнутри скобок. Сначала самые маленькие скобки, потом идём наружу. Вспомни: и даёт 1, только если обе части 1; или даёт 0, только если обе части 0; не меняет 0 на 1 и 1 на 0.

Решение.

  • а) (0 или 1) = 1, (0 или 1) = 1. Дальше 1 и 1 = 1.
  • б) (0 или 1) = 1, (0 и 1) = 0. Дальше 1 и 0 = 0.
  • в) (0 или 1) = 1, (не (0 или 1)) = не 1 = 0. Дальше 1 и 0 = 0.
  • г) (1 или 1) = 1, не 1 = 0.
  • д) (1 или 0) = 1, (1 и 1) = 1. Дальше 1 и 1 = 1.
  • е) (1 и 1) = 1, (1 и 0) = 0. Дальше 1 или 0 = 1.
  • ж) (1 или 1) = 1, (0 и 1) = 0, не 0 = 1. Дальше 1 или 1 = 1.

Все ответы проверены в Python, где 0 и 1 заменены на False и True.

Ответ: а) 1; б) 0; в) 0; г) 0; д) 1; е) 1; ж) 1.

№ 9 · «Практическая работа», задание 9

⭐ повышенной сложности. Напиши программы на Python по двум блок-схемам.

Схема 1: ввод k, m. Если k%m=3, то p = k**3, иначе p = m%k. Вывод p.

Схема 2: ввод a, b, c, d. Если a>b, то проверяем a>c: если да, p = a%d, иначе p = b%d. Если a>b неверно, p = (b+c)%d. Вывод p.

Как думать. Ромб блок-схемы — это if. Ветка «Да» — тело if, «Нет» — else. Если в «Да» снова ромб, получается вложенный if. В схеме знак = в ромбе значит сравнение, поэтому в Python пишем ==. Обрати внимание: % — остаток, ** — степень.

Решение.

Схема 1:

k, m = map(int, input().split())

if k % m == 3:        # ромб «k%m=3»
    p = k ** 3        # «Да»
else:
    p = m % k         # «Нет»
print(p)

Схема 2:

a, b, c, d = map(int, input().split())

if a > b:                 # первый ромб «a>b»
    if a > c:             # второй ромб «a>c»
        p = a % d         # «Да»
    else:
        p = b % d         # «Нет»
else:
    p = (b + c) % d       # первый ромб, «Нет»
print(p)

Проверка запуском:

Схема Ввод Расчёт Вывод
1 8 5 8 % 5 = 3, значит p = 8 ** 3 512
1 2 7 2 % 7 = 2 не равно 3, значит p = 7 % 2 1
2 9 4 5 7 9 > 4, 9 > 5, значит p = 9 % 7 2
2 6 2 9 4 6 > 2, но 6 > 9 неверно, значит p = 2 % 4 2
2 3 8 1 5 3 > 8 неверно, значит p = (8 + 1) % 5 4

⚠️ Частая ошибка. В схеме 1 деление на ноль даёт ошибку: при m = 0 упадёт k % m, при k = 0 упадёт m % k. Для школьных тестов берут ненулевые числа. В настоящей программе стоило бы проверить это условием.

Ответ: программы выше. Схема 1 для 8 5 выдаёт 512, схема 2 для 9 4 5 7 выдаёт 2.

№ 10 · «Практическая работа», задание 10

⭐ повышенной сложности. Найди ошибки в трёх программах (каждая считает что-то с числами a, b, c).

Программа 1:

a=int(input())
b=input()
if a>0:
    if a-b>0
        a =a-b
    else:
        a=a+b+c
else:
    a=a**2
print(a)

Программа 2:

a=intput(int())
b=int(input())
c==(input())
if a%2=0:
    if b%2==1
        k:=b//c
    else
        k=a//c
else:
    k=(a+b)%c
print('k')

Программа 3:

a=int(input()
b=int(input)
c=(input())
max:=a
if max< b
    max==b
if max< c
    max==c
print('max')

Как думать. Читай код строку за строкой и задавай три вопроса. Всё ли написано правильно (скобки, двоеточия, названия)? Все ли переменные заданы? Тот ли знак: = кладёт значение, == сравнивает?

Решение.

Программа 1.

  1. b=input() читает строку, а не число. Потом a-b вычитает строку из числа, и будет ошибка TypeError. Нужно b=int(input()).
  2. После if a-b>0 нет двоеточия. Нужно if a-b>0:.
  3. Переменная c нигде не вводится, а в a=a+b+c используется: будет NameError. Нужно добавить c=int(input()).
a = int(input())
b = int(input())        # было input()
c = int(input())        # добавили ввод c
if a > 0:
    if a - b > 0:       # было без двоеточия
        a = a - b
    else:
        a = a + b + c
else:
    a = a ** 2
print(a)

Программа 2.

  1. intput(int()) — две ошибки: слово input написано с опечаткой, а int() стоит не там. Правильно int(input()).
  2. c==(input()): двойное == сравнивает, а нужно присвоить, то есть одно =. Ещё нужен int: c=int(input()).
  3. if a%2=0: — для сравнения нужно ==.
  4. if b%2==1 и два else без двоеточия: нужны if b%2==1: и else:.
  5. k:=b//c — так присваивание не пишут (:= это другая операция). Нужно k=b//c.
  6. print('k') в кавычках выведет букву k, а не значение. Нужно print(k).
a = int(input())
b = int(input())
c = int(input())
if a % 2 == 0:
    if b % 2 == 1:
        k = b // c
    else:
        k = a // c
else:
    k = (a + b) % c
print(k)

Программа 3.

  1. a=int(input() — не хватает закрывающей скобки: a=int(input()).
  2. b=int(input) — после input забыты скобки: b=int(input()).
  3. c=(input()) — нет int, значит c будет строкой, и max<c сравнит число со строкой. Нужно c=int(input()).
  4. max:=a — нужно max=a.
  5. if max< b и if max< c — нет двоеточий.
  6. max==b и max==c — это сравнение, а не присваивание. Нужно max=b и max=c.
  7. print('max') выведет слово max. Нужно print(max).
a = int(input())
b = int(input())
c = int(input())
max = a                 # наибольшее на данный момент
if max < b:
    max = b
if max < c:
    max = c
print(max)

💡 Имя max занимает название встроенной функции max(). Работать будет, но лучше назвать переменную по-другому, например mx.

Исправленные программы проверены запуском. Программа 3 для ввода 4, 9, 6 печатает 9; программа 1 для 10, 3, 5 печатает 7; программа 2 для 4, 3, 2 печатает 1.

Ответ: ошибки перечислены выше, исправленные программы приведены.

Шпаргалка

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

Мини-тест

← 4.6. Программирование составных условий · 4.8. Организуем выбор →