Подскажите как решить задачу Python

введите сюда описание изображения

Пробовал методом a[x][y], ничего не получается, выдает ошибку. Какие функции здесь применимы?

Задача: Дано нечетное число n. Создайте двумерный массив из n×n элементов, заполнив его символами "." (каждый элемент массива является строкой из одного символа). Затем заполните символами "*" среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. В результате единицы в массиве должны образовывать изображение звездочки. Выведите полученный массив на экран, разделяя элементы массива пробелами.

как сделать "квадрат" из символов "."? Как квадрат присвоить массиву а.

Output в прикрепленном изображении.


Ответы (2 шт):

Автор решения: entithat

Очень просто.

  • Первая диагональ - когда 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)]
→ Ссылка
Автор решения: TigerTV.ru

Вариант без 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)
→ Ссылка