我在创建交叉网格程序中是否使用了最佳实践的代码

时间:2019-03-16 23:22:10

标签: python

我正在创建一个十字网格,希望对2d数组应用程序有一些反馈。这是使用2d数组创建交叉网格的最佳方法。

Heres the output of my Crosses grid

但是当涉及到二维数组时,我不知道这是否是最好的解决方法。我将输入放入数组时遇到了麻烦,所以我将其遗漏了。

arr1 = [[], []]
arr1[0] = xrow
arr1[1] = ycolumn

for i in range(0, arr1[0]):
  for j in range(0, arr1[1]):
    print("X", end="")
  print()

2 个答案:

答案 0 :(得分:0)

  

最好的解决方法。

不,您建议的方式不是pythonic。 当有固定数量的具有不同名称(例如矩形大小)的项目时,我们更喜欢使用元组而不是列表。 这是重构后的代码,以传递一个元组,并使用较小的变量重命名。

def display_rectangle(size):
    height, width = size  # tuple unpacking
    for i in range(height):
        for j in range(width):
            print('X', end='')
        print('')

size = (4, 5)
display_rectangle(size)

使用end选项效果很好,它为两个维度提供了很好的并行构造。 但是您可能更喜欢一个简短的版本:

def display_rectangle(size):
    height, width = size
    for i in range(height):
        print('X' * width)

如果您开始更改矩形内的元素,例如制作带有矩形边框的空心框,那么您可能希望使用numpy数组来表示网格。

答案 1 :(得分:0)

这是使用list comprehension执行此任务的单行语句。

  

'\ n'.join([[(“ X” * col)for i in range(row)])

>>> # One line statement to generate the rectangular GRID
... 
>>> col = 4
>>> row = 5
>>> 
>>> grid = '\n'.join([("X" * col) for i in range(row)])
>>> 
>>> print(grid)
XXXX
XXXX
XXXX
XXXX
XXXX
>>> 

如我们所见,上面的代码不可重用,因此最终您可以编写带有签名的函数,如generate_grid(row=5, col=5),使其可重用。

  

在这里,如果您将调用不带参数的函数,则rowcol的默认值将被视为5

让我们看看在Python交互式终端上执行的一些示例。

def generate_grid(row=5, col=5):
    """
    Description
    ===========
        This function returns a GRID to the caller

    Parameter
    =========
        row: number of rows in GRID
        col: number of columns in GRID

    Note: 5 is default value for row & col (if no parameters are supplied)
    """

    return '\n'.join([("X" * col) for i in range(row)])

现在,我们将通过提供至少0和最多2个参数来调用(重用)上述函数。

  

测试1

grid = generate_grid(6, 5)
print(grid)
  

输出

XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
  

测试2

grid = generate_grid()#默认值将取为5(此处) 打印(网格)

  

输出

XXXXX
XXXXX
XXXXX
XXXXX
XXXXX