Кандидат должен опираться на данные
Пусть в списке находятся семь, три и пять. Если текущий минимум изначально равен нулю, ни одно из этих положительных чисел его не уменьшит. В конце получится ноль, хотя правильный ответ три. Ошибка связана с предположением о допустимых значениях, которого не было в задаче. Для непустого списка удобно выбрать первым кандидатом первый элемент. Тогда кандидат уже принадлежит данным. Затем остальные элементы сравниваются с ним по очереди. В нашем примере сначала сохранено семь, после сравнения с тремя сохранено три, а пятёрка ничего не меняет. Важно понимать смысл переменной: она хранит минимум среди уже просмотренных элементов, а не результат для ещё не изученной части.
Повторяйте одно и то же правило
Цикл for в Python позволяет последовательно проходить элементы списка. На каждом шаге условие if проверяет, меньше ли очередное число текущего кандидата. Если меньше, кандидат заменяется этим числом; иначе остаётся прежним. Для поиска одного минимального значения исходный список изменять не требуется. Равные значения также не создают проблемы: замена на такое же число не нужна. Например, для трёх, трёх и пяти минимум остаётся три. Полезно сначала проследить действия вручную, записывая очередной элемент и состояние кандидата. Такая трассировка показывает ошибку в правиле или начальном значении раньше, чем сложная программа скроет её среди других действий.
Пустой список требует отдельного решения
У пустого списка нет первого элемента и нет минимального числа. Поэтому проверка на отсутствие данных должна происходить до выбора первого кандидата. В учебном алгоритме договоримся возвращать специальное обозначение отсутствия результата, например None, а не выдуманное число ноль. Конкретное поведение определяется условиями задачи. В Python есть встроенная функция min, но понимание собственного алгоритма помогает разобраться в граничных случаях и назначении проверки. Одного удачного примера недостаточно. Нужны положительные числа, отрицательные, повторяющиеся значения, один элемент и пустой список. Если ошибочный старт с нуля случайно работает на отрицательных числах, это ещё не делает его правильным для всех допустимых данных.
Попробуйте на практике
Выполните ручную трассировку алгоритма или реализуйте его в уже доступной среде Python. Новые программы и регистрация для бумажной проверки не нужны.
- Запишите правило для пустого списка: результат отсутствует и обозначается None. Для непустого списка назначьте первым кандидатом его первый элемент.
- Проследите список из семи, трёх и пяти. После каждого сравнения запишите текущего кандидата и объясните, какие элементы уже просмотрены.
- Повторите проверку для отрицательных семи, трёх и пяти, затем для двух одинаковых троек и для одного числа четыре. Уточните знаки всех чисел в отрицательном примере.
- Проверьте пустой список и сравните правильный алгоритм с вариантом, который всегда начинает с нуля. Найдите пример, где ошибочный вариант выдаёт отсутствующее в данных значение.
Как проверить результат. Алгоритм понятен, если для положительного примера получено три, для списка из минус семи, минус трёх и минус пяти получено минус семь, а пустой список не превращается в нулевой минимум.
Частые вопросы
Почему нельзя выбрать очень большое начальное число?
Такое число требует заранее известной границы входных данных. Если её нет, можно ошибиться снова. Первый элемент непустого списка даёт обоснованного кандидата без произвольной границы.
Нужно ли сортировать список перед поиском минимума?
Для этой задачи сортировка не обязательна. Последовательное сравнение проходит каждый элемент и сохраняет один текущий кандидат. Это позволяет понять и решить задачу без изменения порядка исходных данных.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.