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

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

Задачи 2.3

2.3

Задачи к главе
«Двойное сравнение и диапазоны»

Задачи про границы: значение должно попасть в диапазон. Запись a <= x <= b проверяет обе границы сразу. Главный вопрос в каждой задаче — входит ли в диапазон сама граница.

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

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

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

Три задачи решены полностью. В каждой сначала выписаны границы и решено, какие из них входят в диапазон, — от этого зависит выбор между < и <=.

Разбор 1

Температура в серверной

★☆☆базовая

В серверной допустима температура от 18 до 27 градусов включительно. Вводится показание датчика. Выведите, в норме ли температура.

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

  1. Границы — 18 и 27, обе входят в норму. Значит, с обеих сторон знак <=.
  2. Записываем слева направо по возрастанию: меньшая граница, переменная, большая граница.
  3. Результат сохраняем в переменную с понятным именем и выводим.
main.pyрешение
# Ввод
temperature = int(input("Температура: "))

# Проверка
is_normal = 18 <= temperature <= 27

# Вывод
print("Температура в норме:", is_normal)
Вывод в терминалсиним — то, что ввёл пользователь
Температура: 22
Температура в норме: True

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

Пример 1
Ввод
27
Вывод
Температура в норме: True
Пример 2
Ввод
28
Вывод
Температура в норме: False
Пример 3
Ввод
17
Вывод
Температура в норме: False
Проверяйте на границах

Ошибку в знаке не видно на значении из середины диапазона: 22 подходит при любой записи. Поэтому во втором примере взято 27 — последнее допустимое значение, а в третьем 28 — первое недопустимое.

Разбор 2

Часы работы магазина

★★☆средняя

Магазин открыт с 9 до 21 часа. С 13 до 14 часов — перерыв. Вводится час от 0 до 23. Выведите, входит ли час в рабочее время, попадает ли он на перерыв и можно ли сейчас что-нибудь купить.

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

  1. В 21:00 магазин уже закрыт, поэтому правая граница не входит: 9 <= hour < 21.
  2. Перерыв занимает один час с номером 13: 13 <= hour < 14.
  3. Купить можно в рабочее время и не в перерыв: is_working and not is_break.
main.pyрешение
# Ввод
hour = int(input("Час: "))

# Проверки
is_working = 9 <= hour < 21
is_break = 13 <= hour < 14
is_open = is_working and not is_break

# Вывод
print("Рабочее время:", is_working)
print("Перерыв:", is_break)
print("Можно купить:", is_open)
Вывод в терминалсиним — то, что ввёл пользователь
Час: 10
Рабочее время: True
Перерыв: False
Можно купить: True

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

Пример 1
Ввод
13
Вывод
Рабочее время: True
Перерыв: True
Можно купить: False
Пример 2
Ввод
21
Вывод
Рабочее время: False
Перерыв: False
Можно купить: False
Пример 3
Ввод
9
Вывод
Рабочее время: True
Перерыв: False
Можно купить: True
Левая граница входит, правая нет

Запись 9 <= hour < 21 встречается чаще других: начало промежутка входит, конец — нет. Так описывают часы работы, возрастные группы и диапазоны баллов, которые идут друг за другом без пропусков.

Разбор 3

Нажатие на кнопку

★★☆средняя

Кнопка на экране занимает прямоугольник: по горизонтали от 100 до 300 пикселей, по вертикали от 40 до 90. Границы входят в кнопку. Вводятся координаты нажатия x и y. Выведите, попало ли нажатие по кнопке.

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

  1. Величин две, у каждой свой диапазон. Для каждой пишем свою цепочку сравнений.
  2. Нажатие попало по кнопке, если подходят обе координаты: соединяем через and.
  3. Промежуточные результаты выводим тоже — по ним видно, какая координата не подошла.
main.pyрешение
# Ввод
x = int(input("x: "))
y = int(input("y: "))

# Проверки
inside_x = 100 <= x <= 300
inside_y = 40 <= y <= 90
is_hit = inside_x and inside_y

# Вывод
print("По горизонтали:", inside_x)
print("По вертикали:", inside_y)
print("Попадание:", is_hit)
Вывод в терминалсиним — то, что ввёл пользователь
x: 150
y: 60
По горизонтали: True
По вертикали: True
Попадание: True

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

Пример 1
Ввод
150
95
Вывод
По горизонтали: True
По вертикали: False
Попадание: False
Пример 2
Ввод
300
40
Вывод
По горизонтали: True
По вертикали: True
Попадание: True
Пример 3
Ввод
50
10
Вывод
По горизонтали: False
По вертикали: False
Попадание: False
Одна цепочка — одна величина

