On Sunday, August 10, 2014 10:40:21 PM UTC+5:30, Roy Smith wrote: > Rustom Mody wrote:
> > > They haven't figured out yet that the > > > first step to solving a problem is to decide what algorithms you're > > > going to use, and only then can you start translating that into code. > > > They need to be led in small steps towards basic knowledge. > > [...] > > In my view this is starting from the wrong end. > > I do not need to know which kind of adder the hardware is implementing to > > use +, which sorting algorithm to use sort, etc. > Well, no, but if the problem is, "Find the 5 largest numbers in a list", > you might start solving the problem by thinking, "OK, first I'm going to > sort the list into descending order, then I'm going to take the first > five items from that"(*) Only then would you get down to "OK, how do I > sort a list of numbers in this language", and "OK, how do I select the > first five items from a list in this language". That's what I mean by > first you come up with an algorithm, then you implement it in code. >>> l= [6,2,9,12,1,4] >>> sorted(l,reverse=True)[:5] [12, 9, 6, 4, 2] No need to know how sorted works nor [:5] Now you (or Steven) can call it abstract. And yet its 1. Actual running code in the interpreter 2. Its as close as one can get to a literal translation of your "Find the 5 largest numbers in a list" Yeah the reverse=True is a fly in the ointment. I can do >>> sorted(l)[-5:] [2, 4, 6, 9, 12] But that's a bit arcane In any case coming back to the point All the above are clearer than loops+assignments and can be taught before them -- https://mail.python.org/mailman/listinfo/python-list