Задачник · модуль 2 · Условия

Справочник по Python · задачник · модуль 2

Задачи 2.2

2.2

Задачи к главе
«Составление условий без ветвления»

Условие задачи записано словами: «все», «хотя бы одно», «ровно одно», «ни одного». В этих задачах нужно узнать формулировку и перевести её в выражение с and, or и not.

Глава справочника
2.2 Составление условий без ветвления
Можно использовать
главы 1.1–2.2
Разборов
3 с решением
Практика
15 задач без решения
Уже изучено — этим и решаем

Оператора if пока нет — он появится в главе 2.4. Программа ещё ничего не выбирает: она вычисляет логическое выражение и выводит True или False.

§1Разборы: как решать и оформлять

В трёх разборах — три основные формулировки: «каждое», «хотя бы одно» и «ровно одно». В каждом сначала записаны простые проверки, потом они соединены.

Разбор 1

Комплект документов

★☆☆базовая

Для записи на курсы нужны три документа: паспорт, СНИЛС и заявление. Вводятся три ответа да или нет — есть ли каждый документ. Выведите, полон ли комплект и не хватает ли чего-нибудь.

Как рассуждаем

  1. Формулировка «нужны все три» — это «каждое». Записывается цепочкой and.
  2. Каждый ответ сразу превращаем в логическое значение сравнением со словом "да".
  3. «Чего-то не хватает» — отрицание полного комплекта: not is_complete.
main.pyрешение
# Ввод
has_passport = input("Паспорт (да/нет): ") == "да"
has_snils = input("СНИЛС (да/нет): ") == "да"
has_form = input("Заявление (да/нет): ") == "да"

# Проверка
is_complete = has_passport and has_snils and has_form

# Вывод
print("Комплект полный:", is_complete)
print("Чего-то не хватает:", not is_complete)
Вывод в терминалсиним — то, что ввёл пользователь
Паспорт (да/нет): да
СНИЛС (да/нет): да
Заявление (да/нет): да
Комплект полный: True
Чего-то не хватает: False

Проверка на других данных

Пример 1
Ввод
да
нет
да
Вывод
Комплект полный: False
Чего-то не хватает: True
Пример 2
Ввод
нет
нет
нет
Вывод
Комплект полный: False
Чего-то не хватает: True
Одного «нет» достаточно

Во втором примере два документа из трёх есть, но комплект неполный. Цепочка and истинна, только когда истинны все её части.

Разбор 2

Просроченный товар

★★☆средняя

У трёх товаров на полке записано, сколько дней осталось до конца срока годности. Отрицательное число означает, что срок истёк. Вводятся три числа. Выведите, есть ли на полке просроченный товар и все ли товары годны.

Как рассуждаем

  1. Простая проверка: days < 0 — товар просрочен. Таких проверок три.
  2. «Есть просроченный» — это «хотя бы одно»: соединяем через or.
  3. «Все годны» — то же, что «нет ни одного просроченного». Это отрицание предыдущего условия.
main.pyрешение
# Ввод
milk = int(input("Молоко, дней: "))
bread = int(input("Хлеб, дней: "))
cheese = int(input("Сыр, дней: "))

# Проверки
has_expired = milk < 0 or bread < 0 or cheese < 0
all_fresh = not has_expired

# Вывод
print("Есть просроченный товар:", has_expired)
print("Все товары годны:", all_fresh)
Вывод в терминалсиним — то, что ввёл пользователь
Молоко, дней: 3
Хлеб, дней: -1
Сыр, дней: 20
Есть просроченный товар: True
Все товары годны: False

Проверка на других данных

Пример 1
Ввод
5
1
14
Вывод
Есть просроченный товар: False
Все товары годны: True
Пример 2
Ввод
-2
-1
-10
Вывод
Есть просроченный товар: True
Все товары годны: False
Две записи одного условия

«Все товары годны» можно записать напрямую: milk >= 0 and bread >= 0 and cheese >= 0. Результат совпадает с not (milk < 0 or bread < 0 or cheese < 0) при любых числах. Отрицание «хотя бы одного» всегда равно «каждое наоборот».

Сравнение нужно каждому числу

Запись milk or bread or cheese < 0 не вызовет ошибки, но проверит другое: сравнение с нулём относится только к cheese, а milk и bread считаются истиной при любом ненулевом значении.

Разбор 3

Один дежурный

★★☆средняя

На смену нужен ровно один дежурный. Два сотрудника отвечают, готовы ли они выйти: да или нет. Смена утверждается, если готов ровно один из них. Выведите, утверждена ли смена.

Как рассуждаем

  1. «Ровно один» одним оператором не записать. Перечисляем случаи, которые подходят.
  2. Случай первый: первый готов, второй нет. Случай второй: первый не готов, второй готов.
  3. Подходит любой из двух случаев — соединяем их через or, каждый случай берём в скобки.
main.pyрешение
# Ввод
is_first_ready = input("Первый готов (да/нет): ") == "да"
is_second_ready = input("Второй готов (да/нет): ") == "да"

# Проверка
only_first = is_first_ready and not is_second_ready
only_second = not is_first_ready and is_second_ready
is_approved = only_first or only_second

