Felix Benner wrote: > smartbei schrieb: > > Hello, I am a newbie with python, though I am having a lot of fun using > > it. Here is one of the excersizes I am trying to complete: > > the program is supposed to find the coin combination so that with 10 > > coins you can reach a certain amoung, taken as a parameter. Here is the > > current program: > > > > coins = (100,10,5,1,0.5) > > anslist = [] > > def bar(fin, hist = {100:0,10:0,5:0,1:0,0.5:0}): > > s = sum(x*hist[x] for x in hist) > > l = sum(hist.values()) > > if s < fin and l < 10: > > for c in coins: > > if (s+c) <= fin: > > hist[c] += 1 > > bar(fin, hist) > > hist[c] -= 1 > > elif l==10 and s==fin and not hist in anslist: > > #p1 > > anslist.append(hist) > > > > bar(50) > > print anslist > > > > The problem is that if I run it, anslist prints as [{0.5: 0, 1: 0, 10: > > 0, 100: 0, 5: 0}], which doesnt even add up to 50. When I check how > > many times the program has reached the #p1 by sticking a print there, > > it only reaches it once, and it comes out correct. why is it that this > > result is replaced by the incorrect final one? > > > > hist is stored in anslist as a pointer only, therfore the hist[c] -= 1 > operates on the same dict as is stored in the anslist. Try the following > in the python interpreter: > > a = { 'key' : 1 } > l = [a] > l[0]['key'] -= 1 > a > > instead use: > > anslist.append(dict(hist.items)) > > which will copy the dict.
Thanks! BTW - its hist.items(), after that it worked. -- http://mail.python.org/mailman/listinfo/python-list