2016-11-15 6 views
0

誰かが助けてくれることを願っています。私は、次のコードを書いた:Pythonの変数Count

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は、与えられた辞書のキーの一つ一つの可能​​な組み合わせを返すヘルパー関数です。例えば。 dict={a:1, b:2, c:3}for item in get_partitions(dict)あなたを取得:

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

私のプログラムは、ネストされたリスト< =最大の値の合計かどうかを確認し、これらのアイテムを反復することになっ及びそのような場合では、すべてのネストされたリストをカウントしていますアイテム。上記の例ではcount1 ([a,b,c]),2 (e.g. [a,b],[c]) or 3 ([a],[b],[c])でした。問題は、ネストされたリストの数が最も少ないアイテムを意味する最適なソリューションを返す方法がわからないことです。 counter = den(dict)tempCounter = den(dict)を設定した場合、プログラムが(sum > limit)とcounter = 0を破損するため、最初のループtempCounter = 0の後に設定します。それは常に最低値になります。私は違う方法で試してみると、私は同じ問題を抱えています(カウンターはいつもデン(dict))。 基本的に2つの問題があります。1.ネストされたすべてのリストに対して有効な意味のある項目にカウンタが設定されていることを確認するにはどうすればよいですか?そして、2:エラーメッセージUnboundLocalError: local variable 'result' referenced before assignmentが表示されることがあります。それはどういう意味ですか、プログラムが以前に動作していて、コード内でresultの位置を変更していない場合、どうすれば可能ですか? 助けてくれてありがとう!

+2

投稿ごとに1つの質問を残しましょう。 [mcve] | [質問] –

+0

あなたの例には、何を反映させたいのか説明していません。 – TemporalWolf

答えて

0

あなたの2番目の質問... resultをreturn文と同じレベルで定義する必要があります。関数がresultと定義されている行に決して到達しない場合は、UnboundLocalErrorというメッセージが表示されることがあります。