2016-11-28 5 views
0

Ich arbeite gerade an diesem Code und das einzige, was zu funktionieren scheint, ist die "keine Lösung". Es scheint auch, dass der Code eine Endlosschleife hat und ich nicht herausfinden kann, wie ich ihn lösen kann. Wenn jemand auf meinen Fehler hinweisen könnte, würde ich mich freuen.Python Greedy Sum

def greedySum(L, s): 

""" input: s, positive integer, what the sum should add up to 
       L, list of unique positive integers sorted in descending order 
     Use the greedy approach where you find the largest multiplier for 
     the largest value in L then for the second largest, and so on to 
     solve the equation s = L[0]*m_0 + L[1]*m_1 + ... + L[n-1]*m_(n-1) 
     return: the sum of the multipliers or "no solution" if greedy approach does 
       not yield a set of multipliers such that the equation sums to 's' 
    """ 

     if len(L) == 0: 
      return "no solution"    
      sum_total = (0,()) 
     elif L[0] > k: 
      sum_total = greed(L[1:], k) 
     else: 
      no_number = L[0] 
      value_included, take = greed(L, k - L[0]) 
      value_included += 1 
      no_value, no_take = greed(L[1:], k) 
      if k >= 0: 
       sum_total = (value_included, take + (no_number,)) 
      else: 
       sum_total = (value_included, take + (no_number,)) 
     return sum_total 
    sum_multiplier = greed(L, s) 
    return "no solution" if sum(sum_multiplier[1]) != s else sum_multiplier[0] 

Zweite Methode:

def greedySum(L, s): 
     answer = [] 
    try: 
     while (s >= L[0]): 
     total = s// L[0] 
     s -= (total * L[0]) 
     answer.append(total) 
     L = L[1:] 
    return(str(answer)[1:-1]) 
    except: 
    return("no solution") 
+1

Ihr Code wird von einem Anführungszeichen durcheinander gebracht. Könnten Sie das bitte korrigieren? –

+0

Ok. Vielen Dank. I hab gerade gemerkt. Gibt es noch etwas, das ich beheben muss, um den Code zu vereinfachen? –

+0

Rückkehr ist keine Funktion, glaube ich nicht. Legen Sie keine Klammern dahinter. –

Antwort

0

ist hier etwas, das funktioniert:

def greedySum(L, s): 
    multiplier_sum = 0 
    for l in L: 
     (quot,rem) = divmod(s,l) # see how many 'l's you can fit in 's' 
     multiplier_sum += quot # add that number to the multiplier_sum 
     s = rem     # update the remaining amount 

    # If at the end and s is 0, return the multiplier_sum 
    # Otherwise, signal that there is no solution 
    return multiplier_sum if s == 0 else "no solution" 

ich weitere Hilfe anbieten würde, was mit Ihrem Code falsch ist, aber das ist im Moment eines bewegliches Ziel - Sie ändern es ständig!

>>> greedySum([4,2],8) 
2 
>>> greedySum([4,2],9) 
'no solution' 
>>> greedySum([4,2,1],9) 
3 
+0

Vielen Dank @Alec. Der Code hat funktioniert. –

+0

@June_Joshua Glücklich zu helfen. Fühlen Sie sich frei zu stimmen und akzeptieren, wenn dies das ist, was Sie gesucht haben. – Alec

+0

Ich habe auch ein paar Fragen, die die Graphentheorie betreffen, wenn das für dich in Ordnung ist. –