#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
таково .