Comparto con animanegra que el planteo de solución está muy mal:
1)igual modifique lo básico del código para que muestre lo que quieres, usando la lógica antes expuesta
2)la solución al planteo del triángulo para mí, también está mal, pero usaré tu mismo código
3) supongo que si solo importa el resultado antes descripto ya con esto funciona.
#-*- coding: utf -8 -*-
filas=int(input("Cantidad de filas: "))
primero=int(input("Número inicial:"))
matriz= [[0]*filas for a in range(filas)]
numero_columna_inicial=filas//2-1
numero_columna_final=filas//2+1
for d in matriz:
matriz[filas//2][filas//2]="x"
descontar= 1
for q in range (filas//2+1,filas,1):
for w in range (numero_columna_inicial,numero_columna_final+1,1):
matriz[q][w]="x"
descontar+=1
numero_columna_inicial=numero_columna_inicial-1
numero_columna_final=numero_columna_final+1
for f in range(filas):
for c in range(filas):
if matriz[f][c] == 0 :
matriz[f][c]= primero
primero+=1
for a in matriz:
print(a)
Por supuesto no es absoluto! python da muchas formas de resolución, aunque traté de mantenerme en el código, algunas cosas las salté por obvias e innecesarias
Saludos