At the end of python PEP8 I\'m reading:
Don\'t compare boolean values to True or False using ==
Yes: if greeting:
No: if g
I usually name my boolean variables after the pattern IsName, so in you case IsGreeting. This makes the check read if IsGreeting/if not IsGreeting, which is very intuitive.
The ambiguities you are describing with if not are the result of using non-boolean types in boolean comparisons. This should usually be avoided, as it is very confusing.