2016-11-15 10 views
0

Ich hoffe, dass jemand helfen kann. Ich schrieb den folgenden Code:Graf Variable in Python

def minTransport(dict, max): 
    sum = 0 
    tempList = [] 
    counter = len(dict) 
    tempCounter = len(dict) 
    for item in get_partitions(dict): 
     for list in item: 
      for i in list: 
       sum += dict[i] 
      if sum <= limit: 
       tempList.append(list) 
       sum = 0 
      else: 
       sum = 0 
       tempList = [] 
       break 
     counter = len(tempList) 
     if counter < tempCounter: 
      result = tempList 
      tempCounter = counter 
      tempList = [] 
     else: 
      tempList = [] 
    return result 

get_partitions ist eine Hilfsfunktion, die jede einzelne mögliche Kombination der Tasten in der angegebenen dict zurückgibt. Z.B. dict={a:1, b:2, c:3}, for item in get_partitions(dict) bekommt man:

[[a, b, c]] or [[a,b], [c]] or [[a], [b,c]] or [[a,c],[b]] or[[a],[b],[c]]

Mein Programm soll über diese Elemente zu durchlaufen, sehen, ob die Summe der Werte der verschachtelten Liste < = max und wenn das der Fall ist zählen alle verschachtelten Listen in ein Gegenstand. Im obigen Beispiel könnte count1 ([a,b,c]),2 (e.g. [a,b],[c]) or 3 ([a],[b],[c]) gewesen sein. Das Problem ist, dass ich nicht weiß, wie man die optimale Lösung zurückgibt, die den Artikel mit der geringsten Anzahl von verschachtelten Listen bedeutet. Wenn ich counter = den(dict) und tempCounter = den(dict) einstellen, nach der ersten Schleife tempCounter = 0, weil das Programm bricht (sum > limit) und die counter = 0. Das wird also immer der niedrigste Wert sein. Wenn ich es anders versuche habe ich das gleiche Problem (counter immer den (dict)). Es gibt im Grunde 2 Probleme: 1. Wie kann ich sicherstellen, dass der Zähler nur auf die Elemente gesetzt wird, die gültig sind sum<=max für alle verschachtelten Listen? Und 2 .: Ich bekomme manchmal die Fehlermeldung UnboundLocalError: local variable 'result' referenced before assignment. Was bedeutet das und wie ist das möglich, wenn das Programm vorher funktioniert hat und ich die Positionen result im Code nicht ändere? Danke für jede Hilfe!

+2

Lassen Sie uns eine Frage pro Post halten. [mcve] | [ask] –

+0

Ihr Beispiel erklärt nicht, was Sie zählen möchten, um zu reflektieren. – TemporalWolf

Antwort

0

Ihre zweite Frage ... Sie sollten result auf der gleichen Ebene wie Ihre Return-Anweisung definieren. Sie erhalten manchmal die Nachricht UnboundLocalError, wenn Ihre Funktion nie die Zeile erreicht, in der Sie result definieren.