v1.0.0

Python с нуля для ЕГЭ · Отбор результата: ограничения, минимум и максимум

Урок курсаPython 35 задачБесплатно

Отбор результата: ограничения, минимум и максимум

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

Теория

Сначала допустимость, потом качество

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

Если числа могут быть отрицательными или допустимый диапазон неизвестен, безопасно начать best со значения None и заменить его первым подходящим кандидатом.

best = Nonefor number in [-5, -2, -8]:    if best is None or number > best:        best = numberprint(best)

Как обновляется лучший результат

Переменная best хранит лучший из уже просмотренных допустимых вариантов, а не лучший вообще. После каждой итерации это утверждение должно оставаться истинным.

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

Разберём на примере
Выберем максимум отрицательных
Кандидаты равны -5, -2 и -8.
  1. Первый кандидат заменяет None, best становится -5.
  2. Число -2 больше -5, поэтому best обновляется.
  3. Число -8 меньше -2; итоговый максимум равен -2.
Проверьте себя
Почему best описывает только уже просмотренные варианты?
Будущие кандидаты ещё не проверены. Инвариант позволяет доказать корректность пошагово: после каждой итерации best лучший среди обработанных.

Ноль не всегда безопасная инициализация

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

Как проверять отбор

Составьте пример без подходящих вариантов, пример с одним и пример с несколькими. Это проверяет и фильтр, и инициализацию, и правило сравнения.

Как действовать
Проверяем лучший вариант
  1. Проверьте допустимость. Запрещённый кандидат не должен менять best.
  2. Обработайте первый результат. Он заменяет состояние отсутствия.
  3. Сравните следующие. Обновляйте best только при улучшении.
  4. Учтите пустой итог. Опишите, что программа делает, если ничего не найдено.

Практика

Сначала отфильтруйте

Какие числа из [7, 12, 15, 18] одновременно больше 10 и чётные? Запишите по порядку через пробел.

Подсказка
Проверьте оба ограничения для каждого числа.
Решение

12 и 18 больше 10 и делятся на 2. 7 мало, а 15 нечётно.

Найдите минимум среди допустимых

Из [14, 9, 20] выбираются только числа не меньше 10. Какой минимум среди них?

Подсказка
Сначала исключите 9.
Решение

После фильтра остаются 14 и 20. Наименьшее допустимое значение — 14.

Работайте с отрицательными числами

Каков максимум списка [-5, -2, -8]?

Подсказка
Максимум ближе всего к нулю.
Решение

Число -2 больше -5 и -8, поэтому оно является максимумом.

Не выдумывайте лучший вариант

Каким значением удобно инициализировать best, если допустимый результат ещё не найден и числа могут быть отрицательными?

Подсказка
Нужна отдельная отметка отсутствия результата.
Решение

`None` не конкурирует с числами и явно означает, что подходящий вариант ещё не найден.

Выберите лучший результат

Какое наибольшее положительное число меньше 50 делится на 7?

Подсказка
Переберите кратные 7 или обновляйте максимум.
Решение

Кратные 7 меньше 50 заканчиваются числом 49. Это наибольший допустимый результат.

Итог

Теперь вы можете отделить фильтр от выбора минимума или максимума и корректно обработать отсутствие ответа.

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

Прогресс

0 / 5
x

Вы ещё не решали задания