# Вывод
print("Смена утверждена:", is_approved)
Вывод в терминалсиним — то, что ввёл пользователь
Первый готов (да/нет): да
Второй готов (да/нет): нет
Смена утверждена: True

Проверка на других данных

Пример 1
Ввод
да
да
Вывод
Смена утверждена: False
Пример 2
Ввод
нет
нет
Вывод
Смена утверждена: False
Пример 3
Ввод
нет
да
Вывод
Смена утверждена: True
Чем «ровно один» отличается от «хотя бы один»

Во втором примере готовы оба. Условие is_first_ready or is_second_ready дало бы True, а смена не утверждена: дежурных двое, нужен один.

Короткая запись для двух значений

Для двух логических значений «ровно одно истинно» означает, что они разные: is_first_ready != is_second_ready. Для трёх и более значений эта запись не подходит — там перечисляют случаи.

§2Задачи для самостоятельной работы

Решений здесь нет — только условие и примеры, на которых решение нужно проверить. Сложность отмечена звёздами: ★☆☆ — прямое применение главы, ★★☆ — нужно собрать несколько шагов, ★★★ — есть подвох или требуется догадка.

Задача 2.2.1

Сессия без двоек

★☆☆базовая

Вводятся три оценки за экзамены. Сессия сдана, если каждая оценка не ниже 3. Выведите, сдана ли сессия.

Примеры для проверки

Пример 1
Ввод
4
3
5
Вывод
True
Пример 2
Ввод
5
2
5
Вывод
False
Подсказка

Формулировка «каждая» — цепочка and.

Задача 2.2.2

Есть ли пятёрка

★☆☆базовая

Вводятся три оценки. Выведите, есть ли среди них хотя бы одна пятёрка.

Примеры для проверки

Пример 1
Ввод
4
3
5
Вывод
True
Пример 2
Ввод
4
4
3
Вывод
False
Пример 3
Ввод
5
5
5
Вывод
True
Подсказка

Формулировка «хотя бы одна» — цепочка or.

Задача 2.2.3

Упаковка без остатка

★☆☆базовая

Бутылки упаковывают в коробки по 6 штук, а коробки ставят на поддон по 4. Партию можно отправить, если количество бутылок делится без остатка и на 6, и на 4. Вводится количество бутылок. Выведите, можно ли отправить партию.

Примеры для проверки

Пример 1
Ввод
48
Вывод
True
Пример 2
Ввод
18
Вывод
False
Пример 3
Ввод
20
Вывод
False
Подсказка

Делимость проверяют остатком: n % 6 == 0. Здесь таких проверок две.

Задача 2.2.4

Датчики в норме

★☆☆базовая

Три датчика показывают температуру оборудования. Норма — ниже 80 градусов. Вводятся три показания. Выведите, все ли датчики в норме.

Примеры для проверки

Пример 1
Ввод
65
72
79
Вывод
True
Пример 2
Ввод
65
80
40
Вывод
False
Подсказка

Граница 80 в норму не входит.

Задача 2.2.5

Непрошедший платёж

★☆☆базовая

Банк прислал суммы трёх платежей. Если платёж не прошёл, вместо суммы стоит 0. Вводятся три числа. Выведите, есть ли непрошедший платёж.

Примеры для проверки

Пример 1
Ввод
500
0
1200
Вывод
True
Пример 2
Ввод
500
300
1200
Вывод
False
Подсказка

Каждому числу нужно своё сравнение с нулём.

Задача 2.2.6

Високосный год

★★☆средняя

Год високосный, если он делится на 4, но не делится на 100. Годы, которые делятся на 400, тоже високосные. Вводится год. Выведите, високосный ли он.

Примеры для проверки

Пример 1
Ввод
2024
Вывод
True
Пример 2
Ввод
1900
Вывод
False
Пример 3
Ввод
2000
Вывод
True
Пример 4
Ввод
2026
Вывод
False
Подсказка

В правиле два случая, подходит любой. Первый случай состоит из двух проверок — возьмите его в скобки.

Задача 2.2.7

Скидка на один товар

★★☆средняя

Купон действует, если в чеке ровно один товар дороже 1000 рублей. Вводятся цены двух товаров. Выведите, действует ли купон.

Примеры для проверки

Пример 1
Ввод
1500
300
Вывод
True
Пример 2
Ввод
1500
2000
Вывод
False
Пример 3
Ввод
400
300
Вывод
False
Пример 4
Ввод
1000
1001
Вывод
True
Подсказка

Перечислите два подходящих случая: дорогой только первый товар или дорогой только второй.

Задача 2.2.8

Неделя без опозданий

★★☆средняя

За три дня записано, на сколько минут сотрудник опоздал. Ноль означает, что он пришёл вовремя. Вводятся три числа. Выведите, было ли хотя бы одно опоздание и не было ли ни одного.

Примеры для проверки

Пример 1
Ввод
0
15
0
Вывод
Было опоздание: True
Ни одного опоздания: False
Пример 2
Ввод
0
0
0
Вывод
Было опоздание: False
Ни одного опоздания: True
Подсказка

«Ни одного» — отрицание условия «хотя бы одно».

