On Oct 12, 1:02�pm, John Reid <j.r...@mail.cryst.bbk.ac.uk> wrote: > Mensanator wrote: > > On Oct 12, 3:36 am, greg <g...@cosc.canterbury.ac.nz> wrote: > >> Mensanator wrote: > >>> while not done: > >>> ... > >>> if n==1: done = True > >>> ... > >> Seems to me that 'while not done:' is no better than > >> 'while True:', because in both cases you have to look > >> inside the loop to find out what the exit condition > >> is. > > >> Using a more meaningful name for the flag can help, > >> but you can't teach someone that just by giving them > >> an overly simplified rules such as "never use > >> while True:". They'll probably just replace it with > >> 'while not done:' and think they've improved things, > >> without ever really understanding the issue. > > > You're missing the point. It's not that you have to > > look inside for the terminating condition. It's that > > you don't need a break. > > Nothing wrong with a having a break IMHO.
My opinion is that there is everything wrong with having a break. I don't think I have ever used one, I write code that doesn't depend on that crutch. > > while not done: > > seems very dangerous to me as you'd have to > > del done > > before writing the same construct again. That's the sort of thing that > leads to errors. Duh. I won't write silly code like that either. If I need more than one loop structure then I'll do something like while not done_with_this while not done_with_that Besides, since I _always_ initialize the flag before entering a loop, the flag can be reused and doesn't have to be deleted (as long as the loops aren't nested). And since I don't use goto, there's no chance the initialization can be avoided. The best way to avoid the pitfalls of spaghetti code is to not write it in the first place. -- http://mail.python.org/mailman/listinfo/python-list