There is a simple method for constructing a magic square for any odd value of n:

Make a blank n by n grid. We need to populate it with the integers from 1 to n2.

Set i to 1.

Set the current grid position to the location in the middle of the top row.

Insert the number i into the current grid position.

If i is equal to n2, we're done.

If i is a multiple of n, move the current grid position down one (i.e., in the direction of "south" on a map). Otherwise, move the current grid position diagonally up and right (i.e., in a "northeast" direction on a map), wrapping to the first column or last row if the move leads outside the grid.

Increment i by 1.

Return to step 4.

In this assignment, you will create a class of MagicSquare objects, and print out magic squares with sides 1, 3, 5, 7, 9, 11, and 13.

The class MagicSquare should have two properties:

sideLength, an integer representing how many numbers are in each row and column of the magic square.

grid, a two-dimensional list of size sideLength by sideLength representing the contents of the magic square.

The class MagicSquare should have two methods:

__init__(), which takes as an argument an integer side representing the value for the new object's sideLength. __init__ should create the two-dimensional list grid and initially populate it with zeroes. __init__ should then use the algorithm described above to replace the zeroes in grid with the integers from 1 to sides2.

display(), which prints out a MagicSquare object. It should print out each number in a field of size 5, right-justified, similar to the example above. It should also print a blank line after the magic square.

Create a main program that uses a loop to print the seven magic squares listed above, each preceded by the title, "Magic Square of size ", followed by the corresponding value for side. Leave a blank line between the title and the magic square. See the example above.

Respuesta :

Answer:

See Explaination

Explanation:

class MagicSquare():

def __init__(self,side):

self.side=side

self.two_dimension=[]

for row in range(1,side+1):

row_line=[]

for col in range(1,side+1):

row_line.append(0)

self.two_dimension.append(row_line)

def display(self):

row=0

col=int((self.side-1)/2)

for i in range(1,self.side**2+1):

self.two_dimension[row][col]=i

row-=1

col+=1

if row==-1:

row=self.side-1

if col==self.side:

col=0

if self.two_dimension[row][col]==0:

continue

else:

row+=1

if row==self.side:

row==0

for line in self.two_dimension:

for num in line:

print("{0:>3}".format(num),end=" ")

print()

def main():

for i in range(1,14,2):

square=MagicSquare(i)

square.display()

print("----------------------------------------------------")

if __name__ == '__main__':

main()