On Tue, Aug 6, 2013 at 10:35 PM, <eschneide...@comcast.net> wrote: > Why won't the 'goodbye' part of this code work right? it prints 'ok' no > matter what is typed. Much thanks. > > def thing(): > print('go again?') > goagain=input() > if goagain=='y' or 'yes': > print('ok') > elif goagain!='y' or 'yes': > print('goodbye') > sys.exit() > thing()
When you use 'or' in this way, it's not doing what you think it does. It actually first computes >>> goagain=='y' which is either True or False, and then evaluates the next part: >>> True or 'yes' >>> False or 'yes' Try out those two in interactive Python and see what they do. You probably want to compare in both halves of the test, or possibly use the 'in' operator: if goagain in ('y', 'yes'): Also, you don't need an 'elif' there; just use a plain else. Repeating the condition just introduces the chance of bugs - for instance, would you notice the error in this? if goagain=='y' or goagain=='yes': print('ok') elif goagain!='y' or goagain!='yes': print('goodbye') Using a plain 'else' guarantees that exactly one of the branches will be executed, rather than having the possibility that neither will, which isn't the intention here. Hope that helps! ChrisA -- http://mail.python.org/mailman/listinfo/python-list