2016-06-03 8 views
1

Ich versuche ein Programm zu schreiben, um die N Queens Puzzle zu lösen. Ich erhalte den Fehler name 'FindPosition' is not defined, wenn der Code versucht, FindPosition(finalArray, startArray) rekursiv aufzurufen. Wie rufe ich die Funktion richtig auf?Rekursive Funktion ist nicht in sich selbst definiert

class TheQueensAlgoritm(): 

    def FindPosition(finalArray, startArray): 

     if len(startArray)==0: 
      print(finalArray) 
      return 
     else: 
      startIndex = 0 

      while startIndex <= len(startArray): 
       finalIndex = len(finalArray) - 1 

       while finalIndex >= 0:               
        if (not(startArray[startIndex] == finalArray[finalIndex] - finalIndex + startIndex) and not(startArray[startIndex] == finalArray[finalIndex] + finalIndex - startIndex)): 
         finalIndex = finalIndex - 1      
        else: 
         break 
        finalArray.append(startArray[startIndex]) 
        startArray.remove(finalArray[-1]) 
        FindPosition(finalArray, startArray) 
       startIndex = startIndex + 1 

      startArray.append(finalArray[-1]) 
      finalArray.remove(startArray[-1]) 
      FindPosition(finalArray, startArray)   

    startArray = [] 
    finalArray = [] 
    boardSize = input("Type the size of the board = ") 
    boardSize = int(boardSize) 

    for i in range (0, boardSize): 
     startArray.append(i) 

    finalArray.append(startArray[random.randint(0,boardSize-1)]) 
    startArray.remove(finalArray[0])        
    FindPosition(finalArray, startArray) 
+6

Warum haben Sie einen Kurs gemacht? – user2357112

+0

Ich weiß nicht, löschte es das Problem gelöst! Danke – Paier

Antwort

1

FindPosition ist eine Methode der Klasse TheQueensAlgoritm und existiert nicht für sich allein. Sie müssen verwenden:

self.FindPosition(finalArray, startArray) 
+1

Der Selbstparameter fehlt auch, nein? Sonst ist self undefined –

+1

Ja, die Funktion def sollte 'def FindPosition (self, finalArray, startArray) sein:' – heinst

+2

@ cricket_007 Beachten Sie, dass der Name 'self' nur eine Konvention ist. In dem OP-Code wird 'finalArray' tatsächlich als' self' verwendet und die Methode hat nur einen expliziten Parameter, der 'startArray' ist, so dass Aufrufe mit zwei Parametern einen Fehler auslösen. – Bakuriu

Verwandte Themen