2014-11-09 2 views
2

У меня есть сетка как кортеж кортежей с целыми числами (1/0), номер строки и номер столбца для ячейки как целые числа. И я должен найти, сколько соседних ячеек соседей является целым числом.Область Мура в python

Это задача с сайта www.checkio.org, интересного сайта изучения питона.

Вот мой код:

def count_neighbours(grid, row, col): 
    grid =() 
    count = 0 
    for pos in ((row - 1, col), (row + 1, col), (row, col - 1), (row, col + 1), (row - 1, col - 1), (row - 1, col + 1), (row + 1, col - 1), (row + 1, col + 1)): 
     if pos == 1: 
      count += 1 
    return count 

система отвечает мне, что нет соседей рядом с выбранной ячейкой. Пожалуйста, объясните мне, что случилось, и спасибо за внимание!

+1

Я вижу две очевидных ошибок: 1) вы заменили 'grid' с пустым кортежем и 2) ваш код не ссылаться на' grid', вы просто добавляете 1 к 'count', если' pos' равно 1. 'pos' никогда не будет равным 1, потому что вы устанавливаете его в одну из серии * кортежей *. Ergo, ваша функция всегда будет ** возвращать '0', если' row' и 'col' являются числовыми (и в противном случае создает исключение). –

ответ

3

Я вижу две очевидных ошибок:

  1. вы заменили grid с пустым кортежем

  2. ваш код не ссылается на переменной grid на всех, вы просто добавить 1 к count если pos равно 1. pos никогда не будет равным 1, потому что вы устанавливаете его в одну из серии кортежей.

Ergo, ваша функция будет всегда возвращение 0 до тех пор, как row и col числовые (и вызывает исключение в противном случае).

Вы должны фактически ссылаться на сетку, которая передается в:

def count_neighbours(grid, row, col): 
    count = 0 
    for pos in (
      (row - 1, col), (row + 1, col), (row, col - 1), 
      (row, col + 1), (row - 1, col - 1), (row - 1, col + 1), 
      (row + 1, col - 1), (row + 1, col + 1)): 
     if grid[pos[0]][pos[y]] == 1: 
      count += 1 
    return count 

Я предполагаю, что здесь, что сетка является списком списков, представляющих строк и ячеек.

Далее вам придется обрабатывать свои позиции, выходящие за пределы; нет соседей к верхней части первого ряда, например:

def count_neighbours(grid, row, col): 
    count = 0 
    for x, y in (
      (row - 1, col), (row + 1, col), (row, col - 1), 
      (row, col + 1), (row - 1, col - 1), (row - 1, col + 1), 
      (row + 1, col - 1), (row + 1, col + 1)): 
     if not (0 <= x < len(grid) and 0 <= y < len(grid[x])): 
      # out of bounds 
      continue 
     if grid[x][y] == 1: 
      count += 1 
    return count 
+0

Большое спасибо, но он не работает. Возможно, из-за предусловий я забыл об этом. Условие: 3 ≤ len (сетка) ≤ 10 все (len (сетка [0]) == len (строка) для строки в сетке) – laVitaEBella

+0

@laVitaEBella: Эти предпосылки не являются проблемой; вы не определили * четко *, какой ввод дан, и какой результат ожидается; нет тестовых случаев в вашем вопросе. И * это не сработает * ничто не может пойти. Как это не работает? Для каких вкладов? Какой результат ожидался и что вы получили вместо этого? –

+0

Мне очень жаль очень плохое объяснение проблемы. Я успешно преодолел тесты, в которых размеры кортежей были 5х5 и застряли с кортежем 3х3. Еще один пример: count_neighbours ((1, 1, 1), (1, 1, 1), (1, 1, 1),), 0, 2) == 3 (соседи), Проблема заключается в следующем: «IndexError: индекс кортежа вне диапазона» – laVitaEBella

Смежные вопросы