A magic square is an N by N matrix whose elements contain the values 1 through N2, and where the sums of the values in each row, column, and diagonal are equal. Here is an example of a 5x5 magic square.

There is a simple algorithm for creating magic squares with odd values of N, such as the one above. You will see that algorithm shortly and will use it to write a program to create a magic square and verify that what it creates is indeed a magic square.
Create a new Python file called lab09a.py:
"""
Program: CS 115 Lab 9a
Author: Your name
Description: This program will create a magic square
whose size is specified by the user.
"""
def create_list(rows, cols):
"""
Creates a two-dimensional array.
Parameters: the numbers of rows and columns
Returns: a 2D array with all values set to zero
"""
two_d = [] # create an empty list
for i in range(rows):
two_d.append([]) # append an empty list to two_d
for j in range(cols):
two_d[i].append(0) # two_d[i] is the empty list that we just created.
# here, we are adding elements to it.
return two_d
def rjust_by_n(number, n):
"""
Return a string of length "n" with number right-justified in it.
Parameters:
number: an value with n or fewer digits
n: a positive integer value
Returns: a string of length n with a number right-justified in it.
"""
return str(number).rjust(n)
def print_list(numbers):
"""
Print a 1D list of numbers, where each number is right-justified
"""
for i in range(len(numbers)):
print( rjust_by_n(numbers[i], 4), end='')
print()
def print_2d_list(two_d_list):
"""
Print a 2-dimensional list
"""
for i in range(len(two_d_list)):
print_list(two_d_list[i])
def main():
# Your code goes here
main()In main, ask the user to enter an integer to be used to create a magic square, and save that integer into a variable square_size.
Sample input/output:
Enter an odd integer to build a magic square: 5
Enter an odd integer to build a magic square: 6
6 is not an odd integer. Terminating...
If the input integer is odd, create a matrix (a two dimensional list) of that size and print it by right-justifying each value in exactly 4 spaces. Use the provided functions to help with this task. Creating the list should take 1 line of code, printing the blank line should take another, and printing the matrix should take 1 more.
Enter an odd integer to build a magic square: 5
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
def build_magic_square(square):
"""
Create a magic square in "square"
Parameter:
square: a two dimensional array whose number of rows and columns are equal
and len(square) is an odd number.
Modifies "square" but doesn't return anything.
"""
magic_value = 1
square_size = len(square)
row = 0
col = square_size // 2
square_size_squared = square_size * square_size
while magic_value <= square_size_squared:
square[row][col] = magic_value
row -= 1
col += 1
if row < 0 and col > square_size - 1:
row += 2
col -= 1
elif row < 0:
row = square_size - 1
elif col > square_size - 1:
col = 0
elif square[row][col] != 0:
row += 2
col -= 1
magic_value += 1
In main, insert a call to this function to build a magic square. This function call should go in between the lines of code that create and print the 2D list.
Sample input/output:
Enter an odd integer to build a magic square: 5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Another example:
Enter an odd integer to build a magic square: 7
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20