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

Reply via email to