af Артур Валиуллин 1 år siden
141
Mere som dette
Требуется найти в массиве элемент, равный значению переменной X, или сообщить, что его
там нет. Алгоритм решения сводится к просмотру всех элементов массива с первого до последнего. Как только найден элемент, равный X, нужно выйти из цикла и вывести результат. Напрашивается такой алгоритм:
i = 0
while A[i] != X:
i += 1
print ( "A[", i, "]=", X, sep = "" )
Он хорошо работает, если нужный элемент в массиве есть, однако приведет к ошибке, если такого
элемента нет – получится зацикливание и выход за границы массива. Поэтому в условие нужно
добавить еще одно ограничение: i< N. Если после окончания цикла это условие нарушено, значит
поиск был неудачным – элемента нет:
i = 0
while i < N and A[i] != X:
i += 1
if i < N:
print ( "A[", i, "]=", X, sep = "" )
else:
print ( "Не нашли!" )
Отметим одну тонкость. В сложном условии i < N и A[i]!= X первой должно проверяться
именно отношение i < N. Если первая часть условия, соединенного с помощью операции «И»,
ложно, то вторая часть, как правило15, не вычисляется – уже понятно, что всё условие ложно. Дело
в том, что если i >= N, проверка условия A[i] != X приводит к выходу за границы массива, и
программа завершается аварийно.
Возможен ещё один поход к решению этой задачи: используя цикл с переменной, перебрать все элементы массива и досрочно завершить цикл, если найдено требуемое значение.
nX = -1
for i in range ( len(A) ):
if A[i] == X:
nX = i
break
if nX >= 0:
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )
Для выхода из цикла используется оператор break, номер найденного элемента сохраняется в
переменной nX. Если её значение осталось равным –1 (не изменилось в ходе выполнения цикла),
то в массиве нет элемента, равного X.
Последний пример можно упростить, используя особые возможности цикла for в языке Python:
for i in range ( len(A) ):
if A[i] == X:
print ( "A[", i, "]=", X, sep = "" )
break
else:
print ( "Не нашли!" )
Итак, здесь мы выводим результат сразу, как только нашли нужный элемент, а не после цикла.
Слово else после цикла for начинает блок, который выполняется при нормальном завершении
цикла (без применения break). Таким образом, сообщение «Не нашли!» будет выведено только
тогда, когда условный оператор в теле цикла ни разу не сработал.
Возможен другой способ решения этой задачи, использующий метод (функцию) index для
типа данных list, которая возвращает номер первого найденного элемента, равного X:
nX = A.index(X)
Тут проблема только в том, что эта строчка вызовет ошибку при выполнении программы, если
нужного элемента в массиве нет. Поэтому нужно сначала проверить, есть ли он там (с помощью
оператора in), а потом использовать метод index:
if X in A:
nX = A.index(X)
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )
Запись «if X in A» означает «если значение X найдено в списке A».