Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу на Питоне плз...

Огнеслав Ученик (97), открыт 1 неделю назад
Большой подвиг 5. (Для закрепления предыдущего материала). На вход программе подается таблица целых чисел (см. пример ниже) размером N x N элементов (N определяется по входным данным). Необходимо прочитать эти числа и сохранить в виде двумерного (вложенного) списка N x N элементов. Полученная таблица будет содержать нули и кое-где единицы. С помощью функции с именем verify, на вход которой подается двумерный список чисел (первый параметр), необходимо проверить, являются ли единицы изолированными друг от друга, то есть, вокруг каждой единицы должны быть нули.

Рекомендуется следующий алгоритм. В функции verify производить перебор двумерного списка. Для каждого элемента (списка) со значением 1 вызывать еще одну вспомогательную функцию is_isolate для проверки изолированности единицы. То есть, функция is_isolate должна возвращать True, если единица изолирована и False в противном случае.

Как только встречается не изолированная единица, функция verify должна возвращать False. Если успешно доходим (по элементам списка) до конца, то возвращается значение True.

Функцию verify выполнять не нужно, только объявить.

P. S. При реализации функции is_isolate не следует прописывать восемь операторов if. Подумайте, как это можно сделать красивее (с точки зрения реализации алгоритма).

Тесты: https://github.com/selfedu-rus/test-python-base/tree/main/7/7.5.5
2 ответа
Петя Пупкин Профи (544) 1 неделю назад
Функция is_isolate для проверки изолированности единицы:

def is_isolate(matrix, row, col):
"""
Проверяет, является ли единица в ячейке (row, col) двумерного списка matrix изолированной.

Args:
matrix (list): Двумерный список чисел.
row (int): Индекс строки единицы.
col (int): Индекс столбца единицы.

Returns:
bool: True, если единица изолирована; False в противном случае.
"""

# Проверяем границы двумерного списка
if row < 0 or row >= len(matrix) or col < 0 or col >= len(matrix[0]):
return False

# Проверяем соседние ячейки на наличие единиц
for i in range(row - 1, row + 2):
for j in range(col - 1, col + 2):
if i == row and j == col:
continue
elif matrix[i][j] == 1:
return False

return True


Функция verify для проверки изолированности всех единиц в двумерном списке:

def verify(matrix):
"""
Проверяет, являются ли единицы в двумерном списке matrix изолированными друг от друга.

Args:
matrix (list): Двумерный список чисел.

Returns:
bool: True, если все единицы изолированы; False в противном случае.
"""

for row in range(len(matrix)):
for col in range(len(matrix[0])):
if matrix[row][col] == 1 and not is_isolate(matrix, row, col):
return False

return True


Примечание:

Функция is_isolate использует цикл для проверки соседних ячеек, а не восемь операторов if. Это упрощает реализацию и делает код более читабельным.
ОгнеславУченик (97) 1 неделю назад
Задача прошла только первый тест. Можете посмотреть, что не так?
Андрей Высший разум (433062) 1 неделю назад
 def is_isolate(a, y, x):
k = len(a)
return a[y][x] == 0 or sum(a[i][j]
for i in range(max(y - 1, 0), min(y + 1, k))
for j in range(max(x - 1, 0), min(x + 1, k))) == 1

def verify(a):
k = len(a)
return all(is_isolate(a, i, j) for i in range(k) for j in range(k))
ОгнеславУченик (97) 1 неделю назад
Спасибо вам огромное, решение прошло.
Похожие вопросы