2016-11-01 2 views
1

Also ich baue einen Matrixrechner ohne NumPy und ich habe ein begrenztes, aber funktionierendes Modell. Allerdings ist dieses Modell sehr grob und ich möchte es verbessern sowie seine Funktionalität erweitern, um mehrere Matrizen zu berechnen und miteinander zu interagieren (Multiplikation zum Beispiel).Matrix Calculator Without NumPy - Übergeben von Parametern an andere Funktionen

Ein Problem, auf das ich mit meiner sehr begrenzten Erfahrung mit Python schnell gestoßen bin, ist die Weitergabe von Variablen zwischen mehreren Funktionen (Parameter, von denen ich glaube, dass sie genannt werden). Hier ist, was ich habe:

def matrixGenerator1(): 
    rows = int(input("\nHow many rows are in the matrix?\n\n:")) 
    columns = int(input("\nHow many columns are in the matrix?\n\n:")) 
    matrix1 = [[0 for x in range(columns)] for y in range(rows)] 
    for y in range(rows): 
     for x in range(columns): 
      matrix1[y][x] = int(input("\nWhat is the entry?\n\n:")) 
    print("\nThe original matrix is...") 
    for y in range(rows): 
     print("\n") 
     for x in range(columns): 
      print(format(matrix1[y][x], "5d"), end="") 
    return rows, columns, matrix1 


def matrixTranspose(rows, columns, matrix1): 
    print("\nThe transpose of this matrix is...") 
    for y in range(rows): 
     print("\n") 
     for x in range(columns): 
      print(format(matrix1[y][x], "5d"), end="") 

matrixGenerator1() 
matrixTranspose(rows, columns, matrix1) 

Rennen führt dies zu einer Fehlermeldung, dass rows, columns und matrix1 sind nicht definiert. Ich stelle fest, dass diese Variablen lokal zu der matrixGenerator-Funktion sind und sie zu zwingen, global zu sein, ist keine Option, die ich annehmen möchte.

Gibt es überhaupt jemanden, der mir eine allgemeine Erklärung geben könnte, was ich falsch mache, damit ich diesen Fehler in Zukunft verhindern kann?

Antwort

1

Sie müssen die Ausgabe Ihrer ersten Funktion in Ihrer Hauptroutine speichern. (Beachten Sie, dass Sie es bereits zurücksenden, so dass Sie fast fertig sind):

rows, columns, matrix1 = matrixGenerator1() 
matrixTranspose(rows, columns, matrix1) 
+0

Wenn Sie diese Zuweisungsanweisung oberhalb des Aufrufs von 'matrixTranspose' unabsichtlich eingeben, werden Sie erneut zur Eingabe aufgefordert. Das Programm sollte nur die Eingabe von der 'MatrixGenerator'-Funktion durch den Rest des Programms tragen. Gibt es eine andere Möglichkeit, Parameter zu verwenden, aber die Eingabeaufforderung zu vermeiden? Ich sollte beachten, dass meine vorherige Iteration dieses Programms keine Funktion zum Generieren der Matrix hatte und stattdessen alle in der Hauptroutine war. Ich möchte etwas Ähnliches erreichen. –

+0

Sie haben den ursprünglichen Aufruf von matrixGenerator1() ersetzt, richtig? Ich habe es ausgeführt und es hat mich nicht zweimal aufgefordert. –

+0

Das macht Sinn, ich missverstanden. Das hat das Problem gelöst, danke. –

Verwandte Themen