Programming Exercise 3-1
Programming Exercise 7-11
# Global constants
ROWS = 3 # The number of rows
COLS = 3 # The number of columns
MIN = 1 # The value of the smallest number
MAX = 9 # The value of the largest number
def main():
# Create a two-dimensional list.
test_list = [ [4, 9, 2],
[3, 5, 7],
[8, 1, 6] ]
# Display the list in row and column format.
display_square_list(test_list)
# Determine if the list is a Lo Shu magic square.
if is_magic_square(test_list):
print(‘This is a Lo Shu magic square.’)
else:
print(‘This is not a Lo Shu magic square.’)
# The display_square_list function accepts a two-dimensional
# list as an argument, and displays the list’s values in row
# and column format.
def display_square_list(value_list):
for r in range(ROWS):
for c in range(COLS):
print(value_list[r][c], end=’ ‘)
print()
# The is_magic_square function accepts a two-dimensional
# list as an argument, and returns True if the list meets
# all the requirements of a magic square. Otherwise it
# returns False.
def is_magic_square(value_list):
# Set status to False, initially.
status = False
# Call functions and store their return values.
is_in_range = check_range(value_list)
is_unique = check_unique(value_list)
is_equal_rows = check_row_sum(value_list)
is_equal_cols = check_col_sum(value_list)
is_equal_diag = check_diag_sum(value_list)
# Determine if the list meets all the requirements.
if is_in_range and \
is_unique and \
is_equal_rows and \
is_equal_cols and \
is_equal_diag:
# If it does, set status to True.
status = True
# Return the status.
return status
# The check_range function accepts a two-dimensional
# list as an argument, and returns True if the values
# in the list are within the specified range. Otherwise,
# it returns False.
def check_range(value_list):
# Initialize status to True.
status = True
# Step through all the values in the list.
for r in range(ROWS):
for c in range(COLS):
# Determine if any of the values
# are out of range.
if value_list[r][c] < MIN or \ value_list[r][c] > MAX:
# If so, set status to False.
status = False
# Return the status.
return status
# The check_unique function accepts a two-dimensional
# list as an argument, and returns True if the values
# in the list are unique. Otherwise, it returns False.
def check_unique(value_list):
# Initialize status to True.
status = True
# Initialize the search value.
search_value = MIN
# Initialize the counter to zero.
count = 0
# Perform the search while the maximum value
# has not been reached, and the values are
# unique.
while search_value <= MAX and status == True: # Step through all the values in the list. for r in range(ROWS): for c in range(COLS): # Determine if the current value equals # the search value. if value_list[r][c] == search_value: # If so, increment the counter. count += 1 # Determine if the counter variable is # Greater than one. if count > 1:
# If so, the value is not unique.
# Set status to False.
status = False
# Increment the search value.
search_value += 1
# Reset the counter variable.
count = 0
# Return the status.
return status
# The check_row_sum function accepts a two-dimensional
# list as an argument, and returns True if the sum of
# the values in each of the list’s rows are equal.
# Otherwise, it returns False.
def check_row_sum(value_list):
# Initialize status to True.
status = True
# Calculate the sum of the values in the first row.
sum_row_0 = value_list[0][0] + \
value_list[0][1] + \
value_list[0][2]
# Calculate the sum of the values in the second row.
sum_row_1 = value_list[1][0] + \
value_list[1][1] + \
value_list[1][2]
# Calculate the sum of the values in the third row.
sum_row_2 = value_list[2][0] + \
value_list[2][1] + \
value_list[2][2]
# Determine if the sum of any of the rows is not equal.
if (sum_row_0 != sum_row_1) or \
(sum_row_0 != sum_row_2) or \
(sum_row_1 != sum_row_2):
# If so, set the status to False
status = False
# Return the status.
return status
# The check_col_sum function accepts a two-dimensional
# list as an argument, and returns True if the sum of
# the values in each of the list’s columns are equal.
# Otherwise, it returns False.
def check_col_sum(value_list):
# Initialize status to True.
status = True
# Calculate the sum of the values in the first column.
sum_col_0 = value_list[0][0] + \
value_list[1][0] + \
value_list[2][0]
# Calculate the sum of the values in the second column.
sum_col_1 = value_list[0][1] + \
value_list[1][1] + \
value_list[2][1]
# Calculate the sum of the values in the third column.
sum_col_2 = value_list[0][2] + \
value_list[1][2] + \
value_list[2][2]
# Determine if the sum of any of the columns
# is not equal.
if (sum_col_0 != sum_col_1) or \
(sum_col_0 != sum_col_2) or \
(sum_col_1 != sum_col_2):
# If so, set the status to False
status = False
# Return the status.
return status
# The check_diag_sum function accepts a two-dimensional
# list as an argument, and returns True if the sum of
# the values in each of the list’s diagonals are equal.
# Otherwise, it returns False.
def check_diag_sum(value_list):
# Initialize status to True.
status = True
# Calculate the sum of the values in the first diagonal.
sum_diag_0 = value_list[0][0] + \
value_list[1][1] + \
value_list[2][2]
# Calculate the sum of the values in the second diagonal.
sum_diag_1 = value_list[2][0] + \
value_list[1][1] + \
value_list[0][2]
# Determine if the sum of any of the columns
# is not equal.
if sum_diag_0 != sum_diag_1:
status = False
# Return the status.
return status
# Call the main function.
main()