On Monday, October 13, 2014 10:13:20 PM UTC+5:30, Rob Gaddi wrote: > On Mon, 13 Oct 2014 09:26:57 -0700 (PDT) > Rustom Mody wrote:
> > On Monday, October 13, 2014 9:43:03 PM UTC+5:30, Rob Gaddi wrote: > > > On Mon, 13 Oct 2014 09:56:02 +1100 > > > Steven D'Aprano wrote: > > > > When you have multiple clauses in the condition, it's easier to reason > > > > about > > > > them if you write the clauses as positive statements rather than > > > > negative > > > > statements, that is, "something is true" rather than "something is not > > > > true", and then use `not` to reverse it if you want to loop *until* the > > > > overall condition is true. > > > I was just explaining this concept to a young pup the other day. De > > > Morgan's lets you say that (not (p and q)) == ((not p) or (not q)), but > > > the positive logic flavor is substantially less error-prone. People > > > are fundamentally not as good at thinking about inverted logic. > > Curious: Which of > > - (not (p and q)) > > - ((not p) or (not q)) > > is more positive (less negative)?? > The first is asking you to compare positive conditions (p and q) and > negate the entire thing (NAND). The second asks you to think about > the combination of two different "not true" pieces of logic > (OR of two inverted inputs). The first is pretty straightforward, and > I usually see people get it right. The second gets screwed up as often > as not. > And of course, any combination of ands and ors should be broken into > multiple statements with a descriptive variable name in the middle or > all hope is lost. Yeah I guess 2 nots is one more than one! However (to my eyes) while i < N and a[i] != X: looks less negative than while not (i==N or a[i] == X): [Of course i < N is not identical to i != N ] -- https://mail.python.org/mailman/listinfo/python-list