Peter, in your own personal finite sample, I am wondering what you might do TODAY if you looked at your loops again and considered redoing them for an assortment of reasons ranging from using the code for teaching to efficiency to just fitting your mood better?
I have seen seasoned authors go back to their early work and groan. Some have even reissued earlier work with a partial rewrite often with a long additional preface explaining why and even mentioned what was changed and bemoaning how they thought differently back then. My guess is that many of us (meaning myself included) often approach a problem and go with the first thing that comes to mind. If it fits well enough, we move on to the next thing we can do. If not, we may step back and evaluate multiple additional options and try another tack. I have seen not of sort-of redundant code because someone did not plan ahead and realize something very similar might be needed later and thus did not make a general function they could re-use. Occasionally they may later go back and re-do but often, not so much and just keep copying lines and making minor modifications. Same general idea. And perhaps worse, you may write a loop and later have to keep adding code to deal with new requirements and special cases and rather than pause and analyze and perhaps start again with a cleaner or more easily extendable solution, just keep grafting on things to make the darn current code work. Code that has many ways to exit a loop is often an example of this happening. So if you looked at your own code now, in the context of the rest of your code, would you change things? in python, I suspect I would seriously change an amazing number of things for older code including code being ported. It supports quite a few programming constructs and styles and has access to plenty of modules that mean you need not re-invent all the time. How many formal loops might you replace with a list comprehension or use a generator, NOW? How many problems you once solved by doing things like looping and searching for an element being present in a list when now you might use a set or dictionary? The reality is many people learn the basics of a language and write using fairly basic constructs and only later master the more advanced topics. But their mature work may then often heavily use those later and more effective methods. Functional programming often uses constructs where loops become invisible. Objects often hide loops in all kinds of methods. Sometimes recursion effectively does a loop. It is sometimes easy to write programs with no visible loops. So when counting the various kinds, are you looking for direct or indirect methods too like map/reduce or vectorized operations? -----Original Message----- From: Python-list <python-list-bounces+avigross=verizon....@python.org> On Behalf Of Peter J. Holzer Sent: Saturday, September 11, 2021 10:42 AM To: python-list@python.org Subject: Re: Friday Finking: Contorted loops On 2021-09-10 12:26:24 +0100, Alan Gauld via Python-list wrote: > On 10/09/2021 00:47, Terry Reedy wrote: > > even one loop is guaranteed.) "do-while" or "repeat-until is even > > rarer since fractional-loop include this as a special case. > > Is there any empirical evidence to support this? > Or is it just a case of using the tools that are available? > In my experience of using Pascal (and much later with Delphi) that I > used repeat loops at least as often as while loops, possibly more. > > But using Python and to a lesser extent C (which has a rather horrible > do/while) construct How is C's do/while loop more horrible than Pascal's repeat/until? They seem almost exactly the same to me (the differences I see are the inverted condition (debatable which is better) and the added block delimiters (which I actually like)). > So is it the case that the "need" for repeat loops is rare, simply a > result of there being no native repeat loop available? A tiny non-representative data point: In an old collection of small C programs of mine I find: 35 regular for loops 28 while loops 2 infinite for loops 1 "infinite" for loop (i.e. it exits somewhere in the middle) 0 do/while loops. So even though do/while loops are available in C (and I don't find them horrible) I apparently found very little use for them (I'm sure if I look through more of my C programs I'll find a few examples, but this small samples shows they are rare. hp -- _ | Peter J. Holzer | Story must make more sense than reality. |_|_) | | | | | h...@hjp.at | -- Charles Stross, "Creative writing __/ | http://www.hjp.at/ | challenge!" -- https://mail.python.org/mailman/listinfo/python-list