Подскажите как решить задачу Python
Пробовал методом a[x][y], ничего не получается, выдает ошибку. Какие функции здесь применимы?
Задача: Дано нечетное число n. Создайте двумерный массив из n×n элементов, заполнив его символами "." (каждый элемент массива является строкой из одного символа). Затем заполните символами "*" среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. В результате единицы в массиве должны образовывать изображение звездочки. Выведите полученный массив на экран, разделяя элементы массива пробелами.
как сделать "квадрат" из символов "."? Как квадрат присвоить массиву а.
Output в прикрепленном изображении.
Ответы (2 шт):
Очень просто.
- Первая диагональ - когда
i == j - Вторая диагональ - когда
i == n - j - 1(т.е.0, 4(5 - 0 - 1),1,3и т.д.) - Горизонталь - когда
i == n / 2, (т.е.5 // 2 = 2) - Вертикаль - когда
j == n / 2, (т.е. заполняем только индексы, для всехi, гдеj == n // 2)
n = 5
a = [['*' if i == j or i == n // 2 or j == n // 2 or i == n - j - 1 else '.' for j in range(n) ] for i in range(n)]
* . * . *
. * * * .
* * * * *
. * * * .
* . * . *
P.S. Сразу с выводом:
a = [print(' '.join(['*' if i == j or i == n // 2 or j == n // 2 or i == n - j - 1 else '.' for j in range(n)])) for i in range(n)]
Вариант без if, заполняем * от краев к центру(не тривиальный способ с линиями):
n = 11
b = [['.' for i in range(n)] for j in range(n)]
nn = n // 2
# fill 4 points
def fill4p(x, y):
for k in range(4):
b[x][y] = '*'
x, y = n - y - 1, x
for i in range(nn + 1):
fill4p(i, i)
fill4p(i, nn)
