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

Reply via email to