2012-04-13 9 views
0

Ich versuche ein Dreieck zu erstellen, das vom Benutzer eingegebene Werte aufnimmt und von den Werten die maximale Route in diesen Eingaben finden möchte. Ich fragte intitally die Frage um die maximale Strecke in diese zu finden: Finding the Maximum Route in a given inputEin Dreieck als Eingabe in Python einbeziehen

Code:

def triangle(rows): 
    for rownum in range (rows): 
     PrintingList = list() 
     print ("Row no. %i" % rownum) 
     for iteration in range (rownum): 
      newValue = input("Please enter the %d number:" %iteration) 
      PrintingList.append(int(newValue)) 
      print() 
def routes(rows,current_row=0,start=0): 
    for i,num in enumerate(rows[current_row]): 
     #gets the index and number of each number in the row 
     if abs(i-start) > 1: # Checks if it is within 1 number radius, if not it skips this one. Use if not (0 <= (i-start) < 2) to check in pyramid 
      continue 
     if current_row == len(rows) - 1: # We are iterating through the last row so simply yield the number as it has no children 
      yield [num] 
     else: 
      for child in routes(rows,current_row+1,i): #This is not the last row so get all children of this number and yield them 
       yield [num] + child 


numOfTries = input("Please enter the number of tries:") 
Tries = int(numOfTries) 
for count in range(Tries): 
    numstr= input("Please enter the height:") 
    rows = int(numstr) 
    triangle(rows) 
    routes(triangle) 
    max(routes(triangle),key=sum) 

Der Fehler, den ich schließlich für Dreieck meine Werte Eingabe erhalten:

Traceback (most recent call last): 
    File "C:/Users/HP/Desktop/sa1.py", line 25, in <module> 
    max(routes(triangle),key=sum) 
    File "C:/Users/HP/Desktop/sa1.py", line 10, in routes 
    for i,num in enumerate(rows[current_row]): #gets the index and number of each number in the row 
TypeError: 'function' object is not subscriptable 

Wo ist mein Fehler in meinem Code? Hilfe brauchen .. Danke ...

+0

Was soll 'routes (Dreieck)' bedeuten? –

+0

Dreieck (Zeilen) gibt nichts zurück. – cfedermann

Antwort

1

Sie wahrscheinlich versuchen, den Wert von PrintingList ot zu erhalten, in der triangle Funktion als rows Variable innerhalb der routes Funktion erstellt.

Damit Ihr Programm auf diese Weise arbeitet, müssen Sie in Ihrer Dreiecksfunktion eine return -Anweisung hinzufügen - also eine return PrintingList als letzte Anweisung hinzufügen - und diesen Wert beim Aufruf der Funktion speichern und den gespeicherten Wert übergeben auf die routes Funktion - was bedeutet, soll das Ende des Programms liest so etwas wie: oben

result = triangle(rows) 
routes(result) 
max(routes(triangle),key=sum) 

das dieses Problem beheben wird, kann es andere Probleme im Code sein.

2

Sie verwenden:

routes(triangle) 

Der triangle Namen einer Funktion bezieht, die als erstes Argument übergeben wird rowsroutes zu funktionieren. Im Funktionskörper liefert rows[current_row] den Fehler, da rows tatsächlich eine Funktion ist.

Ich sehe nicht wirklich, was Sie versuchen zu tun. Vielleicht möchten Sie PrintingList von triangles zurückgeben und dieses Ergebnis wiederum an die Funktion übergeben?

-3

Wie die Rückverfolgung angegeben, ist es in like 25 und Zeile 10. Es heißt, dass die Funktion nicht einklagbar ist, was wahr ist, können Sie nicht eine Funktion abonnieren. Sie können jedoch abonnieren:

String: "x"[2] == "foo" 
Tuple: (2,5,2,7)[3] == 7 
List: [1,2,3,"foo"][3] == "foo" 
Dict: {"a":1, "b":5, "c":5}["a"] == 1