Записать обе координаты в одну цепочку не получится: 100 <= x <= 300 <= y проверяет другое условие. На каждую величину — отдельная цепочка, между ними and.

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

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

Задача 2.3.1

Балл в допустимых пределах

★☆☆базовая

За тест можно получить от 0 до 100 баллов включительно. Вводится число. Выведите, может ли оно быть баллом за тест.

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

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

Обе границы входят в диапазон.

Задача 2.3.2

Подростковый тариф

★☆☆базовая

Банк выдаёт подростковую карту клиентам от 14 лет, которым ещё не исполнилось 18. Вводится возраст. Выведите, положена ли такая карта.

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

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

Левая граница входит в диапазон, правая — нет.

Задача 2.3.3

Двузначное число

★☆☆базовая

Номер квартиры в подъезде — двузначное число. Вводится целое положительное число. Выведите, двузначное ли оно.

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

Пример 1
Ввод
45
Вывод
True
Пример 2
Ввод
9
Вывод
False
Пример 3
Ввод
100
Вывод
False
Подсказка

Самое маленькое двузначное число — 10, самое большое — 99.

Задача 2.3.4

Номер месяца

★☆☆базовая

Вводится целое число. Выведите, может ли оно быть номером месяца.

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

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

Месяцев двенадцать, нумерация с единицы.

Задача 2.3.5

Пульс в покое

★☆☆базовая

Фитнес-браслет считает пульс в покое нормальным, если он от 60 до 90 ударов в минуту включительно. Вводится пульс. Выведите, в норме ли он.

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

Пример 1
Ввод
72
Вывод
True
Пример 2
Ввод
90
Вывод
True
Пример 3
Ввод
58
Вывод
False
Подсказка

Одна цепочка сравнений с двумя знаками <=.

Задача 2.3.6

Время на часах

★★☆средняя

Пользователь устанавливает будильник: вводит часы и минуты. Часы бывают от 0 до 23, минуты — от 0 до 59. Выведите, существует ли такое время.

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

Пример 1
Ввод
7
30
Вывод
True
Пример 2
Ввод
24
0
Вывод
False
Пример 3
Ввод
23
59
Вывод
True
Пример 4
Ввод
12
60
Вывод
False
Подсказка

Две величины — две цепочки, между ними and.

Задача 2.3.7

Погодное предупреждение

★★☆средняя

Служба погоды объявляет предупреждение, если температура ниже −25 или выше 35 градусов. Вводится температура. Выведите, объявлено ли предупреждение и обычная ли сейчас температура.

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

Пример 1
Ввод
-30
Вывод
Предупреждение: True
Обычная температура: False
Пример 2
Ввод
20
Вывод
Предупреждение: False
Обычная температура: True
Пример 3
Ввод
35
Вывод
Предупреждение: False
Обычная температура: True
Пример 4
Ввод
36
Вывод
Предупреждение: True
Обычная температура: False
Подсказка

Опасных диапазона два, и они не соприкасаются. Одной цепочкой их не записать — нужны два сравнения и or.

Задача 2.3.8

Время года

★★☆средняя

Вводится номер месяца от 1 до 12. Выведите четыре строки: зимний ли это месяц, весенний, летний и осенний. Зима — декабрь, январь и февраль.

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

Пример 1
Ввод
4
Вывод
Зима: False
Весна: True
Лето: False
Осень: False
Пример 2
Ввод
12
Вывод
Зима: True
Весна: False
Лето: False
Осень: False
Пример 3
Ввод
1
Вывод
Зима: True
Весна: False
Лето: False
Осень: False
Пример 4
Ввод
9
Вывод
Зима: False
Весна: False
Лето: False
Осень: True
Подсказка

Три времени года — непрерывные диапазоны. Зимние месяцы идут не подряд: 12, затем 1 и 2.

Задача 2.3.9

Точка на экране

★★☆средняя

Экран имеет размер 1920 на 1080 пикселей. Координата x бывает от 0 до 1919, координата y — от 0 до 1079. Вводятся координаты курсора. Выведите, находится ли курсор на экране.

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

Пример 1
Ввод
500
500
Вывод
True
Пример 2
Ввод
1920
500
Вывод
False
Пример 3
Ввод
1919
1079
Вывод
True
Пример 4
Ввод
-1
0
Вывод
False
Подсказка

Нумерация с нуля: при ширине 1920 последняя координата — 1919.

Задача 2.3.10

