Since you're trying to learn, I won't give you a solution, but will make some suggestions...
In print_row, consider what your objective is. You have a docstring saying you're printing the number "using the given number of spaces". Is that what you want?
Think about it. You want this:
1 1 1 1 2 1 1 3 3 1 ...
In all the rows, you want them centered, based on the longest row (the last one, right?). For the last row you don't need any indentation, in other rows, you want them indented. So maybe you have a function that figures out the longest line and then figure out the length of other lines and how much to indent, based on the difference in length.
If you're not using python in interactive mode (or using IDLE), consider doing that, so you can explore with the functions you have. With that, you can then run the functions individually, to see what they are doing.
For example, you can type in your functions, and then enter:
print_row([1, 2, 1], 10)
And see if the output matches what you expect. You can do this on each function to help verify what you expect for different inputs.
A more advanced technique, BTW, is to do Test Driven Development, where you write tests that call functions and verify they do what is expected. If you want to learn about that more Google on TDD and Python for some cool info on coding.