真正基本的数独式程序

时间:2017-08-10 20:25:57

标签: python

我正在尝试创建一个过程(对称(p)),该过程将一个列表作为输入,该列表必须是像Sudoku游戏一样的方形,并且其组件也是列表,并输出值true或false if “正方形”是对称的还是不对称的。

如果第一行等于第一列,第二行等同于第二列,则方形是对称的,依此类推。现在,我已经编写了代码,但它不起作用。它的输出始终为True。这是代码粘贴:

def column_building(list, position):
  column = []
  for i in list:
    column.append(i[position])
  return column

a = [[1, 2, 3],
     [2, 3, 4],
     [3, 4, 1]]

b = [["cat", "dog", "fish"],
     ["dog", "dog", "dog"],
     ["fish","fish","cat"]]

def symmetric(p):
  counter = 0
  for e in p:
    if e == column_building(p, counter):
      counter = counter + 1
      return True
    else:
      return False
      break

print symmetric(b)

在代码中,第一个过程告诉哪个列在确定的位置。 ab是我创建用作示例的列表。并且,正如我所说,它输出始终为True,但如果我使用b,当e是列表的第二个元素时,它不等于使用第二个位置构建的列({{ 1}})。

4 个答案:

答案 0 :(得分:2)

Python魔术!

def symmetric(p):
    return list(map(list, zip(*p))) == p

在这里,zip(*p)只是转置给定的列表列表。实际上,您需要检查transpose(p) == p

如果您使用的是Python 2.7,则可以移除对list的外部调用。

答案 1 :(得分:0)

要修复(而不是替换)您的代码,我建议:

def symmetric(p):
    counter = 0

    for e in p:
        if e != column_building(p, counter):
            return False
        counter += 1

    return True

您在错误的时间返回TrueFalse,因为问题比您制作的更简单。

答案 2 :(得分:0)

Numpy版本:

import numpy as np

b = [["cat", "dog", "fish"],
["dog", "dog", "dog"],
["fish","fish","cat"]]

np.all(np.array(b) == np.array(b).T) # all True = True, else False

答案 3 :(得分:-1)

我认为您需要检查transpose(p) == p