非常基本的Sudokulike程序

2024-04-25 18:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个过程(symmetric(p)),该过程将一个列表作为输入,该列表必须是正方形的,就像一个数独游戏,其组件也是列表,如果“正方形”是对称的或不是对称的,则输出值true或false。你知道吗

如果第一行等价于第一列,第二行等价于第二列,则正方形是对称的,依此类推。现在,我已经写了代码,但它不工作。它的输出总是正确的。下面是代码的粘贴:

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是列表的第二个元素时,它不等于用第二个位置([dog, dog, fish])构建的列。你知道吗


Tags: 代码列表return过程defcounterpositioncolumn
3条回答

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

def symmetric(p):
    counter = 0

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

    return True

你在错误的时间返回了TrueFalse,因为问题比你想的要简单。你知道吗

Python魔法!你知道吗

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

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

如果您使用的是python2.7,那么可以删除对list的外部调用。你知道吗

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

相关问题 更多 >