Стандартная посылка

★★☆средняя

Почта принимает посылку как стандартную, если её вес больше 0 и не больше 20 кг, а длина — от 10 до 120 см включительно. Вводятся вес (дробное число) и длина (целое). Выведите, стандартная ли посылка.

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

Пример 1
Ввод
4.5
60
Вывод
True
Пример 2
Ввод
20
120
Вывод
True
Пример 3
Ввод
0
60
Вывод
False
Пример 4
Ввод
12.3
130
Вывод
False
Подсказка

У веса левая граница не входит в диапазон, правая входит.

Задача 2.3.11

Четыре вида границ

★★☆средняя

Вводится целое число x. Выведите результаты четырёх проверок диапазона от 1 до 3: обе границы входят; обе не входят; входит только левая; входит только правая.

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

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

Знак <= включает границу, знак < исключает.

Задача 2.3.12

Бюджет или платное

★★☆средняя

На бюджетное место проходят с баллом от 75 до 100. С баллом от 50 до 74 можно учиться платно. Вводится балл. Выведите, допустим ли балл (от 0 до 100), проходит ли абитуриент на бюджет и на платное.

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

Пример 1
Ввод
82
Вывод
Балл допустимый: True
Бюджет: True
Платное: False
Пример 2
Ввод
75
Вывод
Балл допустимый: True
Бюджет: True
Платное: False
Пример 3
Ввод
74
Вывод
Балл допустимый: True
Бюджет: False
Платное: True
Пример 4
Ввод
120
Вывод
Балл допустимый: False
Бюджет: False
Платное: False
Подсказка

Диапазоны «бюджет» и «платное» идут подряд: 74 относится к платному, 75 — уже к бюджету.

Задача 2.3.13

Цены по возрастанию

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

В прайс-листе три тарифа: базовый, стандартный и расширенный. Вводятся три цены в этом порядке. Выведите, верно ли, что каждый следующий тариф строго дороже предыдущего, и верно ли, что цены не убывают.

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

Пример 1
Ввод
300
500
900
Вывод
Строго по возрастанию: True
Не убывают: True
Пример 2
Ввод
300
300
900
Вывод
Строго по возрастанию: False
Не убывают: True
Пример 3
Ввод
500
300
900
Вывод
Строго по возрастанию: False
Не убывают: False
Подсказка

В цепочке могут стоять три переменные: a < b < c проверяет обе соседние пары.

Задача 2.3.14

Клик по рамке

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

Окно занимает квадрат от 0 до 400 пикселей по обеим координатам. Внутри него — рабочая область от 20 до 380 по обеим координатам. Всё, что в окне, но не в рабочей области, — рамка. Границы входят и в окно, и в рабочую область. Вводятся координаты нажатия. Выведите, попало ли нажатие на рамку.

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

Пример 1
Ввод
10
200
Вывод
True
Пример 2
Ввод
200
200
Вывод
False
Пример 3
Ввод
390
395
Вывод
True
Пример 4
Ввод
500
200
Вывод
False
Пример 5
Ввод
20
20
Вывод
False
Подсказка

Запишите два условия отдельно: «точка в окне» и «точка в рабочей области». Рамка — это первое без второго.

Задача 2.3.15

Между двумя показаниями

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

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

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

Пример 1
Ввод
40
60
50
Вывод
True
Пример 2
Ввод
60
40
50
Вывод
True
Пример 3
Ввод
40
60
70
Вывод
False
Пример 4
Ввод
55
55
55
Вывод
True
Подсказка

Возможны два порядка границ: первая меньше второй или наоборот. Запишите цепочку для каждого порядка.

Задача 2.3.16

Исправьте диапазоны

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

Программа проверяет дату: месяц должен быть от 1 до 12, день — от 1 до 31. Программа запускается, но отвечает неверно. В ней две ошибки. Исправьте их.

main.pyдано — с ошибками
month = int(input())
day = int(input())
is_month_ok = 1 <= month >= 12
is_day_ok = day >= 1 or day <= 31
print(is_month_ok and is_day_ok)

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

Пример 1
Ввод
5
20
Вывод
True
Пример 2
Ввод
12
31
Вывод
True
Пример 3
Ввод
13
10
Вывод
False
Пример 4
Ввод
5
40
Вывод
False
Подсказка

В первой проверке знаки смотрят в разные стороны. Во второй посмотрите, какой оператор соединяет два сравнения.

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

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

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

Задачи к главе 2.3 · Двойное сравнение и диапазоны · Задачник по Python Автор: Макаров Максим Николаевич