Теория
Сначала допустимость, потом качество
В задачах отбора каждый кандидат сначала проходит ограничения. Только допустимый результат можно сравнивать с текущим лучшим. Такая последовательность не позволяет запрещённому значению случайно стать минимумом или максимумом.
Если числа могут быть отрицательными или допустимый диапазон неизвестен, безопасно начать best со значения None и заменить его первым подходящим кандидатом.
best = Nonefor number in [-5, -2, -8]: if best is None or number > best: best = numberprint(best)Как обновляется лучший результат
Переменная best хранит лучший из уже просмотренных допустимых вариантов, а не лучший вообще. После каждой итерации это утверждение должно оставаться истинным.
Первый допустимый кандидат создаёт начальный ориентир. Каждый следующий заменяет его только при более хорошем результате.
- Первый кандидат заменяет None, best становится -5.
- Число -2 больше -5, поэтому best обновляется.
- Число -8 меньше -2; итоговый максимум равен -2.
Ноль не всегда безопасная инициализация
Если все допустимые значения отрицательны, начальный ноль останется больше каждого кандидата, хотя его вообще не было среди вариантов.
Как проверять отбор
Составьте пример без подходящих вариантов, пример с одним и пример с несколькими. Это проверяет и фильтр, и инициализацию, и правило сравнения.
- Проверьте допустимость. Запрещённый кандидат не должен менять best.
- Обработайте первый результат. Он заменяет состояние отсутствия.
- Сравните следующие. Обновляйте best только при улучшении.
- Учтите пустой итог. Опишите, что программа делает, если ничего не найдено.
Практика
Сначала отфильтруйте
12 и 18 больше 10 и делятся на 2. 7 мало, а 15 нечётно.
Найдите минимум среди допустимых
После фильтра остаются 14 и 20. Наименьшее допустимое значение — 14.
Работайте с отрицательными числами
Число -2 больше -5 и -8, поэтому оно является максимумом.
Не выдумывайте лучший вариант
`None` не конкурирует с числами и явно означает, что подходящий вариант ещё не найден.
Выберите лучший результат
Кратные 7 меньше 50 заканчиваются числом 49. Это наибольший допустимый результат.
Итог
Теперь вы можете отделить фильтр от выбора минимума или максимума и корректно обработать отсутствие ответа.
Возьмите список с отрицательными и положительными числами, задайте два ограничения и вручную проследите изменение best на каждой итерации.
Прогресс
0 / 5Вы ещё не решали задания