Это похоже на вопрос домашнего задания, поэтому я попытаюсь объяснить, как подойти к нему, а не просто предоставить код.
Несколько вещей, на которые стоит обратить внимание для начала:
- Симметричность шаблона в обоих направлениях, поэтому мы можем сэкономить некоторые усилия и c, решив только верхнюю левую четверть и скопировав ее в остальные.
- Каждая строка похожа на предыдущую, с добавлением одной в точке где индексы строки и столбца ( i и j ) равны - вместо того, чтобы пересчитывать каждую строку с нуля, мы можем взять предыдущую за основу.
Итак, для первой строки составьте список из единиц длины вашего ввода (в данном случае 7).
Скопируйте это для седьмой строки (примечание: row6 = row0 не будет создавать копию; вы need row6 = list (row0))
Для второй и шестой строк возьмите копию первой строки. Если i больше или равно j и находится в первой половине строки, добавьте к нему 1. Вам нужно будет скопировать это в обратном порядке для задней половины ряда. (Альтернатива - установите значение j + 1, а не просто добавляйте 1)
Повторяйте до четвертой строки, и все готово.
EDIT: код включен , потому что это была интересная задача
numberOfRows = int(input("Enter the number of rows:"))
listOut = [[1]*numberOfRows] * numberOfRows #grid of 1s of appropriate size
for j in range(int((numberOfRows+1)/2)): #symmetrical, so only look to the middle
if j > 0:
listOut[j] = list(listOut[j-1]) #copy previous row
for i in range(int((numberOfRows+1)/2)):
if i>=j:
listOut[j][i] = j+1
listOut[j][numberOfRows-(i+1)] = j+1
#copy current row to appropriate distance from the end
listOut[numberOfRows-(j+1)] = list(listOut[j])
for row in listOut:
# * for sequence unpacking, printing lists as strings w/o commas
print(*row)