On Sunday, August 10, 2014 11:44:23 PM UTC+5:30, Roy Smith wrote: > Rustom Mody wrote:
> > >>> 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" > > [...] > > All the above are clearer than loops+assignments and can be > > taught before them > I disagree. For a beginner, you want to be able to break things down > into individual steps and examine the result at each point. If you do: > > >>> l= [6,2,9,12,1,4] > > >>> l2 = sorted(l,reverse=True) > > >>> l2[:5] > you have the advantage that you can stop after creating l2 and print it > out. The student can see that it has indeed been sorted. With the > chained operations, you have to build a mental image of an anonymous, > temporary list, and then perform the slicing operation on that. Sure, > it's the way you or I would write it in production code, but for a > beginner, breaking it down into smaller pieces makes it easier to > understand. Yeah Whats the disagreement?? You are writing straight-line code. I am recommending straight-line code -- another way of saying loops are bad. Or is it because you are using assignment? I call that 'nominal' assignment. Technically its called 'single-assignment' www.cs.princeton.edu/~appel/papers/ssafun.ps Its when we have variables that are assigned in multiple places that we start seeing mathematical abominations like x = x+1 -- https://mail.python.org/mailman/listinfo/python-list
