For some people the "while true" method seems reasonable but it has a problem if the internal body does not have some guarantee of an exit. And that exit can be subtle. Many have mentioned ways an end condition can fail due to rounding errors not being exactly equal to what you are looking for, or an asymptotic process that approaches zero with a cutoff that is thus never reached.
But I have seen some cases where you want a process or thread to run indefinitely until it is killed by another process or you reboot. You could of course use something like flag="green" and have your while keep testing that value but that is just wasted motion. Of course, properly used, it does help explain to the reader what your intention is, if done properly. It also can confuse if you put in "while 5 < 6" or other weird ways to say do this indefinitely. I think part of this conversation is about programming styles and what we should teach new students versus those who are trying to find more creative ways to do things or more efficiently or more generality. Sometimes a more direct method may be reasonable. On another forum, I saw someone write somewhat lengthy and redundant code on how to deal with partitioning data into three clusters randomly. My algorithm was general and handled any number of N clusters and since N often does not cleanly divide the number of items, has to place the remaining items into one of the N clusters or distribute them one at a time into some to make them almost even in size. His solution was to repeat large sections of code, three times, with some modification, for the cases where the remainder (modulo N) was 0, 1 or 2. The latter method was longer but in an odd way, much easier to understand. It boiled down to, if you have one extra put it here. If you have two, put one here and one there. My method had all kinds of bells and whistles that this specific case did not need. Let me end with asking if anyone has ever seen a mild variant of this: ... # code while false apologize() ... # more code -----Original Message----- From: Python-list <python-list-bounces+avigross=verizon....@python.org> On Behalf Of Hope Rouselle Sent: Thursday, September 2, 2021 10:42 AM To: python-list@python.org Subject: Re: on writing a while loop for rolling two dice David Raymond <david.raym...@tomtom.com> writes: >> def how_many_times(): >> x, y = 0, 1 >> c = 0 >> while x != y: >> c = c + 1 >> x, y = roll() >> return c, (x, y) > > Since I haven't seen it used in answers yet, here's another option > using our new walrus operator > > def how_many_times(): > roll_count = 1 > while (rolls := roll())[0] != rolls[1]: > roll_count += 1 > return (roll_count, rolls) That's nice, although it doesn't seem more readable to a novice seeing a while for the first time, seeing a loop for the first time, than that while-True version. In fact, I think the while-True is the clearest so far. But it's always nice to spot a walrus in the wild! (If you're somewhere safe, that is.) -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list