如果矩阵在不导入numpy的情况下形成一个幻方,则编写返回boolean true的函数 [英] Writing a function that returns boolean true if matrix forms a magic square without importing numpy

查看:94
本文介绍了如果矩阵在不导入numpy的情况下形成一个幻方,则编写返回boolean true的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在下面编写了程序的一部分:

I already wrote one part of the program which is below:

def matrix_is_square(matrix):
   for i in range(len(matrix)):
      if len(matrix[i]) != len(matrix):
         return False
   return True

如果矩阵是方矩阵,则此函数返回True,否则返回False.

This function returns True if matrix is a square matrix, otherwise, it returns False.

但是,这里开始出现问题.

HOWEVER, HERE'S WHEN THE PROBLEM BEGINS.

我必须编写第二个函数来确定该函数是否为Magic square.

I Have to write a second function that determines if the function is Magic square.

如果满足以下条件,则方阵将形成一个魔方:

A square matrix forms a magic square if the following conditions are met:

  1. 矩阵的元素是数字1,2,3,...,n 2
  2. 每行,每列和两个对角线中元素的总和是相同的值

代码首先以:

def magic(matrix):
   if(not(is_square(matrix))): 
      return False
   # The remaining code

这是我的尝试.

 square = []
 for i in range(len(matrix)):
     square.append([])
     for j in range(len(matrix)):
         square[i].append(0)

 total = 0
 x = len(matrix)
 for i in range(x):
     total += square[i][i]
     if total != x*(x*x+1)/2:
          return False
     else:
        return True

 total = 0;
 for i in range(x):
     total += square[i][x-1-i]
     if total != x*(x*x+1)/2:
          return False
     else:
        return True

我的代码中似乎有几个错误.重要的是我正在测试数字的完全相等性,这是错误的,因为数字不能完全表示为浮点数,但是我找不到另一种方法来做到这一点.任何提示将不胜感激.

There seem to be a couple of errors in my code. An important one is that I'm testing for exact equality of numbers, which is wrong because numbers cannot be represented exactly as floating points, but I can't find another way to do that. Any hints would be appreciated.

此功能的预期结果仅在同一页面上.

Here are the expected outcomes of this function just to be on the same page.

真实

  • [[2,7, 6],[9,5,1],[4,3,8]]
  • [[16,3,2,13], [5,10,11,8],[9,6,7,12], [4,15,14,1]]
  • [[2,7, 6],[9,5,1],[4,3,8]]
  • [[16,3,2,13], [5,10,11,8],[9,6,7,12], [4,15,14,1]]

错误

  • [[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]]
  • [[1,1],[1,1]]
  • [[1,1],[1,1],[1,2]]
  • [[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]]
  • [[1,1],[1,1]]
  • [[1,1],[1,1],[1,2]]

没有导入numpy.

推荐答案

使用sumrangeany函数和set对象的复杂解决方案:

Complex solution using sum, range, any functions and set object:

def magic(m):
    length = len(m)
    first_sum = set()
    if length <= 2 \
            or any(len(row) != length for row in m) \
            or any(i > (length * length) for row in m for i in row):
        return False

    for r in m:
        s = sum(r)
        if len(first_sum) == 0:
            first_sum.add(sum(r))
        if s not in first_sum:
            return False

    for i in range(length):
        s = sum([r[i] for r in m])
        if s not in first_sum:
            return False

    if sum(m[i][i] for i in range(length)) not in first_sum \
        or sum(m[i][i] for i in range(length - 1, -1, -1)) not in first_sum:
        return False

    return True

m = [[2,7,6],[9,5,1],[4,3,8]]
print(magic(m))

m = [[16,3,2,13], [5,10,11,8],[9,6,7,12], [4,15,14,1]]
print(magic(m))

m = [[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]]
print(magic(m))

m = [[1,1],[1,1]]
print(magic(m))

m = [[1,1],[1,1],[1,2]]
print(magic(m))

输出(顺序):

True
True
False
False
False

这篇关于如果矩阵在不导入numpy的情况下形成一个幻方,则编写返回boolean true的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