Как можно посчитать количество определенных букв из окружающих квадратов?

#python #list #loops #nested

Вопрос:

Функция получает один квадрат в качестве аргумента и должна посчитать, сколько букв N:s вокруг нее. Я думаю, что для этого требуется два цикла в пределах правильного диапазона, но я застрял на том, как установить границы для подсчета букв. Если данный квадрат находится на букве, он также засчитывается.

 room = [['N', ' ', ' ', ' ', ' '],  ['N', 'N', 'N', 'N', ' '],  ['N', ' ', 'N', ' ', ' '],  ['N', 'N', 'N', ' ', ' '],  [' ', ' ', ' ', ' ', ' '],  [' ', ' ', ' ', ' ', ' ']]   def count_n(x, y, room):   for y in range(y, len(room)):  #print(y)  for x in range(x, len(room[y])):  #print(x)  if x == "N":  n=n 1  return n  

Комментарии:

1. Что здесь означает » вокруг «?

2. Смущает один и тот же термин — around тоже. Лучше привести здесь один конкретный пример.

Ответ №1:

Если «вокруг» означает 8 соседей и саму ячейку, вы можете сделать следующее:

 def count_n(x, y, room):  x_lo, x_hi = max(x-1, 0), min(x 2, len(room))  y_lo, y_hi = max(y-1, 0), min(y 2, len(room[x]))  n = 0  for row in room[x_lo:x_hi]:  for val in row[y_lo:y_hi]:  if val == "N":  n = n   1  return n  

Это можно сократить:

 def count_n(x, y, room):  x_lo, x_hi = max(x-1, 0), min(x 2, len(room))  y_lo, y_hi = max(y-1, 0), min(y 2, len(room[x]))  return sum(val == "N" for row in room[x_lo:x_hi] for val in row[y_lo:y_hi])  

Комментарии:

1. Вопрос: если последняя строка из room ‘ [‘ ‘, ‘ ‘, ‘ ‘, ‘N’, ‘ ‘]] ` запустив его, вы получите 1 . Ожидается ли это? (похоже, результат будет включать в себя сам (x, y))? Потому что в данном случае окружающее действительно 0 таково .