mko
mko

Reputation: 22064

one line if else condition in python

def sum10(a, b):
    if sum([a, b]) % 10 == 0: return True; return False

print sum10(7, 3)
print sum10(-13, -17)
print sum10(3, 8)

the result is:

True
True
None

not what I expected:

True
True
False

any idea?

Upvotes: 11

Views: 80904

Answers (6)

Areeha
Areeha

Reputation: 833

Instead of returning True or False right away, you could try storing result in a boolean variable and then return that variable at the end. For example:

def sum(a,b):
  bool result
  if sum([a, b]) % 10 == 0:
    bool=True
  else:
    bool=False
  return bool 

Upvotes: 0

sumedhe
sumedhe

Reputation: 1018

def sum10(a, b):
    return sum([a, b])%10 == 0

Upvotes: 1

sloth
sloth

Reputation: 101072

Your code

def sum10(a, b):
    if sum([a, b]) % 10 == 0: return True; return False

is equivalent to

def sum10(a, b):
    if sum([a, b]) % 10 == 0: 
        return True; return False

so return False is never evaluated.


Some (of the probably endless) alternatives:

    if sum([a, b]) % 10 == 0: 
        return True
    return False

or

    return sum([a, b]) % 10 == 0

or

    return True if sum([a, b]) % 10 == 0 else False

or

    return False if (a+b) % 10 else True

or (the most readable IMHO)

    return not (a + b) % 10

Upvotes: 31

st0le
st0le

Reputation: 33545

This is what you want.

def sum10(a, b):
    return sum([a, b]) % 10 == 0

Also the ternary If in Python works like this

<True Statment> if <Conditional Expression> else <False Statement>

eg

True if sum([a,b]) % 10 == 0 else False

Might i also recommend using the plus operator?

True if (a+b) % 10 == 0 else False

Upvotes: 10

Amedio
Amedio

Reputation: 895

I think that the return False is never executed due to it is into the if, not outside it.

So, when you take a true in the if condition, you are executing return True, but never the second statement.

Upvotes: 1

alestanis
alestanis

Reputation: 21863

If you want to have if-else one liners, they should be written like this:

return True if sum([a, b]) % 10 == 0 else False

Note the absence of two points in that one liner.

Upvotes: 3

Related Questions