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.
Как думать. Хищник догонит зайца, только если бежит быстрее него. Если скорость такая же или меньше, расстояние не сокращается. Если быстрее зайца бегут оба, первым добежит тот, у кого скорость больше.
Допущения: хищники начинают с одинакового расстояния до зайца и бегут с постоянной скоростью (на рисунке этого не видно, поэтому берём простейший случай).
Решение.
Зайца не догонят, если волк не быстрее зайца и лиса не быстрее зайца:
m <= v and k <= v.Программа:
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.
b=input()читает строку, а не число. Потомa-bвычитает строку из числа, и будет ошибкаTypeError. Нужноb=int(input()).- После
if a-b>0нет двоеточия. Нужноif a-b>0:. - Переменная
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.
intput(int())— две ошибки: словоinputнаписано с опечаткой, аint()стоит не там. Правильноint(input()).c==(input()): двойное==сравнивает, а нужно присвоить, то есть одно=. Ещё нуженint:c=int(input()).if a%2=0:— для сравнения нужно==.if b%2==1и дваelseбез двоеточия: нужныif b%2==1:иelse:.k:=b//c— так присваивание не пишут (:=это другая операция). Нужноk=b//c.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.
a=int(input()— не хватает закрывающей скобки:a=int(input()).b=int(input)— послеinputзабыты скобки:b=int(input()).c=(input())— нетint, значитcбудет строкой, иmax<cсравнит число со строкой. Нужноc=int(input()).max:=a— нужноmax=a.if max< bиif max< c— нет двоеточий.max==bиmax==c— это сравнение, а не присваивание. Нужноmax=bиmax=c.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.
Ответ: ошибки перечислены выше, исправленные программы приведены.
Шпаргалка
Термины: оператор выбора, разработка программы, составное условие, палиндром, блок-схема, граничные данные.