I changed it to this: #!/usr/local/bin/python3.0 #problem1.py
"""Lists the sum of all multiples of 3 and 5 less than 1000.""" def sumTotal(multipleInitial, multiple): # This awkward solution because total = 0 # mulitipleInitial = multiple just points n = 2 # a new variable to the same memory while multiple < 1000: # space total = total + multiple multiple = multipleInitial * n n = n + 1 return total print(sumTotal (3, 3) + sumTotal(5,5)) ----- I think it does what I wanted it to do, but Kent pointed out I wanted it to do was a false solution. So, I can create a list of all common multiples below 1000, sum them, subtract them from 266 333. Or, what I prefer, create a list of all multiples, checking against that list for a multiple before adding a new multiple. But, I don't know how to work with lists so I'll be back in a day or two. On Sat, Jan 3, 2009 at 6:43 PM, Andre Engels <andreeng...@gmail.com> wrote: > > On Sun, Jan 4, 2009 at 1:06 AM, Benjamin Serrato > <benjamin.serr...@gmail.com> wrote: > > Hello, > > > > I'm trying to correctly solve the first projecteuler.net problem. The > > question is as so: Find the sum of all the multiples of 3 or 5 below 1000. > > > > I wrote the following program, but the number found is incorrect. I created > > a function that adds multiples of a given number to a global variable until > > the multiples are greater than 1000. The solution I get with my code is > > "1224". This is incorrect, but I am having trouble understanding why my code > > is wrong... it's very simple. > > My code: > > > > #!!/usr/local/bin/python3.0 > > #problem1.py > > > > """Lists the sum of all multiples of 3 and 5 less than 1000.""" > > > > # Initialize variable 'total'. > > total = 0 # I wanted this to be 'None', is that wrong? > > > > def sumTotal(multiple): > > global total # Brings total into the local scope so it > > # can be written to. > > n = 2 > > while multiple < 1000: > > total = total + multiple > > multiple = multiple * n > > n = n + 1 # I wanted this to be += but I'm not sure > > # that is right. > > > > # Now I call the function with the two arguments I need, 3 > > # and 5. Since total is a global variable it retains its value > > # at the end of the first function call, the next call adds to > > # the total value. Thus print(total) should give me the correct > > # value. > > > > sumTotal(3) > > sumTotal(5) > > > > print(total) > > > > ----- > > I think I have made a mistake with scope. Or some other syntactic error, > > because I don't see anything wrong with the code. Please make it obvious for > > me. > > There is an error with the code. The line > > multiple = multiple * n > > is not doing what you want it to do. > > See what is happening each time you go through this line: > > first time: > * multiple = 3 > * n = 2 > * multiple changed to 6 > > second time: > * multiple = 6 > * n = 3 > * multiple changed to 18 > > third time: > * multiple = 18 > * n = 4 > * multiple changed to 72 > > etcetera > > You will have to keep the number to multiply by in a separate variable > to avoid this. > > Apart from that, I think your usage of a global variable total, > although correct, is ugly and error-prone. I would do away with a > global variable total, add a local variable total, and end defSum with > "return total". > > Then the main body can be changed to: > > print (sumTotal(3) + sumTotal(5)) > > -- > André Engels, andreeng...@gmail.com _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor