在2D数组中绘制X - Python

时间:2013-11-21 17:09:54

标签: python list python-3.x

在给定行数和列数的情况下,我必须创建一个空的2D数组。空数组通过下划线显示为空,因此这将是一个空数组的示例(每行有4个下划线):

____
____
____

以下是我的代码:

def gen_table (rows, columns):
    matrix = [["_"] * columns for _i in range(rows)]

    return matrix

所以我想做的是能够在数组中绘制一个X,看起来像这样,

S___S
_S_S_
__S__
_S_S_
s___S

Z__Z
_ZZ_
_ZZ_
Z__Z
____

我尝试过多种方法,例如尝试在我想放置“s”的位置弹出,但似乎没有任何工作。

知道如何在数组中绘制X?

3 个答案:

答案 0 :(得分:3)

好的,让我们来看看这个

nrows = 5
ncols = 5
mark = "X"
space = "_"
the_matrix = [] 

现在设置我们所有的变量让我们做的事情

for i in range(nrows//2): #loop through the first half of rows
    the_matrix.append([space]*ncols) # the default row
    idx1,idx2 = i , ncols - 1 - i  #left and right indexes
    the_matrix[-1][idx1] = the_matrix[-1][idx2] = mark #set our indices

你去了你现在有半个X ......我会留下它作为练习让你找出下半部分

答案 1 :(得分:2)

如果矩阵始终是具有奇数维的方阵,则:

>>> from pprint import pprint
>>> def gen_table (rows, columns):
        matrix = [["_"] * columns for _i in range(rows)]
        #Indexes of first diagonal
        diag1 = [(i, i) for i in xrange(rows)]
        #Indexes of second diagonal
        diag2 = [(rows-i-1, i) for i in xrange(rows)]
        #Iterate over the indexes from diag1 and diag2 and modify matrix
        for i, j in diag1 + diag2:
            matrix[i][j] = 'S'
        return matrix
...     
>>> pprint(gen_table(5,5))
[['S', '_', '_', '_', 'S'],
 ['_', 'S', '_', 'S', '_'],
 ['_', '_', 'S', '_', '_'],
 ['_', 'S', '_', 'S', '_'],
 ['S', '_', '_', '_', 'S']]
>>> pprint(gen_table(7,7))
[['S', '_', '_', '_', '_', '_', 'S'],
 ['_', 'S', '_', '_', '_', 'S', '_'],
 ['_', '_', 'S', '_', 'S', '_', '_'],
 ['_', '_', '_', 'S', '_', '_', '_'],
 ['_', '_', 'S', '_', 'S', '_', '_'],
 ['_', 'S', '_', '_', '_', 'S', '_'],
 ['S', '_', '_', '_', '_', '_', 'S']]

具有均匀尺寸的方阵的输出:

>>> pprint(gen_table(6,6))
[['S', '_', '_', '_', '_', 'S'],
 ['_', 'S', '_', '_', 'S', '_'],
 ['_', '_', 'S', 'S', '_', '_'],
 ['_', '_', 'S', 'S', '_', '_'],
 ['_', 'S', '_', '_', 'S', '_'],
 ['S', '_', '_', '_', '_', 'S']]

答案 2 :(得分:0)

print("*" * 10) # to let you see any errors 
input_size = int(input("Minimum of 3 lines. How many lines do you want to see : "))
size = (3 + input_size - 3) 
i = 0 
j = (input_size - 1) 
for row in range(size) : 
    for col in range(size) :
        if row == i and col == j : 
            print("*", end = "") 
            j -= 1
            i += 1 
        elif row == col :
            print("*", end = "")
        else :
            print(end = " ")
    print()