Angesichts der Anzahl der Zeilen und Spalten muss ich ein leeres 2D-Array erstellen. Das leere Array wird durch Unterstriche leer angezeigt. Dies wäre also ein Beispiel für ein leeres Array (dies sind 4 Unterstriche pro Zeile):

____
____
____

Unten ist mein Code, um dies zu machen:

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

    return matrix

Ich möchte also in der Lage sein, ein X in das Array zu zeichnen, um so auszusehen.

S___S
_S_S_
__S__
_S_S_
s___S

Z__Z
_ZZ_
_ZZ_
Z__Z
____

Ich habe mehrere Dinge ausprobiert, z. B. den Versuch, an den Stellen zu erscheinen, an denen ich ein "s" setzen möchte, aber nichts schien zu funktionieren.

Irgendeine Idee, wie ich ein X im Array zeichnen kann?

-1
l00kitsjake 21 Nov. 2013 im 21:09

3 Antworten

Beste Antwort

Ok, schauen wir uns das an

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

Wenn wir jetzt alle unsere Variablen einrichten, können wir unser Ding machen

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

Los geht's, du hast jetzt ein halbes X ... Ich überlasse es dir als Übung, die untere Hälfte herauszufinden

3
Joran Beasley 21 Nov. 2013 im 17:35

Wenn die Matrix immer eine quadratische Matrix mit ungeraden Dimensionen ist, dann:

>>> 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']]

Ausgabe für quadratische Matrix mit geraden Abmessungen:

>>> pprint(gen_table(6,6))
[['S', '_', '_', '_', '_', 'S'],
 ['_', 'S', '_', '_', 'S', '_'],
 ['_', '_', 'S', 'S', '_', '_'],
 ['_', '_', 'S', 'S', '_', '_'],
 ['_', 'S', '_', '_', 'S', '_'],
 ['S', '_', '_', '_', '_', 'S']]
2
Ashwini Chaudhary 21 Nov. 2013 im 17:29
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()
0
codlearner 10 Mai 2019 im 13:22