Задача 2.2.9

Не все задачи закрыты

★★☆средняя

У трёх задач в трекере есть статус: готово или в работе. Вводятся три статуса. Выведите, остались ли незакрытые задачи.

Примеры для проверки

Пример 1
Ввод
готово
в работе
готово
Вывод
Есть незакрытые задачи: True
Пример 2
Ввод
готово
готово
готово
Вывод
Есть незакрытые задачи: False
Подсказка

Сначала запишите условие «все готовы», потом возьмите его отрицание.

Задача 2.2.10

Код подтверждения

★★☆средняя

Код подтверждения верного вида — трёхзначное число, которое делится на 5. Вводится целое число. Выведите, подходит ли оно под этот вид.

Примеры для проверки

Пример 1
Ввод
345
Вывод
True
Пример 2
Ввод
346
Вывод
False
Пример 3
Ввод
95
Вывод
False
Пример 4
Ввод
1000
Вывод
False
Подсказка

Трёхзначное число — не меньше 100 и не больше 999. Это две проверки, и у каждой своя левая часть.

Задача 2.2.11

Допуск к экзамену

★★☆средняя

Студента допускают к экзамену, если посещаемость не ниже 75%, сдано не меньше 8 лабораторных работ и нет долга по оплате. Вводятся посещаемость в процентах, число сданных работ и сумма долга. Выведите результат каждой проверки и общий ответ.

Примеры для проверки

Пример 1
Ввод
80
8
0
Вывод
Посещаемость: True
Лабораторные: True
Нет долга: True
Допущен: True
Пример 2
Ввод
90
6
0
Вывод
Посещаемость: True
Лабораторные: False
Нет долга: True
Допущен: False
Пример 3
Ввод
75
10
1500
Вывод
Посещаемость: True
Лабораторные: True
Нет долга: False
Допущен: False
Подсказка

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

Задача 2.2.12

Счастливый номер

★★☆средняя

В розыгрыше выигрывает билет, номер которого оканчивается на 7 или делится на 7. Вводится номер билета. Выведите, выиграл ли билет.

Примеры для проверки

Пример 1
Ввод
127
Вывод
True
Пример 2
Ввод
49
Вывод
True
Пример 3
Ввод
120
Вывод
False
Пример 4
Ввод
77
Вывод
True
Подсказка

Последняя цифра числа — остаток от деления на 10.

Задача 2.2.13

Одна открытая касса

★★★повышенная

В магазине три кассы. Про каждую вводится ответ, открыта ли она: да или нет. Выведите, верно ли, что открыта ровно одна касса.

Примеры для проверки

Пример 1
Ввод
нет
да
нет
Вывод
True
Пример 2
Ввод
да
да
нет
Вывод
False
Пример 3
Ввод
нет
нет
нет
Вывод
False
Пример 4
Ввод
да
да
да
Вывод
False
Подсказка

Подходящих случаев три — по одному на каждую кассу. В каждом случае две другие кассы закрыты.

Задача 2.2.14

Решение жюри

★★★повышенная

В жюри три человека. Каждый голосует за или против. Решение принято, если «за» проголосовали хотя бы двое. Вводятся три голоса. Выведите, принято ли решение.

Примеры для проверки

Пример 1
Ввод
за
против
за
Вывод
True
Пример 2
Ввод
против
против
за
Вывод
False
Пример 3
Ввод
за
за
за
Вывод
True
Подсказка

«Хотя бы двое» — значит, нашлась пара, в которой оба «за». Пар из трёх человек три. Второй способ — сложить три логических значения и сравнить сумму с 2.

Задача 2.2.15

Найдите ошибку в условии

★★★повышенная

Программа проверяет остатки на трёх счетах и должна вывести True, если хотя бы один остаток отрицательный. Программа запускается без ошибок, но в первых двух примерах выводит число 500 вместо True и False. Исправьте условие.

main.pyдано — с ошибками
a = int(input())
b = int(input())
c = int(input())
print(a or b or c < 0)

Примеры для проверки

Пример 1
Ввод
500
-20
300
Вывод
True
Пример 2
Ввод
500
20
300
Вывод
False
Пример 3
Ввод
0
0
-1
Вывод
True
Подсказка

Проверьте, к какому из трёх чисел относится сравнение < 0.

§3Как проверить своё решение

  1. Запустите программу и введите значения из колонки «Ввод» — каждое значение отдельной строкой, после каждого Enter.
  2. Сравните то, что напечатала программа, с колонкой «Вывод» — символ в символ: пробелы, двоеточия, количество знаков после точки.
  3. Подсказки input() в примерах не показаны: текст подсказки у каждого свой, проверяется только результат.
  4. Прогоните все примеры, а не только первый: второй обычно ловит ошибку, которую первый пропускает.
Оформление, которое проверяют

Имена переменных называют смысл: total_cost, а не x. Данные — вверху, расчёт — отдельными строками, вывод — в конце. Одно и то же выражение не повторяется: результат сохраняется в переменную и дальше используется по имени.

Задачи к главе 2.2 · Составление условий без ветвления · Задачник по Python Автор: Макаров Максим Николаевич